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,172 +1,173 @@
1
- from __future__ import print_function
2
-
3
- from __future__ import absolute_import
4
- import logging
5
- import re
6
- import string
7
-
8
- from Qt.QtCore import Qt
9
- from Qt.QtGui import QColor
10
- from Qt.Qsci import QsciScintilla
11
- from . import RangeDelayable
12
- from .. import lang
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
-
17
- try: # noqa: C901
18
- import aspell
19
- except ImportError:
20
- # if we can't import aspell don't define the SpellCheckDelayable class
21
- logger.debug('Unable to import aspell')
22
- else:
23
-
24
- class SpellCheckDelayable(RangeDelayable):
25
- """Spell check some text in the document.
26
-
27
- IF the document is not visible, the spell check will be skipped.
28
-
29
- Loop Args:
30
- start_pos (int): The document position to start spell checking.
31
- end_pos (int or None): The document position to stop spell checking.
32
- If None, then check to the end of the document.
33
- """
34
-
35
- indicator_number = 31
36
- key = 'spell_check'
37
-
38
- def __init__(self, engine):
39
- super(SpellCheckDelayable, self).__init__(engine)
40
- self.chunk_re = re.compile('([^A-Za-z0-9]*)([A-Za-z0-9]*)')
41
- self.camel_case_re = re.compile(
42
- '.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)'
43
- )
44
-
45
- def add_document(self, document):
46
- # Create the speller for the document
47
- document.__speller__ = aspell.Speller()
48
-
49
- # https://www.scintilla.org/ScintillaDox.html#SCI_INDICSETSTYLE
50
- # https://qscintilla.com/#clickable_text/indicators
51
- document.indicatorDefine(
52
- QsciScintilla.SquiggleLowIndicator, self.indicator_number
53
- )
54
- document.SendScintilla(
55
- QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
56
- )
57
- document.setIndicatorForegroundColor(QColor(Qt.red), self.indicator_number)
58
-
59
- document.SCN_MODIFIED.connect(document.onTextModified)
60
-
61
- # Update __speller__ dictionary with programming language words
62
- # and force spellcheck of the document
63
- self.reset_session(document)
64
-
65
- def camel_case_split(self, identifier):
66
- return [m.group(0) for m in self.camel_case_re.finditer(identifier)]
67
-
68
- def clear_markings(self, document):
69
- """Remove markings made by this Delayable for the given document.
70
-
71
- Args:
72
- document (blurdev.scintilla.documenteditor.DocumentEditor): The document
73
- to clear spell check markings from.
74
- """
75
- document.SendScintilla(
76
- QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
77
- )
78
- document.SendScintilla(
79
- QsciScintilla.SCI_INDICATORCLEARRANGE, 0, len(document.text())
80
- )
81
-
82
- def loop(self, document, start_pos, end_pos):
83
- # If end_pos is None, use the whole document
84
- end_pos = len(document.text()) if end_pos is None else end_pos
85
- match = next(self.chunk_re.finditer(document.text(start_pos, end_pos)))
86
- if match:
87
- start = start_pos
88
- space, result = tuple(match.groups())
89
- if space:
90
- # If the user inserted space between two words, that space
91
- # will still be marked as incorrect. Clear its indicator.
92
- document.SendScintilla(
93
- QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
94
- )
95
- document.SendScintilla(
96
- QsciScintilla.SCI_INDICATORCLEARRANGE, start, len(space)
97
- )
98
- start += len(space)
99
- for word in self.camel_case_split(result):
100
- length_word = len(word)
101
- if any(
102
- letter in string.digits for letter in word
103
- ) or document.__speller__.check(word):
104
- document.SendScintilla(
105
- QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
106
- )
107
- document.SendScintilla(
108
- QsciScintilla.SCI_INDICATORCLEARRANGE, start, length_word
109
- )
110
- else:
111
- document.SendScintilla(
112
- QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
113
- )
114
- document.SendScintilla(
115
- QsciScintilla.SCI_INDICATORFILLRANGE, start, length_word
116
- )
117
- start += length_word
118
-
119
- if start < end_pos:
120
- # There is more text to process
121
- return (start, end_pos)
122
-
123
- return
124
-
125
- def remove_document(self, document):
126
- try:
127
- document.SCN_MODIFIED.disconnect(document.onTextModified)
128
- except TypeError:
129
- pass
130
-
131
- self.clear_markings(document)
132
-
133
- def reset_session(self, document):
134
- """Resets the speller dictionary and adds document language specific words"""
135
- if document.__speller__ is None:
136
- return
137
- elif not document.lexer() or not document._language:
138
- # Force spellcheck of the documents
139
- self.engine.enqueue(document, self.key, 0, None)
140
- return
141
-
142
- keywords = ''
143
- language = lang.byName(document._language)
144
- max_int = {
145
- key for _, keys in language.lexerColorTypes().items() for key in keys
146
- }
147
- # The SQL lexer returns an empty maxEnumIntList
148
- max_int = max(max_int) if max_int else 0
149
- for i in range(max_int):
150
- lexer_keywords = document.lexer().keywords(i)
151
- if lexer_keywords:
152
- keywords += ' ' + lexer_keywords
153
- document.__speller__.clearSession()
154
-
155
- if not keywords:
156
- return
157
-
158
- for keyword in keywords.split():
159
- # Split along whitespace
160
- # Convert '-' to '_' because aspell doesn't process them
161
- keyword = keyword.replace('-', '_')
162
- # Strip '_' because aspell doesn't process them
163
- keyword = keyword.strip('_')
164
- # Remove non-alpha chars because aspell doesn't process them
165
- keyword = ''.join(i for i in keyword if i.isalpha())
166
- for word in keyword.split('_'):
167
- # Split along '_' because aspell doesn't process them
168
- if '' != word:
169
- document.__speller__.addtoSession(word)
170
-
171
- # Force spellcheck of the documents
172
- self.engine.enqueue(document, self.key, 0, None)
1
+ from __future__ import absolute_import, print_function
2
+
3
+ import logging
4
+ import re
5
+ import string
6
+
7
+ from PyQt5.Qsci import QsciScintilla
8
+ from Qt.QtCore import Qt
9
+ from Qt.QtGui import QColor
10
+
11
+ from ...delayable_engine.delayables import RangeDelayable
12
+ from .. import lang
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ try: # noqa: C901
18
+ import aspell
19
+ except ImportError:
20
+ # if we can't import aspell don't define the SpellCheckDelayable class
21
+ logger.debug('Unable to import aspell')
22
+ else:
23
+
24
+ class SpellCheckDelayable(RangeDelayable):
25
+ """Spell check some text in the document.
26
+
27
+ IF the document is not visible, the spell check will be skipped.
28
+
29
+ Loop Args:
30
+ start_pos (int): The document position to start spell checking.
31
+ end_pos (int or None): The document position to stop spell checking.
32
+ If None, then check to the end of the document.
33
+ """
34
+
35
+ indicator_number = 31
36
+ key = 'spell_check'
37
+
38
+ def __init__(self, engine):
39
+ super(SpellCheckDelayable, self).__init__(engine)
40
+ self.chunk_re = re.compile('([^A-Za-z0-9]*)([A-Za-z0-9]*)')
41
+ self.camel_case_re = re.compile(
42
+ '.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)'
43
+ )
44
+
45
+ def add_document(self, document):
46
+ # Create the speller for the document
47
+ document.__speller__ = aspell.Speller()
48
+
49
+ # https://www.scintilla.org/ScintillaDox.html#SCI_INDICSETSTYLE
50
+ # https://qscintilla.com/#clickable_text/indicators
51
+ document.indicatorDefine(
52
+ QsciScintilla.SquiggleLowIndicator, self.indicator_number
53
+ )
54
+ document.SendScintilla(
55
+ QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
56
+ )
57
+ document.setIndicatorForegroundColor(QColor(Qt.red), self.indicator_number)
58
+
59
+ document.SCN_MODIFIED.connect(document.onTextModified)
60
+
61
+ # Update __speller__ dictionary with programming language words
62
+ # and force spellcheck of the document
63
+ self.reset_session(document)
64
+
65
+ def camel_case_split(self, identifier):
66
+ return [m.group(0) for m in self.camel_case_re.finditer(identifier)]
67
+
68
+ def clear_markings(self, document):
69
+ """Remove markings made by this Delayable for the given document.
70
+
71
+ Args:
72
+ document (blurdev.scintilla.documenteditor.DocumentEditor): The document
73
+ to clear spell check markings from.
74
+ """
75
+ document.SendScintilla(
76
+ QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
77
+ )
78
+ document.SendScintilla(
79
+ QsciScintilla.SCI_INDICATORCLEARRANGE, 0, len(document.text())
80
+ )
81
+
82
+ def loop(self, document, start_pos, end_pos):
83
+ # If end_pos is None, use the whole document
84
+ end_pos = len(document.text()) if end_pos is None else end_pos
85
+ match = next(self.chunk_re.finditer(document.text(start_pos, end_pos)))
86
+ if match:
87
+ start = start_pos
88
+ space, result = tuple(match.groups())
89
+ if space:
90
+ # If the user inserted space between two words, that space
91
+ # will still be marked as incorrect. Clear its indicator.
92
+ document.SendScintilla(
93
+ QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
94
+ )
95
+ document.SendScintilla(
96
+ QsciScintilla.SCI_INDICATORCLEARRANGE, start, len(space)
97
+ )
98
+ start += len(space)
99
+ for word in self.camel_case_split(result):
100
+ length_word = len(word)
101
+ if any(
102
+ letter in string.digits for letter in word
103
+ ) or document.__speller__.check(word):
104
+ document.SendScintilla(
105
+ QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
106
+ )
107
+ document.SendScintilla(
108
+ QsciScintilla.SCI_INDICATORCLEARRANGE, start, length_word
109
+ )
110
+ else:
111
+ document.SendScintilla(
112
+ QsciScintilla.SCI_SETINDICATORCURRENT, self.indicator_number
113
+ )
114
+ document.SendScintilla(
115
+ QsciScintilla.SCI_INDICATORFILLRANGE, start, length_word
116
+ )
117
+ start += length_word
118
+
119
+ if start < end_pos:
120
+ # There is more text to process
121
+ return (start, end_pos)
122
+
123
+ return
124
+
125
+ def remove_document(self, document):
126
+ try:
127
+ document.SCN_MODIFIED.disconnect(document.onTextModified)
128
+ except TypeError:
129
+ pass
130
+
131
+ self.clear_markings(document)
132
+
133
+ def reset_session(self, document):
134
+ """Resets the speller dictionary and adds document language
135
+ specific words"""
136
+ if document.__speller__ is None:
137
+ return
138
+ elif not document.lexer() or not document._language:
139
+ # Force spellcheck of the documents
140
+ self.engine.enqueue(document, self.key, 0, None)
141
+ return
142
+
143
+ keywords = ''
144
+ language = lang.byName(document._language)
145
+ max_int = {
146
+ key for _, keys in language.lexerColorTypes().items() for key in keys
147
+ }
148
+ # The SQL lexer returns an empty maxEnumIntList
149
+ max_int = max(max_int) if max_int else 0
150
+ for i in range(max_int):
151
+ lexer_keywords = document.lexer().keywords(i)
152
+ if lexer_keywords:
153
+ keywords += ' ' + lexer_keywords
154
+ document.__speller__.clearSession()
155
+
156
+ if not keywords:
157
+ return
158
+
159
+ for keyword in keywords.split():
160
+ # Split along whitespace
161
+ # Convert '-' to '_' because aspell doesn't process them
162
+ keyword = keyword.replace('-', '_')
163
+ # Strip '_' because aspell doesn't process them
164
+ keyword = keyword.strip('_')
165
+ # Remove non-alpha chars because aspell doesn't process them
166
+ keyword = ''.join(i for i in keyword if i.isalpha())
167
+ for word in keyword.split('_'):
168
+ # Split along '_' because aspell doesn't process them
169
+ if '' != word:
170
+ document.__speller__.addtoSession(word)
171
+
172
+ # Force spellcheck of the documents
173
+ self.engine.enqueue(document, self.key, 0, None)