start.py
Sun Jan 07 2024 14:02:12 GMT+0000 (Coordinated Universal Time)
Saved by @lawlaw
import wx import wx.lib.scrolledpanel as scrolled from Buffer import Buffer from LexicalAnalyzer import LexicalAnalyzer from SyntaxAnalyzer import SyntaxAnalyzer if __name__ == "__main__": Buffer = Buffer() Analyzer = LexicalAnalyzer() Syntax = SyntaxAnalyzer() path = None display_text = None terminal_font_path = "resources/Modeseven-L3n5.ttf" # Lists for every list returned list from the function tokenize token = [] lexeme = [] row = [] column = [] txt_ctrl_val = "" file_attached = False # these variables are instantiated early because of scope issues app = wx.App() icon = wx.Icon("resources/lol.ico") frame = wx.Frame(None, title="LOLCode Interpreter", size=(1000, 800)) frame.SetBackgroundColour("#EFF1F3") frame.SetIcon(icon) panel = wx.Panel(frame) text_editor = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_NO_VSCROLL) main_horizontal_box = wx.BoxSizer(wx.HORIZONTAL) left_vertical_box = wx.BoxSizer(wx.VERTICAL) right_vertical_box = wx.BoxSizer(wx.VERTICAL) left_panel = wx.Panel(panel, size=(200, 200)) text_editor_box = wx.BoxSizer(wx.VERTICAL) left_main_vbox = wx.BoxSizer(wx.VERTICAL) left_main_title = wx.StaticText( left_panel, label="LEXEMES AND SYMBOLS", style=wx.ALIGN_LEFT ) titles_panel = wx.Panel(left_panel) titles_hbox = wx.BoxSizer(wx.HORIZONTAL) lex_title = wx.StaticText(titles_panel, label="Lexeme") class_title = wx.StaticText(titles_panel, label="Classification") terminal_panel = wx.Panel(panel) terminal_title = wx.StaticText(terminal_panel, label="TERMINAL") terminal_box = wx.BoxSizer(wx.VERTICAL) terminal_scrollpane = scrolled.ScrolledPanel(terminal_panel, size=(200, 200)) terminal_scrollpane.SetupScrolling() terminal_context_box = wx.BoxSizer(wx.VERTICAL) execute_button_box = wx.BoxSizer(wx.VERTICAL) execute_button = wx.Button(panel, label="EXECUTE") wx.Font.AddPrivateFont(terminal_font_path) terminal_font = wx.Font( 10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "ModeSeven", encoding=wx.FONTENCODING_DEFAULT, ) line = wx.StaticLine(terminal_panel, size=(400, -1), style=wx.LI_HORIZONTAL) def on_attach_file_button(event): global path, txt_ctrl_val, text_editor, file_attached path = None with wx.FileDialog( frame, "Open", wildcard="All files (*.*)|*.*", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST, ) as fileDialog: if fileDialog.ShowModal() == wx.ID_CANCEL: return path = fileDialog.GetPath() print(f"Selected file: {path}") returnVal = start(path) text_editor.SetValue("".join(returnVal[0])) if returnVal[1][0] == False: print("HEREEE") print(returnVal[1]) terminal_content = returnVal[1][1:] joined_terminal_content = "\n".join(terminal_content) start_str = '> lolcode -u "' + path + '"\n' start_text = wx.StaticText(terminal_scrollpane, label=start_str) start_text.SetFont(terminal_font) start_text.SetForegroundColour("#98ddeb") joined_text = wx.StaticText( terminal_scrollpane, label=joined_terminal_content ) joined_text.SetFont(terminal_font) joined_text.SetForegroundColour("#FFFFFF") terminal_context_box.Add(joined_text, 1, wx.EXPAND | wx.ALL, 10) else: print("KKKK") print(returnVal[1]) terminal_content = [] for i in range(len(returnVal[1])): if i != 0: terminal_content.append(returnVal[1][i]) joined_terminal_content = "\n".join(terminal_content) start_str = '> lolcode -u "' + path + '"\n' start_text = wx.StaticText(terminal_scrollpane, label=start_str) start_text.SetFont(terminal_font) start_text.SetForegroundColour("#98ddeb") terminal_text = wx.StaticText( terminal_scrollpane, label=joined_terminal_content ) terminal_text.SetFont(terminal_font) terminal_text.SetForegroundColour("#FFFFFF") terminal_context_box.Add(terminal_text, 1, wx.EXPAND | wx.ALL, 20) file_attached = True def on_execute_button(event): pass def start(path): global token, lexeme, row, column, display_text # Tokenize and reload of the buffer display_text = list(Buffer.load_buffer(path)) # clear the lists token.clear() lexeme.clear() row.clear() column.clear() # iterate through the list of lines returned by the buffer for i in display_text: t, lex, lin, col = Analyzer.tokenize(i) if t == False: retVals = [t, lex] returnValues = [display_text, retVals] return returnValues else: token += t lexeme += lex row += lin column += col print("\nRecognize Tokens: ", token) print("\nRecognize Lexems: ", lexeme) # print('\nRecognize row: ', row) # print('\nRecognize col: ', column) retVals = Syntax.program(token, lexeme, row) returnValues = [display_text, retVals] return returnValues # rest of GUI-related code left_panel.SetBackgroundColour("#032b43") main_horizontal_box.Add(left_panel, 1, wx.EXPAND) # main_horizontal_box.Add(left_vertical_box, 1, wx.EXPAND) # inner_left_panel = wx.Panel(panel, size=(200, 200)) # inner_left_panel.SetBackgroundColour("#141E46") # add inner left panel to left vertical box # left_vertical_box.Add(inner_left_panel, 1, wx.EXPAND) main_horizontal_box.Add(right_vertical_box, 3, wx.EXPAND) # add text editor box to right vertical box right_vertical_box.Add(text_editor_box, 2, wx.EXPAND) right_vertical_box.Add(execute_button_box, 0, wx.EXPAND) right_vertical_box.Add(terminal_panel, 1, wx.EXPAND) # adding the attach file button attach_file_button = wx.Button(panel, size=(30, 30)) attach_icon = wx.Bitmap("resources/attach.ico") attach_icon = attach_icon.ConvertToImage() attach_icon = attach_icon.Rescale(20, 20, wx.IMAGE_QUALITY_HIGH) attach_file_button.SetBitmap(attach_icon) attach_file_button.SetBackgroundColour("#FFFFFF") # binding button to functionality attach_file_button.Bind(wx.EVT_BUTTON, on_attach_file_button) # add attach button to text editor box text_editor_box.Add(attach_file_button, 0, wx.ALIGN_RIGHT | wx.ALL, 10) # text editor widget text_editor.SetValue(txt_ctrl_val) text_editor.SetBackgroundColour("#FFFFFF") # add text editor to text editor box text_editor_box.Add(text_editor, 1, wx.EXPAND | wx.BOTTOM | wx.RIGHT | wx.LEFT, 20) execute_button_box.Add( execute_button, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10 ) headers_font = panel.GetFont() headers_font.SetPointSize(8) headers_font.SetWeight(wx.FONTWEIGHT_BOLD) execute_button.SetFont(headers_font) table_titles_font = panel.GetFont() table_titles_font.SetPointSize(8) table_titles_font.SetWeight(wx.FONTWEIGHT_SEMIBOLD) left_panel.SetSizer(left_main_vbox) left_main_title.SetForegroundColour("#FFFFFF") left_main_title.SetFont(headers_font) left_main_vbox.Add(left_main_title, 0, wx.ALIGN_CENTER | wx.ALL, 10) # titles1_hbox = wx.BoxSizer(wx.HORIZONTAL) # left_main_vbox.Add(titles1_hbox, 1, wx.ALL, 10) titles_panel.SetBackgroundColour("#62929e") left_main_vbox.Add(titles_panel, 0, wx.EXPAND | wx.ALL, 0) titles_panel.SetSizer(titles_hbox) lex_title.SetForegroundColour("#FFFFFF") class_title.SetForegroundColour("#FFFFFF") lex_title.SetFont(table_titles_font) class_title.SetFont(table_titles_font) titles_hbox.Add(lex_title, 1, wx.ALIGN_CENTER | wx.ALL, 5) titles_hbox.Add(class_title, 1, wx.ALIGN_CENTER | wx.ALL, 5) # terminal_box.Add(terminal_panel, 1, wx.EXPAND | wx.ALL, 0) terminal_panel.SetBackgroundColour("#55828B") terminal_panel.SetSizer(terminal_box) terminal_box.Add(terminal_title, 0, wx.LEFT | wx.ALL, 10) terminal_title.SetForegroundColour("#FFFFFF") terminal_title.SetFont(terminal_font) terminal_box.Add(line, 0, wx.EXPAND | wx.ALL, 0) terminal_box.Add(terminal_scrollpane, 0, wx.EXPAND | wx.ALL, 10) terminal_scrollpane.SetSizer(terminal_context_box) panel.SetSizer(main_horizontal_box) frame.Show() app.MainLoop()
Comments