wxPython 4.3.2__cp315-cp315-win_arm64.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.
Files changed (471) hide show
  1. wx/WebView2Loader.dll +0 -0
  2. wx/__init__.py +22 -0
  3. wx/__init__.pyi +10 -0
  4. wx/__version__.py +9 -0
  5. wx/__version__.pyi +15 -0
  6. wx/_adv.cp315-win_arm64.pyd +0 -0
  7. wx/_aui.cp315-win_arm64.pyd +0 -0
  8. wx/_core.cp315-win_arm64.pyd +0 -0
  9. wx/_dataview.cp315-win_arm64.pyd +0 -0
  10. wx/_glcanvas.cp315-win_arm64.pyd +0 -0
  11. wx/_grid.cp315-win_arm64.pyd +0 -0
  12. wx/_html.cp315-win_arm64.pyd +0 -0
  13. wx/_html2.cp315-win_arm64.pyd +0 -0
  14. wx/_media.cp315-win_arm64.pyd +0 -0
  15. wx/_msw.cp315-win_arm64.pyd +0 -0
  16. wx/_propgrid.cp315-win_arm64.pyd +0 -0
  17. wx/_ribbon.cp315-win_arm64.pyd +0 -0
  18. wx/_richtext.cp315-win_arm64.pyd +0 -0
  19. wx/_stc.cp315-win_arm64.pyd +0 -0
  20. wx/_xml.cp315-win_arm64.pyd +0 -0
  21. wx/_xrc.cp315-win_arm64.pyd +0 -0
  22. wx/adv.py +127 -0
  23. wx/adv.pyi +5931 -0
  24. wx/aui.py +70 -0
  25. wx/aui.pyi +4805 -0
  26. wx/core.py +3417 -0
  27. wx/core.pyi +62949 -0
  28. wx/dataview.py +176 -0
  29. wx/dataview.pyi +3828 -0
  30. wx/gizmos.py +18 -0
  31. wx/glcanvas.py +13 -0
  32. wx/glcanvas.pyi +544 -0
  33. wx/grid.py +237 -0
  34. wx/grid.pyi +5678 -0
  35. wx/html.py +38 -0
  36. wx/html.pyi +3283 -0
  37. wx/html2.py +46 -0
  38. wx/html2.pyi +1301 -0
  39. wx/include/wxPython/sip.h +1938 -0
  40. wx/include/wxPython/wxpy_api.h +418 -0
  41. wx/lib/CDate.py +201 -0
  42. wx/lib/ClickableHtmlWindow.py +57 -0
  43. wx/lib/__init__.py +0 -0
  44. wx/lib/activex.py +178 -0
  45. wx/lib/activexwrapper.py +153 -0
  46. wx/lib/agw/__init__.py +128 -0
  47. wx/lib/agw/advancedsplash.py +563 -0
  48. wx/lib/agw/aquabutton.py +1127 -0
  49. wx/lib/agw/artmanager.py +2110 -0
  50. wx/lib/agw/aui/__init__.py +295 -0
  51. wx/lib/agw/aui/aui_constants.py +2616 -0
  52. wx/lib/agw/aui/aui_switcherdialog.py +1232 -0
  53. wx/lib/agw/aui/aui_utilities.py +648 -0
  54. wx/lib/agw/aui/auibar.py +4045 -0
  55. wx/lib/agw/aui/auibook.py +6288 -0
  56. wx/lib/agw/aui/dockart.py +1198 -0
  57. wx/lib/agw/aui/framemanager.py +10485 -0
  58. wx/lib/agw/aui/tabart.py +2749 -0
  59. wx/lib/agw/aui/tabmdi.py +679 -0
  60. wx/lib/agw/balloontip.py +1157 -0
  61. wx/lib/agw/buttonpanel.py +2787 -0
  62. wx/lib/agw/cubecolourdialog.py +3529 -0
  63. wx/lib/agw/customtreectrl.py +9908 -0
  64. wx/lib/agw/data/ShortcutEditor_1.png +0 -0
  65. wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
  66. wx/lib/agw/data/ShortcutEditor_2.png +0 -0
  67. wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
  68. wx/lib/agw/data/ShortcutEditor_3.png +0 -0
  69. wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
  70. wx/lib/agw/data/ShortcutEditor_4.png +0 -0
  71. wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
  72. wx/lib/agw/data/default_help_text.html +105 -0
  73. wx/lib/agw/flatmenu.py +7392 -0
  74. wx/lib/agw/flatnotebook.py +6669 -0
  75. wx/lib/agw/floatspin.py +1820 -0
  76. wx/lib/agw/fmcustomizedlg.py +535 -0
  77. wx/lib/agw/fmresources.py +407 -0
  78. wx/lib/agw/foldpanelbar.py +2282 -0
  79. wx/lib/agw/fourwaysplitter.py +1130 -0
  80. wx/lib/agw/genericmessagedialog.py +1549 -0
  81. wx/lib/agw/gradientbutton.py +731 -0
  82. wx/lib/agw/hyperlink.py +664 -0
  83. wx/lib/agw/hypertreelist.py +5756 -0
  84. wx/lib/agw/infobar.py +885 -0
  85. wx/lib/agw/knobctrl.py +944 -0
  86. wx/lib/agw/labelbook.py +3028 -0
  87. wx/lib/agw/multidirdialog.py +581 -0
  88. wx/lib/agw/peakmeter.py +1028 -0
  89. wx/lib/agw/persist/__init__.py +188 -0
  90. wx/lib/agw/persist/persist_constants.py +283 -0
  91. wx/lib/agw/persist/persist_handlers.py +2614 -0
  92. wx/lib/agw/persist/persistencemanager.py +863 -0
  93. wx/lib/agw/piectrl.py +1082 -0
  94. wx/lib/agw/pybusyinfo.py +399 -0
  95. wx/lib/agw/pycollapsiblepane.py +940 -0
  96. wx/lib/agw/pygauge.py +570 -0
  97. wx/lib/agw/pyprogress.py +916 -0
  98. wx/lib/agw/ribbon/__init__.py +198 -0
  99. wx/lib/agw/ribbon/art.py +219 -0
  100. wx/lib/agw/ribbon/art_aui.py +1283 -0
  101. wx/lib/agw/ribbon/art_default.py +81 -0
  102. wx/lib/agw/ribbon/art_internal.py +248 -0
  103. wx/lib/agw/ribbon/art_msw.py +2735 -0
  104. wx/lib/agw/ribbon/art_osx.py +52 -0
  105. wx/lib/agw/ribbon/bar.py +1259 -0
  106. wx/lib/agw/ribbon/buttonbar.py +1317 -0
  107. wx/lib/agw/ribbon/control.py +205 -0
  108. wx/lib/agw/ribbon/gallery.py +973 -0
  109. wx/lib/agw/ribbon/page.py +946 -0
  110. wx/lib/agw/ribbon/panel.py +1170 -0
  111. wx/lib/agw/ribbon/toolbar.py +1441 -0
  112. wx/lib/agw/rulerctrl.py +1885 -0
  113. wx/lib/agw/scrolledthumbnail.py +2116 -0
  114. wx/lib/agw/shapedbutton.py +1809 -0
  115. wx/lib/agw/shortcuteditor.py +2642 -0
  116. wx/lib/agw/speedmeter.py +1800 -0
  117. wx/lib/agw/supertooltip.py +1443 -0
  118. wx/lib/agw/thumbnailctrl.py +529 -0
  119. wx/lib/agw/toasterbox.py +1327 -0
  120. wx/lib/agw/ultimatelistctrl.py +13671 -0
  121. wx/lib/agw/xlsgrid.py +2111 -0
  122. wx/lib/agw/zoombar.py +1336 -0
  123. wx/lib/analogclock/__init__.py +140 -0
  124. wx/lib/analogclock/analogclock.py +630 -0
  125. wx/lib/analogclock/helpers.py +986 -0
  126. wx/lib/analogclock/lib_setup/__init__.py +0 -0
  127. wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
  128. wx/lib/analogclock/lib_setup/fontselect.py +57 -0
  129. wx/lib/analogclock/setup.py +490 -0
  130. wx/lib/analogclock/styles.py +47 -0
  131. wx/lib/anchors.py +103 -0
  132. wx/lib/art/__init__.py +4 -0
  133. wx/lib/art/flagart.py +1583 -0
  134. wx/lib/art/img2pyartprov.py +56 -0
  135. wx/lib/busy.py +152 -0
  136. wx/lib/buttons.py +1140 -0
  137. wx/lib/calendar.py +1596 -0
  138. wx/lib/checkbox.py +837 -0
  139. wx/lib/colourchooser/__init__.py +36 -0
  140. wx/lib/colourchooser/canvas.py +145 -0
  141. wx/lib/colourchooser/intl.py +24 -0
  142. wx/lib/colourchooser/pycolourbox.py +89 -0
  143. wx/lib/colourchooser/pycolourchooser.py +626 -0
  144. wx/lib/colourchooser/pycolourslider.py +98 -0
  145. wx/lib/colourchooser/pypalette.py +208 -0
  146. wx/lib/colourdb.py +740 -0
  147. wx/lib/colourselect.py +385 -0
  148. wx/lib/colourutils.py +118 -0
  149. wx/lib/combotreebox.py +944 -0
  150. wx/lib/delayedresult.py +420 -0
  151. wx/lib/dialogs.py +510 -0
  152. wx/lib/docview.py +3210 -0
  153. wx/lib/dragscroller.py +79 -0
  154. wx/lib/editor/README.txt +77 -0
  155. wx/lib/editor/__init__.py +24 -0
  156. wx/lib/editor/editor.py +974 -0
  157. wx/lib/editor/images.py +15 -0
  158. wx/lib/editor/selection.py +44 -0
  159. wx/lib/embeddedimage.py +76 -0
  160. wx/lib/eventStack.py +136 -0
  161. wx/lib/eventwatcher.py +440 -0
  162. wx/lib/evtmgr.py +521 -0
  163. wx/lib/expando.py +393 -0
  164. wx/lib/fancytext.py +494 -0
  165. wx/lib/filebrowsebutton.py +461 -0
  166. wx/lib/flashwin.py +262 -0
  167. wx/lib/flashwin_old.py +651 -0
  168. wx/lib/floatcanvas/FCEvents.py +53 -0
  169. wx/lib/floatcanvas/FCObjects.py +2910 -0
  170. wx/lib/floatcanvas/FloatCanvas.py +1025 -0
  171. wx/lib/floatcanvas/GUIMode.py +396 -0
  172. wx/lib/floatcanvas/NavCanvas.py +162 -0
  173. wx/lib/floatcanvas/Resources.py +319 -0
  174. wx/lib/floatcanvas/ScreenShot.py +1788 -0
  175. wx/lib/floatcanvas/Utilities/BBox.py +313 -0
  176. wx/lib/floatcanvas/Utilities/Colors.py +137 -0
  177. wx/lib/floatcanvas/Utilities/GUI.py +91 -0
  178. wx/lib/floatcanvas/Utilities/__init__.py +7 -0
  179. wx/lib/floatcanvas/__init__.py +124 -0
  180. wx/lib/foldmenu.py +89 -0
  181. wx/lib/gestures.py +310 -0
  182. wx/lib/gizmos/__init__.py +18 -0
  183. wx/lib/gizmos/dynamicsash.py +1202 -0
  184. wx/lib/gizmos/ledctrl.py +299 -0
  185. wx/lib/gizmos/treelistctrl.py +87 -0
  186. wx/lib/graphics.py +1942 -0
  187. wx/lib/gridmovers.py +516 -0
  188. wx/lib/iewin.py +249 -0
  189. wx/lib/iewin_old.py +894 -0
  190. wx/lib/imagebrowser.py +853 -0
  191. wx/lib/imageutils.py +163 -0
  192. wx/lib/infoframe.py +490 -0
  193. wx/lib/inspection.py +1254 -0
  194. wx/lib/intctrl.py +990 -0
  195. wx/lib/itemspicker.py +256 -0
  196. wx/lib/langlistctrl.py +480 -0
  197. wx/lib/layoutf.py +271 -0
  198. wx/lib/masked/__init__.py +27 -0
  199. wx/lib/masked/combobox.py +839 -0
  200. wx/lib/masked/ctrl.py +108 -0
  201. wx/lib/masked/ipaddrctrl.py +241 -0
  202. wx/lib/masked/maskededit.py +7262 -0
  203. wx/lib/masked/numctrl.py +2000 -0
  204. wx/lib/masked/textctrl.py +465 -0
  205. wx/lib/masked/timectrl.py +1465 -0
  206. wx/lib/mixins/__init__.py +17 -0
  207. wx/lib/mixins/grid.py +47 -0
  208. wx/lib/mixins/gridlabelrenderer.py +277 -0
  209. wx/lib/mixins/imagelist.py +77 -0
  210. wx/lib/mixins/inspection.py +184 -0
  211. wx/lib/mixins/listctrl.py +893 -0
  212. wx/lib/mixins/rubberband.py +403 -0
  213. wx/lib/mixins/treemixin.py +678 -0
  214. wx/lib/msgpanel.py +95 -0
  215. wx/lib/multisash.py +746 -0
  216. wx/lib/myole4ax.idl +178 -0
  217. wx/lib/myole4ax.tlb +0 -0
  218. wx/lib/newevent.py +229 -0
  219. wx/lib/newevent.pyi +25 -0
  220. wx/lib/nvdlg.py +156 -0
  221. wx/lib/ogl/__init__.py +13 -0
  222. wx/lib/ogl/basic.py +3989 -0
  223. wx/lib/ogl/bmpshape.py +86 -0
  224. wx/lib/ogl/canvas.py +467 -0
  225. wx/lib/ogl/composit.py +1576 -0
  226. wx/lib/ogl/diagram.py +230 -0
  227. wx/lib/ogl/divided.py +482 -0
  228. wx/lib/ogl/drawn.py +898 -0
  229. wx/lib/ogl/lines.py +1809 -0
  230. wx/lib/ogl/oglmisc.py +607 -0
  231. wx/lib/pdfviewer/__init__.py +113 -0
  232. wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
  233. wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
  234. wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
  235. wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
  236. wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
  237. wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
  238. wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
  239. wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
  240. wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
  241. wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
  242. wx/lib/pdfviewer/bitmaps/Save.png +0 -0
  243. wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
  244. wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
  245. wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
  246. wx/lib/pdfviewer/buttonpanel.py +285 -0
  247. wx/lib/pdfviewer/images.py +240 -0
  248. wx/lib/pdfviewer/viewer.py +1118 -0
  249. wx/lib/pdfwin.py +295 -0
  250. wx/lib/pdfwin_old.py +789 -0
  251. wx/lib/platebtn.py +789 -0
  252. wx/lib/plot/CHANGELOG.md +150 -0
  253. wx/lib/plot/README.md +16 -0
  254. wx/lib/plot/__init__.py +46 -0
  255. wx/lib/plot/__main__.py +5 -0
  256. wx/lib/plot/examples/__init__.py +0 -0
  257. wx/lib/plot/examples/demo.py +1010 -0
  258. wx/lib/plot/examples/simple_example.py +56 -0
  259. wx/lib/plot/plotcanvas.py +2985 -0
  260. wx/lib/plot/polyobjects.py +1524 -0
  261. wx/lib/plot/utils.py +334 -0
  262. wx/lib/popupctl.py +251 -0
  263. wx/lib/printout.py +1155 -0
  264. wx/lib/progressindicator.py +151 -0
  265. wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
  266. wx/lib/pubsub/README_WxPython.txt +22 -0
  267. wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
  268. wx/lib/pubsub/__init__.py +25 -0
  269. wx/lib/pubsub/core/__init__.py +92 -0
  270. wx/lib/pubsub/core/arg1/__init__.py +16 -0
  271. wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
  272. wx/lib/pubsub/core/arg1/publisher.py +40 -0
  273. wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
  274. wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
  275. wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
  276. wx/lib/pubsub/core/callables.py +198 -0
  277. wx/lib/pubsub/core/imp2.py +62 -0
  278. wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
  279. wx/lib/pubsub/core/kwargs/__init__.py +16 -0
  280. wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
  281. wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
  282. wx/lib/pubsub/core/kwargs/publisher.py +77 -0
  283. wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
  284. wx/lib/pubsub/core/kwargs/topicargspecimpl.py +216 -0
  285. wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
  286. wx/lib/pubsub/core/listener.py +40 -0
  287. wx/lib/pubsub/core/listenerbase.py +185 -0
  288. wx/lib/pubsub/core/notificationmgr.py +185 -0
  289. wx/lib/pubsub/core/publisherbase.py +189 -0
  290. wx/lib/pubsub/core/topicargspec.py +77 -0
  291. wx/lib/pubsub/core/topicdefnprovider.py +631 -0
  292. wx/lib/pubsub/core/topicexc.py +72 -0
  293. wx/lib/pubsub/core/topicmgr.py +454 -0
  294. wx/lib/pubsub/core/topicobj.py +472 -0
  295. wx/lib/pubsub/core/topictreetraverser.py +143 -0
  296. wx/lib/pubsub/core/topicutils.py +119 -0
  297. wx/lib/pubsub/core/treeconfig.py +21 -0
  298. wx/lib/pubsub/core/validatedefnargs.py +29 -0
  299. wx/lib/pubsub/core/weakmethod.py +102 -0
  300. wx/lib/pubsub/policies.py +24 -0
  301. wx/lib/pubsub/pub.py +199 -0
  302. wx/lib/pubsub/setuparg1.py +47 -0
  303. wx/lib/pubsub/setupkwargs.py +29 -0
  304. wx/lib/pubsub/utils/__init__.py +27 -0
  305. wx/lib/pubsub/utils/exchandling.py +100 -0
  306. wx/lib/pubsub/utils/misc.py +99 -0
  307. wx/lib/pubsub/utils/notification.py +331 -0
  308. wx/lib/pubsub/utils/topictreeprinter.py +195 -0
  309. wx/lib/pubsub/utils/xmltopicdefnprovider.py +286 -0
  310. wx/lib/pydocview.py +3300 -0
  311. wx/lib/rcsizer.py +227 -0
  312. wx/lib/resizewidget.py +357 -0
  313. wx/lib/scrolledpanel.py +243 -0
  314. wx/lib/sheet.py +350 -0
  315. wx/lib/sized_controls.py +691 -0
  316. wx/lib/softwareupdate.py +355 -0
  317. wx/lib/splitter.py +925 -0
  318. wx/lib/statbmp.py +199 -0
  319. wx/lib/stattext.py +321 -0
  320. wx/lib/throbber.py +424 -0
  321. wx/lib/ticker.py +306 -0
  322. wx/lib/ticker_xrc.py +48 -0
  323. wx/lib/utils.py +89 -0
  324. wx/lib/wordwrap.py +97 -0
  325. wx/lib/wxcairo/__init__.py +139 -0
  326. wx/lib/wxcairo/wx_cairocffi.py +200 -0
  327. wx/lib/wxcairo/wx_pycairo.py +455 -0
  328. wx/lib/wxpTag.py +274 -0
  329. wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
  330. wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
  331. wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
  332. wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
  333. wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
  334. wx/locale/co/LC_MESSAGES/wxstd.mo +0 -0
  335. wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
  336. wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
  337. wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
  338. wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
  339. wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
  340. wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
  341. wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
  342. wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
  343. wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
  344. wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
  345. wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
  346. wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
  347. wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
  348. wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
  349. wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
  350. wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
  351. wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
  352. wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
  353. wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
  354. wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
  355. wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
  356. wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
  357. wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
  358. wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
  359. wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
  360. wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
  361. wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
  362. wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
  363. wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
  364. wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
  365. wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
  366. wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
  367. wx/locale/sr/LC_MESSAGES/wxstd.mo +0 -0
  368. wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
  369. wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
  370. wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
  371. wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
  372. wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
  373. wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
  374. wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
  375. wx/media.py +30 -0
  376. wx/media.pyi +272 -0
  377. wx/msw.py +16 -0
  378. wx/msw.pyi +91 -0
  379. wx/propgrid.py +498 -0
  380. wx/propgrid.pyi +7427 -0
  381. wx/py/CHANGES.txt +796 -0
  382. wx/py/Py.ico +0 -0
  383. wx/py/PyAlaCarte.py +34 -0
  384. wx/py/PyAlaMode.py +34 -0
  385. wx/py/PyAlaModeTest.py +33 -0
  386. wx/py/PyCrust.ico +0 -0
  387. wx/py/PyCrust.py +78 -0
  388. wx/py/PyCrust_16.png +0 -0
  389. wx/py/PyCrust_32.png +0 -0
  390. wx/py/PyFilling.py +35 -0
  391. wx/py/PyShell.py +78 -0
  392. wx/py/PySlices.ico +0 -0
  393. wx/py/PySlices.py +98 -0
  394. wx/py/PySlicesShell.py +94 -0
  395. wx/py/PySlices_16.png +0 -0
  396. wx/py/PySlices_32.png +0 -0
  397. wx/py/PyWrap.py +52 -0
  398. wx/py/README.txt +77 -0
  399. wx/py/__init__.py +20 -0
  400. wx/py/buffer.py +136 -0
  401. wx/py/crust.py +403 -0
  402. wx/py/crustslices.py +403 -0
  403. wx/py/dispatcher.py +259 -0
  404. wx/py/document.py +37 -0
  405. wx/py/editor.py +844 -0
  406. wx/py/editwindow.py +316 -0
  407. wx/py/filling.py +358 -0
  408. wx/py/frame.py +976 -0
  409. wx/py/images.py +212 -0
  410. wx/py/interpreter.py +161 -0
  411. wx/py/introspect.py +402 -0
  412. wx/py/magic.py +98 -0
  413. wx/py/parse.py +134 -0
  414. wx/py/path.py +36 -0
  415. wx/py/pseudo.py +99 -0
  416. wx/py/shell.py +1579 -0
  417. wx/py/sliceshell.py +3805 -0
  418. wx/py/tests/test_interpreter.py +71 -0
  419. wx/py/tests/test_introspect.py +810 -0
  420. wx/py/tests/test_pseudo.py +70 -0
  421. wx/py/tests/test_version.py +36 -0
  422. wx/py/tests/testall.py +22 -0
  423. wx/py/version.py +7 -0
  424. wx/py.typed +0 -0
  425. wx/ribbon.py +48 -0
  426. wx/ribbon.pyi +3099 -0
  427. wx/richtext.py +141 -0
  428. wx/richtext.pyi +13581 -0
  429. wx/siplib.cp315-win_arm64.pyd +0 -0
  430. wx/siplib.pyi +19 -0
  431. wx/stc.py +59 -0
  432. wx/stc.pyi +9918 -0
  433. wx/svg/__init__.py +363 -0
  434. wx/svg/_nanosvg.cp315-win_arm64.pyd +0 -0
  435. wx/tools/__init__.py +18 -0
  436. wx/tools/dbg.py +268 -0
  437. wx/tools/genaxmodule.py +50 -0
  438. wx/tools/helpviewer.py +92 -0
  439. wx/tools/img2img.py +85 -0
  440. wx/tools/img2png.py +54 -0
  441. wx/tools/img2py.py +306 -0
  442. wx/tools/img2xpm.py +54 -0
  443. wx/tools/pywxrc.py +951 -0
  444. wx/tools/wxget.py +254 -0
  445. wx/tools/wxget_docs_demo.py +183 -0
  446. wx/wxbase334u_net_vc140_arm64.dll +0 -0
  447. wx/wxbase334u_vc140_arm64.dll +0 -0
  448. wx/wxbase334u_xml_vc140_arm64.dll +0 -0
  449. wx/wxmsw334u_adv_vc140_arm64.dll +0 -0
  450. wx/wxmsw334u_aui_vc140_arm64.dll +0 -0
  451. wx/wxmsw334u_core_vc140_arm64.dll +0 -0
  452. wx/wxmsw334u_gl_vc140_arm64.dll +0 -0
  453. wx/wxmsw334u_html_vc140_arm64.dll +0 -0
  454. wx/wxmsw334u_media_vc140_arm64.dll +0 -0
  455. wx/wxmsw334u_propgrid_vc140_arm64.dll +0 -0
  456. wx/wxmsw334u_qa_vc140_arm64.dll +0 -0
  457. wx/wxmsw334u_ribbon_vc140_arm64.dll +0 -0
  458. wx/wxmsw334u_richtext_vc140_arm64.dll +0 -0
  459. wx/wxmsw334u_stc_vc140_arm64.dll +0 -0
  460. wx/wxmsw334u_webview_vc140_arm64.dll +0 -0
  461. wx/wxmsw334u_xrc_vc140_arm64.dll +0 -0
  462. wx/xml.py +18 -0
  463. wx/xml.pyi +728 -0
  464. wx/xrc.py +68 -0
  465. wx/xrc.pyi +896 -0
  466. wxpython-4.3.2.dist-info/METADATA +71 -0
  467. wxpython-4.3.2.dist-info/RECORD +471 -0
  468. wxpython-4.3.2.dist-info/WHEEL +5 -0
  469. wxpython-4.3.2.dist-info/entry_points.txt +13 -0
  470. wxpython-4.3.2.dist-info/licenses/LICENSE.txt +610 -0
  471. wxpython-4.3.2.dist-info/top_level.txt +1 -0
