wxPython-zombie 3.1.5.8__cp313-cp313-win_amd64.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.
- wx/__init__.py +22 -0
- wx/__version__.py +9 -0
- wx/_adv.cp313-win_amd64.pyd +0 -0
- wx/_aui.cp313-win_amd64.pyd +0 -0
- wx/_core.cp313-win_amd64.pyd +0 -0
- wx/_dataview.cp313-win_amd64.pyd +0 -0
- wx/_glcanvas.cp313-win_amd64.pyd +0 -0
- wx/_grid.cp313-win_amd64.pyd +0 -0
- wx/_html.cp313-win_amd64.pyd +0 -0
- wx/_html2.cp313-win_amd64.pyd +0 -0
- wx/_media.cp313-win_amd64.pyd +0 -0
- wx/_msw.cp313-win_amd64.pyd +0 -0
- wx/_propgrid.cp313-win_amd64.pyd +0 -0
- wx/_ribbon.cp313-win_amd64.pyd +0 -0
- wx/_richtext.cp313-win_amd64.pyd +0 -0
- wx/_stc.cp313-win_amd64.pyd +0 -0
- wx/_xml.cp313-win_amd64.pyd +0 -0
- wx/_xrc.cp313-win_amd64.pyd +0 -0
- wx/adv.py +124 -0
- wx/adv.pyi +5182 -0
- wx/aui.py +77 -0
- wx/aui.pyi +3655 -0
- wx/core.py +3540 -0
- wx/core.pyi +50592 -0
- wx/dataview.py +173 -0
- wx/dataview.pyi +3491 -0
- wx/demo/AUI_DockingWindowMgr.py +1154 -0
- wx/demo/AUI_MDI.py +117 -0
- wx/demo/AUI_Notebook.py +58 -0
- wx/demo/About.py +75 -0
- wx/demo/AboutBox.py +75 -0
- wx/demo/ActiveXWrapper_Acrobat.py +132 -0
- wx/demo/ActiveXWrapper_IE.py +187 -0
- wx/demo/ActiveX_FlashWindow.py +107 -0
- wx/demo/ActiveX_IEHtmlWindow.py +242 -0
- wx/demo/ActiveX_PDFWindow.py +204 -0
- wx/demo/ActivityIndicator.py +80 -0
- wx/demo/AddPrivateFont.py +116 -0
- wx/demo/AdjustChannels.py +178 -0
- wx/demo/AlphaDrawing.py +77 -0
- wx/demo/AnalogClock.py +144 -0
- wx/demo/AnimationCtrl.py +104 -0
- wx/demo/ArtProvider.py +893 -0
- wx/demo/BannerWindow.py +1 -0
- wx/demo/BitmapButton.py +87 -0
- wx/demo/BitmapComboBox.py +63 -0
- wx/demo/BitmapFromBuffer.py +140 -0
- wx/demo/Button.py +77 -0
- wx/demo/Cairo.py +197 -0
- wx/demo/Cairo_Snippets.py +135 -0
- wx/demo/Calendar.py +660 -0
- wx/demo/CalendarCtrl.py +122 -0
- wx/demo/CheckBox.py +74 -0
- wx/demo/CheckListBox.py +79 -0
- wx/demo/CheckListCtrl.py +99 -0
- wx/demo/Choice.py +55 -0
- wx/demo/Choicebook.py +80 -0
- wx/demo/CollapsibleHeaderCtrl.py +85 -0
- wx/demo/CollapsiblePane.py +126 -0
- wx/demo/ColorPanel.py +19 -0
- wx/demo/ColourDB.py +203 -0
- wx/demo/ColourDialog.py +76 -0
- wx/demo/ColourSelect.py +119 -0
- wx/demo/ComboBox.py +111 -0
- wx/demo/ComboCtrl.py +153 -0
- wx/demo/ComboTreeBox.py +71 -0
- wx/demo/CommandLinkButton.py +50 -0
- wx/demo/ContextHelp.py +112 -0
- wx/demo/Cursor.py +336 -0
- wx/demo/CustomDragAndDrop.py +353 -0
- wx/demo/DVC_CustomRenderer.py +204 -0
- wx/demo/DVC_DataViewModel.py +365 -0
- wx/demo/DVC_IndexListModel.py +257 -0
- wx/demo/DVC_ListCtrl.py +69 -0
- wx/demo/DVC_TreeCtrl.py +76 -0
- wx/demo/DatePickerCtrl.py +68 -0
- wx/demo/DelayedResult.py +239 -0
- wx/demo/Dialog.py +169 -0
- wx/demo/DialogUnits.py +128 -0
- wx/demo/DirDialog.py +58 -0
- wx/demo/DragAndDrop.py +265 -0
- wx/demo/DragImage.py +316 -0
- wx/demo/DragScroller.py +59 -0
- wx/demo/DrawXXXList.py +436 -0
- wx/demo/DynamicSashWindow.py +177 -0
- wx/demo/EditableListBox.py +101 -0
- wx/demo/Editor.py +70 -0
- wx/demo/EventManager.py +291 -0
- wx/demo/ExpandoTextCtrl.py +164 -0
- wx/demo/FancyText.py +83 -0
- wx/demo/FileBrowseButton.py +100 -0
- wx/demo/FileCtrl.py +97 -0
- wx/demo/FileDialog.py +144 -0
- wx/demo/FileHistory.py +140 -0
- wx/demo/FindReplaceDialog.py +123 -0
- wx/demo/FloatCanvas.py +1959 -0
- wx/demo/FontDialog.py +142 -0
- wx/demo/FontEnumerator.py +82 -0
- wx/demo/Frame.py +85 -0
- wx/demo/GLCanvas.py +371 -0
- wx/demo/Gauge.py +66 -0
- wx/demo/GenericButtons.py +185 -0
- wx/demo/GenericCheckBox.py +65 -0
- wx/demo/GenericDirCtrl.py +74 -0
- wx/demo/GetMouseState.py +159 -0
- wx/demo/GraphicsContext.py +236 -0
- wx/demo/GraphicsGradient.py +281 -0
- wx/demo/Grid.py +95 -0
- wx/demo/GridBagSizer.py +170 -0
- wx/demo/GridCustEditor.py +247 -0
- wx/demo/GridCustTable.py +170 -0
- wx/demo/GridDragAndDrop.py +102 -0
- wx/demo/GridDragable.py +206 -0
- wx/demo/GridEnterHandler.py +66 -0
- wx/demo/GridHugeTable.py +89 -0
- wx/demo/GridLabelRenderer.py +114 -0
- wx/demo/GridSimple.py +270 -0
- wx/demo/GridStdEdRend.py +186 -0
- wx/demo/Grid_MegaExample.py +490 -0
- wx/demo/HTML2_WebView.py +183 -0
- wx/demo/HtmlWindow.py +232 -0
- wx/demo/I18N.py +237 -0
- wx/demo/Image.py +338 -0
- wx/demo/ImageAlpha.py +87 -0
- wx/demo/ImageBrowser.py +70 -0
- wx/demo/ImageFromStream.py +49 -0
- wx/demo/Img2PyArtProvider.py +99 -0
- wx/demo/InfoBar.py +127 -0
- wx/demo/IntCtrl.py +343 -0
- wx/demo/ItemsPicker.py +108 -0
- wx/demo/Joystick.py +1083 -0
- wx/demo/KeyEvents.py +428 -0
- wx/demo/LEDNumberCtrl.py +121 -0
- wx/demo/LayoutAnchors.py +258 -0
- wx/demo/LayoutConstraints.py +149 -0
- wx/demo/Layoutf.py +69 -0
- wx/demo/ListBox.py +164 -0
- wx/demo/ListCtrl.py +538 -0
- wx/demo/ListCtrl_edit.py +155 -0
- wx/demo/ListCtrl_virtual.py +145 -0
- wx/demo/Listbook.py +104 -0
- wx/demo/MDIDemo.py +86 -0
- wx/demo/MDISashDemo.py +152 -0
- wx/demo/MDIWindows.py +66 -0
- wx/demo/Main.py +2768 -0
- wx/demo/Mask.py +137 -0
- wx/demo/MaskedEditControls.py +648 -0
- wx/demo/MaskedNumCtrl.py +359 -0
- wx/demo/MediaCtrl.py +190 -0
- wx/demo/Menu.py +322 -0
- wx/demo/MessageDialog.py +54 -0
- wx/demo/MimeTypesManager.py +354 -0
- wx/demo/MiniFrame.py +67 -0
- wx/demo/MouseGestures.py +198 -0
- wx/demo/MultiChoiceDialog.py +59 -0
- wx/demo/MultiSash.py +95 -0
- wx/demo/MultiSplitterWindow.py +168 -0
- wx/demo/MultipleChoiceDialog.py +101 -0
- wx/demo/Notebook.py +134 -0
- wx/demo/NotificationMessage.py +61 -0
- wx/demo/OGL.py +433 -0
- wx/demo/Overlay.py +209 -0
- wx/demo/OwnerDrawnComboBox.py +152 -0
- wx/demo/PDFViewer.py +109 -0
- wx/demo/PageSetupDialog.py +70 -0
- wx/demo/PenAndBrushStyles.py +208 -0
- wx/demo/Pickers.py +120 -0
- wx/demo/PlateButton.py +430 -0
- wx/demo/PopupControl.py +99 -0
- wx/demo/PopupMenu.py +156 -0
- wx/demo/PopupWindow.py +227 -0
- wx/demo/PrintDialog.py +60 -0
- wx/demo/PrintFramework.py +227 -0
- wx/demo/Process.py +168 -0
- wx/demo/ProgressDialog.py +87 -0
- wx/demo/PropertyGrid.py +1045 -0
- wx/demo/PropertySheetDialog.py +231 -0
- wx/demo/PseudoDC.py +350 -0
- wx/demo/PyColourChooser.py +60 -0
- wx/demo/PyCrust.py +21 -0
- wx/demo/PyPlot.py +83 -0
- wx/demo/PyShell.py +22 -0
- wx/demo/PythonEvents.py +109 -0
- wx/demo/README.txt +7 -0
- wx/demo/RadioBox.py +67 -0
- wx/demo/RadioButton.py +127 -0
- wx/demo/RawBitmapAccess.py +208 -0
- wx/demo/RearrangeDialog.py +160 -0
- wx/demo/RendererNative.py +170 -0
- wx/demo/ResizeWidget.py +76 -0
- wx/demo/RichMessageDialog.py +85 -0
- wx/demo/RichTextCtrl.py +732 -0
- wx/demo/RichToolTip.py +145 -0
- wx/demo/SVGImage_Bitmap.py +130 -0
- wx/demo/SVGImage_Render.py +138 -0
- wx/demo/SashWindow.py +151 -0
- wx/demo/ScrolledMessageDialog.py +52 -0
- wx/demo/ScrolledPanel.py +124 -0
- wx/demo/ScrolledWindow.py +260 -0
- wx/demo/SearchCtrl.py +115 -0
- wx/demo/ShapedWindow.py +145 -0
- wx/demo/Simplebook.py +202 -0
- wx/demo/SingleChoiceDialog.py +56 -0
- wx/demo/SizedControls.py +433 -0
- wx/demo/Sizers.py +609 -0
- wx/demo/Slider.py +52 -0
- wx/demo/Sound.py +95 -0
- wx/demo/SpinButton.py +63 -0
- wx/demo/SpinCtrl.py +56 -0
- wx/demo/SpinCtrlDouble.py +42 -0
- wx/demo/SplitTree.py +146 -0
- wx/demo/SplitterWindow.py +62 -0
- wx/demo/StandardPaths.py +113 -0
- wx/demo/StaticBitmap.py +55 -0
- wx/demo/StaticBox.py +62 -0
- wx/demo/StaticText.py +69 -0
- wx/demo/StatusBar.py +144 -0
- wx/demo/StockButtons.py +113 -0
- wx/demo/StyledTextCtrl_1.py +303 -0
- wx/demo/StyledTextCtrl_2.py +410 -0
- wx/demo/SystemSettings.py +333 -0
- wx/demo/TablePrint.py +215 -0
- wx/demo/TestTable.txt +38 -0
- wx/demo/TextCtrl.py +187 -0
- wx/demo/TextEntryDialog.py +57 -0
- wx/demo/Threads.py +258 -0
- wx/demo/Throbber.py +250 -0
- wx/demo/Ticker.py +147 -0
- wx/demo/TimeCtrl.py +240 -0
- wx/demo/TimePickerCtrl.py +60 -0
- wx/demo/Timer.py +275 -0
- wx/demo/ToggleButton.py +54 -0
- wx/demo/ToolBar.py +249 -0
- wx/demo/ToolTip.py +71 -0
- wx/demo/Toolbook.py +111 -0
- wx/demo/TreeCtrl.py +199 -0
- wx/demo/TreeListCtrl.py +121 -0
- wx/demo/TreeMixin.py +269 -0
- wx/demo/Treebook.py +117 -0
- wx/demo/UIActionSimulator.py +151 -0
- wx/demo/URLDragAndDrop.py +130 -0
- wx/demo/Unicode.py +146 -0
- wx/demo/VListBox.py +176 -0
- wx/demo/Validator.py +237 -0
- wx/demo/Wizard.py +248 -0
- wx/demo/WrapSizer.py +115 -0
- wx/demo/XmlResource.py +80 -0
- wx/demo/XmlResourceHandler.py +199 -0
- wx/demo/XmlResourceSubclass.py +119 -0
- wx/demo/__init__.py +9 -0
- wx/demo/agw/AGWInfoBar.py +175 -0
- wx/demo/agw/AUI.py +3058 -0
- wx/demo/agw/AdvancedSplash.py +59 -0
- wx/demo/agw/AquaButton.py +146 -0
- wx/demo/agw/BalloonTip.py +378 -0
- wx/demo/agw/ButtonPanel.py +890 -0
- wx/demo/agw/CubeColourDialog.py +83 -0
- wx/demo/agw/CustomTreeCtrl.py +2167 -0
- wx/demo/agw/Example1 +67 -0
- wx/demo/agw/Example2 +49 -0
- wx/demo/agw/FlatMenu.py +876 -0
- wx/demo/agw/FlatNotebook.py +994 -0
- wx/demo/agw/FloatSpin.py +475 -0
- wx/demo/agw/FoldPanelBar.py +953 -0
- wx/demo/agw/FourWaySplitter.py +300 -0
- wx/demo/agw/GenericMessageDialog.py +207 -0
- wx/demo/agw/GradientButton.py +156 -0
- wx/demo/agw/HyperLinkCtrl.py +144 -0
- wx/demo/agw/HyperTreeList.py +2660 -0
- wx/demo/agw/KnobCtrl.py +186 -0
- wx/demo/agw/LabelBook.py +567 -0
- wx/demo/agw/MacLargeDemo.py +360 -0
- wx/demo/agw/MultiDirDialog.py +117 -0
- wx/demo/agw/PeakMeter.py +194 -0
- wx/demo/agw/PersistentControls.py +589 -0
- wx/demo/agw/PieCtrl.py +206 -0
- wx/demo/agw/PyBusyInfo.py +64 -0
- wx/demo/agw/PyCollapsiblePane.py +308 -0
- wx/demo/agw/PyGauge.py +162 -0
- wx/demo/agw/PyProgress.py +155 -0
- wx/demo/agw/RibbonBar.py +925 -0
- wx/demo/agw/RulerCtrl.py +454 -0
- wx/demo/agw/ScrolledThumbnail.py +128 -0
- wx/demo/agw/ShapedButton.py +603 -0
- wx/demo/agw/ShortcutEditor.py +397 -0
- wx/demo/agw/SpeedMeter.py +668 -0
- wx/demo/agw/SuperToolTip.py +396 -0
- wx/demo/agw/ThumbDemoConfig.py +603 -0
- wx/demo/agw/ThumbnailCtrl.py +149 -0
- wx/demo/agw/ToasterBox.py +410 -0
- wx/demo/agw/UltimateListCtrl.py +80 -0
- wx/demo/agw/UltimateListIconDemo.py +908 -0
- wx/demo/agw/UltimateListListDemo.py +124 -0
- wx/demo/agw/UltimateReportDemo.py +1146 -0
- wx/demo/agw/UltimateVirtualDemo.py +207 -0
- wx/demo/agw/Windows7Explorer_Contents.py +368 -0
- wx/demo/agw/XLSGrid.py +238 -0
- wx/demo/agw/ZoomBar.py +230 -0
- wx/demo/agw/__demo__.py +183 -0
- wx/demo/agw/bitmaps/Explorer96.png +0 -0
- wx/demo/agw/bitmaps/Explorer96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Folder96.png +0 -0
- wx/demo/agw/bitmaps/Folder96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Monitor96.png +0 -0
- wx/demo/agw/bitmaps/Monitor96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Music96.png +0 -0
- wx/demo/agw/bitmaps/Music96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Photo96.png +0 -0
- wx/demo/agw/bitmaps/Photo96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Search96.png +0 -0
- wx/demo/agw/bitmaps/Search96Flip40.png +0 -0
- wx/demo/agw/bitmaps/Wizard96.png +0 -0
- wx/demo/agw/bitmaps/Wizard96Flip40.png +0 -0
- wx/demo/agw/bitmaps/advancedsplash.png +0 -0
- wx/demo/agw/bitmaps/aquabutton.png +0 -0
- wx/demo/agw/bitmaps/aquachecked.ico +0 -0
- wx/demo/agw/bitmaps/aquaflagged.ico +0 -0
- wx/demo/agw/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/agw/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/agw/bitmaps/canada.gif +0 -0
- wx/demo/agw/bitmaps/checked.ico +0 -0
- wx/demo/agw/bitmaps/columns.png +0 -0
- wx/demo/agw/bitmaps/contexthelp-16.png +0 -0
- wx/demo/agw/bitmaps/contexthelp.png +0 -0
- wx/demo/agw/bitmaps/copy.png +0 -0
- wx/demo/agw/bitmaps/cut.png +0 -0
- wx/demo/agw/bitmaps/editcopy.png +0 -0
- wx/demo/agw/bitmaps/editcut.png +0 -0
- wx/demo/agw/bitmaps/editpaste.png +0 -0
- wx/demo/agw/bitmaps/empty_icon.png +0 -0
- wx/demo/agw/bitmaps/exit-16.png +0 -0
- wx/demo/agw/bitmaps/exit.ico +0 -0
- wx/demo/agw/bitmaps/ffwd.png +0 -0
- wx/demo/agw/bitmaps/ffwddisabled.png +0 -0
- wx/demo/agw/bitmaps/field-16.png +0 -0
- wx/demo/agw/bitmaps/filenew.png +0 -0
- wx/demo/agw/bitmaps/fileopen.png +0 -0
- wx/demo/agw/bitmaps/filesave.png +0 -0
- wx/demo/agw/bitmaps/flagged.ico +0 -0
- wx/demo/agw/bitmaps/folder.png +0 -0
- wx/demo/agw/bitmaps/folder_new.png +0 -0
- wx/demo/agw/bitmaps/ghost.png +0 -0
- wx/demo/agw/bitmaps/gradientbutton.png +0 -0
- wx/demo/agw/bitmaps/help-16.png +0 -0
- wx/demo/agw/bitmaps/help.ico +0 -0
- wx/demo/agw/bitmaps/italy.gif +0 -0
- wx/demo/agw/bitmaps/lbadd.png +0 -0
- wx/demo/agw/bitmaps/lbcharge.png +0 -0
- wx/demo/agw/bitmaps/lbdecrypted.png +0 -0
- wx/demo/agw/bitmaps/lbnews.png +0 -0
- wx/demo/agw/bitmaps/lbroll.png +0 -0
- wx/demo/agw/bitmaps/minus1.ico +0 -0
- wx/demo/agw/bitmaps/minus2.ico +0 -0
- wx/demo/agw/bitmaps/minus3.ico +0 -0
- wx/demo/agw/bitmaps/minus4.ico +0 -0
- wx/demo/agw/bitmaps/minus5.ico +0 -0
- wx/demo/agw/bitmaps/month-16.png +0 -0
- wx/demo/agw/bitmaps/new_file.png +0 -0
- wx/demo/agw/bitmaps/new_folder.png +0 -0
- wx/demo/agw/bitmaps/notchecked.ico +0 -0
- wx/demo/agw/bitmaps/notflagged.ico +0 -0
- wx/demo/agw/bitmaps/ok-16.png +0 -0
- wx/demo/agw/bitmaps/open_folder.png +0 -0
- wx/demo/agw/bitmaps/paste.png +0 -0
- wx/demo/agw/bitmaps/pause.png +0 -0
- wx/demo/agw/bitmaps/pausedisabled.png +0 -0
- wx/demo/agw/bitmaps/play.png +0 -0
- wx/demo/agw/bitmaps/playdisabled.png +0 -0
- wx/demo/agw/bitmaps/plus1.ico +0 -0
- wx/demo/agw/bitmaps/plus2.ico +0 -0
- wx/demo/agw/bitmaps/plus3.ico +0 -0
- wx/demo/agw/bitmaps/plus4.ico +0 -0
- wx/demo/agw/bitmaps/plus5.ico +0 -0
- wx/demo/agw/bitmaps/record.png +0 -0
- wx/demo/agw/bitmaps/recorddisabled.png +0 -0
- wx/demo/agw/bitmaps/recording.gif +0 -0
- wx/demo/agw/bitmaps/rewind.png +0 -0
- wx/demo/agw/bitmaps/rewinddisabled.png +0 -0
- wx/demo/agw/bitmaps/round.png +0 -0
- wx/demo/agw/bitmaps/save.png +0 -0
- wx/demo/agw/bitmaps/separator.gif +0 -0
- wx/demo/agw/bitmaps/separatorflip.png +0 -0
- wx/demo/agw/bitmaps/smfuel.ico +0 -0
- wx/demo/agw/bitmaps/smpi.ico +0 -0
- wx/demo/agw/bitmaps/smtemp.ico +0 -0
- wx/demo/agw/bitmaps/stop.png +0 -0
- wx/demo/agw/bitmaps/stopdisabled.png +0 -0
- wx/demo/agw/bitmaps/sttbutton.png +0 -0
- wx/demo/agw/bitmaps/sttfont.png +0 -0
- wx/demo/agw/bitmaps/sttheader.png +0 -0
- wx/demo/agw/bitmaps/stthelp.png +0 -0
- wx/demo/agw/bitmaps/view1.png +0 -0
- wx/demo/agw/bitmaps/view2.png +0 -0
- wx/demo/agw/bitmaps/view_choose.png +0 -0
- wx/demo/agw/bitmaps/view_detailed.png +0 -0
- wx/demo/agw/bitmaps/view_icon.png +0 -0
- wx/demo/agw/bitmaps/view_multicolumn.png +0 -0
- wx/demo/agw/bitmaps/viewmag-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/agw/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/agw/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/agw/data/Example_1.xls +0 -0
- wx/demo/agw/images.py +6714 -0
- wx/demo/bitmaps/AG00028_.gif +0 -0
- wx/demo/bitmaps/AG00039_.gif +0 -0
- wx/demo/bitmaps/AG00178_.gif +0 -0
- wx/demo/bitmaps/AG00183_.gif +0 -0
- wx/demo/bitmaps/AG00185_.gif +0 -0
- wx/demo/bitmaps/BD13656_.gif +0 -0
- wx/demo/bitmaps/advancedsplash.png +0 -0
- wx/demo/bitmaps/aquabutton.png +0 -0
- wx/demo/bitmaps/aquachecked.ico +0 -0
- wx/demo/bitmaps/aquaflagged.ico +0 -0
- wx/demo/bitmaps/aquanotchecked.ico +0 -0
- wx/demo/bitmaps/aquanotflagged.ico +0 -0
- wx/demo/bitmaps/canada.gif +0 -0
- wx/demo/bitmaps/checked.ico +0 -0
- wx/demo/bitmaps/columns.png +0 -0
- wx/demo/bitmaps/contexthelp-16.png +0 -0
- wx/demo/bitmaps/contexthelp.png +0 -0
- wx/demo/bitmaps/copy.png +0 -0
- wx/demo/bitmaps/cropshot24x20.png +0 -0
- wx/demo/bitmaps/cut.png +0 -0
- wx/demo/bitmaps/editcopy.png +0 -0
- wx/demo/bitmaps/editcut.png +0 -0
- wx/demo/bitmaps/editpaste.png +0 -0
- wx/demo/bitmaps/exit-16.png +0 -0
- wx/demo/bitmaps/exit.ico +0 -0
- wx/demo/bitmaps/ffwd.png +0 -0
- wx/demo/bitmaps/ffwddisabled.png +0 -0
- wx/demo/bitmaps/field-16.png +0 -0
- wx/demo/bitmaps/filenew.png +0 -0
- wx/demo/bitmaps/fileopen.png +0 -0
- wx/demo/bitmaps/filesave.png +0 -0
- wx/demo/bitmaps/flagged.ico +0 -0
- wx/demo/bitmaps/folder_new.png +0 -0
- wx/demo/bitmaps/ghost.png +0 -0
- wx/demo/bitmaps/gradientbutton.png +0 -0
- wx/demo/bitmaps/help-16.png +0 -0
- wx/demo/bitmaps/help.ico +0 -0
- wx/demo/bitmaps/honeycomb300.png +0 -0
- wx/demo/bitmaps/image.bmp +0 -0
- wx/demo/bitmaps/image.gif +0 -0
- wx/demo/bitmaps/image.ico +0 -0
- wx/demo/bitmaps/image.jpg +0 -0
- wx/demo/bitmaps/image.png +0 -0
- wx/demo/bitmaps/image.tif +0 -0
- wx/demo/bitmaps/italy.gif +0 -0
- wx/demo/bitmaps/lbadd.png +0 -0
- wx/demo/bitmaps/lbcharge.png +0 -0
- wx/demo/bitmaps/lbdecrypted.png +0 -0
- wx/demo/bitmaps/lbnews.png +0 -0
- wx/demo/bitmaps/lbroll.png +0 -0
- wx/demo/bitmaps/minus1.ico +0 -0
- wx/demo/bitmaps/minus2.ico +0 -0
- wx/demo/bitmaps/minus3.ico +0 -0
- wx/demo/bitmaps/minus4.ico +0 -0
- wx/demo/bitmaps/minus5.ico +0 -0
- wx/demo/bitmaps/month-16.png +0 -0
- wx/demo/bitmaps/new_file.png +0 -0
- wx/demo/bitmaps/new_folder.png +0 -0
- wx/demo/bitmaps/notchecked.ico +0 -0
- wx/demo/bitmaps/notflagged.ico +0 -0
- wx/demo/bitmaps/ok-16.png +0 -0
- wx/demo/bitmaps/open_folder.png +0 -0
- wx/demo/bitmaps/paste.png +0 -0
- wx/demo/bitmaps/pause.png +0 -0
- wx/demo/bitmaps/pausedisabled.png +0 -0
- wx/demo/bitmaps/phoenix_title.png +0 -0
- wx/demo/bitmaps/phoenix_top.png +0 -0
- wx/demo/bitmaps/play.png +0 -0
- wx/demo/bitmaps/playdisabled.png +0 -0
- wx/demo/bitmaps/plus1.ico +0 -0
- wx/demo/bitmaps/plus2.ico +0 -0
- wx/demo/bitmaps/plus3.ico +0 -0
- wx/demo/bitmaps/plus4.ico +0 -0
- wx/demo/bitmaps/plus5.ico +0 -0
- wx/demo/bitmaps/record.png +0 -0
- wx/demo/bitmaps/recorddisabled.png +0 -0
- wx/demo/bitmaps/rewind.png +0 -0
- wx/demo/bitmaps/rewinddisabled.png +0 -0
- wx/demo/bitmaps/round.png +0 -0
- wx/demo/bitmaps/save.png +0 -0
- wx/demo/bitmaps/smfuel.ico +0 -0
- wx/demo/bitmaps/smpi.ico +0 -0
- wx/demo/bitmaps/smtemp.ico +0 -0
- wx/demo/bitmaps/snakey_render.png +0 -0
- wx/demo/bitmaps/splash.png +0 -0
- wx/demo/bitmaps/stop.png +0 -0
- wx/demo/bitmaps/stopdisabled.png +0 -0
- wx/demo/bitmaps/sttbutton.png +0 -0
- wx/demo/bitmaps/sttfont.png +0 -0
- wx/demo/bitmaps/sttheader.png +0 -0
- wx/demo/bitmaps/stthelp.png +0 -0
- wx/demo/bitmaps/toucan.png +0 -0
- wx/demo/bitmaps/view1.png +0 -0
- wx/demo/bitmaps/view2.png +0 -0
- wx/demo/bitmaps/view_choose.png +0 -0
- wx/demo/bitmaps/view_detailed.png +0 -0
- wx/demo/bitmaps/view_icon.png +0 -0
- wx/demo/bitmaps/view_multicolumn.png +0 -0
- wx/demo/bitmaps/viewmag-16.png +0 -0
- wx/demo/bitmaps/viewmag-m-16.png +0 -0
- wx/demo/bitmaps/viewmag-p-16.png +0 -0
- wx/demo/bitmaps/viewmagfit-16.png +0 -0
- wx/demo/bmp_source/001.png +0 -0
- wx/demo/bmp_source/002.png +0 -0
- wx/demo/bmp_source/003.png +0 -0
- wx/demo/bmp_source/004.png +0 -0
- wx/demo/bmp_source/005.png +0 -0
- wx/demo/bmp_source/006.png +0 -0
- wx/demo/bmp_source/007.png +0 -0
- wx/demo/bmp_source/008.png +0 -0
- wx/demo/bmp_source/009.png +0 -0
- wx/demo/bmp_source/010.png +0 -0
- wx/demo/bmp_source/011.png +0 -0
- wx/demo/bmp_source/012.png +0 -0
- wx/demo/bmp_source/013.png +0 -0
- wx/demo/bmp_source/014.png +0 -0
- wx/demo/bmp_source/015.png +0 -0
- wx/demo/bmp_source/016.png +0 -0
- wx/demo/bmp_source/017.png +0 -0
- wx/demo/bmp_source/018.png +0 -0
- wx/demo/bmp_source/019.png +0 -0
- wx/demo/bmp_source/020.png +0 -0
- wx/demo/bmp_source/021.png +0 -0
- wx/demo/bmp_source/022.png +0 -0
- wx/demo/bmp_source/023.png +0 -0
- wx/demo/bmp_source/024.png +0 -0
- wx/demo/bmp_source/025.png +0 -0
- wx/demo/bmp_source/026.png +0 -0
- wx/demo/bmp_source/027.png +0 -0
- wx/demo/bmp_source/028.png +0 -0
- wx/demo/bmp_source/029.png +0 -0
- wx/demo/bmp_source/030.png +0 -0
- wx/demo/bmp_source/DbDec.bmp +0 -0
- wx/demo/bmp_source/DbInc.bmp +0 -0
- wx/demo/bmp_source/Dec.bmp +0 -0
- wx/demo/bmp_source/FRM_0.png +0 -0
- wx/demo/bmp_source/FRM_1.png +0 -0
- wx/demo/bmp_source/FRM_2.png +0 -0
- wx/demo/bmp_source/FRM_3.png +0 -0
- wx/demo/bmp_source/FRM_4.png +0 -0
- wx/demo/bmp_source/FRM_5.png +0 -0
- wx/demo/bmp_source/FRM_6.png +0 -0
- wx/demo/bmp_source/FRM_7.png +0 -0
- wx/demo/bmp_source/FRM_8.png +0 -0
- wx/demo/bmp_source/GridBG.gif +0 -0
- wx/demo/bmp_source/Inc.bmp +0 -0
- wx/demo/bmp_source/LB01.png +0 -0
- wx/demo/bmp_source/LB02.png +0 -0
- wx/demo/bmp_source/LB03.png +0 -0
- wx/demo/bmp_source/LB04.png +0 -0
- wx/demo/bmp_source/LB05.png +0 -0
- wx/demo/bmp_source/LB06.png +0 -0
- wx/demo/bmp_source/LB07.png +0 -0
- wx/demo/bmp_source/LB08.png +0 -0
- wx/demo/bmp_source/LB09.png +0 -0
- wx/demo/bmp_source/LB10.png +0 -0
- wx/demo/bmp_source/LB11.png +0 -0
- wx/demo/bmp_source/LB12.png +0 -0
- wx/demo/bmp_source/Pt.bmp +0 -0
- wx/demo/bmp_source/Vippi.png +0 -0
- wx/demo/bmp_source/backgrnd.png +0 -0
- wx/demo/bmp_source/book.png +0 -0
- wx/demo/bmp_source/book_blue.png +0 -0
- wx/demo/bmp_source/book_green.png +0 -0
- wx/demo/bmp_source/book_red.png +0 -0
- wx/demo/bmp_source/bp_btn1.png +0 -0
- wx/demo/bmp_source/bp_btn2.png +0 -0
- wx/demo/bmp_source/bp_btn3.png +0 -0
- wx/demo/bmp_source/bp_btn4.png +0 -0
- wx/demo/bmp_source/bulb1.bmp +0 -0
- wx/demo/bmp_source/bulb2.bmp +0 -0
- wx/demo/bmp_source/carrot.png +0 -0
- wx/demo/bmp_source/clipboard.png +0 -0
- wx/demo/bmp_source/code.png +0 -0
- wx/demo/bmp_source/core.png +0 -0
- wx/demo/bmp_source/custom.png +0 -0
- wx/demo/bmp_source/customcontrol.png +0 -0
- wx/demo/bmp_source/deletedocs.png +0 -0
- wx/demo/bmp_source/deleteperspective.png +0 -0
- wx/demo/bmp_source/demo.png +0 -0
- wx/demo/bmp_source/dialog.png +0 -0
- wx/demo/bmp_source/exit.png +0 -0
- wx/demo/bmp_source/expansion.png +0 -0
- wx/demo/bmp_source/find.png +0 -0
- wx/demo/bmp_source/findnext.png +0 -0
- wx/demo/bmp_source/floatcanvas.png +0 -0
- wx/demo/bmp_source/frame.png +0 -0
- wx/demo/bmp_source/images.png +0 -0
- wx/demo/bmp_source/inspect.png +0 -0
- wx/demo/bmp_source/layout.png +0 -0
- wx/demo/bmp_source/logo.png +0 -0
- wx/demo/bmp_source/miscellaneous.png +0 -0
- wx/demo/bmp_source/modifiedexists.png +0 -0
- wx/demo/bmp_source/mondrian.ico +0 -0
- wx/demo/bmp_source/morecontrols.png +0 -0
- wx/demo/bmp_source/moredialog.png +0 -0
- wx/demo/bmp_source/noicon.png +0 -0
- wx/demo/bmp_source/overview.png +0 -0
- wx/demo/bmp_source/pencil.png +0 -0
- wx/demo/bmp_source/pointy.png +0 -0
- wx/demo/bmp_source/process.png +0 -0
- wx/demo/bmp_source/pyshell.png +0 -0
- wx/demo/bmp_source/recent.png +0 -0
- wx/demo/bmp_source/rest.png +0 -0
- wx/demo/bmp_source/robin.jpg +0 -0
- wx/demo/bmp_source/rt_alignleft.xpm +24 -0
- wx/demo/bmp_source/rt_alignright.xpm +24 -0
- wx/demo/bmp_source/rt_bold.xpm +24 -0
- wx/demo/bmp_source/rt_centre.xpm +24 -0
- wx/demo/bmp_source/rt_colour.xpm +59 -0
- wx/demo/bmp_source/rt_copy.xpm +44 -0
- wx/demo/bmp_source/rt_cut.xpm +46 -0
- wx/demo/bmp_source/rt_font.xpm +25 -0
- wx/demo/bmp_source/rt_idea.xpm +47 -0
- wx/demo/bmp_source/rt_indentless.xpm +25 -0
- wx/demo/bmp_source/rt_indentmore.xpm +25 -0
- wx/demo/bmp_source/rt_italic.xpm +25 -0
- wx/demo/bmp_source/rt_open.xpm +57 -0
- wx/demo/bmp_source/rt_paste.xpm +46 -0
- wx/demo/bmp_source/rt_redo.xpm +58 -0
- wx/demo/bmp_source/rt_sample.xpm +44 -0
- wx/demo/bmp_source/rt_save.xpm +42 -0
- wx/demo/bmp_source/rt_smiley.xpm +42 -0
- wx/demo/bmp_source/rt_underline.xpm +25 -0
- wx/demo/bmp_source/rt_undo.xpm +58 -0
- wx/demo/bmp_source/rt_zebra.xpm +409 -0
- wx/demo/bmp_source/saveperspective.png +0 -0
- wx/demo/bmp_source/sm_down.bmp +0 -0
- wx/demo/bmp_source/sm_up.bmp +0 -0
- wx/demo/bmp_source/smiles2.bmp +0 -0
- wx/demo/bmp_source/test2.bmp +0 -0
- wx/demo/bmp_source/testmask.bmp +0 -0
- wx/demo/bmp_source/teststar.png +0 -0
- wx/demo/bmp_source/thekid.png +0 -0
- wx/demo/bmp_source/tog1.bmp +0 -0
- wx/demo/bmp_source/tog2.bmp +0 -0
- wx/demo/bmp_source/wiztest1.bmp +0 -0
- wx/demo/bmp_source/wiztest2.bmp +0 -0
- wx/demo/bmp_source/wxpdemo.ico +0 -0
- wx/demo/cursors/paperairplane_arrow_blue.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_blue_fadeout80.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_colorshift.ani +0 -0
- wx/demo/cursors/paperairplane_arrow_dark.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_grey.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_red.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white.cur +0 -0
- wx/demo/cursors/paperairplane_arrow_white24.png +0 -0
- wx/demo/data/0-tiger.svg +725 -0
- wx/demo/data/Asteroid_blaster.swf +0 -0
- wx/demo/data/SIL_OPEN_FONT_LICENSE.txt +97 -0
- wx/demo/data/SourceCodePro-Regular.ttf +0 -0
- wx/demo/data/accessories-calculator.svg +636 -0
- wx/demo/data/accessories-text-editor.svg +554 -0
- wx/demo/data/anykey.wav +0 -0
- wx/demo/data/applications-internet.svg +623 -0
- wx/demo/data/desktop-accessibility.svg +245 -0
- wx/demo/data/desktop-keyboard-shortcuts.svg +839 -0
- wx/demo/data/desktop-locale.svg +878 -0
- wx/demo/data/desktop-remote-desktop.svg +1479 -0
- wx/demo/data/desktop-theme.svg +882 -0
- wx/demo/data/desktop-wallpaper.svg +747 -0
- wx/demo/data/echo.py +25 -0
- wx/demo/data/imagemap.htm +20 -0
- wx/demo/data/imagemap.png +0 -0
- wx/demo/data/internet-group-chat.svg +312 -0
- wx/demo/data/internet-mail.svg +440 -0
- wx/demo/data/locale/af/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/de/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/es/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/fr/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale/it/LC_MESSAGES/wxpydemo.mo +0 -0
- wx/demo/data/locale-src/af.po +23 -0
- wx/demo/data/locale-src/de.po +23 -0
- wx/demo/data/locale-src/es.po +22 -0
- wx/demo/data/locale-src/fr.po +22 -0
- wx/demo/data/locale-src/install +15 -0
- wx/demo/data/locale-src/it.po +23 -0
- wx/demo/data/locale-src/wxpydemo.po +21 -0
- wx/demo/data/office-calendar.svg +316 -0
- wx/demo/data/pic.png +0 -0
- wx/demo/data/pic2.bmp +0 -0
- wx/demo/data/plan.wav +0 -0
- wx/demo/data/proclamation.txt +115 -0
- wx/demo/data/resource.wdr +0 -0
- wx/demo/data/resource_wdr.xrc +146 -0
- wx/demo/data/romedalen.png +0 -0
- wx/demo/data/stc.h.html +3544 -0
- wx/demo/data/system-session.svg +510 -0
- wx/demo/data/system-users.svg +539 -0
- wx/demo/data/tables.htm +116 -0
- wx/demo/data/test-gradient-pen.svg +14 -0
- wx/demo/data/test-opacity.svg +7 -0
- wx/demo/data/test.htm +253 -0
- wx/demo/data/testmovie.mpg +0 -0
- wx/demo/data/testtable.txt +38 -0
- wx/demo/data/tips.txt +73 -0
- wx/demo/data/utilities-system-monitor.svg +435 -0
- wx/demo/data/utilities-terminal.svg +500 -0
- wx/demo/data/widgetTest.htm +70 -0
- wx/demo/data/world.dat +24055 -0
- wx/demo/demo.py +4 -0
- wx/demo/demo.pyw +4 -0
- wx/demo/demodata.py +310 -0
- wx/demo/encode_bitmaps.py +181 -0
- wx/demo/images.py +6812 -0
- wx/demo/infoframe.py +149 -0
- wx/demo/run.py +171 -0
- wx/demo/snippets/__init__.py +13 -0
- wx/demo/snippets/arc.py +21 -0
- wx/demo/snippets/arc_negative.py +21 -0
- wx/demo/snippets/clip.py +13 -0
- wx/demo/snippets/clip_image.py +13 -0
- wx/demo/snippets/curve_rectangle.py +53 -0
- wx/demo/snippets/curve_to.py +17 -0
- wx/demo/snippets/dash.py +18 -0
- wx/demo/snippets/ellipse.py +33 -0
- wx/demo/snippets/fill_and_stroke.py +12 -0
- wx/demo/snippets/fill_and_stroke2.py +18 -0
- wx/demo/snippets/fill_style.py +31 -0
- wx/demo/snippets/glyph_path.py +21 -0
- wx/demo/snippets/gradient.py +16 -0
- wx/demo/snippets/gradient_mask.py +12 -0
- wx/demo/snippets/group.py +16 -0
- wx/demo/snippets/image.py +14 -0
- wx/demo/snippets/imagepattern.py +23 -0
- wx/demo/snippets/path.py +7 -0
- wx/demo/snippets/set_line_cap.py +19 -0
- wx/demo/snippets/set_line_join.py +21 -0
- wx/demo/snippets/show_glyphs.py +15 -0
- wx/demo/snippets/text.py +22 -0
- wx/demo/snippets/text_align_center.py +26 -0
- wx/demo/snippets/text_extents.py +27 -0
- wx/demo/template.py +36 -0
- wx/demo/throbImages.py +1277 -0
- wx/demo/version.py +3 -0
- wx/demo/widgetTest.py +72 -0
- wx/demo/wxpdemo.ico +0 -0
- wx/glcanvas.py +10 -0
- wx/glcanvas.pyi +458 -0
- wx/grid.py +229 -0
- wx/grid.pyi +4959 -0
- wx/html.py +35 -0
- wx/html.pyi +2965 -0
- wx/html2.py +40 -0
- wx/html2.pyi +772 -0
- wx/lib/CDate.py +202 -0
- wx/lib/ClickableHtmlWindow.py +57 -0
- wx/lib/__init__.py +0 -0
- wx/lib/activex.py +178 -0
- wx/lib/activexwrapper.py +153 -0
- wx/lib/agw/__init__.py +128 -0
- wx/lib/agw/advancedsplash.py +564 -0
- wx/lib/agw/aquabutton.py +1127 -0
- wx/lib/agw/artmanager.py +2110 -0
- wx/lib/agw/aui/__init__.py +295 -0
- wx/lib/agw/aui/aui_constants.py +2628 -0
- wx/lib/agw/aui/aui_switcherdialog.py +1227 -0
- wx/lib/agw/aui/aui_utilities.py +672 -0
- wx/lib/agw/aui/auibar.py +4031 -0
- wx/lib/agw/aui/auibook.py +6289 -0
- wx/lib/agw/aui/dockart.py +1198 -0
- wx/lib/agw/aui/framemanager.py +10409 -0
- wx/lib/agw/aui/tabart.py +2771 -0
- wx/lib/agw/aui/tabmdi.py +679 -0
- wx/lib/agw/balloontip.py +1158 -0
- wx/lib/agw/buttonpanel.py +2823 -0
- wx/lib/agw/cubecolourdialog.py +3529 -0
- wx/lib/agw/customtreectrl.py +8963 -0
- wx/lib/agw/data/ShortcutEditor_1.png +0 -0
- wx/lib/agw/data/ShortcutEditor_1_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2.png +0 -0
- wx/lib/agw/data/ShortcutEditor_2_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3.png +0 -0
- wx/lib/agw/data/ShortcutEditor_3_thumb.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4.png +0 -0
- wx/lib/agw/data/ShortcutEditor_4_thumb.png +0 -0
- wx/lib/agw/data/default_help_text.html +105 -0
- wx/lib/agw/flatmenu.py +7333 -0
- wx/lib/agw/flatnotebook.py +6672 -0
- wx/lib/agw/floatspin.py +1823 -0
- wx/lib/agw/fmcustomizedlg.py +540 -0
- wx/lib/agw/fmresources.py +407 -0
- wx/lib/agw/foldpanelbar.py +2282 -0
- wx/lib/agw/fourwaysplitter.py +1130 -0
- wx/lib/agw/genericmessagedialog.py +1549 -0
- wx/lib/agw/gradientbutton.py +732 -0
- wx/lib/agw/hyperlink.py +664 -0
- wx/lib/agw/hypertreelist.py +5374 -0
- wx/lib/agw/infobar.py +885 -0
- wx/lib/agw/knobctrl.py +945 -0
- wx/lib/agw/labelbook.py +3029 -0
- wx/lib/agw/multidirdialog.py +615 -0
- wx/lib/agw/peakmeter.py +1029 -0
- wx/lib/agw/persist/__init__.py +188 -0
- wx/lib/agw/persist/persist_constants.py +284 -0
- wx/lib/agw/persist/persist_handlers.py +2614 -0
- wx/lib/agw/persist/persistencemanager.py +864 -0
- wx/lib/agw/piectrl.py +1082 -0
- wx/lib/agw/pybusyinfo.py +399 -0
- wx/lib/agw/pycollapsiblepane.py +940 -0
- wx/lib/agw/pygauge.py +570 -0
- wx/lib/agw/pyprogress.py +917 -0
- wx/lib/agw/ribbon/__init__.py +198 -0
- wx/lib/agw/ribbon/art.py +219 -0
- wx/lib/agw/ribbon/art_aui.py +1284 -0
- wx/lib/agw/ribbon/art_default.py +81 -0
- wx/lib/agw/ribbon/art_internal.py +244 -0
- wx/lib/agw/ribbon/art_msw.py +2736 -0
- wx/lib/agw/ribbon/art_osx.py +52 -0
- wx/lib/agw/ribbon/bar.py +1261 -0
- wx/lib/agw/ribbon/buttonbar.py +1320 -0
- wx/lib/agw/ribbon/control.py +205 -0
- wx/lib/agw/ribbon/gallery.py +974 -0
- wx/lib/agw/ribbon/page.py +946 -0
- wx/lib/agw/ribbon/panel.py +1170 -0
- wx/lib/agw/ribbon/toolbar.py +1442 -0
- wx/lib/agw/rulerctrl.py +1887 -0
- wx/lib/agw/scrolledthumbnail.py +2119 -0
- wx/lib/agw/shapedbutton.py +1809 -0
- wx/lib/agw/shortcuteditor.py +2634 -0
- wx/lib/agw/speedmeter.py +1801 -0
- wx/lib/agw/supertooltip.py +1444 -0
- wx/lib/agw/thumbnailctrl.py +529 -0
- wx/lib/agw/toasterbox.py +1327 -0
- wx/lib/agw/ultimatelistctrl.py +13666 -0
- wx/lib/agw/xlsgrid.py +2113 -0
- wx/lib/agw/zoombar.py +1339 -0
- wx/lib/analogclock/__init__.py +140 -0
- wx/lib/analogclock/analogclock.py +631 -0
- wx/lib/analogclock/helpers.py +991 -0
- wx/lib/analogclock/lib_setup/__init__.py +0 -0
- wx/lib/analogclock/lib_setup/buttontreectrlpanel.py +297 -0
- wx/lib/analogclock/lib_setup/fontselect.py +57 -0
- wx/lib/analogclock/setup.py +490 -0
- wx/lib/analogclock/styles.py +47 -0
- wx/lib/anchors.py +103 -0
- wx/lib/art/__init__.py +4 -0
- wx/lib/art/flagart.py +1583 -0
- wx/lib/art/img2pyartprov.py +56 -0
- wx/lib/busy.py +146 -0
- wx/lib/buttons.py +1141 -0
- wx/lib/calendar.py +1597 -0
- wx/lib/checkbox.py +837 -0
- wx/lib/colourchooser/__init__.py +38 -0
- wx/lib/colourchooser/canvas.py +145 -0
- wx/lib/colourchooser/intl.py +24 -0
- wx/lib/colourchooser/pycolourbox.py +89 -0
- wx/lib/colourchooser/pycolourchooser.py +629 -0
- wx/lib/colourchooser/pycolourslider.py +100 -0
- wx/lib/colourchooser/pypalette.py +211 -0
- wx/lib/colourdb.py +740 -0
- wx/lib/colourselect.py +385 -0
- wx/lib/colourutils.py +118 -0
- wx/lib/combotreebox.py +944 -0
- wx/lib/delayedresult.py +420 -0
- wx/lib/dialogs.py +510 -0
- wx/lib/docview.py +3210 -0
- wx/lib/dragscroller.py +79 -0
- wx/lib/editor/README.txt +77 -0
- wx/lib/editor/__init__.py +24 -0
- wx/lib/editor/editor.py +974 -0
- wx/lib/editor/images.py +15 -0
- wx/lib/editor/selection.py +44 -0
- wx/lib/embeddedimage.py +76 -0
- wx/lib/eventStack.py +136 -0
- wx/lib/eventwatcher.py +440 -0
- wx/lib/evtmgr.py +521 -0
- wx/lib/expando.py +393 -0
- wx/lib/fancytext.py +505 -0
- wx/lib/filebrowsebutton.py +459 -0
- wx/lib/flashwin.py +262 -0
- wx/lib/flashwin_old.py +651 -0
- wx/lib/floatcanvas/FCEvents.py +53 -0
- wx/lib/floatcanvas/FCObjects.py +2923 -0
- wx/lib/floatcanvas/FloatCanvas.py +1027 -0
- wx/lib/floatcanvas/GUIMode.py +396 -0
- wx/lib/floatcanvas/NavCanvas.py +161 -0
- wx/lib/floatcanvas/Resources.py +319 -0
- wx/lib/floatcanvas/ScreenShot.py +1788 -0
- wx/lib/floatcanvas/Utilities/BBox.py +314 -0
- wx/lib/floatcanvas/Utilities/Colors.py +137 -0
- wx/lib/floatcanvas/Utilities/GUI.py +91 -0
- wx/lib/floatcanvas/Utilities/__init__.py +7 -0
- wx/lib/floatcanvas/__init__.py +124 -0
- wx/lib/foldmenu.py +89 -0
- wx/lib/gestures.py +310 -0
- wx/lib/gizmos/__init__.py +18 -0
- wx/lib/gizmos/dynamicsash.py +1202 -0
- wx/lib/gizmos/ledctrl.py +300 -0
- wx/lib/gizmos/treelistctrl.py +87 -0
- wx/lib/graphics.py +1939 -0
- wx/lib/gridmovers.py +511 -0
- wx/lib/iewin.py +249 -0
- wx/lib/iewin_old.py +894 -0
- wx/lib/imagebrowser.py +856 -0
- wx/lib/imageutils.py +163 -0
- wx/lib/infoframe.py +490 -0
- wx/lib/inspection.py +1255 -0
- wx/lib/intctrl.py +1001 -0
- wx/lib/itemspicker.py +256 -0
- wx/lib/langlistctrl.py +480 -0
- wx/lib/layoutf.py +271 -0
- wx/lib/masked/__init__.py +27 -0
- wx/lib/masked/combobox.py +839 -0
- wx/lib/masked/ctrl.py +108 -0
- wx/lib/masked/ipaddrctrl.py +242 -0
- wx/lib/masked/maskededit.py +7279 -0
- wx/lib/masked/numctrl.py +2001 -0
- wx/lib/masked/textctrl.py +465 -0
- wx/lib/masked/timectrl.py +1466 -0
- wx/lib/mixins/__init__.py +17 -0
- wx/lib/mixins/grid.py +47 -0
- wx/lib/mixins/gridlabelrenderer.py +251 -0
- wx/lib/mixins/imagelist.py +77 -0
- wx/lib/mixins/inspection.py +184 -0
- wx/lib/mixins/listctrl.py +894 -0
- wx/lib/mixins/rubberband.py +404 -0
- wx/lib/mixins/treemixin.py +678 -0
- wx/lib/msgpanel.py +95 -0
- wx/lib/multisash.py +747 -0
- wx/lib/myole4ax.idl +178 -0
- wx/lib/myole4ax.tlb +0 -0
- wx/lib/newevent.py +229 -0
- wx/lib/nvdlg.py +156 -0
- wx/lib/ogl/__init__.py +13 -0
- wx/lib/ogl/basic.py +3991 -0
- wx/lib/ogl/bmpshape.py +87 -0
- wx/lib/ogl/canvas.py +467 -0
- wx/lib/ogl/composit.py +1577 -0
- wx/lib/ogl/diagram.py +230 -0
- wx/lib/ogl/divided.py +483 -0
- wx/lib/ogl/drawn.py +900 -0
- wx/lib/ogl/lines.py +1811 -0
- wx/lib/ogl/oglmisc.py +608 -0
- wx/lib/pdfviewer/__init__.py +113 -0
- wx/lib/pdfviewer/bitmaps/ArrowLeft.png +0 -0
- wx/lib/pdfviewer/bitmaps/ArrowRight.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionH.png +0 -0
- wx/lib/pdfviewer/bitmaps/DirectionV.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerFirst.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerLast.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerNext.png +0 -0
- wx/lib/pdfviewer/bitmaps/PlayerPrev.png +0 -0
- wx/lib/pdfviewer/bitmaps/Printer.png +0 -0
- wx/lib/pdfviewer/bitmaps/ReadMe.txt +28 -0
- wx/lib/pdfviewer/bitmaps/Save.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomIn.png +0 -0
- wx/lib/pdfviewer/bitmaps/ZoomOut.png +0 -0
- wx/lib/pdfviewer/bitmaps/encode_bitmaps.py +37 -0
- wx/lib/pdfviewer/buttonpanel.py +279 -0
- wx/lib/pdfviewer/images.py +240 -0
- wx/lib/pdfviewer/viewer.py +1077 -0
- wx/lib/pdfwin.py +295 -0
- wx/lib/pdfwin_old.py +789 -0
- wx/lib/platebtn.py +789 -0
- wx/lib/plot/CHANGELOG.md +150 -0
- wx/lib/plot/README.md +16 -0
- wx/lib/plot/__init__.py +46 -0
- wx/lib/plot/__main__.py +5 -0
- wx/lib/plot/examples/__init__.py +0 -0
- wx/lib/plot/examples/demo.py +1009 -0
- wx/lib/plot/examples/simple_example.py +54 -0
- wx/lib/plot/plotcanvas.py +2981 -0
- wx/lib/plot/polyobjects.py +1525 -0
- wx/lib/plot/utils.py +327 -0
- wx/lib/popupctl.py +250 -0
- wx/lib/printout.py +1157 -0
- wx/lib/progressindicator.py +151 -0
- wx/lib/pubsub/LICENSE_BSD_Simple.txt +23 -0
- wx/lib/pubsub/README_WxPython.txt +22 -0
- wx/lib/pubsub/RELEASE_NOTES.txt +71 -0
- wx/lib/pubsub/__init__.py +25 -0
- wx/lib/pubsub/core/__init__.py +92 -0
- wx/lib/pubsub/core/arg1/__init__.py +16 -0
- wx/lib/pubsub/core/arg1/listenerimpl.py +97 -0
- wx/lib/pubsub/core/arg1/publisher.py +40 -0
- wx/lib/pubsub/core/arg1/publishermixin.py +34 -0
- wx/lib/pubsub/core/arg1/topicargspecimpl.py +66 -0
- wx/lib/pubsub/core/arg1/topicmgrimpl.py +19 -0
- wx/lib/pubsub/core/callables.py +191 -0
- wx/lib/pubsub/core/imp2.py +63 -0
- wx/lib/pubsub/core/itopicdefnprovider.py +0 -0
- wx/lib/pubsub/core/kwargs/__init__.py +16 -0
- wx/lib/pubsub/core/kwargs/datamsg.py +27 -0
- wx/lib/pubsub/core/kwargs/listenerimpl.py +93 -0
- wx/lib/pubsub/core/kwargs/publisher.py +77 -0
- wx/lib/pubsub/core/kwargs/publishermixin.py +65 -0
- wx/lib/pubsub/core/kwargs/topicargspecimpl.py +217 -0
- wx/lib/pubsub/core/kwargs/topicmgrimpl.py +13 -0
- wx/lib/pubsub/core/listener.py +40 -0
- wx/lib/pubsub/core/listenerbase.py +185 -0
- wx/lib/pubsub/core/notificationmgr.py +185 -0
- wx/lib/pubsub/core/publisherbase.py +191 -0
- wx/lib/pubsub/core/topicargspec.py +77 -0
- wx/lib/pubsub/core/topicdefnprovider.py +632 -0
- wx/lib/pubsub/core/topicexc.py +72 -0
- wx/lib/pubsub/core/topicmgr.py +456 -0
- wx/lib/pubsub/core/topicobj.py +472 -0
- wx/lib/pubsub/core/topictreetraverser.py +143 -0
- wx/lib/pubsub/core/topicutils.py +118 -0
- wx/lib/pubsub/core/treeconfig.py +21 -0
- wx/lib/pubsub/core/validatedefnargs.py +29 -0
- wx/lib/pubsub/core/weakmethod.py +102 -0
- wx/lib/pubsub/policies.py +24 -0
- wx/lib/pubsub/pub.py +199 -0
- wx/lib/pubsub/py2and3.py +608 -0
- wx/lib/pubsub/setuparg1.py +47 -0
- wx/lib/pubsub/setupkwargs.py +29 -0
- wx/lib/pubsub/utils/__init__.py +27 -0
- wx/lib/pubsub/utils/exchandling.py +100 -0
- wx/lib/pubsub/utils/misc.py +100 -0
- wx/lib/pubsub/utils/notification.py +331 -0
- wx/lib/pubsub/utils/topictreeprinter.py +195 -0
- wx/lib/pubsub/utils/xmltopicdefnprovider.py +287 -0
- wx/lib/pydocview.py +3300 -0
- wx/lib/rcsizer.py +229 -0
- wx/lib/resizewidget.py +357 -0
- wx/lib/scrolledpanel.py +225 -0
- wx/lib/sheet.py +350 -0
- wx/lib/sized_controls.py +691 -0
- wx/lib/softwareupdate.py +361 -0
- wx/lib/splitter.py +925 -0
- wx/lib/statbmp.py +199 -0
- wx/lib/stattext.py +322 -0
- wx/lib/throbber.py +425 -0
- wx/lib/ticker.py +295 -0
- wx/lib/ticker_xrc.py +48 -0
- wx/lib/utils.py +89 -0
- wx/lib/wordwrap.py +97 -0
- wx/lib/wxcairo/__init__.py +124 -0
- wx/lib/wxcairo/wx_cairocffi.py +200 -0
- wx/lib/wxcairo/wx_pycairo.py +463 -0
- wx/lib/wxpTag.py +274 -0
- wx/locale/af/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/an/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ar/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ca@valencia/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/cs/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/da/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/de/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/el/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/es/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/eu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fa_IR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/fr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/gl_ES/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/hu/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/id/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/it/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ja/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ka/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ko_KR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/lv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ms/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nb/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ne/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/nl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/pt_BR/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ro/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ru/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sl/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sq/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/sv/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/ta/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/tr/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/uk/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/vi/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_CN/LC_MESSAGES/wxstd.mo +0 -0
- wx/locale/zh_TW/LC_MESSAGES/wxstd.mo +0 -0
- wx/media.py +27 -0
- wx/media.pyi +223 -0
- wx/msw.py +13 -0
- wx/msw.pyi +65 -0
- wx/propgrid.py +1451 -0
- wx/propgrid.pyi +7914 -0
- wx/py/CHANGES.txt +796 -0
- wx/py/Py.ico +0 -0
- wx/py/PyAlaCarte.py +34 -0
- wx/py/PyAlaMode.py +34 -0
- wx/py/PyAlaModeTest.py +33 -0
- wx/py/PyCrust.ico +0 -0
- wx/py/PyCrust.py +78 -0
- wx/py/PyCrust_16.png +0 -0
- wx/py/PyCrust_32.png +0 -0
- wx/py/PyFilling.py +35 -0
- wx/py/PyShell.py +78 -0
- wx/py/PySlices.ico +0 -0
- wx/py/PySlices.py +98 -0
- wx/py/PySlicesShell.py +94 -0
- wx/py/PySlices_16.png +0 -0
- wx/py/PySlices_32.png +0 -0
- wx/py/PyWrap.py +52 -0
- wx/py/README.txt +77 -0
- wx/py/__init__.py +20 -0
- wx/py/buffer.py +136 -0
- wx/py/crust.py +403 -0
- wx/py/crustslices.py +403 -0
- wx/py/dispatcher.py +259 -0
- wx/py/document.py +37 -0
- wx/py/editor.py +844 -0
- wx/py/editwindow.py +299 -0
- wx/py/filling.py +357 -0
- wx/py/frame.py +978 -0
- wx/py/images.py +212 -0
- wx/py/interpreter.py +170 -0
- wx/py/introspect.py +393 -0
- wx/py/magic.py +98 -0
- wx/py/parse.py +134 -0
- wx/py/path.py +36 -0
- wx/py/pseudo.py +99 -0
- wx/py/shell.py +1588 -0
- wx/py/sliceshell.py +3814 -0
- wx/py/tests/test_interpreter.py +71 -0
- wx/py/tests/test_introspect.py +862 -0
- wx/py/tests/test_pseudo.py +70 -0
- wx/py/tests/test_version.py +36 -0
- wx/py/tests/testall.py +22 -0
- wx/py/version.py +7 -0
- wx/ribbon.py +45 -0
- wx/ribbon.pyi +2494 -0
- wx/richtext.py +142 -0
- wx/richtext.pyi +12113 -0
- wx/siplib.cp313-win_amd64.pyd +0 -0
- wx/stc.py +58 -0
- wx/stc.pyi +8463 -0
- wx/svg/__init__.py +364 -0
- wx/svg/_nanosvg.cp313-win_amd64.pyd +0 -0
- wx/tools/__init__.py +18 -0
- wx/tools/dbg.py +268 -0
- wx/tools/genaxmodule.py +50 -0
- wx/tools/helpviewer.py +92 -0
- wx/tools/img2img.py +85 -0
- wx/tools/img2png.py +54 -0
- wx/tools/img2py.py +309 -0
- wx/tools/img2xpm.py +54 -0
- wx/tools/pywxrc.py +949 -0
- wx/tools/wxget.py +254 -0
- wx/tools/wxget_docs_demo.py +186 -0
- wx/wxbase315u_net_vc140_x64.dll +0 -0
- wx/wxbase315u_vc140_x64.dll +0 -0
- wx/wxbase315u_xml_vc140_x64.dll +0 -0
- wx/wxmsw315u_adv_vc140_x64.dll +0 -0
- wx/wxmsw315u_aui_vc140_x64.dll +0 -0
- wx/wxmsw315u_core_vc140_x64.dll +0 -0
- wx/wxmsw315u_gl_vc140_x64.dll +0 -0
- wx/wxmsw315u_html_vc140_x64.dll +0 -0
- wx/wxmsw315u_media_vc140_x64.dll +0 -0
- wx/wxmsw315u_propgrid_vc140_x64.dll +0 -0
- wx/wxmsw315u_qa_vc140_x64.dll +0 -0
- wx/wxmsw315u_ribbon_vc140_x64.dll +0 -0
- wx/wxmsw315u_richtext_vc140_x64.dll +0 -0
- wx/wxmsw315u_stc_vc140_x64.dll +0 -0
- wx/wxmsw315u_webview_vc140_x64.dll +0 -0
- wx/wxmsw315u_xrc_vc140_x64.dll +0 -0
- wx/xml.py +15 -0
- wx/xml.pyi +575 -0
- wx/xrc.py +65 -0
- wx/xrc.pyi +742 -0
- wxPython_zombie-3.1.5.8.dist-info/LICENSE.txt +950 -0
- wxPython_zombie-3.1.5.8.dist-info/METADATA +107 -0
- wxPython_zombie-3.1.5.8.dist-info/RECORD +1175 -0
- wxPython_zombie-3.1.5.8.dist-info/WHEEL +5 -0
- wxPython_zombie-3.1.5.8.dist-info/entry_points.txt +2 -0
- wxPython_zombie-3.1.5.8.dist-info/top_level.txt +1 -0
wx/py/introspect.py
ADDED
|
@@ -0,0 +1,393 @@
|
|
|
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 sys
|
|
7
|
+
import inspect
|
|
8
|
+
import tokenize
|
|
9
|
+
import types
|
|
10
|
+
import wx
|
|
11
|
+
from six import BytesIO, PY3, string_types
|
|
12
|
+
|
|
13
|
+
def getAutoCompleteList(command='', locals=None, includeMagic=1,
|
|
14
|
+
includeSingle=1, includeDouble=1):
|
|
15
|
+
"""Return list of auto-completion options for command.
|
|
16
|
+
|
|
17
|
+
The list of options will be based on the locals namespace."""
|
|
18
|
+
attributes = []
|
|
19
|
+
# Get the proper chunk of code from the command.
|
|
20
|
+
root = getRoot(command, terminator='.')
|
|
21
|
+
try:
|
|
22
|
+
if locals is not None:
|
|
23
|
+
obj = eval(root, locals)
|
|
24
|
+
else:
|
|
25
|
+
obj = eval(root)
|
|
26
|
+
except:
|
|
27
|
+
pass
|
|
28
|
+
else:
|
|
29
|
+
attributes = getAttributeNames(obj, includeMagic,
|
|
30
|
+
includeSingle, includeDouble)
|
|
31
|
+
return attributes
|
|
32
|
+
|
|
33
|
+
def getAttributeNames(obj, includeMagic=1, includeSingle=1,
|
|
34
|
+
includeDouble=1):
|
|
35
|
+
"""Return list of unique attributes, including inherited, for obj."""
|
|
36
|
+
attributes = []
|
|
37
|
+
dict = {}
|
|
38
|
+
if not hasattrAlwaysReturnsTrue(obj):
|
|
39
|
+
# Add some attributes that don't always get picked up.
|
|
40
|
+
special_attrs = ['__bases__', '__class__', '__dict__', '__name__',
|
|
41
|
+
'func_closure', 'func_code', 'func_defaults',
|
|
42
|
+
'func_dict', 'func_doc', 'func_globals', 'func_name']
|
|
43
|
+
attributes += [attr for attr in special_attrs \
|
|
44
|
+
if hasattr(obj, attr)]
|
|
45
|
+
if includeMagic:
|
|
46
|
+
try: attributes += obj._getAttributeNames()
|
|
47
|
+
except: pass
|
|
48
|
+
# Special code to allow traits to be caught by autocomplete
|
|
49
|
+
if hasattr(obj,'trait_get'):
|
|
50
|
+
try:
|
|
51
|
+
for i in obj.trait_get():
|
|
52
|
+
if i not in attributes:
|
|
53
|
+
if hasattr(obj, i):
|
|
54
|
+
attributes += i
|
|
55
|
+
except:
|
|
56
|
+
pass
|
|
57
|
+
# Get all attribute names.
|
|
58
|
+
str_type = str(type(obj))
|
|
59
|
+
if str_type == "<type 'array'>":
|
|
60
|
+
attributes += dir(obj)
|
|
61
|
+
else:
|
|
62
|
+
attrdict = getAllAttributeNames(obj)
|
|
63
|
+
# Store the obj's dir.
|
|
64
|
+
obj_dir = dir(obj)
|
|
65
|
+
for (obj_type_name, technique, count), attrlist in attrdict.items():
|
|
66
|
+
# This complexity is necessary to avoid accessing all the
|
|
67
|
+
# attributes of the obj. This is very handy for objects
|
|
68
|
+
# whose attributes are lazily evaluated.
|
|
69
|
+
if type(obj).__name__ == obj_type_name and technique == 'dir':
|
|
70
|
+
attributes += attrlist
|
|
71
|
+
else:
|
|
72
|
+
attributes += [attr for attr in attrlist \
|
|
73
|
+
if attr not in obj_dir and hasattr(obj, attr)]
|
|
74
|
+
|
|
75
|
+
# Remove duplicates from the attribute list.
|
|
76
|
+
for item in attributes:
|
|
77
|
+
dict[item] = None
|
|
78
|
+
attributes = list(dict)
|
|
79
|
+
# new-style swig wrappings can result in non-string attributes
|
|
80
|
+
# e.g. ITK http://www.itk.org/
|
|
81
|
+
attributes = [attribute for attribute in attributes
|
|
82
|
+
if type(attribute) == str]
|
|
83
|
+
attributes.sort(key=lambda x: x.upper())
|
|
84
|
+
if not includeSingle:
|
|
85
|
+
attributes = filter(lambda item: item[0]!='_' \
|
|
86
|
+
or item[1:2]=='_', attributes)
|
|
87
|
+
if not includeDouble:
|
|
88
|
+
attributes = filter(lambda item: item[:2]!='__', attributes)
|
|
89
|
+
return attributes
|
|
90
|
+
|
|
91
|
+
def hasattrAlwaysReturnsTrue(obj):
|
|
92
|
+
return hasattr(obj, 'bogu5_123_aTTri8ute')
|
|
93
|
+
|
|
94
|
+
def getAllAttributeNames(obj):
|
|
95
|
+
"""Return dict of all attributes, including inherited, for an object.
|
|
96
|
+
|
|
97
|
+
Recursively walk through a class and all base classes.
|
|
98
|
+
"""
|
|
99
|
+
attrdict = {} # (object, technique, count): [list of attributes]
|
|
100
|
+
# !!!
|
|
101
|
+
# Do Not use hasattr() as a test anywhere in this function,
|
|
102
|
+
# because it is unreliable with remote objects: xmlrpc, soap, etc.
|
|
103
|
+
# They always return true for hasattr().
|
|
104
|
+
# !!!
|
|
105
|
+
try:
|
|
106
|
+
# This could(?) fail if the type is poorly defined without
|
|
107
|
+
# even a name.
|
|
108
|
+
key = type(obj).__name__
|
|
109
|
+
except Exception:
|
|
110
|
+
key = 'anonymous'
|
|
111
|
+
# Wake up sleepy objects - a hack for ZODB objects in "ghost" state.
|
|
112
|
+
wakeupcall = dir(obj)
|
|
113
|
+
del wakeupcall
|
|
114
|
+
# Get attributes available through the normal convention.
|
|
115
|
+
attributes = dir(obj)
|
|
116
|
+
attrdict[(key, 'dir', len(attributes))] = attributes
|
|
117
|
+
# Get attributes from the object's dictionary, if it has one.
|
|
118
|
+
try:
|
|
119
|
+
attributes = sorted(obj.__dict__)
|
|
120
|
+
except Exception: # Must catch all because object might have __getattr__.
|
|
121
|
+
pass
|
|
122
|
+
else:
|
|
123
|
+
attrdict[(key, '__dict__', len(attributes))] = attributes
|
|
124
|
+
# For a class instance, get the attributes for the class.
|
|
125
|
+
try:
|
|
126
|
+
klass = obj.__class__
|
|
127
|
+
except: # Must catch all because object might have __getattr__.
|
|
128
|
+
pass
|
|
129
|
+
else:
|
|
130
|
+
if klass is obj:
|
|
131
|
+
# Break a circular reference. This happens with extension
|
|
132
|
+
# classes.
|
|
133
|
+
pass
|
|
134
|
+
else:
|
|
135
|
+
attrdict.update(getAllAttributeNames(klass))
|
|
136
|
+
# Also get attributes from any and all parent classes.
|
|
137
|
+
try:
|
|
138
|
+
bases = obj.__bases__
|
|
139
|
+
except: # Must catch all because object might have __getattr__.
|
|
140
|
+
pass
|
|
141
|
+
else:
|
|
142
|
+
if isinstance(bases, tuple):
|
|
143
|
+
for base in bases:
|
|
144
|
+
if type(base) is type:
|
|
145
|
+
# Break a circular reference. Happens in Python 2.2.
|
|
146
|
+
pass
|
|
147
|
+
else:
|
|
148
|
+
attrdict.update(getAllAttributeNames(base))
|
|
149
|
+
return attrdict
|
|
150
|
+
|
|
151
|
+
def getCallTip(command='', locals=None):
|
|
152
|
+
"""For a command, return a tuple of object name, argspec, tip text.
|
|
153
|
+
|
|
154
|
+
The call tip information will be based on the locals namespace."""
|
|
155
|
+
calltip = ('', '', '') # object name, argspec, tip text.
|
|
156
|
+
# Get the proper chunk of code from the command.
|
|
157
|
+
root = getRoot(command, terminator='(')
|
|
158
|
+
try:
|
|
159
|
+
if locals is not None:
|
|
160
|
+
obj = eval(root, locals)
|
|
161
|
+
else:
|
|
162
|
+
obj = eval(root)
|
|
163
|
+
except:
|
|
164
|
+
return calltip
|
|
165
|
+
name = ''
|
|
166
|
+
obj, dropSelf = getBaseObject(obj)
|
|
167
|
+
try:
|
|
168
|
+
name = obj.__name__
|
|
169
|
+
except AttributeError:
|
|
170
|
+
pass
|
|
171
|
+
tip1 = ''
|
|
172
|
+
argspec = ''
|
|
173
|
+
if inspect.isbuiltin(obj):
|
|
174
|
+
# Builtin functions don't have an argspec that we can get.
|
|
175
|
+
pass
|
|
176
|
+
elif inspect.isfunction(obj):
|
|
177
|
+
# tip1 is a string like: "getCallTip(command='', locals=None)"
|
|
178
|
+
argspec = inspect.getargspec(obj) if not PY3 else inspect.getfullargspec(obj)
|
|
179
|
+
argspec = inspect.formatargspec(*argspec)
|
|
180
|
+
if dropSelf:
|
|
181
|
+
# The first parameter to a method is a reference to an
|
|
182
|
+
# instance, usually coded as "self", and is usually passed
|
|
183
|
+
# automatically by Python; therefore we want to drop it.
|
|
184
|
+
temp = argspec.split(',')
|
|
185
|
+
if len(temp) == 1: # No other arguments.
|
|
186
|
+
argspec = '()'
|
|
187
|
+
elif temp[0][:2] == '(*': # first param is like *args, not self
|
|
188
|
+
pass
|
|
189
|
+
else: # Drop the first argument.
|
|
190
|
+
argspec = '(' + ','.join(temp[1:]).lstrip()
|
|
191
|
+
tip1 = name + argspec
|
|
192
|
+
doc = ''
|
|
193
|
+
if callable(obj):
|
|
194
|
+
try:
|
|
195
|
+
doc = inspect.getdoc(obj)
|
|
196
|
+
except:
|
|
197
|
+
pass
|
|
198
|
+
if doc:
|
|
199
|
+
# tip2 is the first separated line of the docstring, like:
|
|
200
|
+
# "Return call tip text for a command."
|
|
201
|
+
# tip3 is the rest of the docstring, like:
|
|
202
|
+
# "The call tip information will be based on ... <snip>
|
|
203
|
+
firstline = doc.split('\n')[0].lstrip()
|
|
204
|
+
if tip1 == firstline or firstline[:len(name)+1] == name+'(':
|
|
205
|
+
tip1 = ''
|
|
206
|
+
else:
|
|
207
|
+
tip1 += '\n\n'
|
|
208
|
+
docpieces = doc.split('\n\n')
|
|
209
|
+
tip2 = docpieces[0]
|
|
210
|
+
tip3 = '\n\n'.join(docpieces[1:])
|
|
211
|
+
tip = '%s%s\n\n%s' % (tip1, tip2, tip3)
|
|
212
|
+
else:
|
|
213
|
+
tip = tip1
|
|
214
|
+
calltip = (name, argspec[1:-1], tip.strip())
|
|
215
|
+
return calltip
|
|
216
|
+
|
|
217
|
+
def getRoot(command, terminator=None):
|
|
218
|
+
"""Return the rightmost root portion of an arbitrary Python command.
|
|
219
|
+
|
|
220
|
+
Return only the root portion that can be eval()'d without side
|
|
221
|
+
effects. The command would normally terminate with a '(' or
|
|
222
|
+
'.'. The terminator and anything after the terminator will be
|
|
223
|
+
dropped."""
|
|
224
|
+
command = command.split('\n')[-1]
|
|
225
|
+
if command.startswith(sys.ps2):
|
|
226
|
+
command = command[len(sys.ps2):]
|
|
227
|
+
command = command.lstrip()
|
|
228
|
+
command = rtrimTerminus(command, terminator)
|
|
229
|
+
if terminator == '.':
|
|
230
|
+
tokens = getTokens(command)
|
|
231
|
+
if tokens and tokens[-1][0] is tokenize.ENDMARKER:
|
|
232
|
+
# Remove the end marker.
|
|
233
|
+
del tokens[-1]
|
|
234
|
+
if tokens and tokens[-1][0] is tokenize.NEWLINE:
|
|
235
|
+
# Remove newline.
|
|
236
|
+
del tokens[-1]
|
|
237
|
+
if not tokens:
|
|
238
|
+
return ''
|
|
239
|
+
if terminator == '.' and \
|
|
240
|
+
(tokens[-1][1] != '.' or tokens[-1][0] is not tokenize.OP):
|
|
241
|
+
# Trap decimals in numbers, versus the dot operator.
|
|
242
|
+
return ''
|
|
243
|
+
|
|
244
|
+
# Strip off the terminator.
|
|
245
|
+
if terminator and command.endswith(terminator):
|
|
246
|
+
size = 0 - len(terminator)
|
|
247
|
+
command = command[:size]
|
|
248
|
+
|
|
249
|
+
command = command.rstrip()
|
|
250
|
+
tokens = getTokens(command)
|
|
251
|
+
tokens.reverse()
|
|
252
|
+
line = ''
|
|
253
|
+
start = None
|
|
254
|
+
prefix = ''
|
|
255
|
+
laststring = '.'
|
|
256
|
+
lastline = ''
|
|
257
|
+
emptyTypes = ('[]', '()', '{}')
|
|
258
|
+
for token in tokens:
|
|
259
|
+
tokentype = token[0]
|
|
260
|
+
tokenstring = token[1]
|
|
261
|
+
line = token[4]
|
|
262
|
+
if tokentype in (tokenize.ENDMARKER, tokenize.NEWLINE):
|
|
263
|
+
continue
|
|
264
|
+
if PY3 and tokentype is tokenize.ENCODING:
|
|
265
|
+
line = lastline
|
|
266
|
+
break
|
|
267
|
+
if tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) \
|
|
268
|
+
and laststring != '.':
|
|
269
|
+
# We've reached something that's not part of the root.
|
|
270
|
+
if prefix and line[token[3][1]] != ' ':
|
|
271
|
+
# If it doesn't have a space after it, remove the prefix.
|
|
272
|
+
prefix = ''
|
|
273
|
+
break
|
|
274
|
+
if tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) \
|
|
275
|
+
or (tokentype is tokenize.OP and tokenstring == '.'):
|
|
276
|
+
if prefix:
|
|
277
|
+
# The prefix isn't valid because it comes after a dot.
|
|
278
|
+
prefix = ''
|
|
279
|
+
break
|
|
280
|
+
else:
|
|
281
|
+
# start represents the last known good point in the line.
|
|
282
|
+
start = token[2][1]
|
|
283
|
+
elif len(tokenstring) == 1 and tokenstring in ('[({])}'):
|
|
284
|
+
# Remember, we're working backwords.
|
|
285
|
+
# So prefix += tokenstring would be wrong.
|
|
286
|
+
if prefix in emptyTypes and tokenstring in ('[({'):
|
|
287
|
+
# We've already got an empty type identified so now we
|
|
288
|
+
# are in a nested situation and we can break out with
|
|
289
|
+
# what we've got.
|
|
290
|
+
break
|
|
291
|
+
else:
|
|
292
|
+
prefix = tokenstring + prefix
|
|
293
|
+
else:
|
|
294
|
+
# We've reached something that's not part of the root.
|
|
295
|
+
break
|
|
296
|
+
laststring = tokenstring
|
|
297
|
+
lastline = line
|
|
298
|
+
if start is None:
|
|
299
|
+
start = len(line)
|
|
300
|
+
root = line[start:]
|
|
301
|
+
if prefix in emptyTypes:
|
|
302
|
+
# Empty types are safe to be eval()'d and introspected.
|
|
303
|
+
root = prefix + root
|
|
304
|
+
return root
|
|
305
|
+
|
|
306
|
+
def getTokens(command):
|
|
307
|
+
"""Return list of token tuples for command."""
|
|
308
|
+
|
|
309
|
+
# In case the command is unicode try encoding it
|
|
310
|
+
if isinstance(command, string_types):
|
|
311
|
+
try:
|
|
312
|
+
command = command.encode('utf-8')
|
|
313
|
+
except UnicodeEncodeError:
|
|
314
|
+
pass # otherwise leave it alone
|
|
315
|
+
|
|
316
|
+
f = BytesIO(command)
|
|
317
|
+
# tokens is a list of token tuples, each looking like:
|
|
318
|
+
# (type, string, (srow, scol), (erow, ecol), line)
|
|
319
|
+
tokens = []
|
|
320
|
+
# Can't use list comprehension:
|
|
321
|
+
# tokens = [token for token in tokenize.generate_tokens(f.readline)]
|
|
322
|
+
# because of need to append as much as possible before TokenError.
|
|
323
|
+
try:
|
|
324
|
+
if not PY3:
|
|
325
|
+
def eater(*args):
|
|
326
|
+
tokens.append(args)
|
|
327
|
+
tokenize.tokenize_loop(f.readline, eater)
|
|
328
|
+
else:
|
|
329
|
+
for t in tokenize.tokenize(f.readline):
|
|
330
|
+
tokens.append(t)
|
|
331
|
+
except tokenize.TokenError:
|
|
332
|
+
# This is due to a premature EOF, which we expect since we are
|
|
333
|
+
# feeding in fragments of Python code.
|
|
334
|
+
pass
|
|
335
|
+
return tokens
|
|
336
|
+
|
|
337
|
+
def rtrimTerminus(command, terminator=None):
|
|
338
|
+
"""Return command minus anything that follows the final terminator."""
|
|
339
|
+
if terminator:
|
|
340
|
+
pieces = command.split(terminator)
|
|
341
|
+
if len(pieces) > 1:
|
|
342
|
+
command = terminator.join(pieces[:-1]) + terminator
|
|
343
|
+
return command
|
|
344
|
+
|
|
345
|
+
def getBaseObject(obj):
|
|
346
|
+
"""Return base object and dropSelf indicator for an object."""
|
|
347
|
+
if inspect.isbuiltin(obj):
|
|
348
|
+
# Builtin functions don't have an argspec that we can get.
|
|
349
|
+
dropSelf = 0
|
|
350
|
+
elif inspect.ismethod(obj):
|
|
351
|
+
# Get the function from the object otherwise
|
|
352
|
+
# inspect.getargspec() complains that the object isn't a
|
|
353
|
+
# Python function.
|
|
354
|
+
try:
|
|
355
|
+
if obj.__self__ is None:
|
|
356
|
+
# This is an unbound method so we do not drop self
|
|
357
|
+
# from the argspec, since an instance must be passed
|
|
358
|
+
# as the first arg.
|
|
359
|
+
dropSelf = 0
|
|
360
|
+
else:
|
|
361
|
+
dropSelf = 1
|
|
362
|
+
obj = obj.__func__
|
|
363
|
+
except AttributeError:
|
|
364
|
+
dropSelf = 0
|
|
365
|
+
elif inspect.isclass(obj):
|
|
366
|
+
# Get the __init__ method function for the class.
|
|
367
|
+
constructor = getConstructor(obj)
|
|
368
|
+
if constructor is not None:
|
|
369
|
+
obj = constructor
|
|
370
|
+
dropSelf = 1
|
|
371
|
+
else:
|
|
372
|
+
dropSelf = 0
|
|
373
|
+
elif callable(obj):
|
|
374
|
+
# Get the __call__ method instead.
|
|
375
|
+
try:
|
|
376
|
+
obj = obj.__call__.__func__
|
|
377
|
+
dropSelf = 1
|
|
378
|
+
except AttributeError:
|
|
379
|
+
dropSelf = 0
|
|
380
|
+
else:
|
|
381
|
+
dropSelf = 0
|
|
382
|
+
return obj, dropSelf
|
|
383
|
+
|
|
384
|
+
def getConstructor(obj):
|
|
385
|
+
"""Return constructor for class object, or None if there isn't one."""
|
|
386
|
+
try:
|
|
387
|
+
return obj.__init__.__func__
|
|
388
|
+
except AttributeError:
|
|
389
|
+
for base in obj.__bases__:
|
|
390
|
+
constructor = getConstructor(base)
|
|
391
|
+
if constructor is not None:
|
|
392
|
+
return constructor
|
|
393
|
+
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(' *\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 permanantly
|
|
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)
|