;iT ~ddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z ddlZddlmZmZmZmZejZejejeZejdeddlZddlZejZej Z ej!Z!ej"Z"ej#Z#ddZ$Gd d Z%Gd d Z&e$e%j'd e$e%j(d e$e%j)e$e%j*d e$e%j+e$e%j,e$e%j-de$e%j'd e$e%j.d Z/e$e&j'd e$e&j(d e$e&j)e$e&j*d e$e&j+e$e&j,e$e&j-de$e&j'd e$e&j.d Z0Gdde#Z1dZ2Gddej3Z4dZ5e6dkr e5dSdS)N) Namespace) OrderedDict) lru_cache)Optional)QT_LIBQtCoreQtGui QtWidgetsc^tj|}t}||d|vr$|t jjd|vr| d|'| tj||S)z= Return a QTextCharFormat with the given attributes. bolditalicT) pg functionsmkColorQTextCharFormat setForeground setFontWeightQFontWeightBold setFontItalic setBackground)colorstyle background_color_formats QC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/examples/ExampleApp.py charFormatr "s\ ! !% ( (FG &!!! el/0005d###bj44555 NcZeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdS)LightThemeColorsz#B71C1Cz#FCE4ECz#4A148Cz#311B92z#1A237Ez#0D47A1z#01579Bz#006064z#004D40z#1B5E20z#33691Ez#827717z#F57F17z#FF6F00z#E65100z#BF360Cz#3E2723z#212121z#263238N__name__ __module__ __qualname__RedPinkPurple DeepPurpleIndigoBlue LightBlueCyanTealGreen LightGreenLimeYellowAmberOrange DeepOrangeBrownGreyBlueGreyr!rr#r#4m C D FJ F DI D D EJ D F E FJ E DHHHr!r#cZeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdS)DarkThemeColorsz#F44336z#F48FB1z#CE93D8z#B39DDBz#9FA8DAz#90CAF9z#81D4FAz#80DEEAz#80CBC4z#A5D6A7z#C5E1A5z#E6EE9Cz#FFF59Dz#FFE082z#FFCC80z#FFAB91z#BCAAA4z#EEEEEEz#B0BEC5Nr$r;r!rr>r>Kr<r!r>r r) keywordoperatorbracedefclassstringstring2commentselfnumberscheZdZdZejZgdZgdZfdZ e dZ dZ dZ dZxZS) PythonHighlighterz0Syntax highlighter for the Python language. )=z==z!=z>=z\+-z\*/z//%z\*\*z\+=z-=z\*=z/=z\%=z\^z\|&~z>>z<<)z\{z\}z\(z\)z\[z\]cjt|tdddf|_tdddf|_g}|dt jDz }|dt jDz }|dt jDz }|gd z }||_ d|_ dS) Nz'''rDz"""cg|] }d|zddf S)z\b%s\brr?r;).0ws r z.PythonHighlighter.__init__..s3777q=!Y/777r!cg|]}|ddfS)rr@r;)rVos rrXz.PythonHighlighter.__init__..s/888a$888r!cg|]}|ddfS)rrAr;)rVbs rrXz.PythonHighlighter.__init__..s.555a/555r!) )z\bself\brrF)z\bdef\b\s*(\w+)rSrB)z\bclass\b\s*(\w+)rSrB)z\b[+-]?[0-9]+[lL]?\brrG)z\b[+-]?0[xX][0-9A-Fa-f]+[lL]?\brrG)z0\b[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\brrG)z"[^"\\]*(\\.[^"\\]*)*"rrC)z'[^'\\]*(\\.[^'\\]*)*'rrC)z#[^\n]*rrE) super__init__QRegularExpression tri_single tri_doublerIkeywords operatorsbracesrules searchText)rFdocumentre __class__s rr^zPythonHighlighter.__init__s """.e44aC-e44aC 77,5777 7 88,6888 8 55,3555 5     , r!ctj}|drtnt SNdarkMode)r QApplicationinstanceproperty DARK_STYLES LIGHT_STYLES)rFapps rstyleszPythonHighlighter.styless1$--//!ll:66H{{LHr!c|j}|D]\}}}|j|}tt j||D]N\}}||kr |}||z } ||| |O| || d|j |g|j R} | s|j |g|j R} dSdS)z>Apply syntax highlighting to the given block of text. rN)recopyrr enumeraterefinditerstartend setFormatapplySearchHighlightsetCurrentBlockStatematch_multiliner`ra) rFtextre expressionnthformatnmatchrxlength in_multilines rhighlightBlockz PythonHighlighter.highlightBlocks$ !!', 6 6 #JV[(F%bk*d&C&CDD 6 65s77 u,uff5555  6 !!$''' !!!$$$,t+DC4?CCC  H/4/GtGGGLLL H Hr!c||krd}d}n=||}|}|}|dkr||||z}|}||kr3||z |z|z} |dn*||t ||z |z} ||| |j||||| z}|}|dk| || |krdSdS)amDo highlighting of multi-line strings. =========== ========================================================== delimiter (QRegularExpression) for triple-single-quotes or triple-double-quotes in_state (int) to represent the corresponding state changes when inside those strings. Returns True if we're still inside a multi-line string when this function is finished. style (str) representation of the kind of style to use =========== ========================================================== rTF) previousBlockStater capturedStartcapturedLength capturedEndr|lenrzrrr{currentBlockState) rFr~ delimiterin_staterrxaddrryrs rr}z!PythonHighlighter.match_multilines  " " $ $ 0 0ECCOOD))E''))E&&((CqjjOOD%#+66E##%%Cczzus*U-A-A-C-CC))!,,,,))(333TU*S0 NN5&$+e*< = = =OOD%&.99E''))E#qjj& !!$'''  ! ! # #x / /45r!c|jsdSd|j}t}|}||jj|jj }t|| }tj ||D]D}| }||z } ||| |EdS)Nz(?i))r)rfrqpalette highlightr ColorGroupCurrent ColorRoleTextnamer rvrwrxryrz) rFr~exprrr fgndColorrrrxrs rr{z&PythonHighlighter.applySearchHighlights  F'do''"%++--!!##))++MM'"4"<")"3"8:::>$&& 9>>>[t,, 1 1EKKMMEYY[[5(F NN5&% 0 0 0 0 1 1r!)r%r&r'__doc__r?kwlistrbrcrdr^rnrrrr}r{ __classcell__rhs@rrIrI|s~H   IF)))))VIIXIHHH.111f 1 1 1 1 1 1 1r!rIci}|D]B\}}t|tr#|t |=|||<C|S)zJConverts a dict-of-dicts to a singly nested dict for non-recursive parsing)items isinstancedictupdate unnestedDict)exDictoutkkvvs rrrsa C,,..B b$    JJ|B'' ( ( ( (CGG Jr!c(eZdZdddddZedejDZdZde e j ffd Z d Z dfd ZdZdZd dZd!dZdZdZdZdZdddZdZeddZdZdZfdZxZS)" ExampleLoaderrrSrT)PyQt6PySide6PyQt5PySide2c#$K|] }|jV dSN)r)rVms r zExampleLoader.-s$;;qAF;;;;;;r!ctjtj_tj_jj j dtj d_ tj _jjjt#jj_tj}tjjj}jtjdd||ddjj ddj jjd_jjjj !j"#jj $j"tJfd}jj&j'(||jj&)g_*+jj,-t\j/jj,01dd2jj34d d gjj5_6jj7j8(j9jj,j:(j;jj,j<(j9jjj=(j>j j8(j?@jjAdS) NzPyQtGraph ExampleszRun Edited CodedrrScjjj_jjd|dkr jjn+dj_ jj j  dS)Nr zContent Search) curListener disconnect textChangedui exampleFilter setStyleSheetconnectfilterByContenthlrf filterByTitleemitr~) searchTyperFtextFils ronComboChangedz.ExampleLoader.__init__..onComboChangedFs+ ++---&2D  G ! / / 3 3 3--- (()=>>>>%)" (();<<<   ! !',,.. 1 1 1 1 1r!iii)Br QMainWindowr^ ui_templateUi_FormrQWidgetcwsetCentralWidgetsetupUisetWindowTitle QPushButtoncodeBtn QGridLayout codeLayoutcodeView setLayoutrIrgrrlrm QSizePolicyPolicy ExpandingaddItem QSpacerItem addWidgethiderrsetFocus qtLibComboaddItemsbindingskeyssetCurrentIndexr searchFilescurrentTextChangedr currentText itemCache populateTree exampleTreeinvisibleRootItemutils examples_ expandAllresizeshowsplittersetSizes toPlainTextoldTextloadBtnclickedloadFilecurrentItemChangedshowFileitemDoubleClickedr onTextChange runEditedCodeupdateCodeViewTabWidthfont)rFrqpolicyrrs` @rr^zExampleLoader.__init__.s&&t,,,%''#%% dg&&&     0111 ,->?? #/11 ""4?333#DG$4$=$=$?$?@@$--//&-7  5c#vv N NPQSTUUU !!$,1555 '' &&((( ##DM$6$6$8$8999 **4=+@AAA 2 2 2 2 2 2 .66~FFFtw*6688999 $'-??AA5?SSS %%''' D  !!3s),,,w'3355  '' 666 .66t}EEE -55dmDDD $,,T->??? $$T%7888 ##DG$4$9$9$;$;<<<<>++7799VY=R=WW! A A A++--&-mmEN4L4W&X&X&b&b&d&d#")--0H0O"P"P"Z"Z"\"\.@  A OOJ 1 1 1'(8(A(A(C(CDDDGww}}U###s%>B$$BEEctj|}|d}|jj|dS)zg Change the codeView tabStopDistance to 4 spaces based on the size of the current font z N)r QFontMetricshorizontalAdvancerrsetTabStopDistance)rFrfmtabWidths rrz$ExampleLoader.updateCodeViewTabWidthzsF  % %''00 ++H55555r!returnNc&tt||ttjjj}|j D]\}}||j v}|r|j j |}||tjjj|d||ddS)NFz is not installed)r]r showEventQColorrr GlobalColorredrrmodulesrrmodelitemsetData ItemDataRoleForegroundRole setEnabled setToolTipr~)rFr disabledColorridxdisableBindingrrhs rrzExampleLoader.showEvents mT"",,U333vy4899 ,,.. C CID#!5N Cw)//1166s;; ]FI,B,QRRR&&&499;; A A ABBB  C Cr!c|jj}||jkr||_|dSdS)z textChanged fires when the highlighter is reassigned the same document. Prevent this from showing "run edited code" by checking for actual content change N)rrrr codeEdited)rFnewTexts rrzExampleLoader.onTextChangesL '"..00 dl " ""DL OO      # "r!c||||j|jjdSr)showExamplesByTitlegetMatchingTitlesr setDocumentrrrg)rFr~s rrzExampleLoader.filterByTitlesQ   !7!7!=!=>>> DG,557788888r!cd} tj||jjdn#tj$rt drtnt}tj |j }d}| d|jjd|YnwxYw|sdStt j}||j_|j|jjg}|}|D]\}}t3|t4r|j}t8jt:|} || } || vr| ||!|dS)NTr rkFrzbackground: rgba)"rvcompilerrrerrorrqrnr>r#rrr(setAlphagetRgbrrrrrfr-rrglowerrrrfilenameospathjoingetExampleContentappendr+) rFr~ validRegexcolors errorColor checkDicttitlesrrr4contentss rrzExampleLoader.filterByContents  Z Jt    G ! / / 3 3 3 3x Z Z Z(+ Z(@(@V__FVFFJ//JJ    $ $ $ G ! / /0X:CTCTCVCV0X0X Y Y Y Y Y  Z  F 11 ! DG,5577888zz||oo'' " "FB"i(( ![w||D"--H--h77==??Hx b!!!   (((((s38BCCFcb| tj}|}g}|D]u\}}|p||v}t |t r,|||||^|r||v|S)N) acceptAll) rrr3rrrextendr,r9)rFr~rrAr>rrmatcheds rr,zExampleLoader.getMatchingTitless >_Fzz||llnn " "FB54288::#5G"d## " d44T24QQRRRR " b!!! r!cBtj}|jj}||jj|}|}||}|p| d|v}| | |rfd}t|D]-} | |  sd}n.| ||dz }|}|dSdS)NrTFrS)r QTreeWidgetItemIterator IteratorFlag NoChildrenrrvalueparent childCountr~ setHiddenrangechildisHidden) rFr>QTWIflagtreeIterrrIr hideParentiis rr+z!ExampleLoader.showExamplesByTitles'0 +4+T22~~[[]]FOO%%?1)?D NNt8 $ $ $ -!  1 1 3 344B!<<++4466%*   ,,, MH>>##Dr!ctjd}|jj}|tjjjtjj j ||tjjj tjj j ||jj |tj }|tjd|jj|t j}|dddS)z used to simulate MacOS "black mode" on other platforms intended for debug only, as it manage only the QPlainTextEdit z#171717whiterkTN)r rrrrsetColorr rActiverBaseInactive setPaletterrsetCurrentCharFormatr rlrmr )rFcpfrqs rsimulate_black_modez!ExampleLoader.simulate_black_modes L # # G  $ $ & & 5>,3U^5M5RTUVVV 5>,5u~7O7TVWXXX ##A&&&  ! # #  W--... --a000$--//  D)))))r!cd}|D]\}}tj|g}|j|t |t r|||not |trS|j |_ d|vrB|*| d}| d| d|n||_ ||dS)N recommendedrT)rr QTreeWidgetItemrr9rrrrr4filersetBoldsetFontaddChild)rFrootexamples bold_fontkeyvalrs rrzExampleLoader.populateTrees  ((  HC,cU33D N ! !$ ' ' '#{++ !!$,,,,C++ L  C'' ($(IIaLL !))$///LLI... MM$    !  r!c|jj}t|dr*tjt |jSdS)Nrc)rr currentItemhasattrr5r6r7rc)rFrs r currentFilezExampleLoader.currentFilesGw"..00 4  17<<di00 0tr!editedc |jj}ttj|}tjtjt}tjtj|}||d<|rtj tj dgtj||}|jjd}|j||jdS|}|dStj tj |g||dS)N)PYQTGRAPH_QT_LIB PYTHONPATHrM)stdincwdenvzUTF-8)rvrw)rrrrr5environr6abspathdirname__file__ subprocessPopensys executablePIPErrencoderuwriteclosero) rFrqqtLibrw example_pathr6proccodefns rrzExampleLoader.loadFile s="..002:666wrwx'@'@AA wrw|<<==#IL  F#S^S$9VbhklllD7#//1188AAD J  T " " " J       !!##Bz  cnb1t E E E E E Er!c|}||}|jj||jj||jdSr) ror8rr setPlainTextloadedFileLabelsetTextrr)rFrr~s rrzExampleLoader.showFilesr     %%b)) %%d+++ ''+++ r!rc@| |jjdStj|r tj|d}t|d5}|}dddn #1swxYwY|S)Nz __main__.pyr) rrclearr5r6isdirr7openread)rFr4ror~s rr8zExampleLoader.getExampleContent&s   G  " " $ $ $ F 7== " " =w||Hm<$NN  Fiikkim #)   G ! * * , , , LLNNN F s|S]C4F WZW`a a a Fw$$&&.."" #,  #"6"6   gGCK(;(;; < < < < CM ! !SC,>%>%>GCK 3 33G   c'1oo . . . . CI     b ! ! !   &&& ##D))) r!)rNr)NF)r%r&r'rtuplepkgutil iter_modulesrr^rrrrrrrrrr,r+r_rrorrrr8r(rrrrs@rrr)sq1CCHe;;$8G$8$:$:;;;;;G8=8=8=t$8FM2$$$$$$$666 C C C C C C   999))))>    $$$,***&   ( "'FFFFF&Ys^^^###r!rc tj}t}|jj|jjddtjdS)Nr) rrrrrrrindexexec)rqloaders rmainrTsh )++C __F I)) ##%%++Aa00GIIIIIr!__main__)r N)7r?r5rrvr|r~argparser collectionsr functoolsrtypingr pyqtgraphr pyqtgraph.Qtrrr r rrqr6ryrzr{insertexampleLoaderTemplate_genericrrr_rrrQSyntaxHighlighterr r#r>r-r(r*r,r5r+r1r0rprorIrrrrr%r;r!rrs   ######999999999999bikk wrwx001143333 .  '-$.0z*/88 +/88 Z(/ 0 0 +2F;;j)/00z*566z*0(;; J',f 5 5z*/00   z/.77 ?.77 Z. / / ?16::j.//z/455z//:: J+V 4 4z/.//   ^1^1^1^1^1*^1^1^1BiiiiiI)iiiV  zDFFFFFr!