wx/py/introspect.py ADDED
@@ -0,0 +1,402 @@
1
+ """Provides a variety of introspective-type support functions for
2
+ things like call tips and command auto completion."""
3
+
4
+ __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
5
+
6
+ import re
7
+ import sys
8
+ import inspect
9
+ import tokenize
10
+ import types
11
+ import wx
12
+ from io import BytesIO
13
+
14
+ def getAutoCompleteList(command='', locals=None, includeMagic=1,
15
+ includeSingle=1, includeDouble=1):
16
+ """Return list of auto-completion options for command.
17
+
18
+ The list of options will be based on the locals namespace."""
19
+ attributes = []
20
+ # Get the proper chunk of code from the command.
21
+ root = getRoot(command, terminator='.')
22
+ try:
23
+ if locals is not None:
24
+ obj = eval(root, locals)
25
+ else:
26
+ obj = eval(root)
27
+ except:
28
+ pass
29
+ else:
30
+ attributes = getAttributeNames(obj, includeMagic,
31
+ includeSingle, includeDouble)
32
+ return attributes
33
+
34
+ def getAttributeNames(obj, includeMagic=1, includeSingle=1,
35
+ includeDouble=1):
36
+ """Return list of unique attributes, including inherited, for obj."""
37
+ attributes = []
38
+ dict = {}
39
+ if not hasattrAlwaysReturnsTrue(obj):
40
+ # Add some attributes that don't always get picked up.
41
+ special_attrs = ['__bases__', '__class__', '__dict__', '__name__',
42
+ '__closure__', '__code__', '__defaults__',
43
+ '__kwdefaults__', '__globals__', '__qualname__',
44
+ '__builtins__', # Added to method attributes in 3.10
45
+ '__get__', # Not found in `dir(method)` in 3.11
46
+ ]
47
+ attributes += [attr for attr in special_attrs \
48
+ if hasattr(obj, attr)]
49
+ if includeMagic:
50
+ try: attributes += obj._getAttributeNames()
51
+ except: pass
52
+ # Special code to allow traits to be caught by autocomplete
53
+ if hasattr(obj,'trait_get'):
54
+ try:
55
+ for i in obj.trait_get():
56
+ if i not in attributes:
57
+ if hasattr(obj, i):
58
+ attributes += i
59
+ except:
60
+ pass
61
+ # Get all attribute names.
62
+ str_type = str(type(obj))
63
+ if str_type == "<type 'array'>":
64
+ attributes += dir(obj)
65
+ else:
66
+ attrdict = getAllAttributeNames(obj)
67
+ # Store the obj's dir.
68
+ obj_dir = dir(obj)
69
+ for (obj_type_name, technique, count), attrlist in attrdict.items():
70
+ # This complexity is necessary to avoid accessing all the
71
+ # attributes of the obj. This is very handy for objects
72
+ # whose attributes are lazily evaluated.
73
+ if type(obj).__name__ == obj_type_name and technique == 'dir':
74
+ attributes += attrlist
75
+ else:
76
+ attributes += [attr for attr in attrlist \
77
+ if attr not in obj_dir and hasattr(obj, attr)]
78
+
79
+ # Remove duplicates from the attribute list.
80
+ for item in attributes:
81
+ dict[item] = None
82
+ attributes = list(dict)
83
+ # new-style swig wrappings can result in non-string attributes
84
+ # e.g. ITK http://www.itk.org/
85
+ attributes = [attribute for attribute in attributes
86
+ if type(attribute) == str]
87
+ attributes.sort(key=lambda x: x.upper())
88
+ if not includeSingle:
89
+ attributes = filter(lambda item: item[0]!='_' \
90
+ or item[1:2]=='_', attributes)
91
+ if not includeDouble:
92
+ attributes = filter(lambda item: item[:2]!='__', attributes)
93
+ return attributes
94
+
95
+ def hasattrAlwaysReturnsTrue(obj):
96
+ return hasattr(obj, 'bogu5_123_aTTri8ute')
97
+
98
+ def getAllAttributeNames(obj):
99
+ """Return dict of all attributes, including inherited, for an object.
100
+
101
+ Recursively walk through a class and all base classes.
102
+ """
103
+ attrdict = {} # (object, technique, count): [list of attributes]
104
+ # !!!
105
+ # Do Not use hasattr() as a test anywhere in this function,
106
+ # because it is unreliable with remote objects: xmlrpc, soap, etc.
107
+ # They always return true for hasattr().
108
+ # !!!
109
+ try:
110
+ # This could(?) fail if the type is poorly defined without
111
+ # even a name.
112
+ key = type(obj).__name__
113
+ except Exception:
114
+ key = 'anonymous'
115
+ # Wake up sleepy objects - a hack for ZODB objects in "ghost" state.
116
+ wakeupcall = dir(obj)
117
+ del wakeupcall
118
+ # Get attributes available through the normal convention.
119
+ attributes = dir(obj)
120
+ attrdict[(key, 'dir', len(attributes))] = attributes
121
+ # Get attributes from the object's dictionary, if it has one.
122
+ try:
123
+ attributes = sorted(obj.__dict__)
124
+ except Exception: # Must catch all because object might have __getattr__.
125
+ pass
126
+ else:
127
+ attrdict[(key, '__dict__', len(attributes))] = attributes
128
+ # For a class instance, get the attributes for the class.
129
+ try:
130
+ klass = obj.__class__
131
+ except: # Must catch all because object might have __getattr__.
132
+ pass
133
+ else:
134
+ if klass is obj:
135
+ # Break a circular reference. This happens with extension
136
+ # classes.
137
+ pass
138
+ else:
139
+ attrdict.update(getAllAttributeNames(klass))
140
+ # Also get attributes from any and all parent classes.
141
+ try:
142
+ bases = obj.__bases__
143
+ except: # Must catch all because object might have __getattr__.
144
+ pass
145
+ else:
146
+ if isinstance(bases, tuple):
147
+ for base in bases:
148
+ if type(base) is type:
149
+ # Break a circular reference. Happens in Python 2.2.
150
+ pass
151
+ else:
152
+ attrdict.update(getAllAttributeNames(base))
153
+ return attrdict
154
+
155
+ def getCallTip(command='', locals=None):
156
+ """For a command, return a tuple of object name, argspec, tip text.
157
+
158
+ The call tip information will be based on the locals namespace."""
159
+ calltip = ('', '', '') # object name, argspec, tip text.
160
+ # Get the proper chunk of code from the command.
161
+ root = getRoot(command, terminator='(')
162
+ try:
163
+ if locals is not None:
164
+ obj = eval(root, locals)
165
+ else:
166
+ obj = eval(root)
167
+ except:
168
+ return calltip
169
+ name = ''
170
+ obj, dropSelf = getBaseObject(obj)
171
+ try:
172
+ name = obj.__name__
173
+ except AttributeError:
174
+ pass
175
+ tip1 = ''
176
+ argspec = ''
177
+ obj = inspect.unwrap(obj)
178
+ if inspect.isbuiltin(obj):
179
+ # Builtin functions don't have an argspec that we can get.
180
+ pass
181
+ elif inspect.isfunction(obj):
182
+ # tip1 is a string like: "getCallTip(command='', locals=None)"
183
+ try:
184
+ argspec = str(inspect.signature(obj)) # PY35 or later
185
+ except AttributeError:
186
+ argspec = inspect.getfullargspec(obj)
187
+ argspec = inspect.formatargspec(*argspec)
188
+ if dropSelf:
189
+ # The first parameter to a method is a reference to an
190
+ # instance, usually coded as "self", and is usually passed
191
+ # automatically by Python; therefore we want to drop it.
192
+ temp = argspec.split(',')
193
+ if len(temp) == 1: # No other arguments.
194
+ argspec = '()'
195
+ elif temp[0][:2] == '(*': # first param is like *args, not self
196
+ pass
197
+ else: # Drop the first argument.
198
+ argspec = '(' + ','.join(temp[1:]).lstrip()
199
+ tip1 = name + argspec
200
+ doc = ''
201
+ if callable(obj):
202
+ try:
203
+ doc = inspect.getdoc(obj)
204
+ except:
205
+ pass
206
+ if doc:
207
+ # tip2 is the first separated line of the docstring, like:
208
+ # "Return call tip text for a command."
209
+ # tip3 is the rest of the docstring, like:
210
+ # "The call tip information will be based on ... <snip>
211
+ firstline = doc.split('\n')[0].lstrip()
212
+ if tip1 == firstline or firstline[:len(name)+1] == name+'(':
213
+ tip1 = ''
214
+ else:
215
+ tip1 += '\n\n'
216
+ docpieces = doc.split('\n\n')
217
+ tip2 = docpieces[0]
218
+ tip3 = '\n\n'.join(docpieces[1:])
219
+ tip = '%s%s\n\n%s' % (tip1, tip2, tip3)
220
+ else:
221
+ tip = tip1
222
+ # Extract argspec from the signature e.g., (x, /, *, ...) -> int
223
+ m = re.search(r'\((.*)\)', argspec)
224
+ if m:
225
+ argspec = m.group(1)
226
+ calltip = (name, argspec, tip.strip())
227
+ return calltip
228
+
229
+ def getRoot(command, terminator=None):
230
+ """Return the rightmost root portion of an arbitrary Python command.
231
+
232
+ Return only the root portion that can be eval()'d without side
233
+ effects. The command would normally terminate with a '(' or
234
+ '.'. The terminator and anything after the terminator will be
235
+ dropped."""
236
+ command = command.split('\n')[-1]
237
+ if command.startswith(sys.ps2):
238
+ command = command[len(sys.ps2):]
239
+ command = command.lstrip()
240
+ command = rtrimTerminus(command, terminator)
241
+ if terminator == '.':
242
+ tokens = getTokens(command)
243
+ if tokens and tokens[-1][0] is tokenize.ENDMARKER:
244
+ # Remove the end marker.
245
+ del tokens[-1]
246
+ if tokens and tokens[-1][0] is tokenize.NEWLINE:
247
+ # Remove newline.
248
+ del tokens[-1]
249
+ if tokens and tokens[-1][0] is tokenize.NL:
250
+ # Remove non-logical newline.
251
+ del tokens[-1]
252
+ if not tokens:
253
+ return ''
254
+ if tokens[-1][1] != '.' or tokens[-1][0] is not tokenize.OP:
255
+ # Trap decimals in numbers, versus the dot operator.
256
+ return ''
257
+
258
+ # Strip off the terminator.
259
+ if terminator and command.endswith(terminator):
260
+ size = 0 - len(terminator)
261
+ command = command[:size]
262
+
263
+ command = command.rstrip()
264
+ tokens = getTokens(command)
265
+ tokens.reverse()
266
+ line = ''
267
+ start = None
268
+ prefix = ''
269
+ laststring = '.'
270
+ lastline = ''
271
+ emptyTypes = ('[]', '()', '{}')
272
+ for token in tokens:
273
+ tokentype = token[0]
274
+ tokenstring = token[1]
275
+ line = token[4]
276
+ if tokentype in (tokenize.ENDMARKER, tokenize.NEWLINE, tokenize.NL):
277
+ continue
278
+ if tokentype is tokenize.ENCODING:
279
+ line = lastline
280
+ break
281
+ if tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) \
282
+ and laststring != '.':
283
+ # We've reached something that's not part of the root.
284
+ if prefix and line[token[3][1]] != ' ':
285
+ # If it doesn't have a space after it, remove the prefix.
286
+ prefix = ''
287
+ break
288
+ if tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) \
289
+ or (tokentype is tokenize.OP and tokenstring == '.'):
290
+ if prefix:
291
+ # The prefix isn't valid because it comes after a dot.
292
+ prefix = ''
293
+ break
294
+ else:
295
+ # start represents the last known good point in the line.
296
+ start = token[2][1]
297
+ elif len(tokenstring) == 1 and tokenstring in ('[({])}'):
298
+ # Remember, we're working backwards.
299
+ # So prefix += tokenstring would be wrong.
300
+ if prefix in emptyTypes and tokenstring in ('[({'):
301
+ # We've already got an empty type identified so now we
302
+ # are in a nested situation and we can break out with
303
+ # what we've got.
304
+ break
305
+ else:
306
+ prefix = tokenstring + prefix
307
+ else:
308
+ # We've reached something that's not part of the root.
309
+ break
310
+ laststring = tokenstring
311
+ lastline = line
312
+ if start is None:
313
+ start = len(line)
314
+ root = line[start:]
315
+ if prefix in emptyTypes:
316
+ # Empty types are safe to be eval()'d and introspected.
317
+ root = prefix + root
318
+ return root
319
+
320
+ def getTokens(command):
321
+ """Return list of token tuples for command."""
322
+
323
+ # In case the command is unicode try encoding it
324
+ if isinstance(command, str):
325
+ try:
326
+ command = command.encode('utf-8')
327
+ except UnicodeEncodeError:
328
+ pass # otherwise leave it alone
329
+
330
+ f = BytesIO(command)
331
+ # tokens is a list of token tuples, each looking like:
332
+ # (type, string, (srow, scol), (erow, ecol), line)
333
+ tokens = []
334
+ # Can't use list comprehension:
335
+ # tokens = [token for token in tokenize.generate_tokens(f.readline)]
336
+ # because of need to append as much as possible before TokenError.
337
+ try:
338
+ for t in tokenize.tokenize(f.readline):
339
+ tokens.append(t)
340
+ except tokenize.TokenError:
341
+ # This is due to a premature EOF, which we expect since we are
342
+ # feeding in fragments of Python code.
343
+ pass
344
+ return tokens
345
+
346
+ def rtrimTerminus(command, terminator=None):
347
+ """Return command minus anything that follows the final terminator."""
348
+ if terminator:
349
+ pieces = command.split(terminator)
350
+ if len(pieces) > 1:
351
+ command = terminator.join(pieces[:-1]) + terminator
352
+ return command
353
+
354
+ def getBaseObject(obj):
355
+ """Return base object and dropSelf indicator for an object."""
356
+ if inspect.isbuiltin(obj):
357
+ # Builtin functions don't have an argspec that we can get.
358
+ dropSelf = 0
359
+ elif inspect.ismethod(obj):
360
+ # Get the function from the object otherwise
361
+ # inspect.getargspec() complains that the object isn't a
362
+ # Python function.
363
+ try:
364
+ if obj.__self__ is None:
365
+ # This is an unbound method so we do not drop self
366
+ # from the argspec, since an instance must be passed
367
+ # as the first arg.
368
+ dropSelf = 0
369
+ else:
370
+ dropSelf = 1
371
+ obj = obj.__func__
372
+ except AttributeError:
373
+ dropSelf = 0
374
+ elif inspect.isclass(obj):
375
+ # Get the __init__ method function for the class.
376
+ constructor = getConstructor(obj)
377
+ if constructor is not None:
378
+ obj = constructor
379
+ dropSelf = 1
380
+ else:
381
+ dropSelf = 0
382
+ elif callable(obj):
383
+ # Get the __call__ method instead.
384
+ try:
385
+ obj = obj.__call__.__func__
386
+ dropSelf = 1
387
+ except AttributeError:
388
+ dropSelf = 0
389
+ else:
390
+ dropSelf = 0
391
+ return obj, dropSelf
392
+
393
+ def getConstructor(obj):
394
+ """Return constructor for class object, or None if there isn't one."""
395
+ try:
396
+ return obj.__init__.__func__
397
+ except AttributeError:
398
+ for base in obj.__bases__:
399
+ constructor = getConstructor(base)
400
+ if constructor is not None:
401
+ return constructor
402
+ return None
wx/py/magic.py ADDED
@@ -0,0 +1,98 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: magic.py
3
+ # Author: David N. Mashburn <david.n.mashburn@gmail.com>
4
+ # Created: 07/01/2009
5
+ # Tags: phoenix-port
6
+ #----------------------------------------------------------------------
7
+ """magic.py is a utility that allows a simple line from the interpreter
8
+ be translated from a more bash-like form to a python form.
9
+ For instance, 'plot a' is transformed to 'plot(a)'
10
+ Special exceptions are made for predefined ls,cd, and pwd functions"""
11
+
12
+ __author__ = "David N. Mashburn <david.n.mashburn@gmail.com>"
13
+ # created 07/01/2009
14
+
15
+ import keyword
16
+
17
+ from .parse import testForContinuations
18
+
19
+ aliasDict = {}
20
+
21
+ #DNM
22
+ # TODO : Still Refining this... seems to be ok for now... still finding gotchas, though!
23
+ # TODO : Multi-line strings seem to be correctly broken into commands by PyCrust(PySlices)
24
+ # TODO : Is there a better version of ls, cd, pwd, etc that could be used?
25
+ def magicSingle(command):
26
+ if command=='': # Pass if command is blank
27
+ return command
28
+
29
+ first_space=command.find(' ')
30
+
31
+ if command[0]==' ': # Pass if command begins with a space
32
+ pass
33
+ elif command[0]=='?': # Do help if starts with ?
34
+ command='help('+command[1:]+')'
35
+ elif command[0]=='!': # Use os.system if starts with !
36
+ command='sx("'+command[1:]+'")'
37
+ elif command in ('ls','pwd'): # automatically use ls and pwd with no arguments
38
+ command=command+'()'
39
+ elif command[:3] in ('ls ','cd '): # when using the 'ls ' or 'cd ' constructs, fill in both parentheses and quotes
40
+ command=command[:2]+'("'+command[3:]+'")'
41
+ elif command[:6] == 'alias ':
42
+ c = command[6:].lstrip().split(' ')
43
+ if len(c)<2:
44
+ #print('Not enough arguments for alias!')
45
+ command = ''
46
+ else:
47
+ n,v = c[0],' '.join(c[1:])
48
+ aliasDict[n]=v
49
+ command = ''
50
+ elif command.split(' ')[0] in aliasDict:
51
+ c = command.split(' ')
52
+ if len(c)<2:
53
+ command = 'sx("'+aliasDict[c[0]]+'")'
54
+ else:
55
+ command = 'sx("'+aliasDict[c[0]]+' '+' '.join(c[1:])+'")'
56
+ elif first_space!=-1: # if there is at least one space, add parentheses at beginning and end
57
+ cmds=command.split(' ')
58
+ if len(cmds)>1:
59
+ wd1=cmds[0]
60
+ wd2=cmds[1]
61
+ i=1
62
+ while wd2=='':
63
+ i+=1
64
+ if len(cmds)==i:
65
+ break
66
+ wd2=cmds[i]
67
+ if wd2=='':
68
+ return command
69
+ if (wd1[0].isalpha() or wd1[0]=='_') and (wd2[0].isalnum() or (wd2[0] in """."'_""")) and not keyword.iskeyword(wd1) and not keyword.iskeyword(wd2):
70
+ if wd1.replace('.','').replace('_','').isalnum():
71
+ command=wd1+'('+command[(first_space+1):]+')' # add parentheses where the first space was and at the end... hooray!
72
+ return command
73
+
74
+ def magic(command):
75
+ continuations = testForContinuations(command)
76
+
77
+ if len(continuations)==2: # Error case...
78
+ return command
79
+ elif len(continuations)==4:
80
+ stringContinuationList,indentationBlockList, \
81
+ lineContinuationList,parentheticalContinuationList = continuations
82
+
83
+ commandList=[]
84
+ firstLine = True
85
+ for i in command.split('\n'):
86
+ if firstLine:
87
+ commandList.append(magicSingle(i))
88
+ elif stringContinuationList.pop(0)==False and \
89
+ indentationBlockList.pop(0)==False and \
90
+ lineContinuationList.pop(0)==False and \
91
+ parentheticalContinuationList.pop(0)==False:
92
+ commandList.append(magicSingle(i)) # unless this is in a larger expression, use magic
93
+ else:
94
+ commandList.append(i)
95
+
96
+ firstLine=False
97
+
98
+ return '\n'.join(commandList)
wx/py/parse.py ADDED
@@ -0,0 +1,134 @@
1
+ #----------------------------------------------------------------------
2
+ # Name: parse.py
3
+ # Author: David N. Mashburn <david.n.mashburn@gmail.com>
4
+ # Created: 12/20/2009
5
+ # Tags: phoenix-port
6
+ #----------------------------------------------------------------------
7
+ """parse.py is a utility that allows simple checking for line continuations
8
+ to give the shell information about where text is commented and where it is
9
+ not and also how to appropriately break up a sequence of commands into
10
+ separate multi-line commands...
11
+ """
12
+
13
+ __author__ = "David N. Mashburn <david.n.mashburn@gmail.com>"
14
+ # created 12/20/2009
15
+
16
+ import re
17
+
18
+ # change this to testForContinuations
19
+
20
+ def testForContinuations(codeBlock,ignoreErrors=False):
21
+ """ Test 4 different types of continuations:""" + \
22
+ """ String Continuations (ie with ''')""" + \
23
+ """ Indentation Block Continuations (ie "if 1:" )""" + \
24
+ """ Line Continuations (ie with \\ character )""" + \
25
+ """ Parenthetical continuations (, [, or {"""
26
+
27
+ stringMark = None
28
+ paraList = []
29
+ indentNumber=[0]
30
+
31
+ stringMarks = ['"""',"'''",'"',"'"]
32
+ openMarks = ['(','[','{']
33
+ closeMarks = [')',']','}']
34
+ paraMarkDict = { '(':')', '[':']', '{':'}' }
35
+
36
+ stringContinuationList=[]
37
+ lineContinuationList=[] # For \ continuations ... False because cannot start as line Continuation...
38
+ indentationBlockList=[]
39
+ parentheticalContinuationList=[]
40
+ newIndent=False
41
+ lspContinuation=False
42
+ for i,l in enumerate(codeBlock.split('\n')):
43
+ currentIndentation = len(l)-len(l.lstrip())
44
+
45
+ if i>0:
46
+ lspContinuation = lineContinuationList[-1] or \
47
+ stringContinuationList[-1] or \
48
+ parentheticalContinuationList[-1]
49
+ # first, check for non-executing lines (whitespace and/or comments only)
50
+ if l.lstrip()=='':
51
+ emptyLine=True
52
+ elif l.strip()[0]=='#':
53
+ emptyLine=True
54
+ else: # otherwise, check the indentation...
55
+ emptyLine=False
56
+ if newIndent and currentIndentation>indentNumber[-1]:
57
+ newIndent=False
58
+ indentNumber.append(currentIndentation)
59
+ elif lspContinuation:
60
+ pass
61
+ elif not newIndent and currentIndentation in indentNumber:
62
+ while currentIndentation<indentNumber[-1]:
63
+ indentNumber.pop() # This is the end of an indentation block
64
+ elif not ignoreErrors:
65
+ #print('Invalid Indentation!!')
66
+ return ['Invalid Indentation Error',i]
67
+
68
+ firstWord = re.match(r' *\w*',l).group().lstrip()
69
+ if firstWord in ['if','else','elif','for','while',
70
+ 'def','class','try','except','finally']:
71
+ hasContinuationWord = True
72
+ else:
73
+ hasContinuationWord = False
74
+
75
+
76
+ commented=False
77
+ nonCommentLength=len(l)
78
+
79
+ result = re.finditer('"""'+'|'+"'''" + r'''|"|'|\"|\'|\(|\)|\[|\]|\{|\}|#''',l)
80
+ for r in result:
81
+ j = r.group()
82
+
83
+ if stringMark is None:
84
+ if j=='#': # If it is a legitimate comment, ignore everything after
85
+ commented=True
86
+ # get length up to last non-comment character
87
+ nonCommentLength = r.start()
88
+ break
89
+ elif j in stringMarks:
90
+ stringMark=j
91
+ else:
92
+ if paraList != [] and j in closeMarks:
93
+ if paraMarkDict[paraList[-1]]==j:
94
+ paraList.pop()
95
+ elif not ignoreErrors:
96
+ #print('Invalid Syntax!!')
97
+ return ['Invalid Syntax Error',i]
98
+ if j in openMarks:
99
+ paraList.append(j)
100
+ elif stringMark==j:
101
+ stringMark=None
102
+
103
+ stringContinuationList.append(stringMark!=None)
104
+
105
+ indentationBlockList.append(False)
106
+ nonCommentString = l[:nonCommentLength].rstrip()
107
+ if nonCommentString!='' and stringContinuationList[-1]==False:
108
+ if nonCommentString[-1]==':':
109
+ indentationBlockList[-1]=True
110
+ newIndent=True
111
+
112
+ lineContinuationList.append(False)
113
+ if len(l)>0 and not commented:
114
+ if l[-1]=='\\':
115
+ lineContinuationList[-1]=True
116
+
117
+ parentheticalContinuationList.append( paraList != [] )
118
+
119
+ # Now stringContinuationList (et al) is line by line key for magic
120
+ # telling it whether or not each next line is part of a string continuation
121
+
122
+ if (stringContinuationList[-1] or indentationBlockList[-1] or \
123
+ lineContinuationList[-1] or parentheticalContinuationList[-1]) \
124
+ and not ignoreErrors:
125
+ #print('Incomplete Syntax!!')
126
+ return ['Incomplete Syntax Error',i]
127
+
128
+ if newIndent and not ignoreErrors:
129
+ #print('Incomplete Indentation!')
130
+ return ['Incomplete Indentation Error',i]
131
+
132
+ # Note that if one of these errors above gets thrown, the best solution is to pass the resulting block
133
+ # to the interpreter as exec instead of interp
134
+ return stringContinuationList,indentationBlockList,lineContinuationList,parentheticalContinuationList
wx/py/path.py ADDED
@@ -0,0 +1,36 @@
1
+ """path.py is a utility containing some very simple path utilities for Py to use"""
2
+
3
+ __author__ = "David N. Mashburn <david.n.mashburn@gmail.com>"
4
+ # 07/01/2009
5
+
6
+ import os
7
+ import glob
8
+ import subprocess
9
+
10
+ def pwd():
11
+ print(os.getcwd())
12
+
13
+ def cd(path,usePrint=True):
14
+ os.chdir(os.path.expandvars(os.path.expanduser(path)))
15
+ if usePrint:
16
+ pwd()
17
+
18
+ def ls(str='*',fullpath=False):
19
+ g=glob.glob(os.path.expandvars(os.path.expanduser(str)))
20
+ if fullpath:
21
+ for i in g:
22
+ print(i)
23
+ else:
24
+ for i in g:
25
+ print(os.path.split(i)[1])
26
+
27
+ # This prints the results of running a command in the GUI shell but be warned!
28
+ # This is a blocking call, and if you open any kind of interactive
29
+ # command-line program like python or bash, the shell will permanently
30
+ # freeze!
31
+ # If you want this kind of behavior to be available, please use ipython
32
+ # This is NOT a feature or goal of the Py project!
33
+ def sx(str=''):
34
+ print(subprocess.getoutput(str))
35
+
36
+ #cd('~',usePrint=False)