PrEditor 0.0.0.dev1__py2.py3-none-any.whl → 0.1.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of PrEditor might be problematic. Click here for more details.

Files changed (363) hide show
  1. PrEditor-0.1.0.dist-info/LICENSE +165 -0
  2. PrEditor-0.1.0.dist-info/METADATA +212 -0
  3. PrEditor-0.1.0.dist-info/RECORD +149 -0
  4. {PrEditor-0.0.0.dev1.dist-info → PrEditor-0.1.0.dist-info}/WHEEL +1 -1
  5. PrEditor-0.1.0.dist-info/entry_points.txt +18 -0
  6. PrEditor-0.1.0.dist-info/top_level.txt +1 -0
  7. preditor/__init__.py +301 -0
  8. {blurdev → preditor}/__main__.py +13 -13
  9. preditor/about_module.py +166 -0
  10. preditor/cli.py +192 -0
  11. {blurdev → preditor}/contexts.py +119 -119
  12. preditor/cores/core.py +65 -0
  13. preditor/dccs/maya/PrEditor_maya.mod +2 -0
  14. preditor/dccs/maya/plug-ins/PrEditor_maya.py +108 -0
  15. preditor/debug.py +294 -0
  16. blurdev/scintilla/delayable_engine.py → preditor/delayable_engine/__init__.py +310 -299
  17. blurdev/scintilla/delayables/base.py → preditor/delayable_engine/delayables.py +85 -85
  18. {blurdev → preditor}/enum.py +728 -1003
  19. {blurdev → preditor}/gui/__init__.py +84 -125
  20. preditor/gui/app.py +159 -0
  21. {blurdev → preditor}/gui/codehighlighter.py +209 -219
  22. {blurdev → preditor}/gui/completer.py +226 -236
  23. {blurdev → preditor}/gui/console.py +801 -858
  24. {blurdev → preditor}/gui/dialog.py +200 -216
  25. preditor/gui/drag_tab_bar.py +190 -0
  26. preditor/gui/editor_chooser.py +57 -0
  27. {blurdev → preditor}/gui/errordialog.py +100 -97
  28. preditor/gui/fuzzy_search/fuzzy_search.py +93 -0
  29. preditor/gui/group_tab_widget/__init__.py +319 -0
  30. preditor/gui/group_tab_widget/grouped_tab_menu.py +35 -0
  31. preditor/gui/group_tab_widget/grouped_tab_models.py +108 -0
  32. preditor/gui/group_tab_widget/grouped_tab_widget.py +75 -0
  33. preditor/gui/group_tab_widget/one_tab_widget.py +54 -0
  34. preditor/gui/level_buttons.py +349 -0
  35. {blurdev → preditor}/gui/logger_window_handler.py +46 -45
  36. {blurdev → preditor}/gui/loggerwindow.py +1205 -1417
  37. {blurdev → preditor}/gui/newtabwidget.py +69 -68
  38. {blurdev → preditor}/gui/redmine_login_dialog.py +63 -61
  39. {blurdev → preditor}/gui/set_text_editor_path_dialog.py +59 -57
  40. preditor/gui/ui/editor_chooser.ui +93 -0
  41. {blurdev → preditor}/gui/ui/errordialog.ui +81 -81
  42. {blurdev → preditor}/gui/ui/loggerwindow.ui +1030 -864
  43. {blurdev → preditor}/gui/ui/redmine_login_dialog.ui +124 -124
  44. {blurdev → preditor}/gui/ui/set_text_editor_path_dialog.ui +149 -149
  45. {blurdev → preditor}/gui/window.py +183 -199
  46. preditor/gui/workbox_mixin.py +357 -0
  47. preditor/gui/workbox_text_edit.py +117 -0
  48. preditor/gui/workboxwidget.py +276 -0
  49. preditor/logging_config.py +52 -0
  50. preditor/osystem.py +401 -0
  51. preditor/plugins.py +65 -0
  52. preditor/prefs.py +74 -0
  53. {blurdev → preditor}/resource/environment_variables.html +26 -38
  54. {blurdev → preditor}/resource/error_mail.html +85 -85
  55. {blurdev → preditor}/resource/error_mail_inline.html +41 -41
  56. preditor/resource/img/README.md +7 -0
  57. preditor/resource/img/arrow_forward.png +0 -0
  58. preditor/resource/img/check-bold.png +0 -0
  59. preditor/resource/img/chevron-down.png +0 -0
  60. preditor/resource/img/chevron-up.png +0 -0
  61. preditor/resource/img/close-thick.png +0 -0
  62. preditor/resource/img/comment-edit.png +0 -0
  63. preditor/resource/img/content-copy.png +0 -0
  64. preditor/resource/img/content-cut.png +0 -0
  65. preditor/resource/img/content-duplicate.png +0 -0
  66. preditor/resource/img/content-paste.png +0 -0
  67. preditor/resource/img/content-save.png +0 -0
  68. preditor/resource/img/debug_disabled.png +0 -0
  69. preditor/resource/img/eye-check.png +0 -0
  70. preditor/resource/img/file-plus.png +0 -0
  71. preditor/resource/img/file-remove.png +0 -0
  72. preditor/resource/img/format-align-left.png +0 -0
  73. preditor/resource/img/format-letter-case-lower.png +0 -0
  74. preditor/resource/img/format-letter-case-upper.png +0 -0
  75. preditor/resource/img/information.png +0 -0
  76. preditor/resource/img/logging_critical.png +0 -0
  77. preditor/resource/img/logging_custom.png +0 -0
  78. preditor/resource/img/logging_debug.png +0 -0
  79. preditor/resource/img/logging_error.png +0 -0
  80. preditor/resource/img/logging_info.png +0 -0
  81. preditor/resource/img/logging_not_set.png +0 -0
  82. preditor/resource/img/logging_warning.png +0 -0
  83. preditor/resource/img/marker.png +0 -0
  84. preditor/resource/img/play.png +0 -0
  85. preditor/resource/img/playlist-play.png +0 -0
  86. preditor/resource/img/plus-minus-variant.png +0 -0
  87. preditor/resource/img/preditor.ico +0 -0
  88. preditor/resource/img/preditor.png +0 -0
  89. preditor/resource/img/preditor.psd +0 -0
  90. preditor/resource/img/preditor.svg +44 -0
  91. preditor/resource/img/restart.svg +1 -0
  92. preditor/resource/img/skip-forward-outline.png +0 -0
  93. preditor/resource/img/skip-next-outline.png +0 -0
  94. preditor/resource/img/skip-next.png +0 -0
  95. preditor/resource/img/skip-previous.png +0 -0
  96. preditor/resource/img/subdirectory-arrow-right.png +0 -0
  97. preditor/resource/img/text-search-variant.png +0 -0
  98. {blurdev → preditor}/resource/lang/python.json +30 -30
  99. preditor/resource/settings.ini +25 -0
  100. {blurdev/resource/stylesheet/logger → preditor/resource/stylesheet}/Bright.css +56 -61
  101. {blurdev → preditor}/resource/stylesheet/Dark.css +190 -132
  102. {blurdev → preditor}/scintilla/__init__.py +22 -28
  103. preditor/scintilla/delayables/__init__.py +11 -0
  104. {blurdev → preditor}/scintilla/delayables/smart_highlight.py +94 -93
  105. {blurdev → preditor}/scintilla/delayables/spell_check.py +173 -172
  106. {blurdev → preditor}/scintilla/documenteditor.py +2039 -2115
  107. {blurdev → preditor}/scintilla/finddialog.py +68 -81
  108. {blurdev → preditor}/scintilla/lang/__init__.py +80 -93
  109. {blurdev → preditor}/scintilla/lang/config/bash.ini +15 -15
  110. {blurdev → preditor}/scintilla/lang/config/batch.ini +14 -14
  111. {blurdev → preditor}/scintilla/lang/config/cpp.ini +19 -19
  112. {blurdev → preditor}/scintilla/lang/config/css.ini +19 -19
  113. {blurdev → preditor}/scintilla/lang/config/eyeonscript.ini +17 -17
  114. {blurdev → preditor}/scintilla/lang/config/html.ini +21 -21
  115. {blurdev → preditor}/scintilla/lang/config/javascript.ini +24 -24
  116. {blurdev → preditor}/scintilla/lang/config/lua.ini +16 -16
  117. {blurdev → preditor}/scintilla/lang/config/maxscript.ini +20 -20
  118. {blurdev → preditor}/scintilla/lang/config/mel.ini +18 -18
  119. {blurdev → preditor}/scintilla/lang/config/mu.ini +22 -22
  120. {blurdev → preditor}/scintilla/lang/config/nsi.ini +5 -5
  121. {blurdev → preditor}/scintilla/lang/config/perl.ini +19 -19
  122. {blurdev → preditor}/scintilla/lang/config/puppet.ini +19 -19
  123. {blurdev → preditor}/scintilla/lang/config/python.ini +28 -28
  124. {blurdev → preditor}/scintilla/lang/config/ruby.ini +19 -19
  125. {blurdev → preditor}/scintilla/lang/config/sql.ini +7 -7
  126. {blurdev → preditor}/scintilla/lang/config/xml.ini +21 -21
  127. {blurdev → preditor}/scintilla/lang/config/yaml.ini +18 -18
  128. {blurdev → preditor}/scintilla/lang/language.py +240 -250
  129. preditor/scintilla/lexers/__init__.py +0 -0
  130. {blurdev → preditor}/scintilla/lexers/cpplexer.py +21 -30
  131. {blurdev → preditor}/scintilla/lexers/javascriptlexer.py +25 -34
  132. {blurdev → preditor}/scintilla/lexers/maxscriptlexer.py +234 -253
  133. {blurdev → preditor}/scintilla/lexers/mellexer.py +368 -376
  134. {blurdev → preditor}/scintilla/lexers/mulexer.py +32 -41
  135. {blurdev → preditor}/scintilla/lexers/pythonlexer.py +41 -50
  136. {blurdev → preditor}/scintilla/ui/finddialog.ui +160 -160
  137. preditor/settings.py +71 -0
  138. preditor/stream/__init__.py +80 -0
  139. preditor/stream/director.py +56 -0
  140. preditor/stream/manager.py +74 -0
  141. preditor/streamhandler_helper.py +46 -0
  142. preditor/utils/__init__.py +0 -0
  143. preditor/utils/cute.py +30 -0
  144. preditor/utils/stylesheets.py +54 -0
  145. {blurdev → preditor}/version.py +5 -5
  146. preditor/weakref.py +363 -0
  147. PrEditor-0.0.0.dev1.dist-info/METADATA +0 -51
  148. PrEditor-0.0.0.dev1.dist-info/RECORD +0 -279
  149. PrEditor-0.0.0.dev1.dist-info/top_level.txt +0 -1
  150. blurdev/__init__.py +0 -356
  151. blurdev/cores/__init__.py +0 -98
  152. blurdev/cores/application.py +0 -26
  153. blurdev/cores/core.py +0 -634
  154. blurdev/debug.py +0 -593
  155. blurdev/external.py +0 -391
  156. blurdev/gui/level_buttons.py +0 -585
  157. blurdev/gui/workboxwidget.py +0 -205
  158. blurdev/logger.py +0 -238
  159. blurdev/osystem.py +0 -813
  160. blurdev/prefs.py +0 -33
  161. blurdev/protocols/__init__.py +0 -71
  162. blurdev/protocols/write_std_output_handler.py +0 -83
  163. blurdev/resource/designer_plugins.xml +0 -9
  164. blurdev/resource/error_email_old.html +0 -41
  165. blurdev/resource/img/add.png +0 -0
  166. blurdev/resource/img/ajax-loader.gif +0 -0
  167. blurdev/resource/img/application.png +0 -0
  168. blurdev/resource/img/applications.png +0 -0
  169. blurdev/resource/img/assburner.png +0 -0
  170. blurdev/resource/img/assfreezer.png +0 -0
  171. blurdev/resource/img/bar.gif +0 -0
  172. blurdev/resource/img/blank.png +0 -0
  173. blurdev/resource/img/blurdev.png +0 -0
  174. blurdev/resource/img/calendar_disabled.png +0 -0
  175. blurdev/resource/img/calendar_enabled.png +0 -0
  176. blurdev/resource/img/cancel.png +0 -0
  177. blurdev/resource/img/custom.png +0 -0
  178. blurdev/resource/img/debug_high.png +0 -0
  179. blurdev/resource/img/debug_low.png +0 -0
  180. blurdev/resource/img/debug_mid.png +0 -0
  181. blurdev/resource/img/debug_off.png +0 -0
  182. blurdev/resource/img/django.png +0 -0
  183. blurdev/resource/img/doc.png +0 -0
  184. blurdev/resource/img/edit.png +0 -0
  185. blurdev/resource/img/elemental.png +0 -0
  186. blurdev/resource/img/explore.png +0 -0
  187. blurdev/resource/img/favorite.png +0 -0
  188. blurdev/resource/img/file.png +0 -0
  189. blurdev/resource/img/folder.png +0 -0
  190. blurdev/resource/img/ide/add.png +0 -0
  191. blurdev/resource/img/ide/add_note.png +0 -0
  192. blurdev/resource/img/ide/arrow_down.png +0 -0
  193. blurdev/resource/img/ide/arrow_up.png +0 -0
  194. blurdev/resource/img/ide/check.png +0 -0
  195. blurdev/resource/img/ide/class.png +0 -0
  196. blurdev/resource/img/ide/clean.png +0 -0
  197. blurdev/resource/img/ide/clearlog.png +0 -0
  198. blurdev/resource/img/ide/close.png +0 -0
  199. blurdev/resource/img/ide/comment_add.png +0 -0
  200. blurdev/resource/img/ide/comment_remove.png +0 -0
  201. blurdev/resource/img/ide/comment_toggle.png +0 -0
  202. blurdev/resource/img/ide/console.png +0 -0
  203. blurdev/resource/img/ide/copy.png +0 -0
  204. blurdev/resource/img/ide/copylstrip.png +0 -0
  205. blurdev/resource/img/ide/cut.png +0 -0
  206. blurdev/resource/img/ide/edit.png +0 -0
  207. blurdev/resource/img/ide/find.png +0 -0
  208. blurdev/resource/img/ide/find_replace.png +0 -0
  209. blurdev/resource/img/ide/findnext.png +0 -0
  210. blurdev/resource/img/ide/findprev.png +0 -0
  211. blurdev/resource/img/ide/folder_find.png +0 -0
  212. blurdev/resource/img/ide/function.png +0 -0
  213. blurdev/resource/img/ide/git-bash.png +0 -0
  214. blurdev/resource/img/ide/git-gui.png +0 -0
  215. blurdev/resource/img/ide/gitk.png +0 -0
  216. blurdev/resource/img/ide/goto.png +0 -0
  217. blurdev/resource/img/ide/goto_def.png +0 -0
  218. blurdev/resource/img/ide/help.png +0 -0
  219. blurdev/resource/img/ide/highlighter.png +0 -0
  220. blurdev/resource/img/ide/lowercase.png +0 -0
  221. blurdev/resource/img/ide/newfile.png +0 -0
  222. blurdev/resource/img/ide/newfolder.png +0 -0
  223. blurdev/resource/img/ide/newproject.png +0 -0
  224. blurdev/resource/img/ide/newwizard.png +0 -0
  225. blurdev/resource/img/ide/open.png +0 -0
  226. blurdev/resource/img/ide/paste.png +0 -0
  227. blurdev/resource/img/ide/pdb_continue.png +0 -0
  228. blurdev/resource/img/ide/pdb_down.png +0 -0
  229. blurdev/resource/img/ide/pdb_next.png +0 -0
  230. blurdev/resource/img/ide/pdb_step.png +0 -0
  231. blurdev/resource/img/ide/pdb_up.png +0 -0
  232. blurdev/resource/img/ide/plus_minus.png +0 -0
  233. blurdev/resource/img/ide/preferences.png +0 -0
  234. blurdev/resource/img/ide/project_find.png +0 -0
  235. blurdev/resource/img/ide/python.png +0 -0
  236. blurdev/resource/img/ide/pyular.png +0 -0
  237. blurdev/resource/img/ide/qt.png +0 -0
  238. blurdev/resource/img/ide/quit.png +0 -0
  239. blurdev/resource/img/ide/redo.png +0 -0
  240. blurdev/resource/img/ide/refresh.png +0 -0
  241. blurdev/resource/img/ide/remove.png +0 -0
  242. blurdev/resource/img/ide/ruler.png +0 -0
  243. blurdev/resource/img/ide/run.png +0 -0
  244. blurdev/resource/img/ide/runall.png +0 -0
  245. blurdev/resource/img/ide/runallclear.png +0 -0
  246. blurdev/resource/img/ide/runselected.png +0 -0
  247. blurdev/resource/img/ide/runselectedclear.png +0 -0
  248. blurdev/resource/img/ide/save.png +0 -0
  249. blurdev/resource/img/ide/saveas.png +0 -0
  250. blurdev/resource/img/ide/sdk.png +0 -0
  251. blurdev/resource/img/ide/separator.png +0 -0
  252. blurdev/resource/img/ide/tabbed.png +0 -0
  253. blurdev/resource/img/ide/tile.png +0 -0
  254. blurdev/resource/img/ide/toolbar.png +0 -0
  255. blurdev/resource/img/ide/undo.png +0 -0
  256. blurdev/resource/img/ide/uppercase.png +0 -0
  257. blurdev/resource/img/ide/view_as.png +0 -0
  258. blurdev/resource/img/ide/windowed.png +0 -0
  259. blurdev/resource/img/ide.ico +0 -0
  260. blurdev/resource/img/ide.png +0 -0
  261. blurdev/resource/img/ide48.png +0 -0
  262. blurdev/resource/img/info.png +0 -0
  263. blurdev/resource/img/legacy tool.png +0 -0
  264. blurdev/resource/img/library.png +0 -0
  265. blurdev/resource/img/logger/about.png +0 -0
  266. blurdev/resource/img/logger/arrow_forward.png +0 -0
  267. blurdev/resource/img/logger/clear.png +0 -0
  268. blurdev/resource/img/logger/close.png +0 -0
  269. blurdev/resource/img/logger/debug_disabled.png +0 -0
  270. blurdev/resource/img/logger/debug_high.png +0 -0
  271. blurdev/resource/img/logger/debug_low.png +0 -0
  272. blurdev/resource/img/logger/debug_mid.png +0 -0
  273. blurdev/resource/img/logger/down.png +0 -0
  274. blurdev/resource/img/logger/find.png +0 -0
  275. blurdev/resource/img/logger/logging_critical.png +0 -0
  276. blurdev/resource/img/logger/logging_debug.png +0 -0
  277. blurdev/resource/img/logger/logging_error.png +0 -0
  278. blurdev/resource/img/logger/logging_info.png +0 -0
  279. blurdev/resource/img/logger/logging_not_set.png +0 -0
  280. blurdev/resource/img/logger/logging_warning.png +0 -0
  281. blurdev/resource/img/logger/next.png +0 -0
  282. blurdev/resource/img/logger/play.png +0 -0
  283. blurdev/resource/img/logger/playlist_play.png +0 -0
  284. blurdev/resource/img/logger/previous.png +0 -0
  285. blurdev/resource/img/logger/return.png +0 -0
  286. blurdev/resource/img/logger/save.png +0 -0
  287. blurdev/resource/img/logger/subdirectory_arrow_right.png +0 -0
  288. blurdev/resource/img/logger/up.png +0 -0
  289. blurdev/resource/img/lovebar.png +0 -0
  290. blurdev/resource/img/new.png +0 -0
  291. blurdev/resource/img/new_selected.png +0 -0
  292. blurdev/resource/img/node.png +0 -0
  293. blurdev/resource/img/ok.png +0 -0
  294. blurdev/resource/img/options.png +0 -0
  295. blurdev/resource/img/packages.png +0 -0
  296. blurdev/resource/img/preview/add.png +0 -0
  297. blurdev/resource/img/preview/brush.png +0 -0
  298. blurdev/resource/img/preview/delete.png +0 -0
  299. blurdev/resource/img/preview/delte.png +0 -0
  300. blurdev/resource/img/preview/fill.png +0 -0
  301. blurdev/resource/img/preview/layers.png +0 -0
  302. blurdev/resource/img/preview/media.png +0 -0
  303. blurdev/resource/img/preview/navigate.png +0 -0
  304. blurdev/resource/img/preview/pencil.png +0 -0
  305. blurdev/resource/img/preview/select.png +0 -0
  306. blurdev/resource/img/preview/type.png +0 -0
  307. blurdev/resource/img/preview/visible.png +0 -0
  308. blurdev/resource/img/project.png +0 -0
  309. blurdev/resource/img/python_logger.ico +0 -0
  310. blurdev/resource/img/python_logger.png +0 -0
  311. blurdev/resource/img/refresh.png +0 -0
  312. blurdev/resource/img/remove.png +0 -0
  313. blurdev/resource/img/reset.png +0 -0
  314. blurdev/resource/img/richtext/font_bold.png +0 -0
  315. blurdev/resource/img/richtext/font_italic.png +0 -0
  316. blurdev/resource/img/richtext/link_image.png +0 -0
  317. blurdev/resource/img/richtext/spell_check.png +0 -0
  318. blurdev/resource/img/richtext/unordered_list.png +0 -0
  319. blurdev/resource/img/save.png +0 -0
  320. blurdev/resource/img/savesettings.png +0 -0
  321. blurdev/resource/img/settings.png +0 -0
  322. blurdev/resource/img/tool.png +0 -0
  323. blurdev/resource/img/toolbarHandleHorizontal.png +0 -0
  324. blurdev/resource/img/toolbarHandleVertical.png +0 -0
  325. blurdev/resource/img/trash.png +0 -0
  326. blurdev/resource/img/trax.png +0 -0
  327. blurdev/resource/img/tree.png +0 -0
  328. blurdev/resource/img/treegrunt.ico +0 -0
  329. blurdev/resource/img/treegrunt.png +0 -0
  330. blurdev/resource/img/treegruntedit.png +0 -0
  331. blurdev/resource/img/user interface.png +0 -0
  332. blurdev/resource/img/warning.png +0 -0
  333. blurdev/resource/img/watermark.png +0 -0
  334. blurdev/resource/sdk/blurdev.sdk +0 -3
  335. blurdev/resource/settings.ini +0 -82
  336. blurdev/resource/softimage/BlurApplication.dll +0 -0
  337. blurdev/resource/softimage/BlurApplication64.dll +0 -0
  338. blurdev/resource/stylesheet/Carbon.css +0 -35
  339. blurdev/resource/stylesheet/logger/Dark.css +0 -62
  340. blurdev/resource/templ/py_comment.templ +0 -1
  341. blurdev/resource/templ/py_debug_raise_error.templ +0 -7
  342. blurdev/resource/templ/py_doc_string.templ +0 -10
  343. blurdev/resource/templ/py_header.templ +0 -9
  344. blurdev/resource/templ/py_line_comment.templ +0 -1
  345. blurdev/resource/templ/py_log_to_file.templ +0 -22
  346. blurdev/resource/templ/py_module_path.templ +0 -1
  347. blurdev/resource/templ/py_pyqt_core.templ +0 -1
  348. blurdev/resource/templ/py_pyqt_gui.templ +0 -1
  349. blurdev/resource/templ/py_splashscreen.templ +0 -6
  350. blurdev/resource/templ/py_testing_note.templ +0 -1
  351. blurdev/resource/templ/py_testing_note_end.templ +0 -1
  352. blurdev/resource/tools_environments.json +0 -72
  353. blurdev/resource/tools_environments.xml +0 -11
  354. blurdev/resource/tools_environments_linux.xml +0 -11
  355. blurdev/resource/tools_environments_offline.xml +0 -7
  356. blurdev/runtimes/__init__.py +0 -2
  357. blurdev/runtimes/logger.py +0 -44
  358. blurdev/scintilla/delayables/__init__.py +0 -9
  359. blurdev/settings.py +0 -312
  360. blurdev/utils/error.py +0 -389
  361. {blurdev/scintilla/lexers → preditor/cores}/__init__.py +0 -0
  362. {blurdev/utils → preditor/gui/fuzzy_search}/__init__.py +0 -0
  363. {blurdev → preditor}/resource/img/warning-big.png +0 -0
