.*?)\\]|\\((?[h\\.]\\S*?)\\)")
+ result = regex.search_all(content)
+ if result:
+ for res in result:
+ if res.get_string("link")!="":
+ links.append(res.get_string("link"))
+ if res.get_string("linkname")!="":
+ linknames.append(res.get_string("linkname"))
+
+ for bold in bolded:
+ content = content.replace("**"+bold+"**","[b]"+bold+"[/b]")
+ for italic in italics:
+ content = content.replace("*"+italic+"*","[i]"+italic+"[/i]")
+ for strik in striked:
+ content = content.replace("~~"+strik+"~~","[s]"+strik+"[/s]")
+ for underline in underlined:
+ content = content.replace("__"+underline+"__","[u]"+underline+"[/u]")
+ for code in coded:
+ content = content.replace("`"+code+"`","[code]"+code+"[/code]")
+ for image in images:
+ var substr = image.split("(")
+ var imglink = substr[1].rstrip(")")
+ content = content.replace(image,"[img]"+imglink+"[/img]")
+ for i in links.size():
+ content = content.replace("["+linknames[i]+"]("+links[i]+")","[url="+links[i]+"]"+linknames[i]+"[/url]")
+ for element in lists:
+ if content.find("- "+element):
+ content = content.replace("-"+element,"[indent]-"+element+"[/indent]")
+ if content.find("+ "+element):
+ content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
+ if content.find("* "+element):
+ content = content.replace("+"+element,"[indent]-"+element+"[/indent]")
+
+ TextPreview.append_bbcode(content)
+ TextPreview.show()
+
+func print_html(content : String):
+ content = content.replace("","[i]")
+ content = content.replace("","[/i]")
+ content = content.replace("","[b]")
+ content = content.replace("","[/b]")
+ content = content.replace("","[u]")
+ content = content.replace("","[/u]")
+ content = content.replace("","[u]")
+ content = content.replace("","[/u]")
+ content = content.replace("","[s]")
+ content = content.replace("","[/s]")
+ content = content.replace('',"]")
+ content = content.replace("","[/url]")
+ content = content.replace('
',"[/img]")
+ content = content.replace('"/>',"[/img]")
+ content = content.replace("","[code]")
+ content = content.replace("
","[/code]")
+ content = content.replace("","[center]")
+ content = content.replace("","[/center]")
+ content = content.replace("","[right]")
+ content = content.replace("","[/right]")
+
+ TextPreview.append_bbcode(content)
+ TextPreview.show()
+
+func print_csv(rows : Array):
+ TablePreview.columns = rows[0].size()
+ for item in rows:
+ for string in item:
+ var label = Label.new()
+ label.text = str(string)
+ label.set_h_size_flags(SIZE_EXPAND)
+ label.set_align(1)
+ label.set_valign(1)
+ TablePreview.add_child(label)
+
+
+ TablePreview.show()
+
+func _on_Preview_popup_hide():
+ queue_free()
diff --git a/scripts/VanillaEditor.gd b/scripts/VanillaEditor.gd
new file mode 100644
index 0000000..4068a3e
--- /dev/null
+++ b/scripts/VanillaEditor.gd
@@ -0,0 +1,220 @@
+tool
+extends VBoxContainer
+
+var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd").new()
+var LastOpenedFiles = preload("res://addons/file-editor/scripts/LastOpenedFiles.gd").new()
+
+onready var ReadOnly = $FileInfo/Readonly
+
+onready var TextEditor = $TextEditor
+
+onready var LastModified = $FileInfo/lastmodified
+
+onready var FileList = get_parent().get_parent().get_parent().get_parent().get_node("FileList")
+
+onready var ClosingFile = get_parent().get_parent().get_parent().get_parent().get_node("ConfirmationDialog")
+
+onready var LastModifiedIcon = $FileInfo/lastmodified_icon
+
+onready var SearchBox = $SearchBox
+onready var ReplaceBox = $ReplaceBox
+
+onready var c_counter = $FileInfo/c_counter
+
+var current_path = ""
+var current_filename = ""
+var Preview = load("res://addons/file-editor/scenes/Preview.tscn")
+
+
+var search_flag = 0
+
+signal text_changed()
+
+func _ready():
+ ClosingFile.connect("confirmed",self,"queue_free")
+
+ ReadOnly.connect("toggled",self,"_on_Readonly_toggled")
+
+ ReadOnly.set("custom_icons/checked",IconLoader.load_icon_from_name("read"))
+ ReadOnly.set("custom_icons/unchecked",IconLoader.load_icon_from_name("edit"))
+
+ add_to_group("vanilla_editor")
+
+func set_font(font_path : String) -> void:
+ var dynamic_font : DynamicFont = DynamicFont.new()
+ var dynamic_font_data : DynamicFontData = DynamicFontData.new()
+ dynamic_font_data.set_font_path(font_path)
+ dynamic_font.set_font_data(dynamic_font_data)
+ TextEditor.set("custom_fonts/font",dynamic_font)
+
+func set_wrap_enabled(enabled:bool):
+ TextEditor.set_wrap_enabled(enabled)
+ TextEditor.update()
+
+func draw_minimap(value:bool):
+ TextEditor.draw_minimap(value)
+ TextEditor.update()
+
+func color_region(filextension : String): # -----------------------------> dal momento che voglio creare un editor per ogni file, renderĂ² questa funzione singola in base all'estensione del file
+ match(filextension):
+ "bbs":
+ TextEditor.add_color_region("[b]","[/b]",Color8(153,153,255,255),false)
+ TextEditor.add_color_region("[i]","[/i]",Color8(153,255,153,255),false)
+ TextEditor.add_color_region("[s]","[/s]",Color8(255,153,153,255),false)
+ TextEditor.add_color_region("[u]","[/u]",Color8(255,255,102,255),false)
+ TextEditor.add_color_region("[url","[/url]",Color8(153,204,255,255),false)
+ TextEditor.add_color_region("[code]","[/code]",Color8(192,192,192,255),false)
+ TextEditor.add_color_region("[img]","[/img]",Color8(255,204,153,255),false)
+ TextEditor.add_color_region("[center]","[/center]",Color8(175,238,238,255),false)
+ TextEditor.add_color_region("[right]","[/right]",Color8(135,206,235,255),false)
+ "html":
+ TextEditor.add_color_region("","",Color8(153,153,255,255),false)
+ TextEditor.add_color_region("","",Color8(153,255,153,255),false)
+ TextEditor.add_color_region("","",Color8(255,153,153,255),false)
+ TextEditor.add_color_region("","",Color8(255,255,102,255),false)
+ TextEditor.add_color_region("",Color8(153,204,255,255),false)
+ TextEditor.add_color_region("
",Color8(255,204,153,255),true)
+ TextEditor.add_color_region("","
",Color8(192,192,192,255),false)
+ TextEditor.add_color_region("","",Color8(175,238,238,255),false)
+ TextEditor.add_color_region("","",Color8(135,206,235,255),false)
+ "md":
+ TextEditor.add_color_region("***","***",Color8(126,186,181,255),false)
+ TextEditor.add_color_region("**","**",Color8(153,153,255,255),false)
+ TextEditor.add_color_region("*","*",Color8(153,255,153,255),false)
+ TextEditor.add_color_region("+ ","",Color8(255,178,102,255),false)
+ TextEditor.add_color_region("- ","",Color8(255,178,102,255),false)
+ TextEditor.add_color_region("~~","~~",Color8(255,153,153,255),false)
+ TextEditor.add_color_region("__","__",Color8(255,255,102,255),false)
+ TextEditor.add_color_region("[",")",Color8(153,204,255,255),false)
+ TextEditor.add_color_region("`","`",Color8(192,192,192,255),false)
+ TextEditor.add_color_region('"*.','"',Color8(255,255,255,255),true)
+ TextEditor.add_color_region("# ","",Color8(105,105,105,255),true)
+ TextEditor.add_color_region("## ","",Color8(128,128,128,255),true)
+ TextEditor.add_color_region("### ","",Color8(169,169,169,255),true)
+ TextEditor.add_color_region("#### ","",Color8(192,192,192,255),true)
+ TextEditor.add_color_region("##### ","",Color8(211,211,211,255),true)
+ TextEditor.add_color_region("###### ","",Color8(255,255,255,255),true)
+ TextEditor.add_color_region("> ","",Color8(172,138,79,255),true)
+ "cfg":
+ TextEditor.add_color_region("[","]",Color8(153,204,255,255),false)
+ TextEditor.add_color_region('"','"',Color8(255,255,102,255),false)
+ TextEditor.add_color_region(';','',Color8(128,128,128,255),true)
+ "ini":
+ TextEditor.add_color_region("[","]",Color8(153,204,255,255),false)
+ TextEditor.add_color_region('"','"',Color8(255,255,102,255),false)
+ TextEditor.add_color_region(';','',Color8(128,128,128,255),true)
+ _:
+ pass
+
+func clean_editor():
+ TextEditor.set_text("")
+ LastModifiedIcon.texture = IconLoader.load_icon_from_name("save")
+ LastModified.set_text("")
+ FileList.invalidate()
+ current_filename = ""
+ current_path = ""
+
+func new_file_open(file_content : String, last_modified : Dictionary, current_file_path : String):
+ current_path = current_file_path
+ current_filename = current_file_path.get_file()
+ color_region(current_filename.get_extension())
+ TextEditor.set_text(file_content)
+ update_lastmodified(last_modified,"save")
+ FileList.invalidate()
+ count_characters()
+
+func update_lastmodified(last_modified : Dictionary, icon : String):
+ LastModified.set_text(str(last_modified.hour)+":"+str(last_modified.minute)+" "+str(last_modified.day)+"/"+str(last_modified.month)+"/"+str(last_modified.year))
+ LastModifiedIcon.texture = IconLoader.load_icon_from_name(icon)
+
+func new_file_create(file_name):
+ TextEditor.set_text("")
+
+ FileList.invalidate()
+
+func _on_Readonly_toggled(button_pressed):
+ if button_pressed:
+ ReadOnly.set_text("Read Only")
+ TextEditor.readonly = (true)
+ else:
+ ReadOnly.set_text("Can Edit")
+ TextEditor.readonly = (false)
+
+func _on_TextEditor_text_changed():
+ LastModifiedIcon.texture = IconLoader.load_icon_from_name("saveas")
+ count_characters()
+ emit_signal("text_changed")
+
+func count_characters():
+ var counted : int = 0
+ for line in TextEditor.get_line_count():
+ counted += TextEditor.get_line(line).length()
+ c_counter.set_text(str(counted))
+
+func _on_LineEdit_text_changed(new_text):
+ var linecount = TextEditor.get_line_count()
+ if new_text != "":
+ var found
+ var find = false
+ for line in range(0,linecount):
+ for column in range(0,TextEditor.get_line(line).length()):
+ found = TextEditor.search( new_text, search_flag, line , column )
+ if found.size():
+ if found[1] == line:
+# if not find:
+ TextEditor.select(line,found[0],found[1],found[0]+new_text.length())
+# find = true
+ else:
+ TextEditor.select(0,0,0,0)
+ else:
+ TextEditor.select(0,0,0,0)
+
+func _on_matchcase_toggled(button_pressed):
+ if button_pressed:
+ search_flag = 1
+ else:
+ if $SearchBox/wholewords.is_pressed():
+ search_flag = 2
+ else:
+ search_flag = 0
+ _on_LineEdit_text_changed($SearchBox/LineEdit.get_text())
+
+func _on_wholewords_toggled(button_pressed):
+ if button_pressed:
+ search_flag = 2
+ else:
+ if $SearchBox/matchcase.is_pressed():
+ search_flag = 1
+ else:
+ search_flag = 0
+ _on_LineEdit_text_changed($SearchBox/LineEdit.get_text())
+
+func _on_close_pressed():
+ SearchBox.hide()
+
+func open_searchbox():
+ if SearchBox.visible:
+ SearchBox.hide()
+ else:
+ SearchBox.show()
+ SearchBox.get_node("LineEdit").grab_focus()
+
+func _on_Button_pressed():
+ var linecount = TextEditor.get_line_count()-1
+ var old_text = $ReplaceBox/replace.get_text()
+ var new_text = $ReplaceBox/with.get_text()
+ var text = TextEditor.get_text()
+ TextEditor.set_text(text.replace(old_text,new_text))
+
+func open_replacebox():
+ if ReplaceBox.visible:
+ ReplaceBox.hide()
+ else:
+ ReplaceBox.show()
+ ReplaceBox.get_node("replace").grab_focus()
+
+func _on_close2_pressed():
+ ReplaceBox.hide()
+
+func _on_LineEdit_focus_entered():
+ _on_LineEdit_text_changed($SearchBox/LineEdit.get_text())
diff --git a/scripts/file-editor.gd b/scripts/file-editor.gd
new file mode 100644
index 0000000..e347a83
--- /dev/null
+++ b/scripts/file-editor.gd
@@ -0,0 +1,33 @@
+tool
+extends EditorPlugin
+
+#var doc = preload("../scenes/FileEditor.tscn")
+
+var IconLoader = preload("res://addons/file-editor/scripts/IconLoader.gd").new()
+
+var FileEditor
+
+func _enter_tree():
+ add_autoload_singleton("IconLoader","res://addons/file-editor/scripts/IconLoader.gd")
+ add_autoload_singleton("LastOpenedFiles","res://addons/file-editor/scripts/LastOpenedFiles.gd")
+ FileEditor = preload("../scenes/FileEditor.tscn").instance()
+ get_editor_interface().get_editor_viewport().add_child(FileEditor)
+ FileEditor.hide()
+
+func _exit_tree():
+# FileEditor.clean_editor()
+ remove_autoload_singleton("IconLoader")
+ remove_autoload_singleton("LastOpenedFiles")
+ get_editor_interface().get_editor_viewport().remove_child(FileEditor)
+
+func has_main_screen():
+ return true
+
+func get_plugin_name():
+ return "File"
+
+func get_plugin_icon():
+ return IconLoader.load_icon_from_name("file")
+
+func make_visible(visible):
+ FileEditor.visible = visible