je-editor 0.0.184__py3-none-any.whl → 0.0.187__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
je_editor/__init__.py CHANGED
@@ -2,7 +2,7 @@ from je_editor.pyside_ui.browser.browser_widget import BrowserWidget
2
2
  from je_editor.pyside_ui.code.code_process.code_exec import ExecManager
3
3
  from je_editor.pyside_ui.code.shell_process.shell_exec import ShellManager
4
4
  from je_editor.pyside_ui.code.syntax.python_syntax import PythonHighlighter
5
- from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_word_setting_dict, syntax_rule_setting_dict
5
+ from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_extend_setting_dict, syntax_rule_setting_dict
6
6
  from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
7
7
  from je_editor.pyside_ui.main_ui.editor.editor_widget_dock import FullEditorWidget
8
8
  from je_editor.pyside_ui.main_ui.main_editor import EDITOR_EXTEND_TAB
@@ -26,7 +26,7 @@ __all__ = [
26
26
  "start_editor", "EditorMain", "EDITOR_EXTEND_TAB",
27
27
  "JEditorException", "JEditorExecException", "FullEditorWidget",
28
28
  "JEditorRunOnShellException", "JEditorSaveFileException", "syntax_rule_setting_dict",
29
- "JEditorOpenFileException", "JEditorContentFileException", "syntax_word_setting_dict",
29
+ "JEditorOpenFileException", "JEditorContentFileException", "syntax_extend_setting_dict",
30
30
  "JEditorCantFindLanguageException", "JEditorJsonException", "PythonHighlighter",
31
31
  "user_setting_dict", "user_setting_color_dict", "EditorWidget", "BrowserWidget",
32
32
  "ExecManager", "ShellManager", "traditional_chinese_word_dict", "english_word_dict",
je_editor/__main__.py CHANGED
@@ -2,7 +2,7 @@ if __name__ == "__main__":
2
2
  # argparse
3
3
  import argparse
4
4
 
5
- from je_editor.tkinter_ui.editor_main_ui.tkinter_editor import start_editor
5
+ from je_editor.start_editor import start_editor
6
6
 
7
7
  argparse_event_dict = {
8
8
  "start": start_editor,
@@ -43,6 +43,7 @@ class CodeEditor(QPlainTextEdit):
43
43
  self.check_env()
44
44
  # Self main window (parent)
45
45
  self.main_window = main_window
46
+ self.current_file = main_window.current_file
46
47
 
47
48
  self.skip_popup_behavior_list = [
48
49
  Qt.Key.Key_Enter, Qt.Key.Key_Return, Qt.Key.Key_Up, Qt.Key.Key_Down,
@@ -64,7 +65,7 @@ class CodeEditor(QPlainTextEdit):
64
65
  self.setTabStopDistance(
65
66
  QtGui.QFontMetricsF(self.font()).horizontalAdvance(" ")
66
67
  )
67
- self.highlighter = PythonHighlighter(self.document())
68
+ self.highlighter = PythonHighlighter(self.document(), main_window=self)
68
69
  self.highlight_current_line()
69
70
  self.setLineWrapMode(self.LineWrapMode.NoWrap)
70
71
  # Search Text
@@ -79,6 +80,10 @@ class CodeEditor(QPlainTextEdit):
79
80
  self.completer: Union[None, QCompleter] = None
80
81
  self.set_complete([])
81
82
 
83
+ def reset_highlighter(self):
84
+ self.highlighter = PythonHighlighter(self.document(), main_window=self)
85
+ self.highlight_current_line()
86
+
82
87
  def check_env(self):
83
88
  jeditor_logger.info("CodeEditor check_env")
84
89
  path = venv_check()
@@ -1,34 +1,57 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from je_editor.pyside_ui.code.plaintext_code_edit.code_edit_plaintext import CodeEditor
8
+
1
9
  from PySide6.QtCore import QRegularExpression
2
10
  from PySide6.QtGui import QSyntaxHighlighter
3
11
  from PySide6.QtGui import QTextCharFormat
4
12
 
5
- from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_word_setting_dict, syntax_rule_setting_dict
13
+ from je_editor.pyside_ui.code.syntax.syntax_setting import syntax_word_setting_dict, syntax_rule_setting_dict, \
14
+ syntax_extend_setting_dict
6
15
  from je_editor.utils.logging.loggin_instance import jeditor_logger
7
16
 
8
17
 
9
18
  class PythonHighlighter(QSyntaxHighlighter):
10
- def __init__(self, parent=None):
19
+ def __init__(self, parent=None, main_window: CodeEditor = None):
11
20
  jeditor_logger.info(f"Init PythonHighlighter parent: {parent}")
12
21
  super().__init__(parent)
13
22
 
14
23
  self.highlight_rules = []
15
-
16
- # Highlight
17
- for rule_variable_dict in syntax_word_setting_dict.values():
18
- color = rule_variable_dict.get("color")
19
- text_char_format = QTextCharFormat()
20
- text_char_format.setForeground(color)
21
- for word in rule_variable_dict.get("words"):
22
- pattern = QRegularExpression(rf"\b{word}\b")
23
- self.highlight_rules.append((pattern, text_char_format))
24
-
25
- for rule_variable_dict in syntax_rule_setting_dict.values():
26
- color = rule_variable_dict.get("color")
27
- text_char_format = QTextCharFormat()
28
- text_char_format.setForeground(color)
29
- for rule in rule_variable_dict.get("rules"):
30
- pattern = QRegularExpression(rule)
31
- self.highlight_rules.append((pattern, text_char_format))
24
+ if main_window.current_file is not None:
25
+ current_file_suffix = Path(main_window.current_file).suffix
26
+ else:
27
+ current_file_suffix = ".py"
28
+ if current_file_suffix == ".py":
29
+ # Highlight
30
+ for rule_variable_dict in syntax_word_setting_dict.values():
31
+ color = rule_variable_dict.get("color")
32
+ text_char_format = QTextCharFormat()
33
+ text_char_format.setForeground(color)
34
+ for word in rule_variable_dict.get("words"):
35
+ pattern = QRegularExpression(rf"\b{word}\b")
36
+ self.highlight_rules.append((pattern, text_char_format))
37
+ for rule_variable_dict in syntax_rule_setting_dict.values():
38
+ color = rule_variable_dict.get("color")
39
+ text_char_format = QTextCharFormat()
40
+ text_char_format.setForeground(color)
41
+ for rule in rule_variable_dict.get("rules"):
42
+ pattern = QRegularExpression(rule)
43
+ self.highlight_rules.append((pattern, text_char_format))
44
+ else:
45
+ if syntax_extend_setting_dict.get(current_file_suffix):
46
+ for rule_variable_dict in syntax_extend_setting_dict.get("current_file_suffix").values():
47
+ color = rule_variable_dict.get("color")
48
+ text_char_format = QTextCharFormat()
49
+ text_char_format.setForeground(color)
50
+ for word in rule_variable_dict.get("words"):
51
+ pattern = QRegularExpression(rf"\b{word}\b")
52
+ self.highlight_rules.append((pattern, text_char_format))
53
+ else:
54
+ pass
32
55
 
33
56
  def highlightBlock(self, text) -> None:
34
57
  jeditor_logger.info(f"PythonHighlighter highlightBlock text: {text}")
@@ -61,5 +61,7 @@ syntax_word_setting_dict: dict = {
61
61
  "words": ("self",),
62
62
  "color": QColor(204, 0, 204)
63
63
  }
64
+ }
64
65
 
66
+ syntax_extend_setting_dict: dict = {
65
67
  }
@@ -12,6 +12,7 @@ from frontengine import FrontEngineMainUI
12
12
  from frontengine import RedirectManager
13
13
  from qt_material import QtStyleTools
14
14
 
15
+ from je_editor.utils.logging.loggin_instance import jeditor_logger
15
16
  from je_editor.pyside_ui.browser.browser_widget import BrowserWidget
16
17
  from je_editor.pyside_ui.code.auto_save.auto_save_manager import init_new_auto_save_thread, file_is_open_manager_dict
17
18
  from je_editor.pyside_ui.main_ui.editor.editor_widget import EditorWidget
@@ -22,7 +23,6 @@ from je_editor.pyside_ui.main_ui.save_settings.user_setting_file import user_set
22
23
  write_user_setting
23
24
  from je_editor.pyside_ui.main_ui.system_tray.extend_system_tray import ExtendSystemTray
24
25
  from je_editor.utils.file.open.open_file import read_file
25
- from je_editor.utils.logging.loggin_instance import jeditor_logger
26
26
  from je_editor.utils.multi_language.multi_language_wrapper import language_wrapper
27
27
  from je_editor.utils.redirect_manager.redirect_manager_class import redirect_manager_instance
28
28
 
@@ -97,7 +97,7 @@ class EditorMain(QMainWindow, QtStyleTools):
97
97
  self.system_tray.show()
98
98
  self.system_tray.setToolTip(language_wrapper.language_word_dict.get("application_name"))
99
99
  # Put Redirect on last to trace exception
100
- RedirectManager.restore_std()
100
+ redirect_manager_instance.restore_std()
101
101
  redirect_manager_instance.set_redirect()
102
102
  # Timer to redirect error or message
103
103
  self.redirect_timer = QTimer(self)
@@ -181,6 +181,7 @@ class EditorMain(QMainWindow, QtStyleTools):
181
181
  if last_file_path.is_file() and last_file_path.exists() and widget.code_save_thread is None:
182
182
  init_new_auto_save_thread(str(last_file_path), widget)
183
183
  widget.code_edit.setPlainText(read_file(widget.current_file)[1])
184
+ widget.code_edit.reset_highlighter()
184
185
  file_is_open_manager_dict.update({str(last_file_path): str(last_file_path.name)})
185
186
  widget.rename_self_tab()
186
187
 
@@ -204,7 +205,7 @@ class EditorMain(QMainWindow, QtStyleTools):
204
205
  self.tab_widget.setCurrentWidget(widget)
205
206
 
206
207
  def closeEvent(self, event) -> None:
207
- jeditor_logger.info(f"EditorMain closeEvent")
208
+ jeditor_logger.info("EditorMain closeEvent")
208
209
  write_user_setting()
209
210
  write_user_color_setting()
210
211
  super().closeEvent(event)
@@ -5,9 +5,23 @@ logging.root.setLevel(logging.DEBUG)
5
5
  jeditor_logger = logging.getLogger("JEditor")
6
6
  formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s | %(message)s')
7
7
 
8
- # Rotating File Handler
9
- rotating_file_handler = RotatingFileHandler(filename="JEditor.log", mode="w",maxBytes=1073741824)
10
- rotating_file_handler.setFormatter(formatter)
11
- jeditor_logger.addHandler(rotating_file_handler)
8
+
9
+ class JEditorLoggingHandler(RotatingFileHandler):
10
+
11
+ # redirect logging stderr output to queue
12
+
13
+ def __init__(self, filename: str = "JEditor.log", mode="w",
14
+ maxBytes:int=1073741824, backupCount:int=0):
15
+ super().__init__(filename=filename, mode=mode, maxBytes=maxBytes, backupCount=backupCount)
16
+ self.formatter = formatter
17
+ self.setLevel(logging.DEBUG)
18
+
19
+ def emit(self, record: logging.LogRecord) -> None:
20
+ super().emit(record)
21
+
22
+
23
+ # File handler
24
+ file_handler = JEditorLoggingHandler()
25
+ jeditor_logger.addHandler(file_handler)
12
26
 
13
27
 
@@ -10,15 +10,12 @@ class RedirectStdOut(logging.Handler):
10
10
  # redirect logging std output to queue
11
11
 
12
12
  def __init__(self):
13
- jeditor_logger.info("Init RedirectStdOut")
14
13
  super().__init__()
15
14
 
16
15
  def write(self, content_to_write) -> None:
17
- jeditor_logger.info(f"RedirectStdOut write content_to_write: {content_to_write}")
18
16
  redirect_manager_instance.std_out_queue.put(content_to_write)
19
17
 
20
18
  def emit(self, record: logging.LogRecord) -> None:
21
- jeditor_logger.info(f"RedirectStdOut emit record: {record}")
22
19
  redirect_manager_instance.std_out_queue.put(self.format(record))
23
20
 
24
21
 
@@ -27,15 +24,12 @@ class RedirectStdErr(logging.Handler):
27
24
  # redirect logging stderr output to queue
28
25
 
29
26
  def __init__(self):
30
- jeditor_logger.info("Init RedirectStdErr")
31
27
  super().__init__()
32
28
 
33
29
  def write(self, content_to_write) -> None:
34
- jeditor_logger.info(f"RedirectStdErr write content_to_write: {content_to_write}")
35
30
  redirect_manager_instance.std_err_queue.put(content_to_write)
36
31
 
37
32
  def emit(self, record: logging.LogRecord) -> None:
38
- jeditor_logger.info(f"RedirectStdErr emit record: {record}")
39
33
  redirect_manager_instance.std_err_queue.put(self.format(record))
40
34
 
41
35
 
@@ -58,8 +52,9 @@ class RedirectManager(object):
58
52
  sys.stderr = redirect_err
59
53
  default_logger = logging.getLogger("RedirectManager")
60
54
  default_logger.addHandler(redirect_err)
55
+ skip_logger_list = ["JEditor", "FrontEngine", "AutomationIDE"]
61
56
  for name in logging.root.manager.loggerDict.keys():
62
- if name == "JEditor":
57
+ if name in skip_logger_list:
63
58
  continue
64
59
  else:
65
60
  logging.getLogger(name).addHandler(redirect_err)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: je_editor
3
- Version: 0.0.184
3
+ Version: 0.0.187
4
4
  Summary: JEditor is basic but powerful editor include GPT
5
5
  Author-email: JE-Chen <jechenmailman@gmail.com>
6
6
  License: MIT
@@ -1,5 +1,5 @@
1
- je_editor/__init__.py,sha256=HEF6txDvxMvUCZJL86ukqqHBZjDe84V2fNZ38qABGy8,2401
2
- je_editor/__main__.py,sha256=tv19PbVG_8bg4HhRWINNYL_Zu6VtkJR00U_0v56GsK8,598
1
+ je_editor/__init__.py,sha256=IZm-mUID0W7-smb9SYEtwcWrpr8mz6OyF4e5akHGrFU,2405
2
+ je_editor/__main__.py,sha256=2ymm4ESRcqP4K1YQyeaDbGhuK-0C1IausIiEOpbm6Ds,570
3
3
  je_editor/start_editor.py,sha256=hW7JFOjBkcW7hdC7q-9JsaVTeSNCep1GsqxLmbMU4wg,543
4
4
  je_editor/pyside_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  je_editor/pyside_ui/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,12 +17,12 @@ je_editor/pyside_ui/code/code_format/pep8_format.py,sha256=zrCkUdz2SG4bnMSkXfccv
17
17
  je_editor/pyside_ui/code/code_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  je_editor/pyside_ui/code/code_process/code_exec.py,sha256=p_Qs0ROAc2qzaqJgz5yPB6mSfnCnHl5R69cYrzmyZ78,9839
19
19
  je_editor/pyside_ui/code/plaintext_code_edit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=uiJ115eeRZ2hOdtTwA2I6DY7Ww3UauoHzAgGJ747f_8,13875
20
+ je_editor/pyside_ui/code/plaintext_code_edit/code_edit_plaintext.py,sha256=_17cH9dsSYDxZx09LzHL_lFclqMXWs9rz5a91b_244g,14103
21
21
  je_editor/pyside_ui/code/shell_process/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  je_editor/pyside_ui/code/shell_process/shell_exec.py,sha256=JpEpq1rXdEAtPyjOmUT7Ib_-fRnWl-c6h46gExau-po,8729
23
23
  je_editor/pyside_ui/code/syntax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=Go-AjzbQbocYdYvtlT4vXx3sbd8zJtqdP1FObc2dgLQ,1831
25
- je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=5mx0bnCJBvdAH6LixV_k6KoQyEdnTnC5sV3ieq06XBw,2243
24
+ je_editor/pyside_ui/code/syntax/python_syntax.py,sha256=FH3YI_aixnkjId98YPGM5QMhU0_AimWaFuKpoFBG0yA,3017
25
+ je_editor/pyside_ui/code/syntax/syntax_setting.py,sha256=oaLRF_83Oa6bcAorf7AlZG0Mrt4FmsK7b4aA-LS_bRo,2284
26
26
  je_editor/pyside_ui/code/textedit_code_result/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  je_editor/pyside_ui/code/textedit_code_result/code_record.py,sha256=pT-CmcADEaXLZ0ih6D6rpe1XywgszrEpcJxtJYgopJE,2162
28
28
  je_editor/pyside_ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,7 +34,7 @@ je_editor/pyside_ui/dialog/search_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
34
34
  je_editor/pyside_ui/dialog/search_ui/search_error_box.py,sha256=GzMXMnIL1k8ZwG3A2a_oMgiUiXXqd7HKW45YlVlL_eo,1168
35
35
  je_editor/pyside_ui/dialog/search_ui/search_text_box.py,sha256=H2MbC-RGpKg9TzjV4MZj7Bw7qs9a9E4cjA4GI5zsv4U,1154
36
36
  je_editor/pyside_ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- je_editor/pyside_ui/main_ui/main_editor.py,sha256=c2mniaNh-ngyNzA38Wsx8xZJqAc07aUTg2XN4P6IDJ4,10953
37
+ je_editor/pyside_ui/main_ui/main_editor.py,sha256=Avk2aBXN7bgGAZB4b92WtV9vZQd6QMWUyLDvfsu59gk,11024
38
38
  je_editor/pyside_ui/main_ui/dock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
39
  je_editor/pyside_ui/main_ui/dock/destroy_dock.py,sha256=MTN45BykNm6FA4gMW7gI4Kr9orTdcxVTm7mch3DUhaw,604
40
40
  je_editor/pyside_ui/main_ui/editor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -92,17 +92,17 @@ je_editor/utils/json/json_file.py,sha256=zTzQp-VFlaXg7puxC3EgEECURuuDmfJ8I9emX0E
92
92
  je_editor/utils/json_format/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
93
93
  je_editor/utils/json_format/json_process.py,sha256=tszo48OnVivVkuuPrl-FtGaaq-1YOJLKT2o2A3qQi3M,1250
94
94
  je_editor/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- je_editor/utils/logging/loggin_instance.py,sha256=yZMkHMvStMtkI-IqhwPnDXnh8uvBmhDpr-HMkLVxsCI,467
95
+ je_editor/utils/logging/loggin_instance.py,sha256=OFdWgra201B4f1vDM35M9L-47DK-8j-5HQEAq_ySSKM,841
96
96
  je_editor/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
97
  je_editor/utils/multi_language/english.py,sha256=Wbku1oGVoxDRpUb3JKy1Qlj8BByDNB60PvH4TEQwGgw,5778
98
98
  je_editor/utils/multi_language/multi_language_wrapper.py,sha256=_MtYrE51poQ1p_iWvT2eg_604uj6IsiBgGpifWpYLGc,1050
99
99
  je_editor/utils/multi_language/traditional_chinese.py,sha256=tWs9_yhuNoehpYFCv37a6eVYphkzN9Jb_9Pbj267Mcc,5812
100
100
  je_editor/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
- je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=QtuK9z3auc2lnBdTVxS-ENpBMt5pRsEuKVVOmRkd-Kw,2521
101
+ je_editor/utils/redirect_manager/redirect_manager_class.py,sha256=RsLRbhBy_YyiwTN5g0YkoobI-BvSdZgX0Ot53nrHm7g,2174
102
102
  je_editor/utils/venv_check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
103
  je_editor/utils/venv_check/check_venv.py,sha256=oCrMdue4NYUUGrVifh_iHFwIgxVx9azYN4jz3Xiulgg,999
104
- je_editor-0.0.184.dist-info/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
105
- je_editor-0.0.184.dist-info/METADATA,sha256=4sWldT_Gn7Erq3OIbIPZ-fsoUR70sTBgE-KpUOPjbgk,3338
106
- je_editor-0.0.184.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
107
- je_editor-0.0.184.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
108
- je_editor-0.0.184.dist-info/RECORD,,
104
+ je_editor-0.0.187.dist-info/LICENSE,sha256=KMhUHh6pnIUvmXDW-49L_Sz63bqkOlPDqsecaqKiitU,1091
105
+ je_editor-0.0.187.dist-info/METADATA,sha256=geYXWDYks3fxMsA1VHJVEcynQn3BsFlhXMbp2OIDUtg,3338
106
+ je_editor-0.0.187.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
107
+ je_editor-0.0.187.dist-info/top_level.txt,sha256=_9YA7BgxpkmdLs-5V_UQILxClcMRgPyG1a3qaE-Bkcs,10
108
+ je_editor-0.0.187.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5