def refresh_tags(self): if not self.tag_text: # for console buffer self.tag_fail = self.console_buffer.create_tag("fail", weight=Pango.Weight.SEMIBOLD,font=self.default_font,foreground="red") self.tag_pass = self.console_buffer.create_tag("pass", weight=Pango.Weight.SEMIBOLD,font=self.default_font,foreground="green") EzhilSyntaxHighlightingEditor.refresh_tags(self)
def __init__(self): XMLtoDocVisitor.__init__(self) self.highlighter = EzhilSyntaxHighlightingEditor() self.highlighter.append_mode = True self.chapters = {} self.tag = {} self.pageno = 0 self.default_font = "Sans 18" self.default_font_title = "Sans 24" self.textbuffer = None self.layoutpos = {"title":u"","section":0}
def __init__(self): XMLtoDocVisitor.__init__(self) self.highlighter = EzhilSyntaxHighlightingEditor() self.highlighter.append_mode = True self.chapters = {} self.tag = {} self.pageno = 0 self.default_font = "Sans 18" self.default_font_chapter = "Serif 16" self.default_font_title = "Sans 24" self.textbuffer = None self.layoutpos = {"title":u"","section":0}
def __init__(self, filename=None, autorun=False): EditorState.__init__(self) EzhilSyntaxHighlightingEditor.__init__(self) Editor._instance = self self.autorun = autorun self.builder.add_from_file(getResourceFile("editor.glade")) if filename: self.filename = filename ## construct the GUI from GLADE self.window = self.builder.get_object("ezhilEditorWindow") try: d = Gtk.CssProvider.get_default() ## style = formatString( "style \"my-style\" { font_name = \"Mono %i\" }" ## class \"*\" style \"my-style\"", fontSize); ## gtk_rc_parse_string( style ) d.load_from_data("default * { font : \"Latha 7\" }") self.window.set_icon_from_file( getResourceFile("img", "ezhil_square_2015_128px.png")) except Exception as ie: print(u"Message: loading image or CSS style failed - %s" % ie) self.window.set_resizable(False) #fix the window self.window.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.console_textview = self.builder.get_object( "codeExecutionTextView") self.help_browser = None self.example_browser = None self.menuKbd = self.builder.get_object("toggleKeyboard") self.menuKbd.connect("activate", lambda wid: self.toggleKeyboard(wid)) self.toolitemKbd = self.builder.get_object("KbdBtn") self.toolitemKbd.connect( "clicked", lambda wid: self.toggleKeyboardAndKeyword(wid)) self.exampleMenu = self.builder.get_object("exampleBrowserItem") self.exampleMenu.connect("activate", lambda wid: self.exampleBrowser(wid)) self.helpItem = self.builder.get_object("HelpBtn") self.helpItem.connect("clicked", lambda wid: self.helpBrowser(wid)) self.helpMenuItem = self.builder.get_object("helpMenuItem") self.helpMenuItem.connect("activate", lambda wid: self.helpBrowser(wid)) self.toolitemFont = self.builder.get_object("FontBtn") self.toolitemFont.connect("clicked", lambda wid: self.chooseFont(wid)) self.menuKeyword = self.builder.get_object("toggleKeyword") self.menuKeyword.connect("activate", lambda wid: self.toggleKeyword(wid)) ## self.console_textview.set_editable(False) self.console_textview.set_cursor_visible(False) self.console_textview.set_buffer(UndoableBuffer()) self.console_buffer = self.console_textview.get_buffer() self.scrolled_codeview = self.builder.get_object("scrolledwindow1") self.textview = self.builder.get_object("codeEditorTextView") self.StatusBar = self.builder.get_object("editorStatus") self.textview.set_buffer(UndoableBuffer()) popup1 = PopupForTextView(self.textview, 'EXECUTE_SELECTION') self.textview_popup_handler = [ popup1 ] #,PopupForTextView(self.textview,'SHOW_HELP',popup1)] self.textbuffer = self.textview.get_buffer() self.scrolled_codeview.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.tag_text = None self.tag_literal = None self.tag_comment = None self.tag_fail = None self.tag_found = None self.tag_operator = None self.tag_pass = None self.refresh_tags() # add keywords bar self.keywords8 = [ u"பதிப்பி", u"முடி", u"நிரல்பாகம்", u"தொடர்", u"நிறுத்து", u"ஒவ்வொன்றாக", u"இல்", u"ஆனால்", u"இல்லைஆனால்", u"இல்லை", u"ஆக", u"வரை", u"பின்கொடு", ] self.operators16 = [ u"@", u"+", u"-", u"*", u"/", u"%", u"^", u"==", u">", u"<", u">=", u"<=", u"!=", u"!=", u"!", u",", u"(", u")", u"{", u"}", u"()", u"[]" ] self.forms = [ u"@( )\t ஆனால் \n இல்லை \n முடி", u" @( )\t வரை \n முடி", u"நிரல்பாகம்\t உதாரணம் () \n முடி" ] self.widget_keywords = self.builder.get_object("hbox_keywords8") self.widget_operators = self.builder.get_object("hbox_operators16") self.widget_forms = self.builder.get_object("hbox_forms") self.build_keyword_btns() # on screen keyboard self.editorBox = self.builder.get_object("editorBox") self.oskeyboard = None self.toggleKeyboard() # connect abt menu and toolbar item self.abt_menu = self.builder.get_object("aboutMenuItem") self.abt_menu.connect("activate", Editor.show_about_status) self.abt_btn = self.builder.get_object("AboutBtn") self.abt_btn.connect("clicked", Editor.show_about_status) self.cut_menu = self.builder.get_object("cut_item") self.cut_menu.connect("activate", Editor.cut_action) self.paste_menu = self.builder.get_object("paste_item") self.paste_menu.connect("activate", Editor.paste_action) self.cp_menu = self.builder.get_object("copy_item") self.cp_menu.connect("activate", Editor.copy_action) self.close_menu = self.builder.get_object("closeMenuItem") self.close_menu.connect("activate", Editor.close_file) # for undo-redo buttons self.undo_btn = self.builder.get_object("UndoBtn") self.redo_btn = self.builder.get_object("RedoBtn") self.undo_btn.connect("clicked", Editor.undo_action) self.redo_btn.connect("clicked", Editor.redo_action) # for code textview #self.textview.connect("backspace",Editor.on_codebuffer_edited) #self.textview.connect("delete-from-cursor",Editor.on_codebuffer_edited) #self.textview.connect("insert-at-cursor",Editor.on_codebuffer_edited) # search action in text buffer search_menu = self.builder.get_object("search_item") search_menu.connect("activate", Editor.on_search_clicked) # open : editor action self.open_menu = self.builder.get_object("openMenuItem") self.open_menu.connect("activate", Editor.open_file) self.open_btn = self.builder.get_object("OpenBtn") self.open_btn.connect("clicked", Editor.open_file) # new : editor action self.new_menu = self.builder.get_object("newMenuItem") self.new_menu.connect("activate", Editor.reset_new) self.new_btn = self.builder.get_object("NewBtn") self.new_btn.connect("clicked", Editor.reset_new) # run : editor action self.run_menu = self.builder.get_object("runMenuItem") self.run_menu.connect("activate", Editor.run_ezhil_code) self.run_btn = self.builder.get_object("RunBtn") run_signal = self.run_btn.connect("clicked", Editor.run_ezhil_code) # save : editor action save self.save_btn = self.builder.get_object("SaveBtn") self.save_btn.connect("clicked", Editor.save_file) self.save_menu = self.builder.get_object("menuItemSave") self.save_menu.connect("activate", Editor.save_file) self.saveas_menu = self.builder.get_object("menuItemSaveAs") self.saveas_menu.connect("activate", Editor.saveas_file) # clear buffer : clear run buffer self.clear_btn = self.builder.get_object("clearbuffer") self.clear_btn.connect("clicked", Editor.clear_buffer) # hookup the exit self.exit_btn = self.builder.get_object("ExitBtn") self.exit_btn.connect("clicked", Editor.exit_editor) self.exit_menu = self.builder.get_object("quitMenuItem") self.exit_menu.connect("activate", Editor.exit_editor) # exit by 'x' btn self.window.connect("destroy", Editor.exit_editor) self.window.show_all() self.load_file() if autorun: self.do_autorun() GLib.timeout_add(500, self.display_tinylicense)
class DocLayoutWidgetActions(XMLtoDocVisitor): def __init__(self): XMLtoDocVisitor.__init__(self) self.highlighter = EzhilSyntaxHighlightingEditor() self.highlighter.append_mode = True self.chapters = {} self.tag = {} self.pageno = 0 self.default_font = "Sans 18" self.default_font_chapter = "Serif 16" self.default_font_title = "Sans 24" self.textbuffer = None self.layoutpos = {"title":u"","section":0} def build_tags(self,textbuffer): self.tag["comment"] = textbuffer.create_tag("comment", weight=Pango.Weight.SEMIBOLD,foreground="red",font=self.default_font) self.tag["bold"] = textbuffer.create_tag("bold", weight=Pango.Weight.BOLD,font=self.default_font,foreground="black") self.tag["italic"] = textbuffer.create_tag("italic", style=Pango.Style.ITALIC,font=self.default_font,foreground="black") self.tag["underline"] = textbuffer.create_tag("underline", underline=Pango.Underline.SINGLE,font=self.default_font,foreground="black") self.tag["code"] = textbuffer.create_tag("code", style=Pango.Style.ITALIC,font=self.default_font,foreground="green") # use for chapter title self.tag["title"] = textbuffer.create_tag("title", weight=Pango.Weight.BOLD,foreground="blue",font=self.default_font_title) self.tag["keyword"] = textbuffer.create_tag("keyword", weight=Pango.Weight.BOLD,foreground="blue",font=self.default_font) # use for text/section tags self.tag["chapter"] = textbuffer.create_tag("chapter", weight=Pango.Weight.SEMIBOLD,foreground="black",font=self.default_font_chapter) self.tag["text"] = textbuffer.create_tag("text",font=self.default_font,foreground="black") self.tag["literal"] = textbuffer.create_tag("literal", style=Pango.Style.ITALIC,font=self.default_font,foreground="green") self.tag["operator"] = textbuffer.create_tag("operator", weight=Pango.Weight.SEMIBOLD,font=self.default_font,foreground="olive") self.tag["found"] = textbuffer.create_tag("found",font=self.default_font, background="yellow") self.tag["list"] = textbuffer.create_tag("list", weight=Pango.Weight.SEMIBOLD,font=self.default_font,foreground="purple") self.tag["pass"] = textbuffer.create_tag("pass", weight=Pango.Weight.SEMIBOLD,font=self.default_font,foreground="green") self.highlighter.tag_comment = self.tag["comment"] self.highlighter.tag_keyword = self.tag["keyword"] self.highlighter.tag_literal = self.tag["literal"] self.highlighter.tag_operator = self.tag["operator"] self.highlighter.tag_found = self.tag["found"] self.highlighter.tag_text = self.tag["text"] self.highlighter.tag_fail = self.tag["list"] self.highlighter.tag_pass = self.tag["pass"] def visit_fmt(self,*args): #pprint.pprint(args) child = args[0] fmt = args[1] if fmt.startswith("i"): tag = self.tag["italic"] elif fmt.startswith("b"): tag = self.tag["italic"] elif fmt.startswith("u"): tag = self.tag["underline"] else: raise Exception("Tag %s not implemented"%fmt) self.append_text_with_tag(child.childNodes[0].data,tag) def visit_chapter(self,*args): child = args[0] # skip chapter 0 - ithu managatti mathiri irukku title = ((self.pageno > 0) and u"%d) "%self.pageno or u" ") + child.getAttribute("title")+u"\n" self.layoutpos["title"]=title self.append_text_with_tag(title,self.tag["title"]) def visit_section(self,*args): child = args[0] self.layoutpos["section"] += 1 self.append_text_with_tag(u"_"*100+u"\n",self.tag["text"]) self.append_text_with_tag(u"பிரிவு %d\n"%self.layoutpos["section"], self.tag["found"]) def visit_code(self,*args): child = args[0] #print("Code => %s"%str(child)) ref_text = None for node in child.childNodes: if node.nodeType == node.TEXT_NODE: ref_text = node break if ref_text: self.highlighter.run_syntax_highlighting(ref_text.data) pass def visit_text(self,text): child = text #print("Text => %s"%str(child)) self.append_text_with_tag(child.data,self.pageno == 0 and self.tag["chapter"] or self.tag["text"]) def visit_list(self,*args): child = args[0] #print("List => %s"%str(child)) ref_text = None for node in child.childNodes: if node.nodeType == node.TEXT_NODE: ref_text = node break self.append_text_with_tag(u"\n",self.tag["list"]) if ref_text: idx = 0 for _,line in enumerate(re.split("\n+",ref_text.data.strip())): line = line.strip() line = re.sub("^\*"," ",line) if len(line) < 1: continue idx = idx + 1 self.append_text_with_tag(u" %d)"%idx+line+u"\n",self.tag["list"]) pass def append_text_with_tag(self,text,tag): textbuffer = self.textbuffer self.highlighter.textbuffer = self.textbuffer textbuffer.insert_at_cursor( text ) n_end = textbuffer.get_end_iter() n_start = textbuffer.get_iter_at_offset(textbuffer.get_char_count()-len(text)) textbuffer.apply_tag(tag,n_start,n_end) return def render_page(self,pageno,textbuffer): if len(self.tag.keys()) == 0: self.build_tags(textbuffer) self.pageno = pageno self.textbuffer = textbuffer # reset self.layoutpos = {"title":u"","section":0} self.textbuffer.set_text(u"") dom = self.chapters[pageno]['dom'] self.visit(dom) #print("==========END VISITOR=======") #with codecs.open(self.chapters[pageno]['file'],'r','utf-8') as fp: # data = fp.read() # str_val = dom.getElementsByTagName("chapter")[0].getAttribute("title") # print("Title => %s"%str_val) # textbuffer.set_text( str_val ) # n_end = textbuffer.get_end_iter() # n_start = textbuffer.get_iter_at_offset(textbuffer.get_char_count()-len(str_val)) # textbuffer.apply_tag(self.tag["title"],n_start,n_end) return True def update_toc(self,box,parent): toc_list = [u"<chapter title=\"தமிழில் நிரல் எழுது - புத்தக உள்ளீடு\">",] for pos,chapter in self.chapters.items(): btn = Gtk.Button(u"%d. <b>%s</b>"%(pos,chapter['title'])) btn.get_children()[0].set_use_markup(True) btn.set_alignment(0.0,0.0) btn.connect('clicked',parent.on_navigate_to,chapter['title'],pos) box.pack_start(btn,True,True,0) toc_list.append(u"<section>%s</section>"%chapter['title']) toc_list.append(u"</chapter>") toc_str = u"\n".join(toc_list) toc_dom = xml_parse_string(PYTHON3 and toc_str or u'{0}'.format(toc_str).encode('utf-8')) self.chapters[0] = {'dom':toc_dom,'title':u'தமிழில் நிரல் எழுது - புத்தக உள்ளீடு','file':u':auto:'} return True
def __init__(self,filename=None,autorun=False): EditorState.__init__(self) EzhilSyntaxHighlightingEditor.__init__(self) Editor._instance = self self.autorun = autorun self.builder.add_from_file(getResourceFile("editor.glade")) if filename: self.filename = filename ## construct the GUI from GLADE self.window = self.builder.get_object("ezhilEditorWindow") try: d = Gtk.CssProvider.get_default() ## style = formatString( "style \"my-style\" { font_name = \"Mono %i\" }" ## class \"*\" style \"my-style\"", fontSize); ## gtk_rc_parse_string( style ) d.load_from_data("default * { font : \"Latha 7\" }") self.window.set_icon_from_file(getResourceFile("img","ezhil_square_2015_128px.png")) except Exception as ie: print(u"Message: loading image or CSS style failed - %s"%ie) self.window.set_resizable(False) #fix the window self.window.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.console_textview = self.builder.get_object("codeExecutionTextView") self.help_browser = None self.example_browser = None self.menuKbd = self.builder.get_object("toggleKeyboard") self.menuKbd.connect("activate", lambda wid: self.toggleKeyboard(wid)) self.toolitemKbd = self.builder.get_object("KbdBtn") self.toolitemKbd.connect("clicked",lambda wid: self.toggleKeyboardAndKeyword(wid)) self.exampleMenu = self.builder.get_object("exampleBrowserItem") self.exampleMenu.connect("activate",lambda wid: self.exampleBrowser(wid)) self.helpItem = self.builder.get_object("HelpBtn") self.helpItem.connect("clicked",lambda wid: self.helpBrowser(wid)) self.helpMenuItem = self.builder.get_object("helpMenuItem") self.helpMenuItem.connect("activate",lambda wid: self.helpBrowser(wid)) self.toolitemFont = self.builder.get_object("FontBtn") self.toolitemFont.connect("clicked", lambda wid: self.chooseFont(wid)) self.menuKeyword = self.builder.get_object("toggleKeyword") self.menuKeyword.connect("activate",lambda wid: self.toggleKeyword(wid)) ## self.console_textview.set_editable(False) self.console_textview.set_cursor_visible(False) self.console_textview.set_buffer(UndoableBuffer()) self.console_buffer = self.console_textview.get_buffer() self.scrolled_codeview = self.builder.get_object("scrolledwindow1") self.textview = self.builder.get_object("codeEditorTextView") self.StatusBar = self.builder.get_object("editorStatus") self.textview.set_buffer(UndoableBuffer()) popup1 = PopupForTextView(self.textview,'EXECUTE_SELECTION') self.textview_popup_handler = [popup1]#,PopupForTextView(self.textview,'SHOW_HELP',popup1)] self.textbuffer = self.textview.get_buffer() self.scrolled_codeview.set_policy(Gtk.PolicyType.AUTOMATIC,Gtk.PolicyType.AUTOMATIC) self.tag_text = None self.tag_literal = None self.tag_comment = None self.tag_fail = None self.tag_found = None self.tag_operator = None self.tag_pass = None self.refresh_tags() # add keywords bar self.keywords8 = [u"பதிப்பி",u"முடி",u"நிரல்பாகம்",u"தொடர்",u"நிறுத்து",u"ஒவ்வொன்றாக",u"இல்",u"ஆனால்",u"இல்லைஆனால்",u"இல்லை", u"ஆக",u"வரை",u"பின்கொடு",] self.operators16 = [u"@",u"+",u"-",u"*",u"/",u"%",u"^",u"==",u">",u"<",u">=",u"<=",u"!=",u"!=",u"!",u",",u"(",u")",u"{",u"}",u"()",u"[]"] self.forms = [u"@( )\t ஆனால் \n இல்லை \n முடி",u" @( )\t வரை \n முடி",u"நிரல்பாகம்\t உதாரணம் () \n முடி"] self.widget_keywords = self.builder.get_object("hbox_keywords8") self.widget_operators = self.builder.get_object("hbox_operators16") self.widget_forms = self.builder.get_object("hbox_forms") self.build_keyword_btns() # on screen keyboard self.editorBox = self.builder.get_object("editorBox") self.oskeyboard = None self.toggleKeyboard() # connect abt menu and toolbar item self.abt_menu = self.builder.get_object("aboutMenuItem") self.abt_menu.connect("activate",Editor.show_about_status) self.abt_btn = self.builder.get_object("AboutBtn") self.abt_btn.connect("clicked",Editor.show_about_status) self.cut_menu = self.builder.get_object("cut_item") self.cut_menu.connect("activate",Editor.cut_action) self.paste_menu = self.builder.get_object("paste_item") self.paste_menu.connect("activate",Editor.paste_action) self.cp_menu = self.builder.get_object("copy_item") self.cp_menu.connect("activate",Editor.copy_action) self.close_menu = self.builder.get_object("closeMenuItem") self.close_menu.connect("activate",Editor.close_file) # for undo-redo buttons self.undo_btn = self.builder.get_object("UndoBtn") self.redo_btn = self.builder.get_object("RedoBtn") self.undo_btn.connect("clicked",Editor.undo_action) self.redo_btn.connect("clicked",Editor.redo_action) # for code textview #self.textview.connect("backspace",Editor.on_codebuffer_edited) #self.textview.connect("delete-from-cursor",Editor.on_codebuffer_edited) #self.textview.connect("insert-at-cursor",Editor.on_codebuffer_edited) # search action in text buffer search_menu = self.builder.get_object("search_item") search_menu.connect("activate",Editor.on_search_clicked) # open : editor action self.open_menu = self.builder.get_object("openMenuItem") self.open_menu.connect("activate",Editor.open_file) self.open_btn = self.builder.get_object("OpenBtn") self.open_btn.connect("clicked",Editor.open_file) # new : editor action self.new_menu = self.builder.get_object("newMenuItem") self.new_menu.connect("activate",Editor.reset_new) self.new_btn = self.builder.get_object("NewBtn") self.new_btn.connect("clicked",Editor.reset_new) # run : editor action self.run_menu = self.builder.get_object("runMenuItem") self.run_menu.connect("activate",Editor.run_ezhil_code) self.run_btn = self.builder.get_object("RunBtn") run_signal = self.run_btn.connect("clicked",Editor.run_ezhil_code) # save : editor action save self.save_btn = self.builder.get_object("SaveBtn") self.save_btn.connect("clicked",Editor.save_file) self.save_menu = self.builder.get_object("menuItemSave") self.save_menu.connect("activate",Editor.save_file) self.saveas_menu = self.builder.get_object("menuItemSaveAs") self.saveas_menu.connect("activate",Editor.saveas_file) # clear buffer : clear run buffer self.clear_btn = self.builder.get_object("clearbuffer") self.clear_btn.connect("clicked",Editor.clear_buffer) # hookup the exit self.exit_btn = self.builder.get_object("ExitBtn") self.exit_btn.connect("clicked",Editor.exit_editor) self.exit_menu = self.builder.get_object("quitMenuItem") self.exit_menu.connect("activate",Editor.exit_editor) # exit by 'x' btn self.window.connect("destroy",Editor.exit_editor) self.window.show_all() self.load_file() if autorun: self.do_autorun() GLib.timeout_add(500,self.display_tinylicense)