@@ -1,253 +1,234 @@
1
- ##
2
- # \namespace blurdev.scintilla.lexers.maxscriptlexer
3
- #
4
- # \remarks Defines a class for parsing maxscript files
5
- #
6
- # \author beta@blur.com
7
- # \author Blur Studio
8
- # \date 08/19/10
9
- #
10
-
11
- from __future__ import absolute_import
12
- from future.utils import iteritems
13
- from builtins import str as text
14
- import re
15
- from Qt.Qsci import QsciLexerCustom
16
-
17
- import sys
18
-
19
- py26orNewer = sys.hexversion >= 0x02060000
20
-
21
- MS_KEYWORDS = """
22
- if then else not and or key collect
23
- do while for in with where
24
- function fn rollout struct parameters attributes exit continue
25
- local global
26
- true false
27
- ok undefined unsupplied return
28
- filein open close flush include print
29
- """
30
-
31
-
32
- class MaxscriptLexer(QsciLexerCustom):
33
- # Items in this list will be highligheded using the color for self.SmartHighlight
34
- highlightedKeywords = ''
35
-
36
- def __init__(self, parent=None):
37
- QsciLexerCustom.__init__(self, parent)
38
- self._styles = {
39
- 0: 'Default',
40
- 1: 'Comment',
41
- 2: 'CommentLine',
42
- 3: 'Keyword',
43
- 4: 'Operator',
44
- 5: 'Number',
45
- 6: 'String',
46
- 7: 'SmartHighlight',
47
- }
48
-
49
- for key, value in iteritems(self._styles):
50
- setattr(self, value, key)
51
-
52
- def description(self, style):
53
- return self._styles.get(style, '')
54
-
55
- def defaultColor(self, style):
56
- from Qt.QtGui import QColor
57
- from Qt.QtCore import Qt
58
-
59
- if style in (self.Comment, self.CommentLine):
60
- return QColor(40, 160, 40)
61
-
62
- elif style in (self.Keyword, self.Operator):
63
- return QColor(Qt.blue)
64
-
65
- elif style == self.Number:
66
- return QColor(Qt.red)
67
-
68
- elif style == self.String:
69
- return QColor(180, 140, 30)
70
-
71
- return QsciLexerCustom.defaultColor(self, style)
72
-
73
- def defaultPaper(self, style):
74
- if style == self.SmartHighlight:
75
- from Qt.QtGui import QColor
76
-
77
- # Set the highlight color for this lexer
78
- return QColor(155, 255, 155)
79
- return super(MaxscriptLexer, self).defaultPaper(style)
80
-
81
- def font(self, style):
82
- font = super(MaxscriptLexer, self).font(style)
83
- if style in (self.Comment, self.CommentLine):
84
- font.setFamily('Arial Bold')
85
- return font
86
-
87
- def keywords(self, style):
88
- if style == self.Keyword:
89
- return MS_KEYWORDS
90
- if style == self.SmartHighlight:
91
- return self.highlightedKeywords
92
- return QsciLexerCustom.keywords(self, style)
93
-
94
- def processChunk(self, chunk, lastState, keywords):
95
- # process the length of the chunk
96
- if py26orNewer:
97
- if isinstance(chunk, bytearray):
98
- chunk = chunk.decode('utf8')
99
- length = len(chunk)
100
-
101
- # check to see if our last state was a block comment
102
- if lastState == self.Comment:
103
- pos = chunk.find('*/')
104
- if pos != -1:
105
- self.setStyling(pos + 2, self.Comment)
106
- return self.processChunk(chunk[pos + 2 :], self.Default, keywords)
107
- else:
108
- self.setStyling(length, self.Comment)
109
- return (self.Comment, 0)
110
-
111
- # check to see if our last state was a string
112
- elif lastState == self.String:
113
- # remove special case backslashes
114
- while r'\\' in chunk:
115
- chunk = chunk.replace(r'\\', '||')
116
-
117
- # remove special case strings
118
- while r'\"' in chunk:
119
- chunk = chunk.replace(r'\"', r"\'")
120
-
121
- pos = chunk.find('"')
122
- if pos != -1:
123
- self.setStyling(pos + 1, self.String)
124
- return self.processChunk(chunk[pos + 1 :], self.Default, keywords)
125
- else:
126
- self.setStyling(length, self.String)
127
- return (self.String, 0)
128
-
129
- # otherwise, process a default chunk
130
- else:
131
- blockpos = chunk.find('/*')
132
- linepos = chunk.find('--')
133
- strpos = chunk.find('"')
134
- order = [blockpos, linepos, strpos]
135
- order.sort()
136
-
137
- # any of the above symbols will affect how a symbol following it is treated,
138
- # so make sure we process in the proper order
139
- for i in order:
140
- if i == -1:
141
- continue
142
-
143
- # process a string
144
- if i == strpos:
145
- state, folding = self.processChunk(chunk[:i], lastState, keywords)
146
- self.setStyling(1, self.String)
147
- newstate, newfolding = self.processChunk(
148
- chunk[i + 1 :], self.String, keywords
149
- )
150
- return (newstate, newfolding + folding)
151
-
152
- # process a line comment
153
- elif i == linepos:
154
- state, folding = self.processChunk(chunk[:i], lastState, keywords)
155
- self.setStyling(length - i, self.CommentLine)
156
- return (self.Default, folding)
157
-
158
- # process a block comment
159
- elif i == blockpos:
160
- state, folding = self.processChunk(chunk[:i], lastState, keywords)
161
- self.setStyling(2, self.Comment)
162
- newstate, newfolding = self.processChunk(
163
- chunk[i + 2 :], self.Comment, keywords
164
- )
165
- return (newstate, newfolding + folding)
166
-
167
- # otherwise, we are processing a default set of text whose syntaxing is
168
- # irrelavent from the previous one TODO: this needs to handle QStrings.
169
- # However I do not thing QStrings are the problem, its more likely a
170
- # bytearray problem. the conversion at the start of this function may have
171
- # resolved it.
172
- results = self.chunkRegex.findall(chunk)
173
- for space, kwd in results:
174
- if not (space or kwd):
175
- break
176
-
177
- self.setStyling(len(space), self.Default)
178
-
179
- if kwd.lower() in self.hlkwords:
180
- self.setStyling(len(kwd), self.SmartHighlight)
181
- elif kwd.lower() in keywords:
182
- self.setStyling(len(kwd), self.Keyword)
183
- else:
184
- self.setStyling(len(kwd), self.Default)
185
-
186
- # in this context, look for opening and closing parenthesis which will
187
- # determine folding scope
188
- return (self.Default, chunk.count('(') - chunk.count(')'))
189
-
190
- def styleText(self, start, end):
191
- editor = self.editor()
192
- if not editor:
193
- return
194
-
195
- # scintilla works with encoded bytes, not decoded characters
196
- # this matters if the source contains non-ascii characters and
197
- # a multi-byte encoding is used (e.g. utf-8)
198
- source = ''
199
- if end > editor.length():
200
- end = editor.length()
201
-
202
- # define commonly used methods
203
- from Qt.Qsci import QsciScintilla
204
-
205
- SCI = editor.SendScintilla
206
- SETFOLDLEVEL = QsciScintilla.SCI_SETFOLDLEVEL
207
- HEADERFLAG = QsciScintilla.SC_FOLDLEVELHEADERFLAG
208
- CURRFOLDLEVEL = QsciScintilla.SC_FOLDLEVELBASE
209
-
210
- if end > start:
211
- if py26orNewer:
212
- # faster when styling big files, but needs python 2.6
213
- source = bytearray(end - start)
214
- editor.SendScintilla(editor.SCI_GETTEXTRANGE, start, end, source)
215
- else:
216
- source = text(editor.text()).encode('utf-8')[start:end]
217
-
218
- if not source:
219
- return
220
- self.parent().blockSignals(True)
221
-
222
- # the line index will also need to implement folding
223
- index = editor.SendScintilla(editor.SCI_LINEFROMPOSITION, start)
224
- if index > 0:
225
- # the previous state may be needed for multi-line styling
226
- pos = editor.SendScintilla(editor.SCI_GETLINEENDPOSITION, index - 1)
227
- lastState = editor.SendScintilla(editor.SCI_GETSTYLEAT, pos)
228
- else:
229
- lastState = self.Default
230
-
231
- self.startStyling(start, 0x1F)
232
-
233
- # cache objects used by processChunk that do not need updated every time it is
234
- # called
235
- self.hlkwords = set(text(self.keywords(self.SmartHighlight)).lower().split())
236
- self.chunkRegex = re.compile('([^A-Za-z0-9]*)([A-Za-z0-9]*)')
237
- kwrds = set(MS_KEYWORDS.split())
238
-
239
- # scintilla always asks to style whole lines
240
- for line in source.splitlines(True):
241
- lastState, folding = self.processChunk(line, lastState, kwrds)
242
-
243
- # open folding levels
244
- if folding > 0:
245
- SCI(SETFOLDLEVEL, index, CURRFOLDLEVEL | HEADERFLAG)
246
- CURRFOLDLEVEL += folding
247
- else:
248
- SCI(SETFOLDLEVEL, index, CURRFOLDLEVEL)
249
- CURRFOLDLEVEL += folding
250
-
251
- # folding implementation goes here
252
- index += 1
253
- self.parent().blockSignals(False)
1
+ from __future__ import absolute_import
2
+
3
+ import re
4
+ from builtins import str as text
5
+
6
+ from future.utils import iteritems
7
+ from PyQt5.Qsci import QsciLexerCustom, QsciScintilla
8
+
9
+ MS_KEYWORDS = """
10
+ if then else not and or key collect
11
+ do while for in with where
12
+ function fn rollout struct parameters attributes exit continue
13
+ local global
14
+ true false
15
+ ok undefined unsupplied return
16
+ filein open close flush include print
17
+ """
18
+
19
+
20
+ class MaxscriptLexer(QsciLexerCustom):
21
+ # Items in this list will be highligheded using the color for self.SmartHighlight
22
+ highlightedKeywords = ''
23
+
24
+ def __init__(self, parent=None):
25
+ QsciLexerCustom.__init__(self, parent)
26
+ self._styles = {
27
+ 0: 'Default',
28
+ 1: 'Comment',
29
+ 2: 'CommentLine',
30
+ 3: 'Keyword',
31
+ 4: 'Operator',
32
+ 5: 'Number',
33
+ 6: 'String',
34
+ 7: 'SmartHighlight',
35
+ }
36
+
37
+ for key, value in iteritems(self._styles):
38
+ setattr(self, value, key)
39
+
40
+ def description(self, style):
41
+ return self._styles.get(style, '')
42
+
43
+ def defaultColor(self, style):
44
+ from Qt.QtCore import Qt
45
+ from Qt.QtGui import QColor
46
+
47
+ if style in (self.Comment, self.CommentLine):
48
+ return QColor(40, 160, 40)
49
+
50
+ elif style in (self.Keyword, self.Operator):
51
+ return QColor(Qt.blue)
52
+
53
+ elif style == self.Number:
54
+ return QColor(Qt.red)
55
+
56
+ elif style == self.String:
57
+ return QColor(180, 140, 30)
58
+
59
+ return QsciLexerCustom.defaultColor(self, style)
60
+
61
+ def defaultPaper(self, style):
62
+ if style == self.SmartHighlight:
63
+ from Qt.QtGui import QColor
64
+
65
+ # Set the highlight color for this lexer
66
+ return QColor(155, 255, 155)
67
+ return super(MaxscriptLexer, self).defaultPaper(style)
68
+
69
+ def font(self, style):
70
+ font = super(MaxscriptLexer, self).font(style)
71
+ if style in (self.Comment, self.CommentLine):
72
+ font.setFamily('Arial Bold')
73
+ return font
74
+
75
+ def keywords(self, style):
76
+ if style == self.Keyword:
77
+ return MS_KEYWORDS
78
+ if style == self.SmartHighlight:
79
+ return self.highlightedKeywords
80
+ return QsciLexerCustom.keywords(self, style)
81
+
82
+ def processChunk(self, chunk, lastState, keywords):
83
+ # process the length of the chunk
84
+ if isinstance(chunk, bytearray):
85
+ chunk = chunk.decode('utf8')
86
+ length = len(chunk)
87
+
88
+ # check to see if our last state was a block comment
89
+ if lastState == self.Comment:
90
+ pos = chunk.find('*/')
91
+ if pos != -1:
92
+ self.setStyling(pos + 2, self.Comment)
93
+ return self.processChunk(chunk[pos + 2 :], self.Default, keywords)
94
+ else:
95
+ self.setStyling(length, self.Comment)
96
+ return (self.Comment, 0)
97
+
98
+ # check to see if our last state was a string
99
+ elif lastState == self.String:
100
+ # remove special case backslashes
101
+ while r'\\' in chunk:
102
+ chunk = chunk.replace(r'\\', '||')
103
+
104
+ # remove special case strings
105
+ while r'\"' in chunk:
106
+ chunk = chunk.replace(r'\"', r"\'")
107
+
108
+ pos = chunk.find('"')
109
+ if pos != -1:
110
+ self.setStyling(pos + 1, self.String)
111
+ return self.processChunk(chunk[pos + 1 :], self.Default, keywords)
112
+ else:
113
+ self.setStyling(length, self.String)
114
+ return (self.String, 0)
115
+
116
+ # otherwise, process a default chunk
117
+ else:
118
+ blockpos = chunk.find('/*')
119
+ linepos = chunk.find('--')
120
+ strpos = chunk.find('"')
121
+ order = [blockpos, linepos, strpos]
122
+ order.sort()
123
+
124
+ # any of the above symbols will affect how a symbol following it is treated,
125
+ # so make sure we process in the proper order
126
+ for i in order:
127
+ if i == -1:
128
+ continue
129
+
130
+ # process a string
131
+ if i == strpos:
132
+ state, folding = self.processChunk(chunk[:i], lastState, keywords)
133
+ self.setStyling(1, self.String)
134
+ newstate, newfolding = self.processChunk(
135
+ chunk[i + 1 :], self.String, keywords
136
+ )
137
+ return (newstate, newfolding + folding)
138
+
139
+ # process a line comment
140
+ elif i == linepos:
141
+ state, folding = self.processChunk(chunk[:i], lastState, keywords)
142
+ self.setStyling(length - i, self.CommentLine)
143
+ return (self.Default, folding)
144
+
145
+ # process a block comment
146
+ elif i == blockpos:
147
+ state, folding = self.processChunk(chunk[:i], lastState, keywords)
148
+ self.setStyling(2, self.Comment)
149
+ newstate, newfolding = self.processChunk(
150
+ chunk[i + 2 :], self.Comment, keywords
151
+ )
152
+ return (newstate, newfolding + folding)
153
+
154
+ # otherwise, we are processing a default set of text whose syntaxing is
155
+ # irrelavent from the previous one TODO: this needs to handle QStrings.
156
+ # However I do not thing QStrings are the problem, its more likely a
157
+ # bytearray problem. the conversion at the start of this function may have
158
+ # resolved it.
159
+ results = self.chunkRegex.findall(chunk)
160
+ for space, kwd in results:
161
+ if not (space or kwd):
162
+ break
163
+
164
+ self.setStyling(len(space), self.Default)
165
+
166
+ if kwd.lower() in self.hlkwords:
167
+ self.setStyling(len(kwd), self.SmartHighlight)
168
+ elif kwd.lower() in keywords:
169
+ self.setStyling(len(kwd), self.Keyword)
170
+ else:
171
+ self.setStyling(len(kwd), self.Default)
172
+
173
+ # in this context, look for opening and closing parenthesis which will
174
+ # determine folding scope
175
+ return (self.Default, chunk.count('(') - chunk.count(')'))
176
+
177
+ def styleText(self, start, end):
178
+ editor = self.editor()
179
+ if not editor:
180
+ return
181
+
182
+ # scintilla works with encoded bytes, not decoded characters
183
+ # this matters if the source contains non-ascii characters and
184
+ # a multi-byte encoding is used (e.g. utf-8)
185
+ source = ''
186
+ if end > editor.length():
187
+ end = editor.length()
188
+
189
+ # define commonly used methods
190
+ SCI = editor.SendScintilla
191
+ SETFOLDLEVEL = QsciScintilla.SCI_SETFOLDLEVEL
192
+ HEADERFLAG = QsciScintilla.SC_FOLDLEVELHEADERFLAG
193
+ CURRFOLDLEVEL = QsciScintilla.SC_FOLDLEVELBASE
194
+
195
+ if end > start:
196
+ source = bytearray(end - start)
197
+ editor.SendScintilla(editor.SCI_GETTEXTRANGE, start, end, source)
198
+
199
+ if not source:
200
+ return
201
+ self.parent().blockSignals(True)
202
+
203
+ # the line index will also need to implement folding
204
+ index = editor.SendScintilla(editor.SCI_LINEFROMPOSITION, start)
205
+ if index > 0:
206
+ # the previous state may be needed for multi-line styling
207
+ pos = editor.SendScintilla(editor.SCI_GETLINEENDPOSITION, index - 1)
208
+ lastState = editor.SendScintilla(editor.SCI_GETSTYLEAT, pos)
209
+ else:
210
+ lastState = self.Default
211
+
212
+ self.startStyling(start, 0x1F)
213
+
214
+ # cache objects used by processChunk that do not need updated every time it is
215
+ # called
216
+ self.hlkwords = set(text(self.keywords(self.SmartHighlight)).lower().split())
217
+ self.chunkRegex = re.compile('([^A-Za-z0-9]*)([A-Za-z0-9]*)')
218
+ kwrds = set(MS_KEYWORDS.split())
219
+
220
+ # scintilla always asks to style whole lines
221
+ for line in source.splitlines(True):
222
+ lastState, folding = self.processChunk(line, lastState, kwrds)
223
+
224
+ # open folding levels
225
+ if folding > 0:
226
+ SCI(SETFOLDLEVEL, index, CURRFOLDLEVEL | HEADERFLAG)
227
+ CURRFOLDLEVEL += folding
228
+ else:
229
+ SCI(SETFOLDLEVEL, index, CURRFOLDLEVEL)
230
+ CURRFOLDLEVEL += folding
231
+
232
+ # folding implementation goes here
233
+ index += 1
234
+ self.parent().blockSignals(False)