diff --git a/TermTk/TTkTheme/theme.py b/TermTk/TTkTheme/theme.py index 6ced928f..cf8da832 100644 --- a/TermTk/TTkTheme/theme.py +++ b/TermTk/TTkTheme/theme.py @@ -229,4 +229,11 @@ class TTkTheme(): treeSelectedColor = TTkColor.fg("#ffff88")+TTkColor.bg("#000066")+TTkColor.BOLD '''Default to **TTkColor.fg("#ffff88")+TTkColor.bg("#000066")+**:class:`~TermTk.TTkCore.color.TTkColor.BOLD`''' treeLineColor = TTkColor.fg("#444444") + '''Default to **TTkColor.fg("#444444")**''' + + textEditLineNumberColor = TTkColor.fg("#88aaaa")+TTkColor.bg("#333333") + '''Default to **TTkColor.fg("#aaaaaa")+TTkColor.bg("#333333")**''' + textEditLineNumberWrapcharColor = TTkColor.fg("#888888")+TTkColor.bg("#333333") + '''Default to **TTkColor.fg("#aaaaaa")+TTkColor.bg("#333333")**''' + textEditLineNumberSeparatorColor = TTkColor.fg("#444444") '''Default to **TTkColor.fg("#444444")**''' \ No newline at end of file diff --git a/TermTk/TTkWidgets/texedit.py b/TermTk/TTkWidgets/texedit.py index 0d4278af..a736177a 100644 --- a/TermTk/TTkWidgets/texedit.py +++ b/TermTk/TTkWidgets/texedit.py @@ -50,12 +50,12 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView): dt = max(1,self._textWrap._lines[-1][0]) width = 1+ceil(log10(dt)) self.setMaximumWidth(width) + self.update() def setTextWrap(self, tw): self._textWrap = tw tw.wrapChanged.connect(self._wrapChanged) self._wrapChanged() - self.update() def viewFullAreaSize(self) -> (int, int): if self._textWrap: @@ -68,15 +68,23 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView): def paintEvent(self): if not self._textWrap: return - ox, oy = self.getViewOffsets() - h = self.height() + _, oy = self.getViewOffsets() + w, h = self.size() if self._textWrap: for i, (dt, (fr, _)) in enumerate(self._textWrap._lines[oy:oy+h]): - if not fr: - self._canvas.drawText(pos=(0,i), text=f"{dt}") + if fr: + txt = "<" + color = TTkCfg.theme.textEditLineNumberWrapcharColor + else: + txt = f"{dt}" + color = TTkCfg.theme.textEditLineNumberColor + self._canvas.drawText(pos=(0,i), text=txt, width=w, color=color) + self._canvas.drawChar(pos=(w-1,i), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) else: + color = TTkCfg.theme.textEditLineNumberColor for y in range(h): - self._canvas.drawText(pos=(0,y), text=f"{y+oy}") + self._canvas.drawText(pos=(0,y), text=f"{y+oy}", width=w, color=color) + self._canvas.drawChar(pos=(w-1,y), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) class TTkTextEditView(TTkAbstractScrollView): __slots__ = ( @@ -86,7 +94,6 @@ class TTkTextEditView(TTkAbstractScrollView): '_replace', '_readOnly', '_multiCursor', '_clipboard', - '_lineNumber', '_lineNumberWidth', '_preview', '_previewWidth', # # Forwarded Methods # 'wrapWidth', 'setWrapWidth', @@ -109,7 +116,6 @@ class TTkTextEditView(TTkAbstractScrollView): self.undoAvailable = pyTTkSignal(bool) self.redoAvailable = pyTTkSignal(bool) self._readOnly = kwargs.get('readOnly', True) - self._lineNumber = kwargs.get('lineNumber', False) self._multiCursor = True self._hsize = 0 self._lastWrapUsed = 0 @@ -254,7 +260,9 @@ class TTkTextEditView(TTkAbstractScrollView): self.currentColorChanged.emit(cursor.positionColor()) def resizeEvent(self, w, h): - if w != self._lastWrapUsed and w>self._textWrap._tabSpaces: + if ( self.lineWrapMode() == TTkK.WidgetWidth and + w != self._lastWrapUsed and + w > self._textWrap._tabSpaces ): self._textWrap.setWrapWidth(w) self._lastWrapUsed = w self._rewrap() @@ -523,6 +531,7 @@ class TTkTextEditView(TTkAbstractScrollView): class TTkTextEdit(TTkAbstractScrollArea): __slots__ = ( '_textEditView', + '_lineNumberView', '_lineNumber', # Forwarded Methods 'clear', 'setText', 'append', 'isReadOnly', 'setReadOnly' 'wrapWidth', 'setWrapWidth', @@ -541,12 +550,13 @@ class TTkTextEdit(TTkAbstractScrollArea): self._textEditView = kwargs.get('textEditView', TTkTextEditView(*args, **kwargs)) # self.setFocusPolicy(self._textEditView.focusPolicy()) # self._textEditView.setFocusPolicy(TTkK.ParentFocus) + self._lineNumber = kwargs.get('lineNumber', False) textEditLayout = TTkAbstractScrollViewGridLayout() textEditLayout.addWidget(self._textEditView,0,1) - textEditLineNumber = _TTkTextEditViewLineNumber() - textEditLineNumber.setTextWrap(self._textEditView._textWrap) - textEditLayout.addWidget(textEditLineNumber,0,0) + self._lineNumberView = _TTkTextEditViewLineNumber(visible=self._lineNumber) + self._lineNumberView.setTextWrap(self._textEditView._textWrap) + textEditLayout.addWidget(self._lineNumberView,0,0) self.setViewport(textEditLayout) self.clear = self._textEditView.clear @@ -572,3 +582,6 @@ class TTkTextEdit(TTkAbstractScrollArea): self.currentColorChanged = self._textEditView.currentColorChanged self.undoAvailable = self._textEditView.undoAvailable self.redoAvailable = self._textEditView.redoAvailable + + def setLineNumber(self, ln): + self._lineNumberView.setVisible(ln) diff --git a/demo/demo.py b/demo/demo.py index 96ad5806..827da973 100755 --- a/demo/demo.py +++ b/demo/demo.py @@ -112,7 +112,7 @@ def demoShowcase(root=None, border=True): leftFrame = ttk.TTkFrame(parent=splitter, layout=ttk.TTkGridLayout(), border=False) themesFrame = ttk.TTkFrame(title="Theme", border=True, layout=ttk.TTkVBoxLayout(), maxHeight=5, minHeight=5) - listMenu = ttk.TTkList(maxWidth=15, minWidth=10) + listMenu = ttk.TTkList(maxWidth=30, minWidth=10) logInputToggler = ttk.TTkCheckbox(text='ShowInput') logInputToggler.stateChanged.connect(lambda x: logInput.setVisible(x==ttk.TTkK.Checked)) quitButton = ttk.TTkButton(text="Quit", border=True, maxHeight=3) @@ -125,6 +125,9 @@ def demoShowcase(root=None, border=True): mainFrame = ttk.TTkFrame(parent=splitter, layout=ttk.TTkGridLayout(), border=False) + # Set the size of the left column (quite useless but required by my OCD) + splitter.setSizes([15,root.width()-11]) + # Themes themesFrame.layout().addWidget(r1 := ttk.TTkRadioButton(text="ASCII", name="theme")) themesFrame.layout().addWidget(r2 := ttk.TTkRadioButton(text="UTF-8",name="theme", checked=True)) diff --git a/demo/showcase/textedit.py b/demo/showcase/textedit.py index 545e9c61..8bed8cb6 100755 --- a/demo/showcase/textedit.py +++ b/demo/showcase/textedit.py @@ -66,7 +66,7 @@ def demoTextEdit(root=None, document=None): # If no document is passed a default one is created, # In this showcase I want to be able to share the same # document among 2 textEdit widgets - te = ttk.TTkTextEdit(document=document) + te = ttk.TTkTextEdit(document=document, lineNumber=True) te.setReadOnly(False) @@ -118,7 +118,7 @@ def demoTextEdit(root=None, document=None): # Empty columns/cells are 1 char wide due to "columnMinWidth=1" parameter in the GridLayout # 1 3 8 11 # 0 2 4 5 6 7 9 10 12 - # 0 [ ] FG [ ] BG + # 0 [ ] FG [ ] BG [ ] LineNumber # 1 ┌─────┐ ┌─────┐ ╒═══╕╒═══╕╒═══╕╒═══╕ ┌──────┐┌──────┐ # 2 │ │ │ │ │ a ││ a ││ a ││ a │ │ UNDO ││ REDO │ # 3 └─────┘ └─────┘ └───┘└───┘└───┘└───┘ ╘══════╛└──────┘ ┕━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┙ @@ -130,6 +130,8 @@ def demoTextEdit(root=None, document=None): fontLayout.addWidget(cb_bg := ttk.TTkCheckbox(text=" BG"),0,2) fontLayout.addWidget(btn_bgColor := ttk.TTkColorButtonPicker(border=True, enabled=False, maxSize=(7 ,3)),1,2) + fontLayout.addWidget(cb_linenumber := ttk.TTkCheckbox(text=" LineNumber", checked=True),0,4,1,3) + # Char style buttons fontLayout.addWidget(btn_bold := ttk.TTkButton(border=True, maxSize=(5,3), checkable=True, text=ttk.TTkString( 'a' , ttk.TTkColor.BOLD) ),1,4) fontLayout.addWidget(btn_italic := ttk.TTkButton(border=True, maxSize=(5,3), checkable=True, text=ttk.TTkString( 'a' , ttk.TTkColor.ITALIC) ),1,5) @@ -198,6 +200,8 @@ def demoTextEdit(root=None, document=None): cb_fg.clicked.connect(lambda _: _setStyle()) cb_bg.clicked.connect(lambda _: _setStyle()) + cb_linenumber.stateChanged.connect(lambda x: te.setLineNumber(x==ttk.TTkK.Checked)) + btn_fgColor.colorSelected.connect(lambda _: _setStyle()) btn_bgColor.colorSelected.connect(lambda _: _setStyle()) diff --git a/tests/utf-8/utf-8.symbols.for.legacy.computing.txt b/tests/utf-8/utf-8.symbols.for.legacy.computing.txt new file mode 100644 index 00000000..536a9512 --- /dev/null +++ b/tests/utf-8/utf-8.symbols.for.legacy.computing.txt @@ -0,0 +1,258 @@ +from: https://www.utf8-chartable.de/unicode-utf8-table.pl + +U+1FB00 🬀 f0 9f ac 80 BLOCK SEXTANT-1 +U+1FB01 🬁 f0 9f ac 81 BLOCK SEXTANT-2 +U+1FB02 🬂 f0 9f ac 82 BLOCK SEXTANT-12 +U+1FB03 🬃 f0 9f ac 83 BLOCK SEXTANT-3 +U+1FB04 🬄 f0 9f ac 84 BLOCK SEXTANT-13 +U+1FB05 🬅 f0 9f ac 85 BLOCK SEXTANT-23 +U+1FB06 🬆 f0 9f ac 86 BLOCK SEXTANT-123 +U+1FB07 🬇 f0 9f ac 87 BLOCK SEXTANT-4 +U+1FB08 🬈 f0 9f ac 88 BLOCK SEXTANT-14 +U+1FB09 🬉 f0 9f ac 89 BLOCK SEXTANT-24 +U+1FB0A 🬊 f0 9f ac 8a BLOCK SEXTANT-124 +U+1FB0B 🬋 f0 9f ac 8b BLOCK SEXTANT-34 +U+1FB0C 🬌 f0 9f ac 8c BLOCK SEXTANT-134 +U+1FB0D 🬍 f0 9f ac 8d BLOCK SEXTANT-234 +U+1FB0E 🬎 f0 9f ac 8e BLOCK SEXTANT-1234 +U+1FB0F 🬏 f0 9f ac 8f BLOCK SEXTANT-5 +U+1FB10 🬐 f0 9f ac 90 BLOCK SEXTANT-15 +U+1FB11 🬑 f0 9f ac 91 BLOCK SEXTANT-25 +U+1FB12 🬒 f0 9f ac 92 BLOCK SEXTANT-125 +U+1FB13 🬓 f0 9f ac 93 BLOCK SEXTANT-35 +U+1FB14 🬔 f0 9f ac 94 BLOCK SEXTANT-235 +U+1FB15 🬕 f0 9f ac 95 BLOCK SEXTANT-1235 +U+1FB16 🬖 f0 9f ac 96 BLOCK SEXTANT-45 +U+1FB17 🬗 f0 9f ac 97 BLOCK SEXTANT-145 +U+1FB18 🬘 f0 9f ac 98 BLOCK SEXTANT-245 +U+1FB19 🬙 f0 9f ac 99 BLOCK SEXTANT-1245 +U+1FB1A 🬚 f0 9f ac 9a BLOCK SEXTANT-345 +U+1FB1B 🬛 f0 9f ac 9b BLOCK SEXTANT-1345 +U+1FB1C 🬜 f0 9f ac 9c BLOCK SEXTANT-2345 +U+1FB1D 🬝 f0 9f ac 9d BLOCK SEXTANT-12345 +U+1FB1E 🬞 f0 9f ac 9e BLOCK SEXTANT-6 +U+1FB1F 🬟 f0 9f ac 9f BLOCK SEXTANT-16 +U+1FB20 🬠 f0 9f ac a0 BLOCK SEXTANT-26 +U+1FB21 🬡 f0 9f ac a1 BLOCK SEXTANT-126 +U+1FB22 🬢 f0 9f ac a2 BLOCK SEXTANT-36 +U+1FB23 🬣 f0 9f ac a3 BLOCK SEXTANT-136 +U+1FB24 🬤 f0 9f ac a4 BLOCK SEXTANT-236 +U+1FB25 🬥 f0 9f ac a5 BLOCK SEXTANT-1236 +U+1FB26 🬦 f0 9f ac a6 BLOCK SEXTANT-46 +U+1FB27 🬧 f0 9f ac a7 BLOCK SEXTANT-146 +U+1FB28 🬨 f0 9f ac a8 BLOCK SEXTANT-1246 +U+1FB29 🬩 f0 9f ac a9 BLOCK SEXTANT-346 +U+1FB2A 🬪 f0 9f ac aa BLOCK SEXTANT-1346 +U+1FB2B 🬫 f0 9f ac ab BLOCK SEXTANT-2346 +U+1FB2C 🬬 f0 9f ac ac BLOCK SEXTANT-12346 +U+1FB2D 🬭 f0 9f ac ad BLOCK SEXTANT-56 +U+1FB2E 🬮 f0 9f ac ae BLOCK SEXTANT-156 +U+1FB2F 🬯 f0 9f ac af BLOCK SEXTANT-256 +U+1FB30 🬰 f0 9f ac b0 BLOCK SEXTANT-1256 +U+1FB31 🬱 f0 9f ac b1 BLOCK SEXTANT-356 +U+1FB32 🬲 f0 9f ac b2 BLOCK SEXTANT-1356 +U+1FB33 🬳 f0 9f ac b3 BLOCK SEXTANT-2356 +U+1FB34 🬴 f0 9f ac b4 BLOCK SEXTANT-12356 +U+1FB35 🬵 f0 9f ac b5 BLOCK SEXTANT-456 +U+1FB36 🬶 f0 9f ac b6 BLOCK SEXTANT-1456 +U+1FB37 🬷 f0 9f ac b7 BLOCK SEXTANT-2456 +U+1FB38 🬸 f0 9f ac b8 BLOCK SEXTANT-12456 +U+1FB39 🬹 f0 9f ac b9 BLOCK SEXTANT-3456 +U+1FB3A 🬺 f0 9f ac ba BLOCK SEXTANT-13456 +U+1FB3B 🬻 f0 9f ac bb BLOCK SEXTANT-23456 +U+1FB3C 🬼 f0 9f ac bc LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE +U+1FB3D 🬽 f0 9f ac bd LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT +U+1FB3E 🬾 f0 9f ac be LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE +U+1FB3F 🬿 f0 9f ac bf LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT +U+1FB40 🭀 f0 9f ad 80 LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE +U+1FB41 🭁 f0 9f ad 81 LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE +U+1FB42 🭂 f0 9f ad 82 LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT +U+1FB43 🭃 f0 9f ad 83 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE +U+1FB44 🭄 f0 9f ad 84 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT +U+1FB45 🭅 f0 9f ad 85 LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE +U+1FB46 🭆 f0 9f ad 86 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT +U+1FB47 🭇 f0 9f ad 87 LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT +U+1FB48 🭈 f0 9f ad 88 LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT +U+1FB49 🭉 f0 9f ad 89 LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT +U+1FB4A 🭊 f0 9f ad 8a LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT +U+1FB4B 🭋 f0 9f ad 8b LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT +U+1FB4C 🭌 f0 9f ad 8c LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT +U+1FB4D 🭍 f0 9f ad 8d LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT +U+1FB4E 🭎 f0 9f ad 8e LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT +U+1FB4F 🭏 f0 9f ad 8f LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT +U+1FB50 🭐 f0 9f ad 90 LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT +U+1FB51 🭑 f0 9f ad 91 LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT +U+1FB52 🭒 f0 9f ad 92 UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE +U+1FB53 🭓 f0 9f ad 93 UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT +U+1FB54 🭔 f0 9f ad 94 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE +U+1FB55 🭕 f0 9f ad 95 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT +U+1FB56 🭖 f0 9f ad 96 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE +U+1FB57 🭗 f0 9f ad 97 UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE +U+1FB58 🭘 f0 9f ad 98 UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT +U+1FB59 🭙 f0 9f ad 99 UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE +U+1FB5A 🭚 f0 9f ad 9a UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT +U+1FB5B 🭛 f0 9f ad 9b UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE +U+1FB5C 🭜 f0 9f ad 9c UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT +U+1FB5D 🭝 f0 9f ad 9d UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT +U+1FB5E 🭞 f0 9f ad 9e UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT +U+1FB5F 🭟 f0 9f ad 9f UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT +U+1FB60 🭠 f0 9f ad a0 UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT +U+1FB61 🭡 f0 9f ad a1 UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT +U+1FB62 🭢 f0 9f ad a2 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT +U+1FB63 🭣 f0 9f ad a3 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT +U+1FB64 🭤 f0 9f ad a4 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT +U+1FB65 🭥 f0 9f ad a5 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT +U+1FB66 🭦 f0 9f ad a6 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT +U+1FB67 🭧 f0 9f ad a7 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT +U+1FB68 🭨 f0 9f ad a8 UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK +U+1FB69 🭩 f0 9f ad a9 LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK +U+1FB6A 🭪 f0 9f ad aa UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK +U+1FB6B 🭫 f0 9f ad ab LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK +U+1FB6C 🭬 f0 9f ad ac LEFT TRIANGULAR ONE QUARTER BLOCK +U+1FB6D 🭭 f0 9f ad ad UPPER TRIANGULAR ONE QUARTER BLOCK +U+1FB6E 🭮 f0 9f ad ae RIGHT TRIANGULAR ONE QUARTER BLOCK +U+1FB6F 🭯 f0 9f ad af LOWER TRIANGULAR ONE QUARTER BLOCK +U+1FB70 🭰 f0 9f ad b0 VERTICAL ONE EIGHTH BLOCK-2 +U+1FB71 🭱 f0 9f ad b1 VERTICAL ONE EIGHTH BLOCK-3 +U+1FB72 🭲 f0 9f ad b2 VERTICAL ONE EIGHTH BLOCK-4 +U+1FB73 🭳 f0 9f ad b3 VERTICAL ONE EIGHTH BLOCK-5 +U+1FB74 🭴 f0 9f ad b4 VERTICAL ONE EIGHTH BLOCK-6 +U+1FB75 🭵 f0 9f ad b5 VERTICAL ONE EIGHTH BLOCK-7 +U+1FB76 🭶 f0 9f ad b6 HORIZONTAL ONE EIGHTH BLOCK-2 +U+1FB77 🭷 f0 9f ad b7 HORIZONTAL ONE EIGHTH BLOCK-3 +U+1FB78 🭸 f0 9f ad b8 HORIZONTAL ONE EIGHTH BLOCK-4 +U+1FB79 🭹 f0 9f ad b9 HORIZONTAL ONE EIGHTH BLOCK-5 +U+1FB7A 🭺 f0 9f ad ba HORIZONTAL ONE EIGHTH BLOCK-6 +U+1FB7B 🭻 f0 9f ad bb HORIZONTAL ONE EIGHTH BLOCK-7 +U+1FB7C 🭼 f0 9f ad bc LEFT AND LOWER ONE EIGHTH BLOCK +U+1FB7D 🭽 f0 9f ad bd LEFT AND UPPER ONE EIGHTH BLOCK +U+1FB7E 🭾 f0 9f ad be RIGHT AND UPPER ONE EIGHTH BLOCK +U+1FB7F 🭿 f0 9f ad bf RIGHT AND LOWER ONE EIGHTH BLOCK +U+1FB80 🮀 f0 9f ae 80 UPPER AND LOWER ONE EIGHTH BLOCK +U+1FB81 🮁 f0 9f ae 81 HORIZONTAL ONE EIGHTH BLOCK-1358 +U+1FB82 🮂 f0 9f ae 82 UPPER ONE QUARTER BLOCK +U+1FB83 🮃 f0 9f ae 83 UPPER THREE EIGHTHS BLOCK +U+1FB84 🮄 f0 9f ae 84 UPPER FIVE EIGHTHS BLOCK +U+1FB85 🮅 f0 9f ae 85 UPPER THREE QUARTERS BLOCK +U+1FB86 🮆 f0 9f ae 86 UPPER SEVEN EIGHTHS BLOCK +U+1FB87 🮇 f0 9f ae 87 RIGHT ONE QUARTER BLOCK +U+1FB88 🮈 f0 9f ae 88 RIGHT THREE EIGHTHS BLOCK +U+1FB89 🮉 f0 9f ae 89 RIGHT FIVE EIGHTHS BLOCK +U+1FB8A 🮊 f0 9f ae 8a RIGHT THREE QUARTERS BLOCK +U+1FB8B 🮋 f0 9f ae 8b RIGHT SEVEN EIGHTHS BLOCK +U+1FB8C 🮌 f0 9f ae 8c LEFT HALF MEDIUM SHADE +U+1FB8D 🮍 f0 9f ae 8d RIGHT HALF MEDIUM SHADE +U+1FB8E 🮎 f0 9f ae 8e UPPER HALF MEDIUM SHADE +U+1FB8F 🮏 f0 9f ae 8f LOWER HALF MEDIUM SHADE +U+1FB90 🮐 f0 9f ae 90 INVERSE MEDIUM SHADE +U+1FB91 🮑 f0 9f ae 91 UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE +U+1FB92 🮒 f0 9f ae 92 UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK +U+1FB93 🮓 f0 9f ae 93 +U+1FB94 🮔 f0 9f ae 94 LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK +U+1FB95 🮕 f0 9f ae 95 CHECKER BOARD FILL +U+1FB96 🮖 f0 9f ae 96 INVERSE CHECKER BOARD FILL +U+1FB97 🮗 f0 9f ae 97 HEAVY HORIZONTAL FILL +U+1FB98 🮘 f0 9f ae 98 UPPER LEFT TO LOWER RIGHT FILL +U+1FB99 🮙 f0 9f ae 99 UPPER RIGHT TO LOWER LEFT FILL +U+1FB9A 🮚 f0 9f ae 9a UPPER AND LOWER TRIANGULAR HALF BLOCK +U+1FB9B 🮛 f0 9f ae 9b LEFT AND RIGHT TRIANGULAR HALF BLOCK +U+1FB9C 🮜 f0 9f ae 9c UPPER LEFT TRIANGULAR MEDIUM SHADE +U+1FB9D 🮝 f0 9f ae 9d UPPER RIGHT TRIANGULAR MEDIUM SHADE +U+1FB9E 🮞 f0 9f ae 9e LOWER RIGHT TRIANGULAR MEDIUM SHADE +U+1FB9F 🮟 f0 9f ae 9f LOWER LEFT TRIANGULAR MEDIUM SHADE +U+1FBA0 🮠 f0 9f ae a0 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT +U+1FBA1 🮡 f0 9f ae a1 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT +U+1FBA2 🮢 f0 9f ae a2 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE +U+1FBA3 🮣 f0 9f ae a3 BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE +U+1FBA4 🮤 f0 9f ae a4 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE +U+1FBA5 🮥 f0 9f ae a5 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE +U+1FBA6 🮦 f0 9f ae a6 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT +U+1FBA7 🮧 f0 9f ae a7 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT +U+1FBA8 🮨 f0 9f ae a8 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE +U+1FBA9 🮩 f0 9f ae a9 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE +U+1FBAA 🮪 f0 9f ae aa BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT +U+1FBAB 🮫 f0 9f ae ab BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT +U+1FBAC 🮬 f0 9f ae ac BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE +U+1FBAD 🮭 f0 9f ae ad BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE +U+1FBAE 🮮 f0 9f ae ae BOX DRAWINGS LIGHT DIAGONAL DIAMOND +U+1FBAF 🮯 f0 9f ae af BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE +U+1FBB0 🮰 f0 9f ae b0 ARROWHEAD-SHAPED POINTER +U+1FBB1 🮱 f0 9f ae b1 INVERSE CHECK MARK +U+1FBB2 🮲 f0 9f ae b2 LEFT HALF RUNNING MAN +U+1FBB3 🮳 f0 9f ae b3 RIGHT HALF RUNNING MAN +U+1FBB4 🮴 f0 9f ae b4 INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS +U+1FBB5 🮵 f0 9f ae b5 LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK +U+1FBB6 🮶 f0 9f ae b6 RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK +U+1FBB7 🮷 f0 9f ae b7 DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK +U+1FBB8 🮸 f0 9f ae b8 UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK +U+1FBB9 🮹 f0 9f ae b9 LEFT HALF FOLDER +U+1FBBA 🮺 f0 9f ae ba RIGHT HALF FOLDER +U+1FBBB 🮻 f0 9f ae bb VOIDED GREEK CROSS +U+1FBBC 🮼 f0 9f ae bc RIGHT OPEN SQUARED DOT +U+1FBBD 🮽 f0 9f ae bd NEGATIVE DIAGONAL CROSS +U+1FBBE 🮾 f0 9f ae be NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE +U+1FBBF 🮿 f0 9f ae bf NEGATIVE DIAGONAL DIAMOND +U+1FBC0 🯀 f0 9f af 80 WHITE HEAVY SALTIRE WITH ROUNDED CORNERS +U+1FBC1 🯁 f0 9f af 81 LEFT THIRD WHITE RIGHT POINTING INDEX +U+1FBC2 🯂 f0 9f af 82 MIDDLE THIRD WHITE RIGHT POINTING INDEX +U+1FBC3 🯃 f0 9f af 83 RIGHT THIRD WHITE RIGHT POINTING INDEX +U+1FBC4 🯄 f0 9f af 84 NEGATIVE SQUARED QUESTION MARK +U+1FBC5 🯅 f0 9f af 85 STICK FIGURE +U+1FBC6 🯆 f0 9f af 86 STICK FIGURE WITH ARMS RAISED +U+1FBC7 🯇 f0 9f af 87 STICK FIGURE LEANING LEFT +U+1FBC8 🯈 f0 9f af 88 STICK FIGURE LEANING RIGHT +U+1FBC9 🯉 f0 9f af 89 STICK FIGURE WITH DRESS +U+1FBCA 🯊 f0 9f af 8a WHITE UP-POINTING CHEVRON +U+1FBCB 🯋 f0 9f af 8b +U+1FBCC 🯌 f0 9f af 8c +U+1FBCD 🯍 f0 9f af 8d +U+1FBCE 🯎 f0 9f af 8e +U+1FBCF 🯏 f0 9f af 8f +U+1FBD0 🯐 f0 9f af 90 +U+1FBD1 🯑 f0 9f af 91 +U+1FBD2 🯒 f0 9f af 92 +U+1FBD3 🯓 f0 9f af 93 +U+1FBD4 🯔 f0 9f af 94 +U+1FBD5 🯕 f0 9f af 95 +U+1FBD6 🯖 f0 9f af 96 +U+1FBD7 🯗 f0 9f af 97 +U+1FBD8 🯘 f0 9f af 98 +U+1FBD9 🯙 f0 9f af 99 +U+1FBDA 🯚 f0 9f af 9a +U+1FBDB 🯛 f0 9f af 9b +U+1FBDC 🯜 f0 9f af 9c +U+1FBDD 🯝 f0 9f af 9d +U+1FBDE 🯞 f0 9f af 9e +U+1FBDF 🯟 f0 9f af 9f +U+1FBE0 🯠 f0 9f af a0 +U+1FBE1 🯡 f0 9f af a1 +U+1FBE2 🯢 f0 9f af a2 +U+1FBE3 🯣 f0 9f af a3 +U+1FBE4 🯤 f0 9f af a4 +U+1FBE5 🯥 f0 9f af a5 +U+1FBE6 🯦 f0 9f af a6 +U+1FBE7 🯧 f0 9f af a7 +U+1FBE8 🯨 f0 9f af a8 +U+1FBE9 🯩 f0 9f af a9 +U+1FBEA 🯪 f0 9f af aa +U+1FBEB 🯫 f0 9f af ab +U+1FBEC 🯬 f0 9f af ac +U+1FBED 🯭 f0 9f af ad +U+1FBEE 🯮 f0 9f af ae +U+1FBEF 🯯 f0 9f af af +U+1FBF0 🯰 f0 9f af b0 SEGMENTED DIGIT ZERO +U+1FBF1 🯱 f0 9f af b1 SEGMENTED DIGIT ONE +U+1FBF2 🯲 f0 9f af b2 SEGMENTED DIGIT TWO +U+1FBF3 🯳 f0 9f af b3 SEGMENTED DIGIT THREE +U+1FBF4 🯴 f0 9f af b4 SEGMENTED DIGIT FOUR +U+1FBF5 🯵 f0 9f af b5 SEGMENTED DIGIT FIVE +U+1FBF6 🯶 f0 9f af b6 SEGMENTED DIGIT SIX +U+1FBF7 🯷 f0 9f af b7 SEGMENTED DIGIT SEVEN +U+1FBF8 🯸 f0 9f af b8 SEGMENTED DIGIT EIGHT +U+1FBF9 🯹 f0 9f af b9 SEGMENTED DIGIT NINE +U+1FBFA 🯺 f0 9f af ba +U+1FBFB 🯻 f0 9f af bb +U+1FBFC 🯼 f0 9f af bc +U+1FBFD 🯽 f0 9f af bd +U+1FBFE 🯾 f0 9f af be +U+1FBFF 🯿 f0 9f af bf \ No newline at end of file diff --git a/tools/check.import.sh b/tools/check.import.sh index 19895f54..966188c6 100755 --- a/tools/check.import.sh +++ b/tools/check.import.sh @@ -28,7 +28,9 @@ __check(){ -e "ttk.py:import threading" \ -e "ttk.py:import platform" \ -e "clipboard.py:import importlib.util" \ - -e "filebuffer.py:import threading" + -e "filebuffer.py:import threading" \ + -e "texedit.py:from math import log10, ceil" + } ; if __check ; then