First draft of SVG font for emulator
All checks were successful
docker-image / docker (push) Successful in 10m12s
All checks were successful
docker-image / docker (push) Successful in 10m12s
This commit is contained in:
parent
6cd211418d
commit
e951aacf35
12 changed files with 1342 additions and 118 deletions
24
buba/AppConfig.py
Normal file
24
buba/AppConfig.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
import json
|
||||
import logging
|
||||
from os import getenv, path
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class AppConfig:
|
||||
def __init__(self):
|
||||
"""
|
||||
Gets the config from environment variables
|
||||
"""
|
||||
self.log = logging.getLogger(__name__)
|
||||
|
||||
self.basepath = path.dirname(__file__)
|
||||
self.debug = getenv("DEBUG", None)
|
||||
self.staticpath = path.join(self.basepath, "static")
|
||||
self.templatepath = path.join(self.basepath, "templates")
|
||||
self.url = getenv('BUBA_URL', 'http://localhost:3000')
|
||||
(self.listen_host, self.listen_port) = getenv('BUBA_LISTEN', '127.0.0.1:3000').split(':')
|
||||
|
||||
if self.debug is not None and self.debug.lower not in ('0', 'f', 'false'):
|
||||
self.debug = True
|
||||
else:
|
||||
self.debug = False
|
146
buba/__main__.py
146
buba/__main__.py
|
@ -1,125 +1,41 @@
|
|||
import logging
|
||||
|
||||
from time import sleep
|
||||
from buba.AppConfig import AppConfig
|
||||
|
||||
from pyfis.aegmis import MIS1TextDisplay
|
||||
from pyfis.utils import debug_hex
|
||||
config = AppConfig()
|
||||
if config.debug:
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
|
||||
def receive(display):
|
||||
if display.use_rts:
|
||||
display.port.setRTS(1)
|
||||
display.port.write([0x04, 0x81, 0x05])
|
||||
if display.use_rts:
|
||||
display.port.setRTS(0)
|
||||
return display.read_response(True)
|
||||
app = Bottle()
|
||||
if config.debug:
|
||||
app.config.update({"logging.level": "DEBUG"})
|
||||
app.install(LoggingPlugin(app.config))
|
||||
TEMPLATE_PATH.insert(0, config.templatepath)
|
||||
app.install(BottleSessions())
|
||||
auth = BottleOIDC(app, config={
|
||||
"discovery_url": config.discovery_url,
|
||||
"client_id": config.client_id,
|
||||
"client_secret": config.client_secret,
|
||||
"client_scope": config.oidc_scope,
|
||||
"user_attr": config.oidc_user_attr,
|
||||
})
|
||||
|
||||
def decode(display):
|
||||
r = receive(display)
|
||||
if r[0] != 0x02:
|
||||
print("Invalid byte {r[0]:02x}, expected EOT")
|
||||
d = {
|
||||
'code': r[1],
|
||||
'subcode': r[2],
|
||||
}
|
||||
m = []
|
||||
esc = False
|
||||
for i in range(3, len(r)-1):
|
||||
if esc:
|
||||
m.append(r[i])
|
||||
erc = False
|
||||
elif r[i] == 0x10:
|
||||
esc = True
|
||||
else:
|
||||
if r[i] == 0x03:
|
||||
# compute checksum
|
||||
next
|
||||
m.append(r[i])
|
||||
m = m[0:-1]
|
||||
print(f"m({len(m)}): {debug_hex(m)}")
|
||||
return m
|
||||
websocket_clients = WebSocketClients()
|
||||
bottle_helpers = BottleHelpers(auth, group=config.requires_group, allowed=config.allowed)
|
||||
update_poller = UpdatePoller(websocket_clients, ccujack, 1 if config.debug else 0.1)
|
||||
|
||||
|
||||
def reset_and_get_config(display):
|
||||
display.send_command(0x31, 0x00, [])
|
||||
r = decode(display)
|
||||
return {
|
||||
'type': r[0],
|
||||
'control-units': r[1],
|
||||
'digits-a': r[2] * 256 + r[3],
|
||||
'lines-a': r[4],
|
||||
'digits-b': r[5] * 256 + r[6],
|
||||
'lines-b': r[7],
|
||||
'timeout': r[8] * 128.0 + r[9] * 0.5,
|
||||
}
|
||||
|
||||
def get_config(display):
|
||||
display.send_command(0x38, 0x00, [])
|
||||
r = decode(display)
|
||||
return r
|
||||
|
||||
def text_raw(display, page, row, text):
|
||||
data = [display.ALIGN_LEFT, page, row, 0] + text
|
||||
return display.send_command(0x11, 0x00, data, expect_response=False)
|
||||
@app.route("/static/<filepath>")
|
||||
def server_static(filepath):
|
||||
return static_file(filepath, root=config.staticpath)
|
||||
|
||||
|
||||
def charset():
|
||||
lines = []
|
||||
for i in range(0, 256, 16):
|
||||
label = f"{i:03d}: "
|
||||
b = list(label.encode("CP437"))
|
||||
for j in range(i, i+16):
|
||||
if j == 0:
|
||||
b.append(0x20)
|
||||
else:
|
||||
b.append(j)
|
||||
lines.append(b)
|
||||
@app.get("/")
|
||||
@jinja2_view("home.html.j2")
|
||||
def root():
|
||||
return {}
|
||||
|
||||
display.set_page(1)
|
||||
|
||||
while True:
|
||||
for p in range(1,16):
|
||||
for l in range(0,4):
|
||||
text_raw(display, 1, l, lines[(p+l-1) % len(lines)])
|
||||
sleep(5)
|
||||
|
||||
print("Opening serial port")
|
||||
display = MIS1TextDisplay("/dev/ttyUSB0")
|
||||
|
||||
print("Sending text")
|
||||
display.debug = True
|
||||
#r = display.send_command(0x31, 0x00, []) # reset
|
||||
#r = display.send_command(0x32, 0x01, []) # test
|
||||
#r = display.send_command(0x38, 0x01, []) # read config
|
||||
#r = display.read_response()
|
||||
#print(f"Response: {r}")
|
||||
#r = display.send_command(0x52, 0x01, []) # read config
|
||||
#display.send_raw_telegram([0xff])
|
||||
#display.send_raw_data([0x04, 0x81, 0x02, 0x03, 0x00])
|
||||
#print(f"response: {display.read_response()}")
|
||||
#r = reset_and_get_config(display)
|
||||
r = get_config(display)
|
||||
print(f"reply {len(r)}: {r}")
|
||||
|
||||
#display.simple_text(page=1, row=0, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=1, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=2, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=3, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
|
||||
#display.simple_text(page=0, row=3, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
|
||||
#print("page 1")
|
||||
#display.set_page(1)
|
||||
#sleep(10)
|
||||
|
||||
#for l in range(0,4):
|
||||
# display.simple_text(page=0, row=l, col=0, text="")
|
||||
#print("page 0")
|
||||
#display.set_page(0)
|
||||
#sleep(10)
|
||||
|
||||
#print("page 1")
|
||||
#display.set_page(1)
|
||||
#sleep(10)
|
||||
|
||||
charset()
|
||||
print("Thats all, folks!")
|
||||
if __name__ == '__main__':
|
||||
app.run(host=config.listen_host, port=config.listen_port, server=GeventWebSocketServer, debug=config.debug,
|
||||
quiet=not config.debug)
|
||||
|
|
99
buba/create_font.py
Normal file
99
buba/create_font.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
"""
|
||||
Create an SVG "font" by using the base segments from geascript-proportional.svg and creating a SVG with 256 symbols in it.
|
||||
"""
|
||||
import os
|
||||
from xml.dom import minidom, Node
|
||||
from xml.dom.minidom import getDOMImplementation, Element
|
||||
|
||||
fontspec = {
|
||||
'41': [
|
||||
'.##### ###### ###### ######',
|
||||
'###... ...### #..... ......',
|
||||
'#.#### ###### ###### ######',
|
||||
],
|
||||
'42': [
|
||||
'###### ###### ###### ######',
|
||||
'###... ...### #..... ...###',
|
||||
'#.#### #####. ###### #####.',
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
class Design:
|
||||
def __init__(self, filename):
|
||||
self.dom = minidom.parse(filename)
|
||||
(_, _, self.width, self.height) = [float(x) for x in
|
||||
self.dom.documentElement.getAttribute("viewBox").split(' ')]
|
||||
|
||||
r = {}
|
||||
for n in self.dom.getElementsByTagName("g")[0].childNodes:
|
||||
if n.nodeType == Node.ELEMENT_NODE:
|
||||
self.remove_namespaced_attributes(n)
|
||||
self.remove_style_attributes(n)
|
||||
id = n.getAttribute("id")
|
||||
r[id] = n
|
||||
self.segments = r
|
||||
|
||||
self.symbols = getDOMImplementation().createDocument(None, "svg", None)
|
||||
self.svg = self.symbols.documentElement
|
||||
self.svg.setAttribute("xmlns", "http://www.w3.org/2000/svg")
|
||||
self.svg.setAttribute("style", "height: 0; width: 0; position: absolute;")
|
||||
|
||||
def remove_namespaced_attributes(self, node:Element):
|
||||
if node.nodeType != Node.ELEMENT_NODE:
|
||||
return
|
||||
for a in list(node._attrsNS.values()):
|
||||
if a.prefix is not None:
|
||||
node.removeAttributeNode(a)
|
||||
for child in node.childNodes:
|
||||
self.remove_namespaced_attributes(child)
|
||||
|
||||
def remove_style_attributes(self, node:Element):
|
||||
if node.nodeType != Node.ELEMENT_NODE:
|
||||
return
|
||||
if node.hasAttribute("style"):
|
||||
node.removeAttribute("style")
|
||||
for child in node.childNodes:
|
||||
self.remove_namespaced_attributes(child)
|
||||
|
||||
def make_symbol(self, codepoint):
|
||||
"""
|
||||
Use the spec to copy all segments into a new symbol.
|
||||
:param codepoint:
|
||||
:return:
|
||||
"""
|
||||
spec = fontspec[f"{codepoint:02x}"]
|
||||
symbol = self.symbols.createElement("symbol")
|
||||
self.svg.appendChild(symbol)
|
||||
symbol.setAttribute("id", f"x{codepoint:02x}")
|
||||
symbol.setAttribute("viewBox", f"0 0 {self.width * len(spec):.3f} {self.height}")
|
||||
for strip_index, strip in enumerate(spec):
|
||||
i = 1
|
||||
g = self.symbols.createElement("g")
|
||||
symbol.appendChild(g)
|
||||
g.setAttribute("id", f"x{codepoint:02x}-{strip_index}")
|
||||
g.setAttribute("transform", f"translate({self.width * strip_index:.3f} 0)")
|
||||
for segment in list(strip):
|
||||
if segment == '#':
|
||||
clone = self.segments[f"seg{i:02d}"].cloneNode(True)
|
||||
clone.removeAttribute("id")
|
||||
g.appendChild(clone)
|
||||
# clone
|
||||
pass
|
||||
elif segment == '.':
|
||||
# no not clone this one
|
||||
pass
|
||||
else:
|
||||
continue
|
||||
i += 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
here = os.path.abspath(os.path.dirname(__file__))
|
||||
design = Design(os.path.join(here, 'design/geascript-proportional.svg'))
|
||||
|
||||
design.make_symbol(0x41)
|
||||
design.make_symbol(0x42)
|
||||
|
||||
with open("static/font.svg", "w") as symbolsfile:
|
||||
design.symbols.writexml(symbolsfile, addindent=' ', newl='\n')
|
BIN
buba/design/geascript-proportional-labelled.png
Normal file
BIN
buba/design/geascript-proportional-labelled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
395
buba/design/geascript-proportional-labelled.svg
Normal file
395
buba/design/geascript-proportional-labelled.svg
Normal file
|
@ -0,0 +1,395 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1.7mm"
|
||||
height="15.7mm"
|
||||
viewBox="0 0 1.7000001 15.699999"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
|
||||
sodipodi:docname="geascript-proportional-labelled.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="geascript-proportional-labelled.png"
|
||||
inkscape:export-xdpi="600"
|
||||
inkscape:export-ydpi="600"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="13.521948"
|
||||
inkscape:cx="6.3970075"
|
||||
inkscape:cy="33.648999"
|
||||
inkscape:window-width="1728"
|
||||
inkscape:window-height="1197"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer2"
|
||||
showguides="true"
|
||||
showgrid="false" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Segments"><rect
|
||||
style="fill:#ffffff;stroke:none;stroke-width:0.02;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
|
||||
id="rect1"
|
||||
width="1.7"
|
||||
height="15.7"
|
||||
x="0"
|
||||
y="0" /><rect
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="seg22"
|
||||
width="1.6688769"
|
||||
height="1.0673051"
|
||||
x="0.019799877"
|
||||
y="12.866271" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"
|
||||
id="seg01" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"
|
||||
id="seg02" />
|
||||
<path
|
||||
style="display:inline;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"
|
||||
id="seg03" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.0315937"
|
||||
y="1.6200429"
|
||||
id="text1-2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-6"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.0315937"
|
||||
y="1.6200429">3</tspan></text>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"
|
||||
id="seg04" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"
|
||||
id="seg05" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"
|
||||
id="seg06" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"
|
||||
id="seg07" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"
|
||||
id="seg08" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"
|
||||
id="seg09" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"
|
||||
id="seg10" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"
|
||||
id="seg11" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"
|
||||
id="seg12" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"
|
||||
id="seg13" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="seg14"
|
||||
width="1.6688768"
|
||||
height="1.0757513"
|
||||
x="0.019799877"
|
||||
y="7.9125233" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"
|
||||
id="seg15" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"
|
||||
id="seg16" />
|
||||
<path
|
||||
id="seg17"
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z" />
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"
|
||||
id="seg18" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"
|
||||
id="seg19" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"
|
||||
id="seg20" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"
|
||||
id="seg21" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"
|
||||
id="seg23"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#7f7f7f;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"
|
||||
id="seg24" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.43875414"
|
||||
y="0.6287452"
|
||||
id="text1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.43875414"
|
||||
y="0.6287452">1</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.6387556"
|
||||
y="0.61608648"
|
||||
id="text1-4"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-8"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.6387556"
|
||||
y="0.61608648">2</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.0240782"
|
||||
y="2.7251306"
|
||||
id="text1-8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-83"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.0240782"
|
||||
y="2.7251306">4</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.46356344"
|
||||
y="3.7911401"
|
||||
id="text1-43"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-65"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.46356344"
|
||||
y="3.7911401">5</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.6309185"
|
||||
y="3.8377872"
|
||||
id="text1-1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-7"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.6309185"
|
||||
y="3.8377872">6</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.49459001"
|
||||
y="4.5073237"
|
||||
id="text1-3"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-5"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.49459001"
|
||||
y="4.5073237">7</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.646539"
|
||||
y="4.4914351"
|
||||
id="text1-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-84"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.646539"
|
||||
y="4.4914351">8</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.0625132"
|
||||
y="5.199728"
|
||||
id="text1-78"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-77"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.0625132"
|
||||
y="5.199728">9</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2260189"
|
||||
y="6.1716928"
|
||||
id="text1-82"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2260189"
|
||||
y="6.1716928">10</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.73115712"
|
||||
y="7.0206776"
|
||||
id="text1-82-7"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.73115712"
|
||||
y="7.0206776">11</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.6964643"
|
||||
y="7.0205169"
|
||||
id="text1-82-76"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.6964643"
|
||||
y="7.0205169">12</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2214602"
|
||||
y="7.8378315"
|
||||
id="text1-82-2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-8"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2214602"
|
||||
y="7.8378315">13</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.198217"
|
||||
y="8.7638998"
|
||||
id="text1-82-9"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-05"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.198217"
|
||||
y="8.7638998">14</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2217817"
|
||||
y="9.5650053"
|
||||
id="text1-82-0"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-09"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2217817"
|
||||
y="9.5650053">15</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.70786035"
|
||||
y="10.219028"
|
||||
id="text1-82-29"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-7"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.70786035"
|
||||
y="10.219028">16</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.7120311"
|
||||
y="10.218867"
|
||||
id="text1-82-04"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-85"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.7120311"
|
||||
y="10.218867">17</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2214602"
|
||||
y="10.849379"
|
||||
id="text1-82-1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-9"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2214602"
|
||||
y="10.849379">18</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2137839"
|
||||
y="11.682047"
|
||||
id="text1-82-6"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2137839"
|
||||
y="11.682047">19</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="0.7781257"
|
||||
y="12.826265"
|
||||
id="text1-82-5"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-5"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="0.7781257"
|
||||
y="12.826265">20</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.6902983"
|
||||
y="12.817893"
|
||||
id="text1-82-5-1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-5-6"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.6902983"
|
||||
y="12.817893">21</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.2932358"
|
||||
y="13.674232"
|
||||
id="text1-82-5-4"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-5-5"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.2932358"
|
||||
y="13.674232">22</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.1221073"
|
||||
y="14.849317"
|
||||
id="text1-82-5-9"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-5-0"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.1221073"
|
||||
y="14.849317">23</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;stroke-width:0.264583"
|
||||
x="1.6202474"
|
||||
y="15.557396"
|
||||
id="text1-82-5-2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1-9-5-68"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:0.705556px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.264583"
|
||||
x="1.6202474"
|
||||
y="15.557396">24</tspan></text></g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
146
buba/design/geascript-proportional.svg
Normal file
146
buba/design/geascript-proportional.svg
Normal file
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1.7mm"
|
||||
height="15.7mm"
|
||||
viewBox="0 0 1.7000001 15.699999"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
|
||||
sodipodi:docname="geascript-proportional.svg"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="11.919105"
|
||||
inkscape:cx="-5.2856318"
|
||||
inkscape:cy="27.602744"
|
||||
inkscape:window-width="1728"
|
||||
inkscape:window-height="1197"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer2"
|
||||
showguides="true" />
|
||||
<defs
|
||||
id="defs1"/>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Segments"><rect
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="seg22"
|
||||
width="1.6688769"
|
||||
height="1.0673051"
|
||||
x="0.019799877"
|
||||
y="12.866271" />
|
||||
<path
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"
|
||||
id="seg01"/>
|
||||
<path
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"
|
||||
id="seg02"/>
|
||||
<path
|
||||
style="display:inline;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"
|
||||
id="seg03"/>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"
|
||||
id="seg04"/>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"
|
||||
id="seg05"/>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"
|
||||
id="seg06"/>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"
|
||||
id="seg07"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"
|
||||
id="seg08"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"
|
||||
id="seg09"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"
|
||||
id="seg10"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"
|
||||
id="seg11"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"
|
||||
id="seg12"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"
|
||||
id="seg13"/>
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="seg14"
|
||||
width="1.6688768"
|
||||
height="1.0757513"
|
||||
x="0.019799877"
|
||||
y="7.9125233"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"
|
||||
id="seg15"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"
|
||||
id="seg16"/>
|
||||
<path
|
||||
id="seg17"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z"/>
|
||||
<path
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"
|
||||
id="seg18"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"
|
||||
id="seg19"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"
|
||||
id="seg20"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"
|
||||
id="seg21"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"
|
||||
id="seg23"
|
||||
sodipodi:nodetypes="cccccc"/>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.0396;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"
|
||||
id="seg24"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.2 KiB |
124
buba/experiments.py
Normal file
124
buba/experiments.py
Normal file
|
@ -0,0 +1,124 @@
|
|||
from time import sleep
|
||||
|
||||
from pyfis.aegmis import MIS1TextDisplay
|
||||
from pyfis.utils import debug_hex
|
||||
|
||||
|
||||
def receive(display):
|
||||
if display.use_rts:
|
||||
display.port.setRTS(1)
|
||||
display.port.write([0x04, 0x81, 0x05])
|
||||
if display.use_rts:
|
||||
display.port.setRTS(0)
|
||||
return display.read_response(True)
|
||||
|
||||
def decode(display):
|
||||
r = receive(display)
|
||||
if r[0] != 0x02:
|
||||
print("Invalid byte {r[0]:02x}, expected EOT")
|
||||
d = {
|
||||
'code': r[1],
|
||||
'subcode': r[2],
|
||||
}
|
||||
m = []
|
||||
esc = False
|
||||
for i in range(3, len(r)-1):
|
||||
if esc:
|
||||
m.append(r[i])
|
||||
erc = False
|
||||
elif r[i] == 0x10:
|
||||
esc = True
|
||||
else:
|
||||
if r[i] == 0x03:
|
||||
# compute checksum
|
||||
next
|
||||
m.append(r[i])
|
||||
m = m[0:-1]
|
||||
print(f"m({len(m)}): {debug_hex(m)}")
|
||||
return m
|
||||
|
||||
|
||||
def reset_and_get_config(display):
|
||||
display.send_command(0x31, 0x00, [])
|
||||
r = decode(display)
|
||||
return {
|
||||
'type': r[0],
|
||||
'control-units': r[1],
|
||||
'digits-a': r[2] * 256 + r[3],
|
||||
'lines-a': r[4],
|
||||
'digits-b': r[5] * 256 + r[6],
|
||||
'lines-b': r[7],
|
||||
'timeout': r[8] * 128.0 + r[9] * 0.5,
|
||||
}
|
||||
|
||||
def get_config(display):
|
||||
display.send_command(0x38, 0x00, [])
|
||||
r = decode(display)
|
||||
return r
|
||||
|
||||
def text_raw(display, page, row, text):
|
||||
data = [display.ALIGN_LEFT, page, row, 0] + text
|
||||
return display.send_command(0x11, 0x00, data, expect_response=False)
|
||||
|
||||
|
||||
def charset():
|
||||
lines = []
|
||||
for i in range(0, 256, 16):
|
||||
label = f"{i:03d}: "
|
||||
b = list(label.encode("CP437"))
|
||||
for j in range(i, i+16):
|
||||
if j == 0:
|
||||
b.append(0x20)
|
||||
else:
|
||||
b.append(j)
|
||||
lines.append(b)
|
||||
|
||||
display.set_page(1)
|
||||
|
||||
while True:
|
||||
for p in range(1,16):
|
||||
for l in range(0,4):
|
||||
text_raw(display, 1, l, lines[(p+l-1) % len(lines)])
|
||||
sleep(5)
|
||||
|
||||
print("Opening serial port")
|
||||
display = MIS1TextDisplay("/dev/ttyUSB0")
|
||||
|
||||
print("Sending text")
|
||||
display.debug = True
|
||||
#r = display.send_command(0x31, 0x00, []) # reset
|
||||
#r = display.send_command(0x32, 0x01, []) # test
|
||||
#r = display.send_command(0x38, 0x01, []) # read config
|
||||
#r = display.read_response()
|
||||
#print(f"Response: {r}")
|
||||
#r = display.send_command(0x52, 0x01, []) # read config
|
||||
#display.send_raw_telegram([0xff])
|
||||
#display.send_raw_data([0x04, 0x81, 0x02, 0x03, 0x00])
|
||||
#print(f"response: {display.read_response()}")
|
||||
#r = reset_and_get_config(display)
|
||||
r = get_config(display)
|
||||
print(f"reply {len(r)}: {r}")
|
||||
|
||||
#display.simple_text(page=1, row=0, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=1, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=2, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
#display.simple_text(page=1, row=3, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
|
||||
#display.simple_text(page=0, row=3, col=0, text="MEOW MEOW MEOW MEOW MEOW MEOW", align=display.ALIGN_CENTER)
|
||||
|
||||
#print("page 1")
|
||||
#display.set_page(1)
|
||||
#sleep(10)
|
||||
|
||||
#for l in range(0,4):
|
||||
# display.simple_text(page=0, row=l, col=0, text="")
|
||||
#print("page 0")
|
||||
#display.set_page(0)
|
||||
#sleep(10)
|
||||
|
||||
#print("page 1")
|
||||
#display.set_page(1)
|
||||
#sleep(10)
|
||||
|
||||
charset()
|
||||
print("Thats all, folks!")
|
127
buba/static/font.svg
Normal file
127
buba/static/font.svg
Normal file
|
@ -0,0 +1,127 @@
|
|||
<?xml version="1.0" ?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="height: 0; width: 0; position: absolute;">
|
||||
<symbol id="x41" viewBox="0 0 5.100 15.699999">
|
||||
<g id="x41-0" transform="translate(0.000 0)">
|
||||
<path d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"/>
|
||||
<path d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"/>
|
||||
<path d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"/>
|
||||
<path d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
<rect width="1.6688768" height="1.0757513" x="0.019799877" y="7.9125233"/>
|
||||
<path d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"/>
|
||||
<path d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"/>
|
||||
<path d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z"/>
|
||||
<path d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"/>
|
||||
<path d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"/>
|
||||
<path d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"/>
|
||||
<path d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"/>
|
||||
<rect width="1.6688769" height="1.0673051" x="0.019799877" y="12.866271"/>
|
||||
<path d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"/>
|
||||
<path d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"/>
|
||||
</g>
|
||||
<g id="x41-1" transform="translate(1.700 0)">
|
||||
<path d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"/>
|
||||
<path d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
</g>
|
||||
<g id="x41-2" transform="translate(3.400 0)">
|
||||
<path d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"/>
|
||||
<path d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"/>
|
||||
<path d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"/>
|
||||
<path d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
<rect width="1.6688768" height="1.0757513" x="0.019799877" y="7.9125233"/>
|
||||
<path d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"/>
|
||||
<path d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"/>
|
||||
<path d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z"/>
|
||||
<path d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"/>
|
||||
<path d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"/>
|
||||
<path d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"/>
|
||||
<path d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"/>
|
||||
<rect width="1.6688769" height="1.0673051" x="0.019799877" y="12.866271"/>
|
||||
<path d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"/>
|
||||
<path d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"/>
|
||||
</g>
|
||||
</symbol>
|
||||
<symbol id="x42" viewBox="0 0 5.100 15.699999">
|
||||
<g id="x42-0" transform="translate(0.000 0)">
|
||||
<path d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"/>
|
||||
<path d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"/>
|
||||
<path d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"/>
|
||||
<path d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"/>
|
||||
<path d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
<rect width="1.6688768" height="1.0757513" x="0.019799877" y="7.9125233"/>
|
||||
<path d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"/>
|
||||
<path d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"/>
|
||||
<path d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z"/>
|
||||
<path d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"/>
|
||||
<path d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"/>
|
||||
<path d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"/>
|
||||
<path d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"/>
|
||||
<rect width="1.6688769" height="1.0673051" x="0.019799877" y="12.866271"/>
|
||||
<path d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"/>
|
||||
<path d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"/>
|
||||
</g>
|
||||
<g id="x42-1" transform="translate(1.700 0)">
|
||||
<path d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"/>
|
||||
<path d="M 1.6757133,1.4711956 V 0.0197877 H 0.85412223 Z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,5.5798543 V 7.9125236 L 0.86881113,6.7461891 Z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
<rect width="1.6688769" height="1.0673051" x="0.019799877" y="12.866271"/>
|
||||
<path d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"/>
|
||||
<path d="m 1.688677,14.473684 v 1.188457 H 0.85423853 Z"/>
|
||||
</g>
|
||||
<g id="x42-2" transform="translate(3.400 0)">
|
||||
<path d="M 0.01979999,1.4711941 V 0.0198 h 0.82232429 z"/>
|
||||
<path d="m 1.6820624,1.9503833 -1.66855387,0.00131 0.0063,-0.4804985 0.8223243,-1.451396 0.83358937,1.451398 z"/>
|
||||
<path d="M 0.01350853,1.9516941 1.6820626,1.9503873 1.6886758,2.436732 0.87500133,3.9227533 0.01979853,2.436732 Z"/>
|
||||
<path d="m 0.01979993,3.9227491 v -1.486021 l 0.8552028,1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 1.688677,2.4367281 v 1.486021 z"/>
|
||||
<path d="M 0.87500273,3.9227491 H 0.01979993 V 5.0929905 Z"/>
|
||||
<path d="M 1.688677,5.0867989 V 3.9227491 H 0.87500273 Z"/>
|
||||
<path d="m 1.6886766,5.5798543 4e-7,-0.4930554 -0.81367427,-1.1640498 -0.8552028,1.1702414 -2e-7,0.4868638 z"/>
|
||||
<path d="M 1.6886766,5.5798547 0.86881113,6.7461891 0.01979973,5.5798547 Z"/>
|
||||
<path d="m 0.01979973,5.5798543 0.8490114,1.1663348 -0.8490114,1.1663345 z"/>
|
||||
<path d="M 1.6886766,7.9125236 0.86881113,6.7461891 0.01979973,7.9125236 Z"/>
|
||||
<rect width="1.6688768" height="1.0757513" x="0.019799877" y="7.9125233"/>
|
||||
<path d="M 0.01979973,8.9882748 1.6883538,8.9876458 0.85617373,9.9475398 Z"/>
|
||||
<path d="m 0.01979973,8.9882748 0.836374,0.959268 -0.8363738,0.9866772 z"/>
|
||||
<path d="M 1.688354,8.9876498 0.85592763,9.9472508 1.688354,10.935528 Z"/>
|
||||
<path d="M 0.85617373,9.9475428 1.6883538,10.935527 0.01979993,10.934227 Z"/>
|
||||
<path d="m 1.6883538,10.935528 -1.66855387,-0.0013 0.00629,0.480497 0.8223243,1.451396 0.83358937,-1.451397 z"/>
|
||||
<path d="m 0.02609143,11.414717 v 1.451396 h 0.8223243 z"/>
|
||||
<path d="m 1.6820047,11.414717 v 1.451408 H 0.86041373 Z"/>
|
||||
<rect width="1.6688769" height="1.0673051" x="0.019799877" y="12.866271"/>
|
||||
<path d="M 1.688677,14.473684 V 13.933575 H 0.01979993 v 1.728568 h 0.8344386 z"/>
|
||||
</g>
|
||||
</symbol>
|
||||
</svg>
|
After Width: | Height: | Size: 9.4 KiB |
21
buba/static/fonttest.html
Normal file
21
buba/static/fonttest.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Font Test</title>
|
||||
<link rel=stylesheet type="text/css" href="main.css">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Font Test</h1>
|
||||
<p>
|
||||
<svg class="char">
|
||||
<use href="font.svg#x41"/>
|
||||
</svg>
|
||||
<svg class="char">
|
||||
<use href="font.svg#x42"/>
|
||||
</svg>
|
||||
<svg class="char">
|
||||
<use href="font.svg#x41"/>
|
||||
</svg>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
7
buba/static/main.css
Normal file
7
buba/static/main.css
Normal file
|
@ -0,0 +1,7 @@
|
|||
svg.char {
|
||||
width: 2em;
|
||||
/*height: 10em;*/
|
||||
stroke: #ccc;
|
||||
stroke-width: .1;
|
||||
fill: black;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue