Browse Source

Graph widget

pull/4/head
Eugenio Parodi 5 years ago
parent
commit
0e3a8b05b0
  1. 38
      TermTk/TTkCore/canvas.py
  2. 8
      TermTk/TTkCore/cfg.py
  3. 6
      TermTk/TTkCore/constant.py
  4. 4
      TermTk/TTkCore/helper.py
  5. 20
      TermTk/TTkCore/timer.py
  6. 7
      TermTk/TTkCore/ttk.py
  7. 22
      TermTk/TTkGui/theme.py
  8. 1
      TermTk/TTkWidgets/__init__.py
  9. 4
      TermTk/TTkWidgets/button.py
  10. 72
      TermTk/TTkWidgets/graph.py
  11. 2
      TermTk/TTkWidgets/treewidget.py
  12. 7
      TermTk/libbpytop/colors.py
  13. 4
      docs/TODO.md
  14. 89
      tests/showcase/graph.py
  15. 4
      tests/test.showcase.001.py
  16. 89
      tests/test.ui.013.graph.py
  17. 258
      tests/utf-8/utf-8.arrows.txt
  18. 2
      tests/utf-8/utf-8.box.drawing.txt
  19. 258
      tests/utf-8/utf-8.braille.txt
  20. 258
      tests/utf-8/utf-8.diacritical.marks.for.symbols.txt
  21. 258
      tests/utf-8/utf-8.dingbats.txt
  22. 1
      tests/utf-8/utf-8.emoticons.txt
  23. 258
      tests/utf-8/utf-8.geom.shapes.txt
  24. 2
      tests/utf-8/utf-8.misc.symbols.pictographs.txt
  25. 2
      tests/utf-8/utf-8.misc.tech.txt

38
TermTk/TTkCore/canvas.py

@ -22,6 +22,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import math
import TermTk.libbpytop as lbt
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.log import TTkLog
@ -338,6 +340,42 @@ class TTkCanvas:
self.drawText(pos=(x+w-2,y+0),text=top, color=borderColor)
self.drawText(pos=(x+w-2,y+1),text=center, color=borderColor)
def drawHChart(self, pos, values, zoom=1.0, color=TTkColor.RST):
x,y=pos
v1,v2 = values
t1,t2,b1,b2=0,0,0,0
gu=TTkCfg.theme.graph_up
gd=TTkCfg.theme.graph_down
if v1>0: t1 = v1*zoom
else: b1 = v1*zoom
if v2>0: t2 = v2*zoom
else: b2 = v2*zoom
'''
loop 0 1 2 3 = range(0,1+maxt//4)
v1 13 |---|---|---|--|
v2 10 |---|---|-|
maxt 13 |---|---|---|--|
out 4,4 4,4 4,2 3,0 0,0
o1 = 4 if v1-4 > i*4 else v1-i*4
'''
# Draw Top Chart
maxt = max(t1,t2)
for i in range(0,int(maxt//4)+1):
o1 = 4 if t1-4 > i*4 else max(0,int(t1-i*4))
o2 = 4 if t2-4 > i*4 else max(0,int(t2-i*4))
#TTkLog.debug(f"{v1,v2},{(t1//4),(t2//4)}, {(t1%4),(t2%4)}, {o1,o2}")
self._set(y-i,x, gu[o1][o2], color)
# Draw Bottom Chart
minb = min(b1,b2)
for i in range(int(minb//4),0):
o1 = 4 if -b1-4 > -i*4 else max(0,int(-b1+i*4))
o2 = 4 if -b2-4 > -i*4 else max(0,int(-b2+i*4))
##TTkLog.debug(f"{v1,v2},{(t1//(t2//4)}, {(t1%4),(t2%4)}, {o1,o2}")
self._set(y-i,x, gd[o1][o2], color)
def execPaint(self, winw, winh):
pass

8
TermTk/TTkCore/cfg.py

@ -22,13 +22,11 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from TermTk.TTkCore.constant import TTkK
class TTkCfg:
DEP_2: int = 0x02
DEP_4: int = 0x04
DEP_8: int = 0x08
DEP_24: int = 0x18
color_depth: int = TTkK.DEP_24
color_depth: int = DEP_24
maxFps = 35
scrollDelta = 5
theme = None

6
TermTk/TTkCore/constant.py

@ -23,6 +23,12 @@
# SOFTWARE.
class TTkConstant:
# Color Depth
DEP_2: int = 0x02
DEP_4: int = 0x04
DEP_8: int = 0x08
DEP_24: int = 0x18
# Focus Policies
NoFocus = 0x0000
ClickFocus = 0x0001

4
TermTk/TTkCore/helper.py

@ -99,8 +99,8 @@ class TTkHelper:
if TTkHelper._rootCanvas is None:
return
# Build a list of buffers to be repainted
updateBuffers = [w for w in TTkHelper._updateBuffer]
updateWidgets = [w for w in TTkHelper._updateWidget]
updateBuffers = TTkHelper._updateBuffer.copy()
updateWidgets = TTkHelper._updateWidget.copy()
# TTkLog.debug(f"{len(TTkHelper._updateBuffer)} {len(TTkHelper._updateWidget)}")
for widget in TTkHelper._updateWidget:

20
TermTk/TTkCore/timer.py

@ -22,9 +22,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# This code is inspired by
# https://github.com/ceccopierangiolieugenio/pyCuT/blob/master/cupy/CuTCore/CuDebug.py
import threading, time
from TermTk.TTkCore.constant import TTkK
@ -33,6 +30,7 @@ from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
class TTkTimer(threading.Thread):
_timers = []
__slots__ = (
'timeout', '_timerEvent',
'_delay', '_delayLock', '_quit',
@ -42,28 +40,33 @@ class TTkTimer(threading.Thread):
self.timeout = pyTTkSignal()
self._timerEvent = threading.Event()
self._quit = False
self._quit = threading.Event()
self._stopTime = 0
self._delay=0
self._delayLock = threading.Lock()
threading.Thread.__init__(self)
TTkTimer._timers.append(self)
threading.Thread.start(self)
@staticmethod
def quitAll():
for timer in TTkTimer._timers:
timer.quit()
def quit(self):
self._quit = True
self._delay = 0
self._quit.set()
self._timerEvent.set()
def run(self):
while self._timerEvent.wait():
self._timerEvent.clear()
if self._quit: break
while self._delay > 0:
# self._delayLock.acquire()
delay = self._delay
self._delay = 0
# self._delayLock.release()
time.sleep(delay)
if self._quit.wait(delay):
return
self.timeout.emit()
@pyTTkSlot(int)
@ -74,4 +77,5 @@ class TTkTimer(threading.Thread):
@pyTTkSlot()
def stop(self):
# TODO: Timer.stop()
self._stopTime = time.time()

7
TermTk/TTkCore/ttk.py

@ -21,6 +21,7 @@
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import os
import signal
import time
@ -82,7 +83,7 @@ class TTk(TTkWidget):
threading.Thread(target=self._input_thread, daemon=True).start()
self._timer = TTkTimer()
self._timer.timeout.connect(self._time_event)
self._timer.start(0.2)
self._timer.start(0.1)
self.show()
self.running = True
@ -119,7 +120,7 @@ class TTk(TTkWidget):
pass
elif evt is TTkK.TIME_EVENT:
TTkHelper.paintAll()
self._timer.start(0.03)
self._timer.start(1/TTkCfg.maxFps)
self._fps()
pass
elif evt is TTkK.SCREEN_EVENT:
@ -158,7 +159,7 @@ class TTk(TTkWidget):
def quit(self):
self.events.put(TTkK.QUIT_EVENT)
self._timer.quit()
TTkTimer.quitAll()
self.running = False
def _SIGSTOP(self, signum, frame):

22
TermTk/TTkGui/theme.py

@ -140,6 +140,28 @@ class TTkTheme():
#16 17
'',''
)
'''
bpytop style graph:
'''
graph_up = (
(' ','','','',''),
('','','','',''),
('','','','',''),
('','','','',''),
('','','','',''))
graph_down=(
(' ','','','',''),
('','','','',''),
('','','','',''),
('','','','',''),
('','','','',''))
frameBorderColor = TTkColor.RST
frameTitleColor = TTkColor.fg("#dddddd")+TTkColor.bg("#222222")

1
TermTk/TTkWidgets/__init__.py

@ -19,3 +19,4 @@ from .tree import *
from .treeview import *
from .treewidget import *
from .logviewer import *
from .graph import *

4
TermTk/TTkWidgets/button.py

@ -75,13 +75,13 @@ class TTkButton(TTkWidget):
self._canvas.drawText(pos=(1,y), color=textColor ,text=text)
def mousePressEvent(self, evt):
TTkLog.debug(f"{self._text} Test Mouse {evt}")
# TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = True
self.update()
return True
def mouseReleaseEvent(self, evt):
TTkLog.debug(f"{self._text} Test Mouse {evt}")
# TTkLog.debug(f"{self._text} Test Mouse {evt}")
self._pressed = False
self.update()
self.clicked.emit()

72
TermTk/TTkWidgets/graph.py

@ -0,0 +1,72 @@
#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# inspired by:
# https://grafana.com/docs/grafana/latest/panels/visualizations/graph-panel/
# And of course:
# https://github.com/aristocratos/bpytop
from TermTk.TTkCore.cfg import *
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.log import TTkLog
from TermTk.TTkWidgets.widget import TTkWidget
from TermTk.TTkTemplates.color import TColor
class TTkGraph(TTkWidget, TColor):
__slots__ = ('_data', '_maxData', '_offset', '_direction')
def __init__(self, *args, **kwargs):
self._data = []
self._offset = 0
TTkWidget.__init__(self, *args, **kwargs)
TColor.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkGraph' )
self._maxData = kwargs.get('maxData', 0x1000)
self._direction = kwargs.get('direction', TTkK.RIGHT)
def addValue(self, value):
self._data.append(value)
self.update()
def paintEvent(self):
if not self._data: return
x=0
y = self.height()//2
w,h = self.size()
v1,v2 = 0,0
i=0
data = self._data[-w*2:]
zoom = 2*h/max(max(data),-min(data))
for i in range(len(data)):
v2 = v1
v1 = data[i]
if i%2==0:
if self._direction == TTkK.RIGHT:
self._canvas.drawHChart(pos=(x+i//2,y),values=(v2,v1), zoom=zoom, color=self.color.modParam(val=-y))
else:
self._canvas.drawHChart(pos=(w-(x+i//2),y),values=(v1,v2), zoom=zoom, color=self.color.modParam(val=-y))
if i%2==1:
if self._direction == TTkK.RIGHT:
self._canvas.drawHChart(pos=(x+i//2+1,y),values=(v1,0), zoom=zoom, color=self.color.modParam(val=-y))
else:
self._canvas.drawHChart(pos=(w-(x+i//2+1),y),values=(0,v1), zoom=zoom, color=self.color.modParam(val=-y))

2
TermTk/TTkWidgets/treewidget.py

@ -129,7 +129,7 @@ class TTkTreeWidget(TTkTableView):
raise TypeError("TTkTreeWidgetItem is required in TTkTreeWidget.addTopLevelItem(item)")
if item.parent() is None:
self._topLevelItems.addChild(item)
displayedItems = [i for i in item.data()]
displayedItems = item.data().copy()
displayTreeItem = _TTkDisplayedTreeItem(text=displayedItems[0], id=0, depth=depth, treeWidgetItem=item)
displayTreeItem._clicked.connect(self._controlClicked)
displayedItems[0] = displayTreeItem

7
TermTk/libbpytop/colors.py

@ -27,6 +27,7 @@ except Exception as e:
exit(1)
from TermTk.libbpytop.term import Term
from TermTk.TTkCore.constant import TTkK
from TermTk.TTkCore.cfg import TTkCfg
@ -60,12 +61,12 @@ class Color:
try:
if len(hexa) == 3:
c = int(hexa[1:], base=16)
if TTkCfg.color_depth is TTkCfg.DEP_24:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f'\033[{dint};2;{c};{c};{c}m'
else:
color = f'{Color.truecolor_to_256(rgb=(c, c, c), depth=depth)}'
elif len(hexa) == 7:
if TTkCfg.color_depth is TTkCfg.DEP_24:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f'\033[{dint};2;{int(hexa[1:3], base=16)};{int(hexa[3:5], base=16)};{int(hexa[5:7], base=16)}m'
else:
color = f'{Color.truecolor_to_256(rgb=(int(hexa[1:3], base=16), int(hexa[3:5], base=16), int(hexa[5:7], base=16)), depth=depth)}'
@ -73,7 +74,7 @@ class Color:
ttk.TTkLog.error(f'{e}')
else:
if TTkCfg.color_depth is TTkCfg.DEP_24:
if TTkCfg.color_depth is TTkK.DEP_24:
color = f'\033[{dint};2;{r};{g};{b}m'
else:
color = f'{Color.truecolor_to_256(rgb=(r, g, b), depth=depth)}'

4
docs/TODO.md

@ -117,9 +117,9 @@
- [ ] Events (Signal/Slots)
- [ ] Themes
#### Graph Widget
- [ ] Basic Implementation
- [x] Basic Implementation
- [ ] Events (Signal/Slots)
- [ ] Themes
- [x] Themes
#### Header Menu
- [ ] Basic Implementation
- [ ] Events (Signal/Slots)

89
tests/showcase/graph.py

@ -0,0 +1,89 @@
#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import sys, os, argparse, math, random
sys.path.append(os.path.join(sys.path[0],'../..'))
import TermTk as ttk
def demoGraph(root= None):
frame = ttk.TTkFrame(parent=root, border=False, layout=ttk.TTkGridLayout())
graphWidget1 = ttk.TTkGraph(color=ttk.TTkColor.fg('#00dddd', modifier=ttk.TTkColorGradient(increment=-25)))
graphWidget2 = ttk.TTkGraph(direction=ttk.TTkK.LEFT, color=ttk.TTkColor.fg('#ff8800', modifier=ttk.TTkColorGradient(increment= 40)))
graphWidget3 = ttk.TTkGraph(color=ttk.TTkColor.fg('#dd00dd', modifier=ttk.TTkColorGradient(increment=-20)))
graphWidget4 = ttk.TTkGraph(color=ttk.TTkColor.fg('#00dd44', modifier=ttk.TTkColorGradient(increment=-30)))
frame.layout().addWidget(graphWidget1, 0,0)
frame.layout().addWidget(graphWidget2, 0,1)
frame.layout().addWidget(graphWidget3, 1,0)
frame.layout().addWidget(graphWidget4, 1,1)
class timerEvent():
def __init__(self, w, type):
self.timer = ttk.TTkTimer()
self.val = 10
self.switch = False
self.w = w
self.type = type
self.timer.timeout.connect(self.timerEvent)
self.timer.start(1)
@ttk.pyTTkSlot()
def timerEvent(self):
self.switch = not self.switch
if self.type == 1: # Simple sin
val = math.sin(self.val*math.pi/40)*4*10
if self.type == 2: # Double sin
offset = 15
if self.switch: val = math.sin(self.val*math.pi/40)*4*10
else: val = math.sin((self.val+offset)*math.pi/40)*4*7
if self.type == 3: # random
val = random.uniform(-40,+40)
if self.type == 4: # mix rand and sin
if self.switch: val = math.sin(self.val*math.pi/40)*4*10
else: val = random.uniform(-40,+40)
self.val+=1
self.w.addValue(val)
self.timer.start(0.1)
timerEvent(graphWidget1, 1)
timerEvent(graphWidget2, 2)
timerEvent(graphWidget3, 3)
timerEvent(graphWidget4, 4)
return frame
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-f', help='Full Screen', action='store_true')
args = parser.parse_args()
ttk.TTkLog.use_default_file_logging()
root = ttk.TTk()
if args.f:
rootGraph = root
root.setLayout(ttk.TTkGridLayout())
else:
rootGraph = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Graph", border=True, layout=ttk.TTkGridLayout())
demoGraph(rootGraph)
root.mainloop()
if __name__ == "__main__":
main()

4
tests/test.showcase.001.py

@ -32,6 +32,7 @@ from showcase.layout import demoLayout
from showcase.table import demoTable
from showcase.tab import demoTab
from showcase.tree import demoTree
from showcase.graph import demoGraph
from showcase.splitter import demoSplitter
from showcase.windows import demoWindows
from showcase.formwidgets import demoFormWidgets
@ -42,6 +43,7 @@ def demoShowcase(root= None):
tabWidget1.addTab(ttk.TTkTestWidget(border=True, title="Frame1.2"), " Label Test 1.2 ")
tabWidget1.addTab(demoLayout(), " Layout Test ")
tabWidget1.addTab(demoFormWidgets(), " Form Test ")
tabWidget1.addTab(demoGraph(), " Graph Test ")
tabWidget1.addTab(demoTable(), " Table Test ")
tabWidget1.addTab(demoTree(), " Tree Test ")
tabWidget1.addTab(demoSplitter(), " Splitter Test ")
@ -61,7 +63,7 @@ def main():
root.setLayout(ttk.TTkGridLayout())
winTabbed1 = root
else:
winTabbed1 = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
winTabbed1 = ttk.TTkWindow(parent=root,pos=(0,0), size=(120,40), title="Test Tab", border=True, layout=ttk.TTkGridLayout())
demoShowcase(winTabbed1)
root.mainloop()

89
tests/test.ui.013.graph.py

@ -0,0 +1,89 @@
#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import sys, os, argparse, math, random
sys.path.append(os.path.join(sys.path[0],'..'))
import TermTk as ttk
def demoGraph(root= None):
frame = ttk.TTkFrame(parent=root, border=False, layout=ttk.TTkGridLayout())
graphWidget1 = ttk.TTkGraph(color=ttk.TTkColor.fg('#00dddd', modifier=ttk.TTkColorGradient(increment=-20)))
graphWidget2 = ttk.TTkGraph(direction=ttk.TTkK.LEFT, color=ttk.TTkColor.fg('#ffdd00', modifier=ttk.TTkColorGradient(increment= 10)))
graphWidget3 = ttk.TTkGraph(color=ttk.TTkColor.fg('#dd00dd', modifier=ttk.TTkColorGradient(increment=-10)))
graphWidget4 = ttk.TTkGraph(color=ttk.TTkColor.fg('#00dd44', modifier=ttk.TTkColorGradient(increment=-15)))
frame.layout().addWidget(graphWidget1, 0,0)
frame.layout().addWidget(graphWidget2, 0,1)
frame.layout().addWidget(graphWidget3, 1,0)
frame.layout().addWidget(graphWidget4, 1,1)
class timerEvent():
def __init__(self, w, type):
self.timer = ttk.TTkTimer()
self.val = 10
self.switch = False
self.w = w
self.type = type
self.timer.timeout.connect(self.timerEvent)
self.timer.start(1)
@ttk.pyTTkSlot()
def timerEvent(self):
self.switch = not self.switch
if self.type == 1: # Simple sin
val = math.sin(self.val*math.pi/40)*4*10
if self.type == 2: # Double sin
offset = 15
if self.switch: val = math.sin(self.val*math.pi/40)*4*10
else: val = math.sin((self.val+offset)*math.pi/40)*4*7
if self.type == 3: # random
val = random.uniform(-40,+40)
if self.type == 4: # mix rand and sin
if self.switch: val = math.sin(self.val*math.pi/40)*4*10
else: val = random.uniform(-40,+40)
self.val+=1
self.w.addValue(val)
self.timer.start(0.1)
timerEvent(graphWidget1, 1)
timerEvent(graphWidget2, 2)
timerEvent(graphWidget3, 3)
timerEvent(graphWidget4, 4)
return frame
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-f', help='Full Screen', action='store_true')
args = parser.parse_args()
ttk.TTkLog.use_default_file_logging()
root = ttk.TTk()
if args.f:
rootGraph = root
root.setLayout(ttk.TTkGridLayout())
else:
rootGraph = ttk.TTkWindow(parent=root,pos=(1,1), size=(100,40), title="Test Graph", border=True, layout=ttk.TTkGridLayout())
demoGraph(rootGraph)
root.mainloop()
if __name__ == "__main__":
main()

258
tests/utf-8/utf-8.arrows.txt

@ -0,0 +1,258 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+2190 ← e2 86 90 LEFTWARDS ARROW
U+2191 ↑ e2 86 91 UPWARDS ARROW
U+2192 → e2 86 92 RIGHTWARDS ARROW
U+2193 ↓ e2 86 93 DOWNWARDS ARROW
U+2194 ↔ e2 86 94 LEFT RIGHT ARROW
U+2195 ↕ e2 86 95 UP DOWN ARROW
U+2196 ↖ e2 86 96 NORTH WEST ARROW
U+2197 ↗ e2 86 97 NORTH EAST ARROW
U+2198 ↘ e2 86 98 SOUTH EAST ARROW
U+2199 ↙ e2 86 99 SOUTH WEST ARROW
U+219A ↚ e2 86 9a LEFTWARDS ARROW WITH STROKE
U+219B ↛ e2 86 9b RIGHTWARDS ARROW WITH STROKE
U+219C ↜ e2 86 9c LEFTWARDS WAVE ARROW
U+219D ↝ e2 86 9d RIGHTWARDS WAVE ARROW
U+219E ↞ e2 86 9e LEFTWARDS TWO HEADED ARROW
U+219F ↟ e2 86 9f UPWARDS TWO HEADED ARROW
U+21A0 ↠ e2 86 a0 RIGHTWARDS TWO HEADED ARROW
U+21A1 ↡ e2 86 a1 DOWNWARDS TWO HEADED ARROW
U+21A2 ↢ e2 86 a2 LEFTWARDS ARROW WITH TAIL
U+21A3 ↣ e2 86 a3 RIGHTWARDS ARROW WITH TAIL
U+21A4 ↤ e2 86 a4 LEFTWARDS ARROW FROM BAR
U+21A5 ↥ e2 86 a5 UPWARDS ARROW FROM BAR
U+21A6 ↦ e2 86 a6 RIGHTWARDS ARROW FROM BAR
U+21A7 ↧ e2 86 a7 DOWNWARDS ARROW FROM BAR
U+21A8 ↨ e2 86 a8 UP DOWN ARROW WITH BASE
U+21A9 ↩ e2 86 a9 LEFTWARDS ARROW WITH HOOK
U+21AA ↪ e2 86 aa RIGHTWARDS ARROW WITH HOOK
U+21AB ↫ e2 86 ab LEFTWARDS ARROW WITH LOOP
U+21AC ↬ e2 86 ac RIGHTWARDS ARROW WITH LOOP
U+21AD ↭ e2 86 ad LEFT RIGHT WAVE ARROW
U+21AE ↮ e2 86 ae LEFT RIGHT ARROW WITH STROKE
U+21AF ↯ e2 86 af DOWNWARDS ZIGZAG ARROW
U+21B0 ↰ e2 86 b0 UPWARDS ARROW WITH TIP LEFTWARDS
U+21B1 ↱ e2 86 b1 UPWARDS ARROW WITH TIP RIGHTWARDS
U+21B2 ↲ e2 86 b2 DOWNWARDS ARROW WITH TIP LEFTWARDS
U+21B3 ↳ e2 86 b3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
U+21B4 ↴ e2 86 b4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
U+21B5 ↵ e2 86 b5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
U+21B6 ↶ e2 86 b6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
U+21B7 ↷ e2 86 b7 CLOCKWISE TOP SEMICIRCLE ARROW
U+21B8 ↸ e2 86 b8 NORTH WEST ARROW TO LONG BAR
U+21B9 ↹ e2 86 b9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
U+21BA ↺ e2 86 ba ANTICLOCKWISE OPEN CIRCLE ARROW
U+21BB ↻ e2 86 bb CLOCKWISE OPEN CIRCLE ARROW
U+21BC ↼ e2 86 bc LEFTWARDS HARPOON WITH BARB UPWARDS
U+21BD ↽ e2 86 bd LEFTWARDS HARPOON WITH BARB DOWNWARDS
U+21BE ↾ e2 86 be UPWARDS HARPOON WITH BARB RIGHTWARDS
U+21BF ↿ e2 86 bf UPWARDS HARPOON WITH BARB LEFTWARDS
U+21C0 ⇀ e2 87 80 RIGHTWARDS HARPOON WITH BARB UPWARDS
U+21C1 ⇁ e2 87 81 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
U+21C2 ⇂ e2 87 82 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
U+21C3 ⇃ e2 87 83 DOWNWARDS HARPOON WITH BARB LEFTWARDS
U+21C4 ⇄ e2 87 84 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
U+21C5 ⇅ e2 87 85 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
U+21C6 ⇆ e2 87 86 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
U+21C7 ⇇ e2 87 87 LEFTWARDS PAIRED ARROWS
U+21C8 ⇈ e2 87 88 UPWARDS PAIRED ARROWS
U+21C9 ⇉ e2 87 89 RIGHTWARDS PAIRED ARROWS
U+21CA ⇊ e2 87 8a DOWNWARDS PAIRED ARROWS
U+21CB ⇋ e2 87 8b LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
U+21CC ⇌ e2 87 8c RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
U+21CD ⇍ e2 87 8d LEFTWARDS DOUBLE ARROW WITH STROKE
U+21CE ⇎ e2 87 8e LEFT RIGHT DOUBLE ARROW WITH STROKE
U+21CF ⇏ e2 87 8f RIGHTWARDS DOUBLE ARROW WITH STROKE
U+21D0 ⇐ e2 87 90 LEFTWARDS DOUBLE ARROW
U+21D1 ⇑ e2 87 91 UPWARDS DOUBLE ARROW
U+21D2 ⇒ e2 87 92 RIGHTWARDS DOUBLE ARROW
U+21D3 ⇓ e2 87 93 DOWNWARDS DOUBLE ARROW
U+21D4 ⇔ e2 87 94 LEFT RIGHT DOUBLE ARROW
U+21D5 ⇕ e2 87 95 UP DOWN DOUBLE ARROW
U+21D6 ⇖ e2 87 96 NORTH WEST DOUBLE ARROW
U+21D7 ⇗ e2 87 97 NORTH EAST DOUBLE ARROW
U+21D8 ⇘ e2 87 98 SOUTH EAST DOUBLE ARROW
U+21D9 ⇙ e2 87 99 SOUTH WEST DOUBLE ARROW
U+21DA ⇚ e2 87 9a LEFTWARDS TRIPLE ARROW
U+21DB ⇛ e2 87 9b RIGHTWARDS TRIPLE ARROW
U+21DC ⇜ e2 87 9c LEFTWARDS SQUIGGLE ARROW
U+21DD ⇝ e2 87 9d RIGHTWARDS SQUIGGLE ARROW
U+21DE ⇞ e2 87 9e UPWARDS ARROW WITH DOUBLE STROKE
U+21DF ⇟ e2 87 9f DOWNWARDS ARROW WITH DOUBLE STROKE
U+21E0 ⇠ e2 87 a0 LEFTWARDS DASHED ARROW
U+21E1 ⇡ e2 87 a1 UPWARDS DASHED ARROW
U+21E2 ⇢ e2 87 a2 RIGHTWARDS DASHED ARROW
U+21E3 ⇣ e2 87 a3 DOWNWARDS DASHED ARROW
U+21E4 ⇤ e2 87 a4 LEFTWARDS ARROW TO BAR
U+21E5 ⇥ e2 87 a5 RIGHTWARDS ARROW TO BAR
U+21E6 ⇦ e2 87 a6 LEFTWARDS WHITE ARROW
U+21E7 ⇧ e2 87 a7 UPWARDS WHITE ARROW
U+21E8 ⇨ e2 87 a8 RIGHTWARDS WHITE ARROW
U+21E9 ⇩ e2 87 a9 DOWNWARDS WHITE ARROW
U+21EA ⇪ e2 87 aa UPWARDS WHITE ARROW FROM BAR
U+21EB ⇫ e2 87 ab UPWARDS WHITE ARROW ON PEDESTAL
U+21EC ⇬ e2 87 ac UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
U+21ED ⇭ e2 87 ad UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
U+21EE ⇮ e2 87 ae UPWARDS WHITE DOUBLE ARROW
U+21EF ⇯ e2 87 af UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
U+21F0 ⇰ e2 87 b0 RIGHTWARDS WHITE ARROW FROM WALL
U+21F1 ⇱ e2 87 b1 NORTH WEST ARROW TO CORNER
U+21F2 ⇲ e2 87 b2 SOUTH EAST ARROW TO CORNER
U+21F3 ⇳ e2 87 b3 UP DOWN WHITE ARROW
U+21F4 ⇴ e2 87 b4 RIGHT ARROW WITH SMALL CIRCLE
U+21F5 ⇵ e2 87 b5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
U+21F6 ⇶ e2 87 b6 THREE RIGHTWARDS ARROWS
U+21F7 ⇷ e2 87 b7 LEFTWARDS ARROW WITH VERTICAL STROKE
U+21F8 ⇸ e2 87 b8 RIGHTWARDS ARROW WITH VERTICAL STROKE
U+21F9 ⇹ e2 87 b9 LEFT RIGHT ARROW WITH VERTICAL STROKE
U+21FA ⇺ e2 87 ba LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
U+21FB ⇻ e2 87 bb RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
U+21FC ⇼ e2 87 bc LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
U+21FD ⇽ e2 87 bd LEFTWARDS OPEN-HEADED ARROW
U+21FE ⇾ e2 87 be RIGHTWARDS OPEN-HEADED ARROW
U+21FF ⇿ e2 87 bf LEFT RIGHT OPEN-HEADED ARROW
U+2200 ∀ e2 88 80 FOR ALL
U+2201 ∁ e2 88 81 COMPLEMENT
U+2202 ∂ e2 88 82 PARTIAL DIFFERENTIAL
U+2203 ∃ e2 88 83 THERE EXISTS
U+2204 ∄ e2 88 84 THERE DOES NOT EXIST
U+2205 ∅ e2 88 85 EMPTY SET
U+2206 ∆ e2 88 86 INCREMENT
U+2207 ∇ e2 88 87 NABLA
U+2208 ∈ e2 88 88 ELEMENT OF
U+2209 ∉ e2 88 89 NOT AN ELEMENT OF
U+220A ∊ e2 88 8a SMALL ELEMENT OF
U+220B ∋ e2 88 8b CONTAINS AS MEMBER
U+220C ∌ e2 88 8c DOES NOT CONTAIN AS MEMBER
U+220D ∍ e2 88 8d SMALL CONTAINS AS MEMBER
U+220E ∎ e2 88 8e END OF PROOF
U+220F ∏ e2 88 8f N-ARY PRODUCT
U+2210 ∐ e2 88 90 N-ARY COPRODUCT
U+2211 ∑ e2 88 91 N-ARY SUMMATION
U+2212 − e2 88 92 MINUS SIGN
U+2213 ∓ e2 88 93 MINUS-OR-PLUS SIGN
U+2214 ∔ e2 88 94 DOT PLUS
U+2215 ∕ e2 88 95 DIVISION SLASH
U+2216 ∖ e2 88 96 SET MINUS
U+2217 ∗ e2 88 97 ASTERISK OPERATOR
U+2218 ∘ e2 88 98 RING OPERATOR
U+2219 ∙ e2 88 99 BULLET OPERATOR
U+221A √ e2 88 9a SQUARE ROOT
U+221B ∛ e2 88 9b CUBE ROOT
U+221C ∜ e2 88 9c FOURTH ROOT
U+221D ∝ e2 88 9d PROPORTIONAL TO
U+221E ∞ e2 88 9e INFINITY
U+221F ∟ e2 88 9f RIGHT ANGLE
U+2220 ∠ e2 88 a0 ANGLE
U+2221 ∡ e2 88 a1 MEASURED ANGLE
U+2222 ∢ e2 88 a2 SPHERICAL ANGLE
U+2223 ∣ e2 88 a3 DIVIDES
U+2224 ∤ e2 88 a4 DOES NOT DIVIDE
U+2225 ∥ e2 88 a5 PARALLEL TO
U+2226 ∦ e2 88 a6 NOT PARALLEL TO
U+2227 ∧ e2 88 a7 LOGICAL AND
U+2228 ∨ e2 88 a8 LOGICAL OR
U+2229 ∩ e2 88 a9 INTERSECTION
U+222A ∪ e2 88 aa UNION
U+222B ∫ e2 88 ab INTEGRAL
U+222C ∬ e2 88 ac DOUBLE INTEGRAL
U+222D ∭ e2 88 ad TRIPLE INTEGRAL
U+222E ∮ e2 88 ae CONTOUR INTEGRAL
U+222F ∯ e2 88 af SURFACE INTEGRAL
U+2230 ∰ e2 88 b0 VOLUME INTEGRAL
U+2231 ∱ e2 88 b1 CLOCKWISE INTEGRAL
U+2232 ∲ e2 88 b2 CLOCKWISE CONTOUR INTEGRAL
U+2233 ∳ e2 88 b3 ANTICLOCKWISE CONTOUR INTEGRAL
U+2234 ∴ e2 88 b4 THEREFORE
U+2235 ∵ e2 88 b5 BECAUSE
U+2236 ∶ e2 88 b6 RATIO
U+2237 ∷ e2 88 b7 PROPORTION
U+2238 ∸ e2 88 b8 DOT MINUS
U+2239 ∹ e2 88 b9 EXCESS
U+223A ∺ e2 88 ba GEOMETRIC PROPORTION
U+223B ∻ e2 88 bb HOMOTHETIC
U+223C ∼ e2 88 bc TILDE OPERATOR
U+223D ∽ e2 88 bd REVERSED TILDE
U+223E ∾ e2 88 be INVERTED LAZY S
U+223F ∿ e2 88 bf SINE WAVE
U+2240 ≀ e2 89 80 WREATH PRODUCT
U+2241 ≁ e2 89 81 NOT TILDE
U+2242 ≂ e2 89 82 MINUS TILDE
U+2243 ≃ e2 89 83 ASYMPTOTICALLY EQUAL TO
U+2244 ≄ e2 89 84 NOT ASYMPTOTICALLY EQUAL TO
U+2245 ≅ e2 89 85 APPROXIMATELY EQUAL TO
U+2246 ≆ e2 89 86 APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
U+2247 ≇ e2 89 87 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
U+2248 ≈ e2 89 88 ALMOST EQUAL TO
U+2249 ≉ e2 89 89 NOT ALMOST EQUAL TO
U+224A ≊ e2 89 8a ALMOST EQUAL OR EQUAL TO
U+224B ≋ e2 89 8b TRIPLE TILDE
U+224C ≌ e2 89 8c ALL EQUAL TO
U+224D ≍ e2 89 8d EQUIVALENT TO
U+224E ≎ e2 89 8e GEOMETRICALLY EQUIVALENT TO
U+224F ≏ e2 89 8f DIFFERENCE BETWEEN
U+2250 ≐ e2 89 90 APPROACHES THE LIMIT
U+2251 ≑ e2 89 91 GEOMETRICALLY EQUAL TO
U+2252 ≒ e2 89 92 APPROXIMATELY EQUAL TO OR THE IMAGE OF
U+2253 ≓ e2 89 93 IMAGE OF OR APPROXIMATELY EQUAL TO
U+2254 ≔ e2 89 94 COLON EQUALS
U+2255 ≕ e2 89 95 EQUALS COLON
U+2256 ≖ e2 89 96 RING IN EQUAL TO
U+2257 ≗ e2 89 97 RING EQUAL TO
U+2258 ≘ e2 89 98 CORRESPONDS TO
U+2259 ≙ e2 89 99 ESTIMATES
U+225A ≚ e2 89 9a EQUIANGULAR TO
U+225B ≛ e2 89 9b STAR EQUALS
U+225C ≜ e2 89 9c DELTA EQUAL TO
U+225D ≝ e2 89 9d EQUAL TO BY DEFINITION
U+225E ≞ e2 89 9e MEASURED BY
U+225F ≟ e2 89 9f QUESTIONED EQUAL TO
U+2260 ≠ e2 89 a0 NOT EQUAL TO
U+2261 ≡ e2 89 a1 IDENTICAL TO
U+2262 ≢ e2 89 a2 NOT IDENTICAL TO
U+2263 ≣ e2 89 a3 STRICTLY EQUIVALENT TO
U+2264 ≤ e2 89 a4 LESS-THAN OR EQUAL TO
U+2265 ≥ e2 89 a5 GREATER-THAN OR EQUAL TO
U+2266 ≦ e2 89 a6 LESS-THAN OVER EQUAL TO
U+2267 ≧ e2 89 a7 GREATER-THAN OVER EQUAL TO
U+2268 ≨ e2 89 a8 LESS-THAN BUT NOT EQUAL TO
U+2269 ≩ e2 89 a9 GREATER-THAN BUT NOT EQUAL TO
U+226A ≪ e2 89 aa MUCH LESS-THAN
U+226B ≫ e2 89 ab MUCH GREATER-THAN
U+226C ≬ e2 89 ac BETWEEN
U+226D ≭ e2 89 ad NOT EQUIVALENT TO
U+226E ≮ e2 89 ae NOT LESS-THAN
U+226F ≯ e2 89 af NOT GREATER-THAN
U+2270 ≰ e2 89 b0 NEITHER LESS-THAN NOR EQUAL TO
U+2271 ≱ e2 89 b1 NEITHER GREATER-THAN NOR EQUAL TO
U+2272 ≲ e2 89 b2 LESS-THAN OR EQUIVALENT TO
U+2273 ≳ e2 89 b3 GREATER-THAN OR EQUIVALENT TO
U+2274 ≴ e2 89 b4 NEITHER LESS-THAN NOR EQUIVALENT TO
U+2275 ≵ e2 89 b5 NEITHER GREATER-THAN NOR EQUIVALENT TO
U+2276 ≶ e2 89 b6 LESS-THAN OR GREATER-THAN
U+2277 ≷ e2 89 b7 GREATER-THAN OR LESS-THAN
U+2278 ≸ e2 89 b8 NEITHER LESS-THAN NOR GREATER-THAN
U+2279 ≹ e2 89 b9 NEITHER GREATER-THAN NOR LESS-THAN
U+227A ≺ e2 89 ba PRECEDES
U+227B ≻ e2 89 bb SUCCEEDS
U+227C ≼ e2 89 bc PRECEDES OR EQUAL TO
U+227D ≽ e2 89 bd SUCCEEDS OR EQUAL TO
U+227E ≾ e2 89 be PRECEDES OR EQUIVALENT TO
U+227F ≿ e2 89 bf SUCCEEDS OR EQUIVALENT TO
U+2280 ⊀ e2 8a 80 DOES NOT PRECEDE
U+2281 ⊁ e2 8a 81 DOES NOT SUCCEED
U+2282 ⊂ e2 8a 82 SUBSET OF
U+2283 ⊃ e2 8a 83 SUPERSET OF
U+2284 ⊄ e2 8a 84 NOT A SUBSET OF
U+2285 ⊅ e2 8a 85 NOT A SUPERSET OF
U+2286 ⊆ e2 8a 86 SUBSET OF OR EQUAL TO
U+2287 ⊇ e2 8a 87 SUPERSET OF OR EQUAL TO
U+2288 ⊈ e2 8a 88 NEITHER A SUBSET OF NOR EQUAL TO
U+2289 ⊉ e2 8a 89 NEITHER A SUPERSET OF NOR EQUAL TO
U+228A ⊊ e2 8a 8a SUBSET OF WITH NOT EQUAL TO
U+228B ⊋ e2 8a 8b SUPERSET OF WITH NOT EQUAL TO
U+228C ⊌ e2 8a 8c MULTISET
U+228D ⊍ e2 8a 8d MULTISET MULTIPLICATION
U+228E ⊎ e2 8a 8e MULTISET UNION
U+228F ⊏ e2 8a 8f SQUARE IMAGE OF

2
tests/utf-8/utf-8.box.drawing.txt

@ -1,3 +1,5 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+2500 ─ e2 94 80 BOX DRAWINGS LIGHT HORIZONTAL
U+2501 ━ e2 94 81 BOX DRAWINGS HEAVY HORIZONTAL
U+2502 │ e2 94 82 BOX DRAWINGS LIGHT VERTICAL

258
tests/utf-8/utf-8.braille.txt

@ -0,0 +1,258 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+2800 ⠀ e2 a0 80 BRAILLE PATTERN BLANK
U+2801 ⠁ e2 a0 81 BRAILLE PATTERN DOTS-1
U+2802 ⠂ e2 a0 82 BRAILLE PATTERN DOTS-2
U+2803 ⠃ e2 a0 83 BRAILLE PATTERN DOTS-12
U+2804 ⠄ e2 a0 84 BRAILLE PATTERN DOTS-3
U+2805 ⠅ e2 a0 85 BRAILLE PATTERN DOTS-13
U+2806 ⠆ e2 a0 86 BRAILLE PATTERN DOTS-23
U+2807 ⠇ e2 a0 87 BRAILLE PATTERN DOTS-123
U+2808 ⠈ e2 a0 88 BRAILLE PATTERN DOTS-4
U+2809 ⠉ e2 a0 89 BRAILLE PATTERN DOTS-14
U+280A ⠊ e2 a0 8a BRAILLE PATTERN DOTS-24
U+280B ⠋ e2 a0 8b BRAILLE PATTERN DOTS-124
U+280C ⠌ e2 a0 8c BRAILLE PATTERN DOTS-34
U+280D ⠍ e2 a0 8d BRAILLE PATTERN DOTS-134
U+280E ⠎ e2 a0 8e BRAILLE PATTERN DOTS-234
U+280F ⠏ e2 a0 8f BRAILLE PATTERN DOTS-1234
U+2810 ⠐ e2 a0 90 BRAILLE PATTERN DOTS-5
U+2811 ⠑ e2 a0 91 BRAILLE PATTERN DOTS-15
U+2812 ⠒ e2 a0 92 BRAILLE PATTERN DOTS-25
U+2813 ⠓ e2 a0 93 BRAILLE PATTERN DOTS-125
U+2814 ⠔ e2 a0 94 BRAILLE PATTERN DOTS-35
U+2815 ⠕ e2 a0 95 BRAILLE PATTERN DOTS-135
U+2816 ⠖ e2 a0 96 BRAILLE PATTERN DOTS-235
U+2817 ⠗ e2 a0 97 BRAILLE PATTERN DOTS-1235
U+2818 ⠘ e2 a0 98 BRAILLE PATTERN DOTS-45
U+2819 ⠙ e2 a0 99 BRAILLE PATTERN DOTS-145
U+281A ⠚ e2 a0 9a BRAILLE PATTERN DOTS-245
U+281B ⠛ e2 a0 9b BRAILLE PATTERN DOTS-1245
U+281C ⠜ e2 a0 9c BRAILLE PATTERN DOTS-345
U+281D ⠝ e2 a0 9d BRAILLE PATTERN DOTS-1345
U+281E ⠞ e2 a0 9e BRAILLE PATTERN DOTS-2345
U+281F ⠟ e2 a0 9f BRAILLE PATTERN DOTS-12345
U+2820 ⠠ e2 a0 a0 BRAILLE PATTERN DOTS-6
U+2821 ⠡ e2 a0 a1 BRAILLE PATTERN DOTS-16
U+2822 ⠢ e2 a0 a2 BRAILLE PATTERN DOTS-26
U+2823 ⠣ e2 a0 a3 BRAILLE PATTERN DOTS-126
U+2824 ⠤ e2 a0 a4 BRAILLE PATTERN DOTS-36
U+2825 ⠥ e2 a0 a5 BRAILLE PATTERN DOTS-136
U+2826 ⠦ e2 a0 a6 BRAILLE PATTERN DOTS-236
U+2827 ⠧ e2 a0 a7 BRAILLE PATTERN DOTS-1236
U+2828 ⠨ e2 a0 a8 BRAILLE PATTERN DOTS-46
U+2829 ⠩ e2 a0 a9 BRAILLE PATTERN DOTS-146
U+282A ⠪ e2 a0 aa BRAILLE PATTERN DOTS-246
U+282B ⠫ e2 a0 ab BRAILLE PATTERN DOTS-1246
U+282C ⠬ e2 a0 ac BRAILLE PATTERN DOTS-346
U+282D ⠭ e2 a0 ad BRAILLE PATTERN DOTS-1346
U+282E ⠮ e2 a0 ae BRAILLE PATTERN DOTS-2346
U+282F ⠯ e2 a0 af BRAILLE PATTERN DOTS-12346
U+2830 ⠰ e2 a0 b0 BRAILLE PATTERN DOTS-56
U+2831 ⠱ e2 a0 b1 BRAILLE PATTERN DOTS-156
U+2832 ⠲ e2 a0 b2 BRAILLE PATTERN DOTS-256
U+2833 ⠳ e2 a0 b3 BRAILLE PATTERN DOTS-1256
U+2834 ⠴ e2 a0 b4 BRAILLE PATTERN DOTS-356
U+2835 ⠵ e2 a0 b5 BRAILLE PATTERN DOTS-1356
U+2836 ⠶ e2 a0 b6 BRAILLE PATTERN DOTS-2356
U+2837 ⠷ e2 a0 b7 BRAILLE PATTERN DOTS-12356
U+2838 ⠸ e2 a0 b8 BRAILLE PATTERN DOTS-456
U+2839 ⠹ e2 a0 b9 BRAILLE PATTERN DOTS-1456
U+283A ⠺ e2 a0 ba BRAILLE PATTERN DOTS-2456
U+283B ⠻ e2 a0 bb BRAILLE PATTERN DOTS-12456
U+283C ⠼ e2 a0 bc BRAILLE PATTERN DOTS-3456
U+283D ⠽ e2 a0 bd BRAILLE PATTERN DOTS-13456
U+283E ⠾ e2 a0 be BRAILLE PATTERN DOTS-23456
U+283F ⠿ e2 a0 bf BRAILLE PATTERN DOTS-123456
U+2840 ⡀ e2 a1 80 BRAILLE PATTERN DOTS-7
U+2841 ⡁ e2 a1 81 BRAILLE PATTERN DOTS-17
U+2842 ⡂ e2 a1 82 BRAILLE PATTERN DOTS-27
U+2843 ⡃ e2 a1 83 BRAILLE PATTERN DOTS-127
U+2844 ⡄ e2 a1 84 BRAILLE PATTERN DOTS-37
U+2845 ⡅ e2 a1 85 BRAILLE PATTERN DOTS-137
U+2846 ⡆ e2 a1 86 BRAILLE PATTERN DOTS-237
U+2847 ⡇ e2 a1 87 BRAILLE PATTERN DOTS-1237
U+2848 ⡈ e2 a1 88 BRAILLE PATTERN DOTS-47
U+2849 ⡉ e2 a1 89 BRAILLE PATTERN DOTS-147
U+284A ⡊ e2 a1 8a BRAILLE PATTERN DOTS-247
U+284B ⡋ e2 a1 8b BRAILLE PATTERN DOTS-1247
U+284C ⡌ e2 a1 8c BRAILLE PATTERN DOTS-347
U+284D ⡍ e2 a1 8d BRAILLE PATTERN DOTS-1347
U+284E ⡎ e2 a1 8e BRAILLE PATTERN DOTS-2347
U+284F ⡏ e2 a1 8f BRAILLE PATTERN DOTS-12347
U+2850 ⡐ e2 a1 90 BRAILLE PATTERN DOTS-57
U+2851 ⡑ e2 a1 91 BRAILLE PATTERN DOTS-157
U+2852 ⡒ e2 a1 92 BRAILLE PATTERN DOTS-257
U+2853 ⡓ e2 a1 93 BRAILLE PATTERN DOTS-1257
U+2854 ⡔ e2 a1 94 BRAILLE PATTERN DOTS-357
U+2855 ⡕ e2 a1 95 BRAILLE PATTERN DOTS-1357
U+2856 ⡖ e2 a1 96 BRAILLE PATTERN DOTS-2357
U+2857 ⡗ e2 a1 97 BRAILLE PATTERN DOTS-12357
U+2858 ⡘ e2 a1 98 BRAILLE PATTERN DOTS-457
U+2859 ⡙ e2 a1 99 BRAILLE PATTERN DOTS-1457
U+285A ⡚ e2 a1 9a BRAILLE PATTERN DOTS-2457
U+285B ⡛ e2 a1 9b BRAILLE PATTERN DOTS-12457
U+285C ⡜ e2 a1 9c BRAILLE PATTERN DOTS-3457
U+285D ⡝ e2 a1 9d BRAILLE PATTERN DOTS-13457
U+285E ⡞ e2 a1 9e BRAILLE PATTERN DOTS-23457
U+285F ⡟ e2 a1 9f BRAILLE PATTERN DOTS-123457
U+2860 ⡠ e2 a1 a0 BRAILLE PATTERN DOTS-67
U+2861 ⡡ e2 a1 a1 BRAILLE PATTERN DOTS-167
U+2862 ⡢ e2 a1 a2 BRAILLE PATTERN DOTS-267
U+2863 ⡣ e2 a1 a3 BRAILLE PATTERN DOTS-1267
U+2864 ⡤ e2 a1 a4 BRAILLE PATTERN DOTS-367
U+2865 ⡥ e2 a1 a5 BRAILLE PATTERN DOTS-1367
U+2866 ⡦ e2 a1 a6 BRAILLE PATTERN DOTS-2367
U+2867 ⡧ e2 a1 a7 BRAILLE PATTERN DOTS-12367
U+2868 ⡨ e2 a1 a8 BRAILLE PATTERN DOTS-467
U+2869 ⡩ e2 a1 a9 BRAILLE PATTERN DOTS-1467
U+286A ⡪ e2 a1 aa BRAILLE PATTERN DOTS-2467
U+286B ⡫ e2 a1 ab BRAILLE PATTERN DOTS-12467
U+286C ⡬ e2 a1 ac BRAILLE PATTERN DOTS-3467
U+286D ⡭ e2 a1 ad BRAILLE PATTERN DOTS-13467
U+286E ⡮ e2 a1 ae BRAILLE PATTERN DOTS-23467
U+286F ⡯ e2 a1 af BRAILLE PATTERN DOTS-123467
U+2870 ⡰ e2 a1 b0 BRAILLE PATTERN DOTS-567
U+2871 ⡱ e2 a1 b1 BRAILLE PATTERN DOTS-1567
U+2872 ⡲ e2 a1 b2 BRAILLE PATTERN DOTS-2567
U+2873 ⡳ e2 a1 b3 BRAILLE PATTERN DOTS-12567
U+2874 ⡴ e2 a1 b4 BRAILLE PATTERN DOTS-3567
U+2875 ⡵ e2 a1 b5 BRAILLE PATTERN DOTS-13567
U+2876 ⡶ e2 a1 b6 BRAILLE PATTERN DOTS-23567
U+2877 ⡷ e2 a1 b7 BRAILLE PATTERN DOTS-123567
U+2878 ⡸ e2 a1 b8 BRAILLE PATTERN DOTS-4567
U+2879 ⡹ e2 a1 b9 BRAILLE PATTERN DOTS-14567
U+287A ⡺ e2 a1 ba BRAILLE PATTERN DOTS-24567
U+287B ⡻ e2 a1 bb BRAILLE PATTERN DOTS-124567
U+287C ⡼ e2 a1 bc BRAILLE PATTERN DOTS-34567
U+287D ⡽ e2 a1 bd BRAILLE PATTERN DOTS-134567
U+287E ⡾ e2 a1 be BRAILLE PATTERN DOTS-234567
U+287F ⡿ e2 a1 bf BRAILLE PATTERN DOTS-1234567
U+2880 ⢀ e2 a2 80 BRAILLE PATTERN DOTS-8
U+2881 ⢁ e2 a2 81 BRAILLE PATTERN DOTS-18
U+2882 ⢂ e2 a2 82 BRAILLE PATTERN DOTS-28
U+2883 ⢃ e2 a2 83 BRAILLE PATTERN DOTS-128
U+2884 ⢄ e2 a2 84 BRAILLE PATTERN DOTS-38
U+2885 ⢅ e2 a2 85 BRAILLE PATTERN DOTS-138
U+2886 ⢆ e2 a2 86 BRAILLE PATTERN DOTS-238
U+2887 ⢇ e2 a2 87 BRAILLE PATTERN DOTS-1238
U+2888 ⢈ e2 a2 88 BRAILLE PATTERN DOTS-48
U+2889 ⢉ e2 a2 89 BRAILLE PATTERN DOTS-148
U+288A ⢊ e2 a2 8a BRAILLE PATTERN DOTS-248
U+288B ⢋ e2 a2 8b BRAILLE PATTERN DOTS-1248
U+288C ⢌ e2 a2 8c BRAILLE PATTERN DOTS-348
U+288D ⢍ e2 a2 8d BRAILLE PATTERN DOTS-1348
U+288E ⢎ e2 a2 8e BRAILLE PATTERN DOTS-2348
U+288F ⢏ e2 a2 8f BRAILLE PATTERN DOTS-12348
U+2890 ⢐ e2 a2 90 BRAILLE PATTERN DOTS-58
U+2891 ⢑ e2 a2 91 BRAILLE PATTERN DOTS-158
U+2892 ⢒ e2 a2 92 BRAILLE PATTERN DOTS-258
U+2893 ⢓ e2 a2 93 BRAILLE PATTERN DOTS-1258
U+2894 ⢔ e2 a2 94 BRAILLE PATTERN DOTS-358
U+2895 ⢕ e2 a2 95 BRAILLE PATTERN DOTS-1358
U+2896 ⢖ e2 a2 96 BRAILLE PATTERN DOTS-2358
U+2897 ⢗ e2 a2 97 BRAILLE PATTERN DOTS-12358
U+2898 ⢘ e2 a2 98 BRAILLE PATTERN DOTS-458
U+2899 ⢙ e2 a2 99 BRAILLE PATTERN DOTS-1458
U+289A ⢚ e2 a2 9a BRAILLE PATTERN DOTS-2458
U+289B ⢛ e2 a2 9b BRAILLE PATTERN DOTS-12458
U+289C ⢜ e2 a2 9c BRAILLE PATTERN DOTS-3458
U+289D ⢝ e2 a2 9d BRAILLE PATTERN DOTS-13458
U+289E ⢞ e2 a2 9e BRAILLE PATTERN DOTS-23458
U+289F ⢟ e2 a2 9f BRAILLE PATTERN DOTS-123458
U+28A0 ⢠ e2 a2 a0 BRAILLE PATTERN DOTS-68
U+28A1 ⢡ e2 a2 a1 BRAILLE PATTERN DOTS-168
U+28A2 ⢢ e2 a2 a2 BRAILLE PATTERN DOTS-268
U+28A3 ⢣ e2 a2 a3 BRAILLE PATTERN DOTS-1268
U+28A4 ⢤ e2 a2 a4 BRAILLE PATTERN DOTS-368
U+28A5 ⢥ e2 a2 a5 BRAILLE PATTERN DOTS-1368
U+28A6 ⢦ e2 a2 a6 BRAILLE PATTERN DOTS-2368
U+28A7 ⢧ e2 a2 a7 BRAILLE PATTERN DOTS-12368
U+28A8 ⢨ e2 a2 a8 BRAILLE PATTERN DOTS-468
U+28A9 ⢩ e2 a2 a9 BRAILLE PATTERN DOTS-1468
U+28AA ⢪ e2 a2 aa BRAILLE PATTERN DOTS-2468
U+28AB ⢫ e2 a2 ab BRAILLE PATTERN DOTS-12468
U+28AC ⢬ e2 a2 ac BRAILLE PATTERN DOTS-3468
U+28AD ⢭ e2 a2 ad BRAILLE PATTERN DOTS-13468
U+28AE ⢮ e2 a2 ae BRAILLE PATTERN DOTS-23468
U+28AF ⢯ e2 a2 af BRAILLE PATTERN DOTS-123468
U+28B0 ⢰ e2 a2 b0 BRAILLE PATTERN DOTS-568
U+28B1 ⢱ e2 a2 b1 BRAILLE PATTERN DOTS-1568
U+28B2 ⢲ e2 a2 b2 BRAILLE PATTERN DOTS-2568
U+28B3 ⢳ e2 a2 b3 BRAILLE PATTERN DOTS-12568
U+28B4 ⢴ e2 a2 b4 BRAILLE PATTERN DOTS-3568
U+28B5 ⢵ e2 a2 b5 BRAILLE PATTERN DOTS-13568
U+28B6 ⢶ e2 a2 b6 BRAILLE PATTERN DOTS-23568
U+28B7 ⢷ e2 a2 b7 BRAILLE PATTERN DOTS-123568
U+28B8 ⢸ e2 a2 b8 BRAILLE PATTERN DOTS-4568
U+28B9 ⢹ e2 a2 b9 BRAILLE PATTERN DOTS-14568
U+28BA ⢺ e2 a2 ba BRAILLE PATTERN DOTS-24568
U+28BB ⢻ e2 a2 bb BRAILLE PATTERN DOTS-124568
U+28BC ⢼ e2 a2 bc BRAILLE PATTERN DOTS-34568
U+28BD ⢽ e2 a2 bd BRAILLE PATTERN DOTS-134568
U+28BE ⢾ e2 a2 be BRAILLE PATTERN DOTS-234568
U+28BF ⢿ e2 a2 bf BRAILLE PATTERN DOTS-1234568
U+28C0 ⣀ e2 a3 80 BRAILLE PATTERN DOTS-78
U+28C1 ⣁ e2 a3 81 BRAILLE PATTERN DOTS-178
U+28C2 ⣂ e2 a3 82 BRAILLE PATTERN DOTS-278
U+28C3 ⣃ e2 a3 83 BRAILLE PATTERN DOTS-1278
U+28C4 ⣄ e2 a3 84 BRAILLE PATTERN DOTS-378
U+28C5 ⣅ e2 a3 85 BRAILLE PATTERN DOTS-1378
U+28C6 ⣆ e2 a3 86 BRAILLE PATTERN DOTS-2378
U+28C7 ⣇ e2 a3 87 BRAILLE PATTERN DOTS-12378
U+28C8 ⣈ e2 a3 88 BRAILLE PATTERN DOTS-478
U+28C9 ⣉ e2 a3 89 BRAILLE PATTERN DOTS-1478
U+28CA ⣊ e2 a3 8a BRAILLE PATTERN DOTS-2478
U+28CB ⣋ e2 a3 8b BRAILLE PATTERN DOTS-12478
U+28CC ⣌ e2 a3 8c BRAILLE PATTERN DOTS-3478
U+28CD ⣍ e2 a3 8d BRAILLE PATTERN DOTS-13478
U+28CE ⣎ e2 a3 8e BRAILLE PATTERN DOTS-23478
U+28CF ⣏ e2 a3 8f BRAILLE PATTERN DOTS-123478
U+28D0 ⣐ e2 a3 90 BRAILLE PATTERN DOTS-578
U+28D1 ⣑ e2 a3 91 BRAILLE PATTERN DOTS-1578
U+28D2 ⣒ e2 a3 92 BRAILLE PATTERN DOTS-2578
U+28D3 ⣓ e2 a3 93 BRAILLE PATTERN DOTS-12578
U+28D4 ⣔ e2 a3 94 BRAILLE PATTERN DOTS-3578
U+28D5 ⣕ e2 a3 95 BRAILLE PATTERN DOTS-13578
U+28D6 ⣖ e2 a3 96 BRAILLE PATTERN DOTS-23578
U+28D7 ⣗ e2 a3 97 BRAILLE PATTERN DOTS-123578
U+28D8 ⣘ e2 a3 98 BRAILLE PATTERN DOTS-4578
U+28D9 ⣙ e2 a3 99 BRAILLE PATTERN DOTS-14578
U+28DA ⣚ e2 a3 9a BRAILLE PATTERN DOTS-24578
U+28DB ⣛ e2 a3 9b BRAILLE PATTERN DOTS-124578
U+28DC ⣜ e2 a3 9c BRAILLE PATTERN DOTS-34578
U+28DD ⣝ e2 a3 9d BRAILLE PATTERN DOTS-134578
U+28DE ⣞ e2 a3 9e BRAILLE PATTERN DOTS-234578
U+28DF ⣟ e2 a3 9f BRAILLE PATTERN DOTS-1234578
U+28E0 ⣠ e2 a3 a0 BRAILLE PATTERN DOTS-678
U+28E1 ⣡ e2 a3 a1 BRAILLE PATTERN DOTS-1678
U+28E2 ⣢ e2 a3 a2 BRAILLE PATTERN DOTS-2678
U+28E3 ⣣ e2 a3 a3 BRAILLE PATTERN DOTS-12678
U+28E4 ⣤ e2 a3 a4 BRAILLE PATTERN DOTS-3678
U+28E5 ⣥ e2 a3 a5 BRAILLE PATTERN DOTS-13678
U+28E6 ⣦ e2 a3 a6 BRAILLE PATTERN DOTS-23678
U+28E7 ⣧ e2 a3 a7 BRAILLE PATTERN DOTS-123678
U+28E8 ⣨ e2 a3 a8 BRAILLE PATTERN DOTS-4678
U+28E9 ⣩ e2 a3 a9 BRAILLE PATTERN DOTS-14678
U+28EA ⣪ e2 a3 aa BRAILLE PATTERN DOTS-24678
U+28EB ⣫ e2 a3 ab BRAILLE PATTERN DOTS-124678
U+28EC ⣬ e2 a3 ac BRAILLE PATTERN DOTS-34678
U+28ED ⣭ e2 a3 ad BRAILLE PATTERN DOTS-134678
U+28EE ⣮ e2 a3 ae BRAILLE PATTERN DOTS-234678
U+28EF ⣯ e2 a3 af BRAILLE PATTERN DOTS-1234678
U+28F0 ⣰ e2 a3 b0 BRAILLE PATTERN DOTS-5678
U+28F1 ⣱ e2 a3 b1 BRAILLE PATTERN DOTS-15678
U+28F2 ⣲ e2 a3 b2 BRAILLE PATTERN DOTS-25678
U+28F3 ⣳ e2 a3 b3 BRAILLE PATTERN DOTS-125678
U+28F4 ⣴ e2 a3 b4 BRAILLE PATTERN DOTS-35678
U+28F5 ⣵ e2 a3 b5 BRAILLE PATTERN DOTS-135678
U+28F6 ⣶ e2 a3 b6 BRAILLE PATTERN DOTS-235678
U+28F7 ⣷ e2 a3 b7 BRAILLE PATTERN DOTS-1235678
U+28F8 ⣸ e2 a3 b8 BRAILLE PATTERN DOTS-45678
U+28F9 ⣹ e2 a3 b9 BRAILLE PATTERN DOTS-145678
U+28FA ⣺ e2 a3 ba BRAILLE PATTERN DOTS-245678
U+28FB ⣻ e2 a3 bb BRAILLE PATTERN DOTS-1245678
U+28FC ⣼ e2 a3 bc BRAILLE PATTERN DOTS-345678
U+28FD ⣽ e2 a3 bd BRAILLE PATTERN DOTS-1345678
U+28FE ⣾ e2 a3 be BRAILLE PATTERN DOTS-2345678
U+28FF ⣿ e2 a3 bf BRAILLE PATTERN DOTS-12345678

258
tests/utf-8/utf-8.diacritical.marks.for.symbols.txt

@ -0,0 +1,258 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+20D0 0xe2 0x83 0x90 COMBINING LEFT HARPOON ABOVE
U+20D1 0xe2 0x83 0x91 COMBINING RIGHT HARPOON ABOVE
U+20D2 0xe2 0x83 0x92 COMBINING LONG VERTICAL LINE OVERLAY
U+20D3 0xe2 0x83 0x93 COMBINING SHORT VERTICAL LINE OVERLAY
U+20D4 0xe2 0x83 0x94 COMBINING ANTICLOCKWISE ARROW ABOVE
U+20D5 0xe2 0x83 0x95 COMBINING CLOCKWISE ARROW ABOVE
U+20D6 0xe2 0x83 0x96 COMBINING LEFT ARROW ABOVE
U+20D7 0xe2 0x83 0x97 COMBINING RIGHT ARROW ABOVE
U+20D8 0xe2 0x83 0x98 COMBINING RING OVERLAY
U+20D9 0xe2 0x83 0x99 COMBINING CLOCKWISE RING OVERLAY
U+20DA 0xe2 0x83 0x9a COMBINING ANTICLOCKWISE RING OVERLAY
U+20DB 0xe2 0x83 0x9b COMBINING THREE DOTS ABOVE
U+20DC 0xe2 0x83 0x9c COMBINING FOUR DOTS ABOVE
U+20DD 0xe2 0x83 0x9d COMBINING ENCLOSING CIRCLE
U+20DE 0xe2 0x83 0x9e COMBINING ENCLOSING SQUARE
U+20DF 0xe2 0x83 0x9f COMBINING ENCLOSING DIAMOND
U+20E0 0xe2 0x83 0xa0 COMBINING ENCLOSING CIRCLE BACKSLASH
U+20E1 0xe2 0x83 0xa1 COMBINING LEFT RIGHT ARROW ABOVE
U+20E2 0xe2 0x83 0xa2 COMBINING ENCLOSING SCREEN
U+20E3 0xe2 0x83 0xa3 COMBINING ENCLOSING KEYCAP
U+20E4 0xe2 0x83 0xa4 COMBINING ENCLOSING UPWARD POINTING TRIANGLE
U+20E5 0xe2 0x83 0xa5 COMBINING REVERSE SOLIDUS OVERLAY
U+20E6 0xe2 0x83 0xa6 COMBINING DOUBLE VERTICAL STROKE OVERLAY
U+20E7 0xe2 0x83 0xa7 COMBINING ANNUITY SYMBOL
U+20E8 0xe2 0x83 0xa8 COMBINING TRIPLE UNDERDOT
U+20E9 0xe2 0x83 0xa9 COMBINING WIDE BRIDGE ABOVE
U+20EA 0xe2 0x83 0xaa COMBINING LEFTWARDS ARROW OVERLAY
U+20EB 0xe2 0x83 0xab COMBINING LONG DOUBLE SOLIDUS OVERLAY
U+20EC 0xe2 0x83 0xac COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
U+20ED 0xe2 0x83 0xad COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
U+20EE 0xe2 0x83 0xae COMBINING LEFT ARROW BELOW
U+20EF 0xe2 0x83 0xaf COMBINING RIGHT ARROW BELOW
U+20F0 0xe2 0x83 0xb0 COMBINING ASTERISK ABOVE
U+20F1 ⃱ 0xe2 0x83 0xb1
U+20F2 ⃲ 0xe2 0x83 0xb2
U+20F3 ⃳ 0xe2 0x83 0xb3
U+20F4 ⃴ 0xe2 0x83 0xb4
U+20F5 ⃵ 0xe2 0x83 0xb5
U+20F6 ⃶ 0xe2 0x83 0xb6
U+20F7 ⃷ 0xe2 0x83 0xb7
U+20F8 ⃸ 0xe2 0x83 0xb8
U+20F9 ⃹ 0xe2 0x83 0xb9
U+20FA ⃺ 0xe2 0x83 0xba
U+20FB ⃻ 0xe2 0x83 0xbb
U+20FC ⃼ 0xe2 0x83 0xbc
U+20FD ⃽ 0xe2 0x83 0xbd
U+20FE ⃾ 0xe2 0x83 0xbe
U+20FF ⃿ 0xe2 0x83 0xbf
U+2100 ℀ 0xe2 0x84 0x80 ACCOUNT OF
U+2101 ℁ 0xe2 0x84 0x81 ADDRESSED TO THE SUBJECT
U+2102 ℂ 0xe2 0x84 0x82 DOUBLE-STRUCK CAPITAL C
U+2103 ℃ 0xe2 0x84 0x83 DEGREE CELSIUS
U+2104 ℄ 0xe2 0x84 0x84 CENTRE LINE SYMBOL
U+2105 ℅ 0xe2 0x84 0x85 CARE OF
U+2106 ℆ 0xe2 0x84 0x86 CADA UNA
U+2107 ℇ 0xe2 0x84 0x87 EULER CONSTANT
U+2108 ℈ 0xe2 0x84 0x88 SCRUPLE
U+2109 ℉ 0xe2 0x84 0x89 DEGREE FAHRENHEIT
U+210A ℊ 0xe2 0x84 0x8a SCRIPT SMALL G
U+210B ℋ 0xe2 0x84 0x8b SCRIPT CAPITAL H
U+210C ℌ 0xe2 0x84 0x8c BLACK-LETTER CAPITAL H
U+210D ℍ 0xe2 0x84 0x8d DOUBLE-STRUCK CAPITAL H
U+210E ℎ 0xe2 0x84 0x8e PLANCK CONSTANT
U+210F ℏ 0xe2 0x84 0x8f PLANCK CONSTANT OVER TWO PI
U+2110 ℐ 0xe2 0x84 0x90 SCRIPT CAPITAL I
U+2111 ℑ 0xe2 0x84 0x91 BLACK-LETTER CAPITAL I
U+2112 ℒ 0xe2 0x84 0x92 SCRIPT CAPITAL L
U+2113 ℓ 0xe2 0x84 0x93 SCRIPT SMALL L
U+2114 ℔ 0xe2 0x84 0x94 L B BAR SYMBOL
U+2115 ℕ 0xe2 0x84 0x95 DOUBLE-STRUCK CAPITAL N
U+2116 № 0xe2 0x84 0x96 NUMERO SIGN
U+2117 ℗ 0xe2 0x84 0x97 SOUND RECORDING COPYRIGHT
U+2118 ℘ 0xe2 0x84 0x98 SCRIPT CAPITAL P
U+2119 ℙ 0xe2 0x84 0x99 DOUBLE-STRUCK CAPITAL P
U+211A ℚ 0xe2 0x84 0x9a DOUBLE-STRUCK CAPITAL Q
U+211B ℛ 0xe2 0x84 0x9b SCRIPT CAPITAL R
U+211C ℜ 0xe2 0x84 0x9c BLACK-LETTER CAPITAL R
U+211D ℝ 0xe2 0x84 0x9d DOUBLE-STRUCK CAPITAL R
U+211E ℞ 0xe2 0x84 0x9e PRESCRIPTION TAKE
U+211F ℟ 0xe2 0x84 0x9f RESPONSE
U+2120 ℠ 0xe2 0x84 0xa0 SERVICE MARK
U+2121 ℡ 0xe2 0x84 0xa1 TELEPHONE SIGN
U+2122 ™ 0xe2 0x84 0xa2 TRADE MARK SIGN
U+2123 ℣ 0xe2 0x84 0xa3 VERSICLE
U+2124 ℤ 0xe2 0x84 0xa4 DOUBLE-STRUCK CAPITAL Z
U+2125 ℥ 0xe2 0x84 0xa5 OUNCE SIGN
U+2126 Ω 0xe2 0x84 0xa6 OHM SIGN
U+2127 ℧ 0xe2 0x84 0xa7 INVERTED OHM SIGN
U+2128 ℨ 0xe2 0x84 0xa8 BLACK-LETTER CAPITAL Z
U+2129 ℩ 0xe2 0x84 0xa9 TURNED GREEK SMALL LETTER IOTA
U+212A K 0xe2 0x84 0xaa KELVIN SIGN
U+212B Å 0xe2 0x84 0xab ANGSTROM SIGN
U+212C ℬ 0xe2 0x84 0xac SCRIPT CAPITAL B
U+212D ℭ 0xe2 0x84 0xad BLACK-LETTER CAPITAL C
U+212E ℮ 0xe2 0x84 0xae ESTIMATED SYMBOL
U+212F ℯ 0xe2 0x84 0xaf SCRIPT SMALL E
U+2130 ℰ 0xe2 0x84 0xb0 SCRIPT CAPITAL E
U+2131 ℱ 0xe2 0x84 0xb1 SCRIPT CAPITAL F
U+2132 Ⅎ 0xe2 0x84 0xb2 TURNED CAPITAL F
U+2133 ℳ 0xe2 0x84 0xb3 SCRIPT CAPITAL M
U+2134 ℴ 0xe2 0x84 0xb4 SCRIPT SMALL O
U+2135 ℵ 0xe2 0x84 0xb5 ALEF SYMBOL
U+2136 ℶ 0xe2 0x84 0xb6 BET SYMBOL
U+2137 ℷ 0xe2 0x84 0xb7 GIMEL SYMBOL
U+2138 ℸ 0xe2 0x84 0xb8 DALET SYMBOL
U+2139 ℹ 0xe2 0x84 0xb9 INFORMATION SOURCE
U+213A ℺ 0xe2 0x84 0xba ROTATED CAPITAL Q
U+213B ℻ 0xe2 0x84 0xbb FACSIMILE SIGN
U+213C ℼ 0xe2 0x84 0xbc DOUBLE-STRUCK SMALL PI
U+213D ℽ 0xe2 0x84 0xbd DOUBLE-STRUCK SMALL GAMMA
U+213E ℾ 0xe2 0x84 0xbe DOUBLE-STRUCK CAPITAL GAMMA
U+213F ℿ 0xe2 0x84 0xbf DOUBLE-STRUCK CAPITAL PI
U+2140 ⅀ 0xe2 0x85 0x80 DOUBLE-STRUCK N-ARY SUMMATION
U+2141 ⅁ 0xe2 0x85 0x81 TURNED SANS-SERIF CAPITAL G
U+2142 ⅂ 0xe2 0x85 0x82 TURNED SANS-SERIF CAPITAL L
U+2143 ⅃ 0xe2 0x85 0x83 REVERSED SANS-SERIF CAPITAL L
U+2144 ⅄ 0xe2 0x85 0x84 TURNED SANS-SERIF CAPITAL Y
U+2145 ⅅ 0xe2 0x85 0x85 DOUBLE-STRUCK ITALIC CAPITAL D
U+2146 ⅆ 0xe2 0x85 0x86 DOUBLE-STRUCK ITALIC SMALL D
U+2147 ⅇ 0xe2 0x85 0x87 DOUBLE-STRUCK ITALIC SMALL E
U+2148 ⅈ 0xe2 0x85 0x88 DOUBLE-STRUCK ITALIC SMALL I
U+2149 ⅉ 0xe2 0x85 0x89 DOUBLE-STRUCK ITALIC SMALL J
U+214A ⅊ 0xe2 0x85 0x8a PROPERTY LINE
U+214B ⅋ 0xe2 0x85 0x8b TURNED AMPERSAND
U+214C ⅌ 0xe2 0x85 0x8c PER SIGN
U+214D ⅍ 0xe2 0x85 0x8d AKTIESELSKAB
U+214E ⅎ 0xe2 0x85 0x8e TURNED SMALL F
U+214F ⅏ 0xe2 0x85 0x8f SYMBOL FOR SAMARITAN SOURCE
U+2150 ⅐ 0xe2 0x85 0x90 VULGAR FRACTION ONE SEVENTH
U+2151 ⅑ 0xe2 0x85 0x91 VULGAR FRACTION ONE NINTH
U+2152 ⅒ 0xe2 0x85 0x92 VULGAR FRACTION ONE TENTH
U+2153 ⅓ 0xe2 0x85 0x93 VULGAR FRACTION ONE THIRD
U+2154 ⅔ 0xe2 0x85 0x94 VULGAR FRACTION TWO THIRDS
U+2155 ⅕ 0xe2 0x85 0x95 VULGAR FRACTION ONE FIFTH
U+2156 ⅖ 0xe2 0x85 0x96 VULGAR FRACTION TWO FIFTHS
U+2157 ⅗ 0xe2 0x85 0x97 VULGAR FRACTION THREE FIFTHS
U+2158 ⅘ 0xe2 0x85 0x98 VULGAR FRACTION FOUR FIFTHS
U+2159 ⅙ 0xe2 0x85 0x99 VULGAR FRACTION ONE SIXTH
U+215A ⅚ 0xe2 0x85 0x9a VULGAR FRACTION FIVE SIXTHS
U+215B ⅛ 0xe2 0x85 0x9b VULGAR FRACTION ONE EIGHTH
U+215C ⅜ 0xe2 0x85 0x9c VULGAR FRACTION THREE EIGHTHS
U+215D ⅝ 0xe2 0x85 0x9d VULGAR FRACTION FIVE EIGHTHS
U+215E ⅞ 0xe2 0x85 0x9e VULGAR FRACTION SEVEN EIGHTHS
U+215F ⅟ 0xe2 0x85 0x9f FRACTION NUMERATOR ONE
U+2160 Ⅰ 0xe2 0x85 0xa0 ROMAN NUMERAL ONE
U+2161 Ⅱ 0xe2 0x85 0xa1 ROMAN NUMERAL TWO
U+2162 Ⅲ 0xe2 0x85 0xa2 ROMAN NUMERAL THREE
U+2163 Ⅳ 0xe2 0x85 0xa3 ROMAN NUMERAL FOUR
U+2164 Ⅴ 0xe2 0x85 0xa4 ROMAN NUMERAL FIVE
U+2165 Ⅵ 0xe2 0x85 0xa5 ROMAN NUMERAL SIX
U+2166 Ⅶ 0xe2 0x85 0xa6 ROMAN NUMERAL SEVEN
U+2167 Ⅷ 0xe2 0x85 0xa7 ROMAN NUMERAL EIGHT
U+2168 Ⅸ 0xe2 0x85 0xa8 ROMAN NUMERAL NINE
U+2169 Ⅹ 0xe2 0x85 0xa9 ROMAN NUMERAL TEN
U+216A Ⅺ 0xe2 0x85 0xaa ROMAN NUMERAL ELEVEN
U+216B Ⅻ 0xe2 0x85 0xab ROMAN NUMERAL TWELVE
U+216C Ⅼ 0xe2 0x85 0xac ROMAN NUMERAL FIFTY
U+216D Ⅽ 0xe2 0x85 0xad ROMAN NUMERAL ONE HUNDRED
U+216E Ⅾ 0xe2 0x85 0xae ROMAN NUMERAL FIVE HUNDRED
U+216F Ⅿ 0xe2 0x85 0xaf ROMAN NUMERAL ONE THOUSAND
U+2170 ⅰ 0xe2 0x85 0xb0 SMALL ROMAN NUMERAL ONE
U+2171 ⅱ 0xe2 0x85 0xb1 SMALL ROMAN NUMERAL TWO
U+2172 ⅲ 0xe2 0x85 0xb2 SMALL ROMAN NUMERAL THREE
U+2173 ⅳ 0xe2 0x85 0xb3 SMALL ROMAN NUMERAL FOUR
U+2174 ⅴ 0xe2 0x85 0xb4 SMALL ROMAN NUMERAL FIVE
U+2175 ⅵ 0xe2 0x85 0xb5 SMALL ROMAN NUMERAL SIX
U+2176 ⅶ 0xe2 0x85 0xb6 SMALL ROMAN NUMERAL SEVEN
U+2177 ⅷ 0xe2 0x85 0xb7 SMALL ROMAN NUMERAL EIGHT
U+2178 ⅸ 0xe2 0x85 0xb8 SMALL ROMAN NUMERAL NINE
U+2179 ⅹ 0xe2 0x85 0xb9 SMALL ROMAN NUMERAL TEN
U+217A ⅺ 0xe2 0x85 0xba SMALL ROMAN NUMERAL ELEVEN
U+217B ⅻ 0xe2 0x85 0xbb SMALL ROMAN NUMERAL TWELVE
U+217C ⅼ 0xe2 0x85 0xbc SMALL ROMAN NUMERAL FIFTY
U+217D ⅽ 0xe2 0x85 0xbd SMALL ROMAN NUMERAL ONE HUNDRED
U+217E ⅾ 0xe2 0x85 0xbe SMALL ROMAN NUMERAL FIVE HUNDRED
U+217F ⅿ 0xe2 0x85 0xbf SMALL ROMAN NUMERAL ONE THOUSAND
U+2180 ↀ 0xe2 0x86 0x80 ROMAN NUMERAL ONE THOUSAND C D
U+2181 ↁ 0xe2 0x86 0x81 ROMAN NUMERAL FIVE THOUSAND
U+2182 ↂ 0xe2 0x86 0x82 ROMAN NUMERAL TEN THOUSAND
U+2183 Ↄ 0xe2 0x86 0x83 ROMAN NUMERAL REVERSED ONE HUNDRED
U+2184 ↄ 0xe2 0x86 0x84 LATIN SMALL LETTER REVERSED C
U+2185 ↅ 0xe2 0x86 0x85 ROMAN NUMERAL SIX LATE FORM
U+2186 ↆ 0xe2 0x86 0x86 ROMAN NUMERAL FIFTY EARLY FORM
U+2187 ↇ 0xe2 0x86 0x87 ROMAN NUMERAL FIFTY THOUSAND
U+2188 ↈ 0xe2 0x86 0x88 ROMAN NUMERAL ONE HUNDRED THOUSAND
U+2189 ↉ 0xe2 0x86 0x89 VULGAR FRACTION ZERO THIRDS
U+218A ↊ 0xe2 0x86 0x8a TURNED DIGIT TWO
U+218B ↋ 0xe2 0x86 0x8b TURNED DIGIT THREE
U+218C ↌ 0xe2 0x86 0x8c
U+218D ↍ 0xe2 0x86 0x8d
U+218E ↎ 0xe2 0x86 0x8e
U+218F ↏ 0xe2 0x86 0x8f
U+2190 ← 0xe2 0x86 0x90 LEFTWARDS ARROW
U+2191 ↑ 0xe2 0x86 0x91 UPWARDS ARROW
U+2192 → 0xe2 0x86 0x92 RIGHTWARDS ARROW
U+2193 ↓ 0xe2 0x86 0x93 DOWNWARDS ARROW
U+2194 ↔ 0xe2 0x86 0x94 LEFT RIGHT ARROW
U+2195 ↕ 0xe2 0x86 0x95 UP DOWN ARROW
U+2196 ↖ 0xe2 0x86 0x96 NORTH WEST ARROW
U+2197 ↗ 0xe2 0x86 0x97 NORTH EAST ARROW
U+2198 ↘ 0xe2 0x86 0x98 SOUTH EAST ARROW
U+2199 ↙ 0xe2 0x86 0x99 SOUTH WEST ARROW
U+219A ↚ 0xe2 0x86 0x9a LEFTWARDS ARROW WITH STROKE
U+219B ↛ 0xe2 0x86 0x9b RIGHTWARDS ARROW WITH STROKE
U+219C ↜ 0xe2 0x86 0x9c LEFTWARDS WAVE ARROW
U+219D ↝ 0xe2 0x86 0x9d RIGHTWARDS WAVE ARROW
U+219E ↞ 0xe2 0x86 0x9e LEFTWARDS TWO HEADED ARROW
U+219F ↟ 0xe2 0x86 0x9f UPWARDS TWO HEADED ARROW
U+21A0 ↠ 0xe2 0x86 0xa0 RIGHTWARDS TWO HEADED ARROW
U+21A1 ↡ 0xe2 0x86 0xa1 DOWNWARDS TWO HEADED ARROW
U+21A2 ↢ 0xe2 0x86 0xa2 LEFTWARDS ARROW WITH TAIL
U+21A3 ↣ 0xe2 0x86 0xa3 RIGHTWARDS ARROW WITH TAIL
U+21A4 ↤ 0xe2 0x86 0xa4 LEFTWARDS ARROW FROM BAR
U+21A5 ↥ 0xe2 0x86 0xa5 UPWARDS ARROW FROM BAR
U+21A6 ↦ 0xe2 0x86 0xa6 RIGHTWARDS ARROW FROM BAR
U+21A7 ↧ 0xe2 0x86 0xa7 DOWNWARDS ARROW FROM BAR
U+21A8 ↨ 0xe2 0x86 0xa8 UP DOWN ARROW WITH BASE
U+21A9 ↩ 0xe2 0x86 0xa9 LEFTWARDS ARROW WITH HOOK
U+21AA ↪ 0xe2 0x86 0xaa RIGHTWARDS ARROW WITH HOOK
U+21AB ↫ 0xe2 0x86 0xab LEFTWARDS ARROW WITH LOOP
U+21AC ↬ 0xe2 0x86 0xac RIGHTWARDS ARROW WITH LOOP
U+21AD ↭ 0xe2 0x86 0xad LEFT RIGHT WAVE ARROW
U+21AE ↮ 0xe2 0x86 0xae LEFT RIGHT ARROW WITH STROKE
U+21AF ↯ 0xe2 0x86 0xaf DOWNWARDS ZIGZAG ARROW
U+21B0 ↰ 0xe2 0x86 0xb0 UPWARDS ARROW WITH TIP LEFTWARDS
U+21B1 ↱ 0xe2 0x86 0xb1 UPWARDS ARROW WITH TIP RIGHTWARDS
U+21B2 ↲ 0xe2 0x86 0xb2 DOWNWARDS ARROW WITH TIP LEFTWARDS
U+21B3 ↳ 0xe2 0x86 0xb3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
U+21B4 ↴ 0xe2 0x86 0xb4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
U+21B5 ↵ 0xe2 0x86 0xb5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
U+21B6 ↶ 0xe2 0x86 0xb6 ANTICLOCKWISE TOP SEMICIRCLE ARROW
U+21B7 ↷ 0xe2 0x86 0xb7 CLOCKWISE TOP SEMICIRCLE ARROW
U+21B8 ↸ 0xe2 0x86 0xb8 NORTH WEST ARROW TO LONG BAR
U+21B9 ↹ 0xe2 0x86 0xb9 LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
U+21BA ↺ 0xe2 0x86 0xba ANTICLOCKWISE OPEN CIRCLE ARROW
U+21BB ↻ 0xe2 0x86 0xbb CLOCKWISE OPEN CIRCLE ARROW
U+21BC ↼ 0xe2 0x86 0xbc LEFTWARDS HARPOON WITH BARB UPWARDS
U+21BD ↽ 0xe2 0x86 0xbd LEFTWARDS HARPOON WITH BARB DOWNWARDS
U+21BE ↾ 0xe2 0x86 0xbe UPWARDS HARPOON WITH BARB RIGHTWARDS
U+21BF ↿ 0xe2 0x86 0xbf UPWARDS HARPOON WITH BARB LEFTWARDS
U+21C0 ⇀ 0xe2 0x87 0x80 RIGHTWARDS HARPOON WITH BARB UPWARDS
U+21C1 ⇁ 0xe2 0x87 0x81 RIGHTWARDS HARPOON WITH BARB DOWNWARDS
U+21C2 ⇂ 0xe2 0x87 0x82 DOWNWARDS HARPOON WITH BARB RIGHTWARDS
U+21C3 ⇃ 0xe2 0x87 0x83 DOWNWARDS HARPOON WITH BARB LEFTWARDS
U+21C4 ⇄ 0xe2 0x87 0x84 RIGHTWARDS ARROW OVER LEFTWARDS ARROW
U+21C5 ⇅ 0xe2 0x87 0x85 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
U+21C6 ⇆ 0xe2 0x87 0x86 LEFTWARDS ARROW OVER RIGHTWARDS ARROW
U+21C7 ⇇ 0xe2 0x87 0x87 LEFTWARDS PAIRED ARROWS
U+21C8 ⇈ 0xe2 0x87 0x88 UPWARDS PAIRED ARROWS
U+21C9 ⇉ 0xe2 0x87 0x89 RIGHTWARDS PAIRED ARROWS
U+21CA ⇊ 0xe2 0x87 0x8a DOWNWARDS PAIRED ARROWS
U+21CB ⇋ 0xe2 0x87 0x8b LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
U+21CC ⇌ 0xe2 0x87 0x8c RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
U+21CD ⇍ 0xe2 0x87 0x8d LEFTWARDS DOUBLE ARROW WITH STROKE
U+21CE ⇎ 0xe2 0x87 0x8e LEFT RIGHT DOUBLE ARROW WITH STROKE
U+21CF ⇏ 0xe2 0x87 0x8f RIGHTWARDS DOUBLE ARROW WITH STROKE

258
tests/utf-8/utf-8.dingbats.txt

@ -0,0 +1,258 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+2700 ✀ e2 9c 80 BLACK SAFETY SCISSORS
U+2701 ✁ e2 9c 81 UPPER BLADE SCISSORS
U+2702 ✂ e2 9c 82 BLACK SCISSORS
U+2703 ✃ e2 9c 83 LOWER BLADE SCISSORS
U+2704 ✄ e2 9c 84 WHITE SCISSORS
U+2705 ✅ e2 9c 85 WHITE HEAVY CHECK MARK
U+2706 ✆ e2 9c 86 TELEPHONE LOCATION SIGN
U+2707 ✇ e2 9c 87 TAPE DRIVE
U+2708 ✈ e2 9c 88 AIRPLANE
U+2709 ✉ e2 9c 89 ENVELOPE
U+270A ✊ e2 9c 8a RAISED FIST
U+270B ✋ e2 9c 8b RAISED HAND
U+270C ✌ e2 9c 8c VICTORY HAND
U+270D ✍ e2 9c 8d WRITING HAND
U+270E ✎ e2 9c 8e LOWER RIGHT PENCIL
U+270F ✏ e2 9c 8f PENCIL
U+2710 ✐ e2 9c 90 UPPER RIGHT PENCIL
U+2711 ✑ e2 9c 91 WHITE NIB
U+2712 ✒ e2 9c 92 BLACK NIB
U+2713 ✓ e2 9c 93 CHECK MARK
U+2714 ✔ e2 9c 94 HEAVY CHECK MARK
U+2715 ✕ e2 9c 95 MULTIPLICATION X
U+2716 ✖ e2 9c 96 HEAVY MULTIPLICATION X
U+2717 ✗ e2 9c 97 BALLOT X
U+2718 ✘ e2 9c 98 HEAVY BALLOT X
U+2719 ✙ e2 9c 99 OUTLINED GREEK CROSS
U+271A ✚ e2 9c 9a HEAVY GREEK CROSS
U+271B ✛ e2 9c 9b OPEN CENTRE CROSS
U+271C ✜ e2 9c 9c HEAVY OPEN CENTRE CROSS
U+271D ✝ e2 9c 9d LATIN CROSS
U+271E ✞ e2 9c 9e SHADOWED WHITE LATIN CROSS
U+271F ✟ e2 9c 9f OUTLINED LATIN CROSS
U+2720 ✠ e2 9c a0 MALTESE CROSS
U+2721 ✡ e2 9c a1 STAR OF DAVID
U+2722 ✢ e2 9c a2 FOUR TEARDROP-SPOKED ASTERISK
U+2723 ✣ e2 9c a3 FOUR BALLOON-SPOKED ASTERISK
U+2724 ✤ e2 9c a4 HEAVY FOUR BALLOON-SPOKED ASTERISK
U+2725 ✥ e2 9c a5 FOUR CLUB-SPOKED ASTERISK
U+2726 ✦ e2 9c a6 BLACK FOUR POINTED STAR
U+2727 ✧ e2 9c a7 WHITE FOUR POINTED STAR
U+2728 ✨ e2 9c a8 SPARKLES
U+2729 ✩ e2 9c a9 STRESS OUTLINED WHITE STAR
U+272A ✪ e2 9c aa CIRCLED WHITE STAR
U+272B ✫ e2 9c ab OPEN CENTRE BLACK STAR
U+272C ✬ e2 9c ac BLACK CENTRE WHITE STAR
U+272D ✭ e2 9c ad OUTLINED BLACK STAR
U+272E ✮ e2 9c ae HEAVY OUTLINED BLACK STAR
U+272F ✯ e2 9c af PINWHEEL STAR
U+2730 ✰ e2 9c b0 SHADOWED WHITE STAR
U+2731 ✱ e2 9c b1 HEAVY ASTERISK
U+2732 ✲ e2 9c b2 OPEN CENTRE ASTERISK
U+2733 ✳ e2 9c b3 EIGHT SPOKED ASTERISK
U+2734 ✴ e2 9c b4 EIGHT POINTED BLACK STAR
U+2735 ✵ e2 9c b5 EIGHT POINTED PINWHEEL STAR
U+2736 ✶ e2 9c b6 SIX POINTED BLACK STAR
U+2737 ✷ e2 9c b7 EIGHT POINTED RECTILINEAR BLACK STAR
U+2738 ✸ e2 9c b8 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
U+2739 ✹ e2 9c b9 TWELVE POINTED BLACK STAR
U+273A ✺ e2 9c ba SIXTEEN POINTED ASTERISK
U+273B ✻ e2 9c bb TEARDROP-SPOKED ASTERISK
U+273C ✼ e2 9c bc OPEN CENTRE TEARDROP-SPOKED ASTERISK
U+273D ✽ e2 9c bd HEAVY TEARDROP-SPOKED ASTERISK
U+273E ✾ e2 9c be SIX PETALLED BLACK AND WHITE FLORETTE
U+273F ✿ e2 9c bf BLACK FLORETTE
U+2740 ❀ e2 9d 80 WHITE FLORETTE
U+2741 ❁ e2 9d 81 EIGHT PETALLED OUTLINED BLACK FLORETTE
U+2742 ❂ e2 9d 82 CIRCLED OPEN CENTRE EIGHT POINTED STAR
U+2743 ❃ e2 9d 83 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
U+2744 ❄ e2 9d 84 SNOWFLAKE
U+2745 ❅ e2 9d 85 TIGHT TRIFOLIATE SNOWFLAKE
U+2746 ❆ e2 9d 86 HEAVY CHEVRON SNOWFLAKE
U+2747 ❇ e2 9d 87 SPARKLE
U+2748 ❈ e2 9d 88 HEAVY SPARKLE
U+2749 ❉ e2 9d 89 BALLOON-SPOKED ASTERISK
U+274A ❊ e2 9d 8a EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
U+274B ❋ e2 9d 8b HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
U+274C ❌ e2 9d 8c CROSS MARK
U+274D ❍ e2 9d 8d SHADOWED WHITE CIRCLE
U+274E ❎ e2 9d 8e NEGATIVE SQUARED CROSS MARK
U+274F ❏ e2 9d 8f LOWER RIGHT DROP-SHADOWED WHITE SQUARE
U+2750 ❐ e2 9d 90 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
U+2751 ❑ e2 9d 91 LOWER RIGHT SHADOWED WHITE SQUARE
U+2752 ❒ e2 9d 92 UPPER RIGHT SHADOWED WHITE SQUARE
U+2753 ❓ e2 9d 93 BLACK QUESTION MARK ORNAMENT
U+2754 ❔ e2 9d 94 WHITE QUESTION MARK ORNAMENT
U+2755 ❕ e2 9d 95 WHITE EXCLAMATION MARK ORNAMENT
U+2756 ❖ e2 9d 96 BLACK DIAMOND MINUS WHITE X
U+2757 ❗ e2 9d 97 HEAVY EXCLAMATION MARK SYMBOL
U+2758 ❘ e2 9d 98 LIGHT VERTICAL BAR
U+2759 ❙ e2 9d 99 MEDIUM VERTICAL BAR
U+275A ❚ e2 9d 9a HEAVY VERTICAL BAR
U+275B ❛ e2 9d 9b HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
U+275C ❜ e2 9d 9c HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
U+275D ❝ e2 9d 9d HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
U+275E ❞ e2 9d 9e HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
U+275F ❟ e2 9d 9f HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
U+2760 ❠ e2 9d a0 HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
U+2761 ❡ e2 9d a1 CURVED STEM PARAGRAPH SIGN ORNAMENT
U+2762 ❢ e2 9d a2 HEAVY EXCLAMATION MARK ORNAMENT
U+2763 ❣ e2 9d a3 HEAVY HEART EXCLAMATION MARK ORNAMENT
U+2764 ❤ e2 9d a4 HEAVY BLACK HEART
U+2765 ❥ e2 9d a5 ROTATED HEAVY BLACK HEART BULLET
U+2766 ❦ e2 9d a6 FLORAL HEART
U+2767 ❧ e2 9d a7 ROTATED FLORAL HEART BULLET
U+2768 ❨ e2 9d a8 MEDIUM LEFT PARENTHESIS ORNAMENT
U+2769 ❩ e2 9d a9 MEDIUM RIGHT PARENTHESIS ORNAMENT
U+276A ❪ e2 9d aa MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
U+276B ❫ e2 9d ab MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
U+276C ❬ e2 9d ac MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
U+276D ❭ e2 9d ad MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
U+276E ❮ e2 9d ae HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
U+276F ❯ e2 9d af HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
U+2770 ❰ e2 9d b0 HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
U+2771 ❱ e2 9d b1 HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
U+2772 ❲ e2 9d b2 LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
U+2773 ❳ e2 9d b3 LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
U+2774 ❴ e2 9d b4 MEDIUM LEFT CURLY BRACKET ORNAMENT
U+2775 ❵ e2 9d b5 MEDIUM RIGHT CURLY BRACKET ORNAMENT
U+2776 ❶ e2 9d b6 DINGBAT NEGATIVE CIRCLED DIGIT ONE
U+2777 ❷ e2 9d b7 DINGBAT NEGATIVE CIRCLED DIGIT TWO
U+2778 ❸ e2 9d b8 DINGBAT NEGATIVE CIRCLED DIGIT THREE
U+2779 ❹ e2 9d b9 DINGBAT NEGATIVE CIRCLED DIGIT FOUR
U+277A ❺ e2 9d ba DINGBAT NEGATIVE CIRCLED DIGIT FIVE
U+277B ❻ e2 9d bb DINGBAT NEGATIVE CIRCLED DIGIT SIX
U+277C ❼ e2 9d bc DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
U+277D ❽ e2 9d bd DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
U+277E ❾ e2 9d be DINGBAT NEGATIVE CIRCLED DIGIT NINE
U+277F ❿ e2 9d bf DINGBAT NEGATIVE CIRCLED NUMBER TEN
U+2780 ➀ e2 9e 80 DINGBAT CIRCLED SANS-SERIF DIGIT ONE
U+2781 ➁ e2 9e 81 DINGBAT CIRCLED SANS-SERIF DIGIT TWO
U+2782 ➂ e2 9e 82 DINGBAT CIRCLED SANS-SERIF DIGIT THREE
U+2783 ➃ e2 9e 83 DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
U+2784 ➄ e2 9e 84 DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
U+2785 ➅ e2 9e 85 DINGBAT CIRCLED SANS-SERIF DIGIT SIX
U+2786 ➆ e2 9e 86 DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
U+2787 ➇ e2 9e 87 DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
U+2788 ➈ e2 9e 88 DINGBAT CIRCLED SANS-SERIF DIGIT NINE
U+2789 ➉ e2 9e 89 DINGBAT CIRCLED SANS-SERIF NUMBER TEN
U+278A ➊ e2 9e 8a DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
U+278B ➋ e2 9e 8b DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
U+278C ➌ e2 9e 8c DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
U+278D ➍ e2 9e 8d DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
U+278E ➎ e2 9e 8e DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
U+278F ➏ e2 9e 8f DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
U+2790 ➐ e2 9e 90 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
U+2791 ➑ e2 9e 91 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
U+2792 ➒ e2 9e 92 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
U+2793 ➓ e2 9e 93 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
U+2794 ➔ e2 9e 94 HEAVY WIDE-HEADED RIGHTWARDS ARROW
U+2795 ➕ e2 9e 95 HEAVY PLUS SIGN
U+2796 ➖ e2 9e 96 HEAVY MINUS SIGN
U+2797 ➗ e2 9e 97 HEAVY DIVISION SIGN
U+2798 ➘ e2 9e 98 HEAVY SOUTH EAST ARROW
U+2799 ➙ e2 9e 99 HEAVY RIGHTWARDS ARROW
U+279A ➚ e2 9e 9a HEAVY NORTH EAST ARROW
U+279B ➛ e2 9e 9b DRAFTING POINT RIGHTWARDS ARROW
U+279C ➜ e2 9e 9c HEAVY ROUND-TIPPED RIGHTWARDS ARROW
U+279D ➝ e2 9e 9d TRIANGLE-HEADED RIGHTWARDS ARROW
U+279E ➞ e2 9e 9e HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
U+279F ➟ e2 9e 9f DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
U+27A0 ➠ e2 9e a0 HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
U+27A1 ➡ e2 9e a1 BLACK RIGHTWARDS ARROW
U+27A2 ➢ e2 9e a2 THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
U+27A3 ➣ e2 9e a3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
U+27A4 ➤ e2 9e a4 BLACK RIGHTWARDS ARROWHEAD
U+27A5 ➥ e2 9e a5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
U+27A6 ➦ e2 9e a6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
U+27A7 ➧ e2 9e a7 SQUAT BLACK RIGHTWARDS ARROW
U+27A8 ➨ e2 9e a8 HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
U+27A9 ➩ e2 9e a9 RIGHT-SHADED WHITE RIGHTWARDS ARROW
U+27AA ➪ e2 9e aa LEFT-SHADED WHITE RIGHTWARDS ARROW
U+27AB ➫ e2 9e ab BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
U+27AC ➬ e2 9e ac FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
U+27AD ➭ e2 9e ad HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
U+27AE ➮ e2 9e ae HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
U+27AF ➯ e2 9e af NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
U+27B0 ➰ e2 9e b0 CURLY LOOP
U+27B1 ➱ e2 9e b1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
U+27B2 ➲ e2 9e b2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
U+27B3 ➳ e2 9e b3 WHITE-FEATHERED RIGHTWARDS ARROW
U+27B4 ➴ e2 9e b4 BLACK-FEATHERED SOUTH EAST ARROW
U+27B5 ➵ e2 9e b5 BLACK-FEATHERED RIGHTWARDS ARROW
U+27B6 ➶ e2 9e b6 BLACK-FEATHERED NORTH EAST ARROW
U+27B7 ➷ e2 9e b7 HEAVY BLACK-FEATHERED SOUTH EAST ARROW
U+27B8 ➸ e2 9e b8 HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
U+27B9 ➹ e2 9e b9 HEAVY BLACK-FEATHERED NORTH EAST ARROW
U+27BA ➺ e2 9e ba TEARDROP-BARBED RIGHTWARDS ARROW
U+27BB ➻ e2 9e bb HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
U+27BC ➼ e2 9e bc WEDGE-TAILED RIGHTWARDS ARROW
U+27BD ➽ e2 9e bd HEAVY WEDGE-TAILED RIGHTWARDS ARROW
U+27BE ➾ e2 9e be OPEN-OUTLINED RIGHTWARDS ARROW
U+27BF ➿ e2 9e bf DOUBLE CURLY LOOP
U+27C0 ⟀ e2 9f 80 THREE DIMENSIONAL ANGLE
U+27C1 ⟁ e2 9f 81 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
U+27C2 ⟂ e2 9f 82 PERPENDICULAR
U+27C3 ⟃ e2 9f 83 OPEN SUBSET
U+27C4 ⟄ e2 9f 84 OPEN SUPERSET
U+27C5 ⟅ e2 9f 85 LEFT S-SHAPED BAG DELIMITER
U+27C6 ⟆ e2 9f 86 RIGHT S-SHAPED BAG DELIMITER
U+27C7 ⟇ e2 9f 87 OR WITH DOT INSIDE
U+27C8 ⟈ e2 9f 88 REVERSE SOLIDUS PRECEDING SUBSET
U+27C9 ⟉ e2 9f 89 SUPERSET PRECEDING SOLIDUS
U+27CA ⟊ e2 9f 8a VERTICAL BAR WITH HORIZONTAL STROKE
U+27CB ⟋ e2 9f 8b MATHEMATICAL RISING DIAGONAL
U+27CC ⟌ e2 9f 8c LONG DIVISION
U+27CD ⟍ e2 9f 8d MATHEMATICAL FALLING DIAGONAL
U+27CE ⟎ e2 9f 8e SQUARED LOGICAL AND
U+27CF ⟏ e2 9f 8f SQUARED LOGICAL OR
U+27D0 ⟐ e2 9f 90 WHITE DIAMOND WITH CENTRED DOT
U+27D1 ⟑ e2 9f 91 AND WITH DOT
U+27D2 ⟒ e2 9f 92 ELEMENT OF OPENING UPWARDS
U+27D3 ⟓ e2 9f 93 LOWER RIGHT CORNER WITH DOT
U+27D4 ⟔ e2 9f 94 UPPER LEFT CORNER WITH DOT
U+27D5 ⟕ e2 9f 95 LEFT OUTER JOIN
U+27D6 ⟖ e2 9f 96 RIGHT OUTER JOIN
U+27D7 ⟗ e2 9f 97 FULL OUTER JOIN
U+27D8 ⟘ e2 9f 98 LARGE UP TACK
U+27D9 ⟙ e2 9f 99 LARGE DOWN TACK
U+27DA ⟚ e2 9f 9a LEFT AND RIGHT DOUBLE TURNSTILE
U+27DB ⟛ e2 9f 9b LEFT AND RIGHT TACK
U+27DC ⟜ e2 9f 9c LEFT MULTIMAP
U+27DD ⟝ e2 9f 9d LONG RIGHT TACK
U+27DE ⟞ e2 9f 9e LONG LEFT TACK
U+27DF ⟟ e2 9f 9f UP TACK WITH CIRCLE ABOVE
U+27E0 ⟠ e2 9f a0 LOZENGE DIVIDED BY HORIZONTAL RULE
U+27E1 ⟡ e2 9f a1 WHITE CONCAVE-SIDED DIAMOND
U+27E2 ⟢ e2 9f a2 WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
U+27E3 ⟣ e2 9f a3 WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
U+27E4 ⟤ e2 9f a4 WHITE SQUARE WITH LEFTWARDS TICK
U+27E5 ⟥ e2 9f a5 WHITE SQUARE WITH RIGHTWARDS TICK
U+27E6 ⟦ e2 9f a6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
U+27E7 ⟧ e2 9f a7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
U+27E8 ⟨ e2 9f a8 MATHEMATICAL LEFT ANGLE BRACKET
U+27E9 ⟩ e2 9f a9 MATHEMATICAL RIGHT ANGLE BRACKET
U+27EA ⟪ e2 9f aa MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
U+27EB ⟫ e2 9f ab MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
U+27EC ⟬ e2 9f ac MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
U+27ED ⟭ e2 9f ad MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
U+27EE ⟮ e2 9f ae MATHEMATICAL LEFT FLATTENED PARENTHESIS
U+27EF ⟯ e2 9f af MATHEMATICAL RIGHT FLATTENED PARENTHESIS
U+27F0 ⟰ e2 9f b0 UPWARDS QUADRUPLE ARROW
U+27F1 ⟱ e2 9f b1 DOWNWARDS QUADRUPLE ARROW
U+27F2 ⟲ e2 9f b2 ANTICLOCKWISE GAPPED CIRCLE ARROW
U+27F3 ⟳ e2 9f b3 CLOCKWISE GAPPED CIRCLE ARROW
U+27F4 ⟴ e2 9f b4 RIGHT ARROW WITH CIRCLED PLUS
U+27F5 ⟵ e2 9f b5 LONG LEFTWARDS ARROW
U+27F6 ⟶ e2 9f b6 LONG RIGHTWARDS ARROW
U+27F7 ⟷ e2 9f b7 LONG LEFT RIGHT ARROW
U+27F8 ⟸ e2 9f b8 LONG LEFTWARDS DOUBLE ARROW
U+27F9 ⟹ e2 9f b9 LONG RIGHTWARDS DOUBLE ARROW
U+27FA ⟺ e2 9f ba LONG LEFT RIGHT DOUBLE ARROW
U+27FB ⟻ e2 9f bb LONG LEFTWARDS ARROW FROM BAR
U+27FC ⟼ e2 9f bc LONG RIGHTWARDS ARROW FROM BAR
U+27FD ⟽ e2 9f bd LONG LEFTWARDS DOUBLE ARROW FROM BAR
U+27FE ⟾ e2 9f be LONG RIGHTWARDS DOUBLE ARROW FROM BAR
U+27FF ⟿ e2 9f bf LONG RIGHTWARDS SQUIGGLE ARROW

1
tests/utf-8/utf-8.emoticons.txt

@ -1,3 +1,4 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+1F600 😀 f0 9f 98 80 GRINNING FACE
U+1F601 😁 f0 9f 98 81 GRINNING FACE WITH SMILING EYES

258
tests/utf-8/utf-8.geom.shapes.txt

@ -0,0 +1,258 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+25A0 ■ e2 96 a0 BLACK SQUARE
U+25A1 □ e2 96 a1 WHITE SQUARE
U+25A2 ▢ e2 96 a2 WHITE SQUARE WITH ROUNDED CORNERS
U+25A3 ▣ e2 96 a3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE
U+25A4 ▤ e2 96 a4 SQUARE WITH HORIZONTAL FILL
U+25A5 ▥ e2 96 a5 SQUARE WITH VERTICAL FILL
U+25A6 ▦ e2 96 a6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
U+25A7 ▧ e2 96 a7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
U+25A8 ▨ e2 96 a8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
U+25A9 ▩ e2 96 a9 SQUARE WITH DIAGONAL CROSSHATCH FILL
U+25AA ▪ e2 96 aa BLACK SMALL SQUARE
U+25AB ▫ e2 96 ab WHITE SMALL SQUARE
U+25AC ▬ e2 96 ac BLACK RECTANGLE
U+25AD ▭ e2 96 ad WHITE RECTANGLE
U+25AE ▮ e2 96 ae BLACK VERTICAL RECTANGLE
U+25AF ▯ e2 96 af WHITE VERTICAL RECTANGLE
U+25B0 ▰ e2 96 b0 BLACK PARALLELOGRAM
U+25B1 ▱ e2 96 b1 WHITE PARALLELOGRAM
U+25B2 ▲ e2 96 b2 BLACK UP-POINTING TRIANGLE
U+25B3 △ e2 96 b3 WHITE UP-POINTING TRIANGLE
U+25B4 ▴ e2 96 b4 BLACK UP-POINTING SMALL TRIANGLE
U+25B5 ▵ e2 96 b5 WHITE UP-POINTING SMALL TRIANGLE
U+25B6 ▶ e2 96 b6 BLACK RIGHT-POINTING TRIANGLE
U+25B7 ▷ e2 96 b7 WHITE RIGHT-POINTING TRIANGLE
U+25B8 ▸ e2 96 b8 BLACK RIGHT-POINTING SMALL TRIANGLE
U+25B9 ▹ e2 96 b9 WHITE RIGHT-POINTING SMALL TRIANGLE
U+25BA ► e2 96 ba BLACK RIGHT-POINTING POINTER
U+25BB ▻ e2 96 bb WHITE RIGHT-POINTING POINTER
U+25BC ▼ e2 96 bc BLACK DOWN-POINTING TRIANGLE
U+25BD ▽ e2 96 bd WHITE DOWN-POINTING TRIANGLE
U+25BE ▾ e2 96 be BLACK DOWN-POINTING SMALL TRIANGLE
U+25BF ▿ e2 96 bf WHITE DOWN-POINTING SMALL TRIANGLE
U+25C0 ◀ e2 97 80 BLACK LEFT-POINTING TRIANGLE
U+25C1 ◁ e2 97 81 WHITE LEFT-POINTING TRIANGLE
U+25C2 ◂ e2 97 82 BLACK LEFT-POINTING SMALL TRIANGLE
U+25C3 ◃ e2 97 83 WHITE LEFT-POINTING SMALL TRIANGLE
U+25C4 ◄ e2 97 84 BLACK LEFT-POINTING POINTER
U+25C5 ◅ e2 97 85 WHITE LEFT-POINTING POINTER
U+25C6 ◆ e2 97 86 BLACK DIAMOND
U+25C7 ◇ e2 97 87 WHITE DIAMOND
U+25C8 ◈ e2 97 88 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
U+25C9 ◉ e2 97 89 FISHEYE
U+25CA ◊ e2 97 8a LOZENGE
U+25CB ○ e2 97 8b WHITE CIRCLE
U+25CC ◌ e2 97 8c DOTTED CIRCLE
U+25CD ◍ e2 97 8d CIRCLE WITH VERTICAL FILL
U+25CE ◎ e2 97 8e BULLSEYE
U+25CF ● e2 97 8f BLACK CIRCLE
U+25D0 ◐ e2 97 90 CIRCLE WITH LEFT HALF BLACK
U+25D1 ◑ e2 97 91 CIRCLE WITH RIGHT HALF BLACK
U+25D2 ◒ e2 97 92 CIRCLE WITH LOWER HALF BLACK
U+25D3 ◓ e2 97 93 CIRCLE WITH UPPER HALF BLACK
U+25D4 ◔ e2 97 94 CIRCLE WITH UPPER RIGHT QUADRANT BLACK
U+25D5 ◕ e2 97 95 CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
U+25D6 ◖ e2 97 96 LEFT HALF BLACK CIRCLE
U+25D7 ◗ e2 97 97 RIGHT HALF BLACK CIRCLE
U+25D8 ◘ e2 97 98 INVERSE BULLET
U+25D9 ◙ e2 97 99 INVERSE WHITE CIRCLE
U+25DA ◚ e2 97 9a UPPER HALF INVERSE WHITE CIRCLE
U+25DB ◛ e2 97 9b LOWER HALF INVERSE WHITE CIRCLE
U+25DC ◜ e2 97 9c UPPER LEFT QUADRANT CIRCULAR ARC
U+25DD ◝ e2 97 9d UPPER RIGHT QUADRANT CIRCULAR ARC
U+25DE ◞ e2 97 9e LOWER RIGHT QUADRANT CIRCULAR ARC
U+25DF ◟ e2 97 9f LOWER LEFT QUADRANT CIRCULAR ARC
U+25E0 ◠ e2 97 a0 UPPER HALF CIRCLE
U+25E1 ◡ e2 97 a1 LOWER HALF CIRCLE
U+25E2 ◢ e2 97 a2 BLACK LOWER RIGHT TRIANGLE
U+25E3 ◣ e2 97 a3 BLACK LOWER LEFT TRIANGLE
U+25E4 ◤ e2 97 a4 BLACK UPPER LEFT TRIANGLE
U+25E5 ◥ e2 97 a5 BLACK UPPER RIGHT TRIANGLE
U+25E6 ◦ e2 97 a6 WHITE BULLET
U+25E7 ◧ e2 97 a7 SQUARE WITH LEFT HALF BLACK
U+25E8 ◨ e2 97 a8 SQUARE WITH RIGHT HALF BLACK
U+25E9 ◩ e2 97 a9 SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
U+25EA ◪ e2 97 aa SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
U+25EB ◫ e2 97 ab WHITE SQUARE WITH VERTICAL BISECTING LINE
U+25EC ◬ e2 97 ac WHITE UP-POINTING TRIANGLE WITH DOT
U+25ED ◭ e2 97 ad UP-POINTING TRIANGLE WITH LEFT HALF BLACK
U+25EE ◮ e2 97 ae UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
U+25EF ◯ e2 97 af LARGE CIRCLE
U+25F0 ◰ e2 97 b0 WHITE SQUARE WITH UPPER LEFT QUADRANT
U+25F1 ◱ e2 97 b1 WHITE SQUARE WITH LOWER LEFT QUADRANT
U+25F2 ◲ e2 97 b2 WHITE SQUARE WITH LOWER RIGHT QUADRANT
U+25F3 ◳ e2 97 b3 WHITE SQUARE WITH UPPER RIGHT QUADRANT
U+25F4 ◴ e2 97 b4 WHITE CIRCLE WITH UPPER LEFT QUADRANT
U+25F5 ◵ e2 97 b5 WHITE CIRCLE WITH LOWER LEFT QUADRANT
U+25F6 ◶ e2 97 b6 WHITE CIRCLE WITH LOWER RIGHT QUADRANT
U+25F7 ◷ e2 97 b7 WHITE CIRCLE WITH UPPER RIGHT QUADRANT
U+25F8 ◸ e2 97 b8 UPPER LEFT TRIANGLE
U+25F9 ◹ e2 97 b9 UPPER RIGHT TRIANGLE
U+25FA ◺ e2 97 ba LOWER LEFT TRIANGLE
U+25FB ◻ e2 97 bb WHITE MEDIUM SQUARE
U+25FC ◼ e2 97 bc BLACK MEDIUM SQUARE
U+25FD ◽ e2 97 bd WHITE MEDIUM SMALL SQUARE
U+25FE ◾ e2 97 be BLACK MEDIUM SMALL SQUARE
U+25FF ◿ e2 97 bf LOWER RIGHT TRIANGLE
U+2600 ☀ e2 98 80 BLACK SUN WITH RAYS
U+2601 ☁ e2 98 81 CLOUD
U+2602 ☂ e2 98 82 UMBRELLA
U+2603 ☃ e2 98 83 SNOWMAN
U+2604 ☄ e2 98 84 COMET
U+2605 ★ e2 98 85 BLACK STAR
U+2606 ☆ e2 98 86 WHITE STAR
U+2607 ☇ e2 98 87 LIGHTNING
U+2608 ☈ e2 98 88 THUNDERSTORM
U+2609 ☉ e2 98 89 SUN
U+260A ☊ e2 98 8a ASCENDING NODE
U+260B ☋ e2 98 8b DESCENDING NODE
U+260C ☌ e2 98 8c CONJUNCTION
U+260D ☍ e2 98 8d OPPOSITION
U+260E ☎ e2 98 8e BLACK TELEPHONE
U+260F ☏ e2 98 8f WHITE TELEPHONE
U+2610 ☐ e2 98 90 BALLOT BOX
U+2611 ☑ e2 98 91 BALLOT BOX WITH CHECK
U+2612 ☒ e2 98 92 BALLOT BOX WITH X
U+2613 ☓ e2 98 93 SALTIRE
U+2614 ☔ e2 98 94 UMBRELLA WITH RAIN DROPS
U+2615 ☕ e2 98 95 HOT BEVERAGE
U+2616 ☖ e2 98 96 WHITE SHOGI PIECE
U+2617 ☗ e2 98 97 BLACK SHOGI PIECE
U+2618 ☘ e2 98 98 SHAMROCK
U+2619 ☙ e2 98 99 REVERSED ROTATED FLORAL HEART BULLET
U+261A ☚ e2 98 9a BLACK LEFT POINTING INDEX
U+261B ☛ e2 98 9b BLACK RIGHT POINTING INDEX
U+261C ☜ e2 98 9c WHITE LEFT POINTING INDEX
U+261D ☝ e2 98 9d WHITE UP POINTING INDEX
U+261E ☞ e2 98 9e WHITE RIGHT POINTING INDEX
U+261F ☟ e2 98 9f WHITE DOWN POINTING INDEX
U+2620 ☠ e2 98 a0 SKULL AND CROSSBONES
U+2621 ☡ e2 98 a1 CAUTION SIGN
U+2622 ☢ e2 98 a2 RADIOACTIVE SIGN
U+2623 ☣ e2 98 a3 BIOHAZARD SIGN
U+2624 ☤ e2 98 a4 CADUCEUS
U+2625 ☥ e2 98 a5 ANKH
U+2626 ☦ e2 98 a6 ORTHODOX CROSS
U+2627 ☧ e2 98 a7 CHI RHO
U+2628 ☨ e2 98 a8 CROSS OF LORRAINE
U+2629 ☩ e2 98 a9 CROSS OF JERUSALEM
U+262A ☪ e2 98 aa STAR AND CRESCENT
U+262B ☫ e2 98 ab FARSI SYMBOL
U+262C ☬ e2 98 ac ADI SHAKTI
U+262D ☭ e2 98 ad HAMMER AND SICKLE
U+262E ☮ e2 98 ae PEACE SYMBOL
U+262F ☯ e2 98 af YIN YANG
U+2630 ☰ e2 98 b0 TRIGRAM FOR HEAVEN
U+2631 ☱ e2 98 b1 TRIGRAM FOR LAKE
U+2632 ☲ e2 98 b2 TRIGRAM FOR FIRE
U+2633 ☳ e2 98 b3 TRIGRAM FOR THUNDER
U+2634 ☴ e2 98 b4 TRIGRAM FOR WIND
U+2635 ☵ e2 98 b5 TRIGRAM FOR WATER
U+2636 ☶ e2 98 b6 TRIGRAM FOR MOUNTAIN
U+2637 ☷ e2 98 b7 TRIGRAM FOR EARTH
U+2638 ☸ e2 98 b8 WHEEL OF DHARMA
U+2639 ☹ e2 98 b9 WHITE FROWNING FACE
U+263A ☺ e2 98 ba WHITE SMILING FACE
U+263B ☻ e2 98 bb BLACK SMILING FACE
U+263C ☼ e2 98 bc WHITE SUN WITH RAYS
U+263D ☽ e2 98 bd FIRST QUARTER MOON
U+263E ☾ e2 98 be LAST QUARTER MOON
U+263F ☿ e2 98 bf MERCURY
U+2640 ♀ e2 99 80 FEMALE SIGN
U+2641 ♁ e2 99 81 EARTH
U+2642 ♂ e2 99 82 MALE SIGN
U+2643 ♃ e2 99 83 JUPITER
U+2644 ♄ e2 99 84 SATURN
U+2645 ♅ e2 99 85 URANUS
U+2646 ♆ e2 99 86 NEPTUNE
U+2647 ♇ e2 99 87 PLUTO
U+2648 ♈ e2 99 88 ARIES
U+2649 ♉ e2 99 89 TAURUS
U+264A ♊ e2 99 8a GEMINI
U+264B ♋ e2 99 8b CANCER
U+264C ♌ e2 99 8c LEO
U+264D ♍ e2 99 8d VIRGO
U+264E ♎ e2 99 8e LIBRA
U+264F ♏ e2 99 8f SCORPIUS
U+2650 ♐ e2 99 90 SAGITTARIUS
U+2651 ♑ e2 99 91 CAPRICORN
U+2652 ♒ e2 99 92 AQUARIUS
U+2653 ♓ e2 99 93 PISCES
U+2654 ♔ e2 99 94 WHITE CHESS KING
U+2655 ♕ e2 99 95 WHITE CHESS QUEEN
U+2656 ♖ e2 99 96 WHITE CHESS ROOK
U+2657 ♗ e2 99 97 WHITE CHESS BISHOP
U+2658 ♘ e2 99 98 WHITE CHESS KNIGHT
U+2659 ♙ e2 99 99 WHITE CHESS PAWN
U+265A ♚ e2 99 9a BLACK CHESS KING
U+265B ♛ e2 99 9b BLACK CHESS QUEEN
U+265C ♜ e2 99 9c BLACK CHESS ROOK
U+265D ♝ e2 99 9d BLACK CHESS BISHOP
U+265E ♞ e2 99 9e BLACK CHESS KNIGHT
U+265F ♟ e2 99 9f BLACK CHESS PAWN
U+2660 ♠ e2 99 a0 BLACK SPADE SUIT
U+2661 ♡ e2 99 a1 WHITE HEART SUIT
U+2662 ♢ e2 99 a2 WHITE DIAMOND SUIT
U+2663 ♣ e2 99 a3 BLACK CLUB SUIT
U+2664 ♤ e2 99 a4 WHITE SPADE SUIT
U+2665 ♥ e2 99 a5 BLACK HEART SUIT
U+2666 ♦ e2 99 a6 BLACK DIAMOND SUIT
U+2667 ♧ e2 99 a7 WHITE CLUB SUIT
U+2668 ♨ e2 99 a8 HOT SPRINGS
U+2669 ♩ e2 99 a9 QUARTER NOTE
U+266A ♪ e2 99 aa EIGHTH NOTE
U+266B ♫ e2 99 ab BEAMED EIGHTH NOTES
U+266C ♬ e2 99 ac BEAMED SIXTEENTH NOTES
U+266D ♭ e2 99 ad MUSIC FLAT SIGN
U+266E ♮ e2 99 ae MUSIC NATURAL SIGN
U+266F ♯ e2 99 af MUSIC SHARP SIGN
U+2670 ♰ e2 99 b0 WEST SYRIAC CROSS
U+2671 ♱ e2 99 b1 EAST SYRIAC CROSS
U+2672 ♲ e2 99 b2 UNIVERSAL RECYCLING SYMBOL
U+2673 ♳ e2 99 b3 RECYCLING SYMBOL FOR TYPE-1 PLASTICS
U+2674 ♴ e2 99 b4 RECYCLING SYMBOL FOR TYPE-2 PLASTICS
U+2675 ♵ e2 99 b5 RECYCLING SYMBOL FOR TYPE-3 PLASTICS
U+2676 ♶ e2 99 b6 RECYCLING SYMBOL FOR TYPE-4 PLASTICS
U+2677 ♷ e2 99 b7 RECYCLING SYMBOL FOR TYPE-5 PLASTICS
U+2678 ♸ e2 99 b8 RECYCLING SYMBOL FOR TYPE-6 PLASTICS
U+2679 ♹ e2 99 b9 RECYCLING SYMBOL FOR TYPE-7 PLASTICS
U+267A ♺ e2 99 ba RECYCLING SYMBOL FOR GENERIC MATERIALS
U+267B ♻ e2 99 bb BLACK UNIVERSAL RECYCLING SYMBOL
U+267C ♼ e2 99 bc RECYCLED PAPER SYMBOL
U+267D ♽ e2 99 bd PARTIALLY-RECYCLED PAPER SYMBOL
U+267E ♾ e2 99 be PERMANENT PAPER SIGN
U+267F ♿ e2 99 bf WHEELCHAIR SYMBOL
U+2680 ⚀ e2 9a 80 DIE FACE-1
U+2681 ⚁ e2 9a 81 DIE FACE-2
U+2682 ⚂ e2 9a 82 DIE FACE-3
U+2683 ⚃ e2 9a 83 DIE FACE-4
U+2684 ⚄ e2 9a 84 DIE FACE-5
U+2685 ⚅ e2 9a 85 DIE FACE-6
U+2686 ⚆ e2 9a 86 WHITE CIRCLE WITH DOT RIGHT
U+2687 ⚇ e2 9a 87 WHITE CIRCLE WITH TWO DOTS
U+2688 ⚈ e2 9a 88 BLACK CIRCLE WITH WHITE DOT RIGHT
U+2689 ⚉ e2 9a 89 BLACK CIRCLE WITH TWO WHITE DOTS
U+268A ⚊ e2 9a 8a MONOGRAM FOR YANG
U+268B ⚋ e2 9a 8b MONOGRAM FOR YIN
U+268C ⚌ e2 9a 8c DIGRAM FOR GREATER YANG
U+268D ⚍ e2 9a 8d DIGRAM FOR LESSER YIN
U+268E ⚎ e2 9a 8e DIGRAM FOR LESSER YANG
U+268F ⚏ e2 9a 8f DIGRAM FOR GREATER YIN
U+2690 ⚐ e2 9a 90 WHITE FLAG
U+2691 ⚑ e2 9a 91 BLACK FLAG
U+2692 ⚒ e2 9a 92 HAMMER AND PICK
U+2693 ⚓ e2 9a 93 ANCHOR
U+2694 ⚔ e2 9a 94 CROSSED SWORDS
U+2695 ⚕ e2 9a 95 STAFF OF AESCULAPIUS
U+2696 ⚖ e2 9a 96 SCALES
U+2697 ⚗ e2 9a 97 ALEMBIC
U+2698 ⚘ e2 9a 98 FLOWER
U+2699 ⚙ e2 9a 99 GEAR
U+269A ⚚ e2 9a 9a STAFF OF HERMES
U+269B ⚛ e2 9a 9b ATOM SYMBOL
U+269C ⚜ e2 9a 9c FLEUR-DE-LIS
U+269D ⚝ e2 9a 9d OUTLINED WHITE STAR
U+269E ⚞ e2 9a 9e THREE LINES CONVERGING RIGHT
U+269F ⚟ e2 9a 9f THREE LINES CONVERGING LEFT

2
tests/utf-8/utf-8.misc.symbols.pictographs.txt

@ -1,3 +1,5 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+1F300 🌀 f0 9f 8c 80 CYCLONE
U+1F301 🌁 f0 9f 8c 81 FOGGY
U+1F302 🌂 f0 9f 8c 82 CLOSED UMBRELLA

2
tests/utf-8/utf-8.misc.tech.txt

@ -1,3 +1,5 @@
from: https://www.utf8-chartable.de/unicode-utf8-table.pl
U+2300 ⌀ e2 8c 80 DIAMETER SIGN
U+2301 ⌁ e2 8c 81 ELECTRIC ARROW
U+2302 ⌂ e2 8c 82 HOUSE

Loading…
Cancel
Save