[AC] [DA] and [ACDC] added
This commit is contained in:
+68
@@ -101,6 +101,57 @@ _FRAC_AXIS = 0.32
|
||||
_FRAC_GAP = 0.14
|
||||
_FRAC_SIDE = 0.12
|
||||
|
||||
_SYM_WIDTH = 0.75
|
||||
_SYM_HEIGHT = 0.50
|
||||
_SYM_LW = 0.08
|
||||
_SYM_RISE = 0.25
|
||||
|
||||
|
||||
def _symbol_svg(name: str, x: float, y: float, fs: float, fill: str) -> str:
|
||||
w = fs * _SYM_WIDTH
|
||||
h = fs * _SYM_HEIGHT
|
||||
lw = fs * _SYM_LW
|
||||
yc = y - _SYM_RISE * fs
|
||||
stroke = f"fill:none;stroke:{fill};stroke-width:{lw:.5f};stroke-linecap:round"
|
||||
|
||||
if name == "ac":
|
||||
d = (
|
||||
f"M {x:.5f},{yc:.5f}"
|
||||
f" C {x + w / 3:.5f},{yc - h / 2:.5f}"
|
||||
f" {x + 2 * w / 3:.5f},{yc + h / 2:.5f}"
|
||||
f" {x + w:.5f},{yc:.5f}"
|
||||
)
|
||||
return f'<path style="{stroke}" d="{d}"/>'
|
||||
|
||||
elif name == "dc":
|
||||
dash = w / 5
|
||||
gap = w / 5
|
||||
y1 = yc - h / 4
|
||||
y2 = yc + h / 4
|
||||
p1 = f'<line x1="{x:.5f}" y1="{y1:.5f}" x2="{x + w:.5f}" y2="{y1:.5f}" style="{stroke}" />'
|
||||
p2 = f'<line x1="{x:.5f}" y1="{y2:.5f}" x2="{x + dash:.5f}" y2="{y2:.5f}" style="{stroke}" />'
|
||||
p3 = f'<line x1="{x + dash + gap:.5f}" y1="{y2:.5f}" x2="{x + 2 * dash + gap:.5f}" y2="{y2:.5f}" style="{stroke}" />'
|
||||
p4 = f'<line x1="{x + 2 * dash + 2 * gap:.5f}" y1="{y2:.5f}" x2="{x + w:.5f}" y2="{y2:.5f}" style="{stroke}" />'
|
||||
return p1 + "\n " + p2 + "\n " + p3 + "\n " + p4
|
||||
|
||||
else: # acdc
|
||||
y_wave = yc - h / 4
|
||||
y_dash = yc + h / 4
|
||||
dash = w / 5
|
||||
gap = w / 5
|
||||
d = (
|
||||
f"M {x:.5f},{y_wave:.5f}"
|
||||
f" C {x + w / 3:.5f},{y_wave - h / 2:.5f}"
|
||||
f" {x + 2 * w / 3:.5f},{y_wave + h / 2:.5f}"
|
||||
f" {x + w:.5f},{y_wave:.5f}"
|
||||
)
|
||||
p1 = f'<path style="{stroke}" d="{d}"/>'
|
||||
p2 = f'<line x1="{x:.5f}" y1="{y_dash:.5f}" x2="{x + dash:.5f}" y2="{y_dash:.5f}" style="{stroke}" />'
|
||||
p3 = f'<line x1="{x + dash + gap:.5f}" y1="{y_dash:.5f}" x2="{x + 2 * dash + gap:.5f}" y2="{y_dash:.5f}" style="{stroke}" />'
|
||||
p4 = f'<line x1="{x + 2 * dash + 2 * gap:.5f}" y1="{y_dash:.5f}" x2="{x + w:.5f}" y2="{y_dash:.5f}" style="{stroke}" />'
|
||||
return p1 + "\n " + p2 + "\n " + p3 + "\n " + p4
|
||||
|
||||
|
||||
_UNIT_BOX_X0, _UNIT_BOX_X1 = UNIT_X - 15.0, UNIT_X + 15.0
|
||||
_UNIT_BOX_Y0, _UNIT_BOX_Y1 = UNIT_Y - 6.0, UNIT_Y + 6.0
|
||||
_UNIT_MAX_FS = 9.46938021
|
||||
@@ -182,6 +233,16 @@ def _parse_markup(s: str):
|
||||
inner, j = _extract_braced(s, i)
|
||||
nodes.append(_parse_braced(inner))
|
||||
i = j
|
||||
elif c == "[":
|
||||
end = s.find("]", i + 1)
|
||||
if end > i:
|
||||
name = s[i + 1 : end].lower()
|
||||
if name in ("ac", "dc", "acdc"):
|
||||
nodes.append(("sym", name))
|
||||
i = end + 1
|
||||
continue
|
||||
nodes.append(("lit", c))
|
||||
i += 1
|
||||
else:
|
||||
nodes.append(("lit", c))
|
||||
i += 1
|
||||
@@ -205,6 +266,8 @@ def _measure(nodes, fs: float, fd: _FontData) -> float:
|
||||
max(_measure(n[1], fs2, fd), _measure(n[2], fs2, fd))
|
||||
+ 2 * _FRAC_SIDE * fs2
|
||||
)
|
||||
elif n[0] == "sym":
|
||||
w += fs * _SYM_WIDTH
|
||||
return w
|
||||
|
||||
|
||||
@@ -238,6 +301,8 @@ def _vbounds(nodes, fs: float, fd: _FontData):
|
||||
dt, db = _vbounds(n[2], fs2, fd)
|
||||
a = min(nt + num_base, axis)
|
||||
b = max(db + den_base, axis)
|
||||
elif n[0] == "sym":
|
||||
a, b = -_SYM_HEIGHT / 2 * fs, _SYM_HEIGHT / 2 * fs
|
||||
else:
|
||||
continue
|
||||
lo, hi = min(lo, a), max(hi, b)
|
||||
@@ -279,6 +344,9 @@ def _draw_nodes(nodes, x: float, y: float, fs: float, fill: str, fd: _FontData):
|
||||
f' style="stroke:{fill};stroke-width:{fs * 0.055:.5f};stroke-linecap:butt" />'
|
||||
)
|
||||
cx += bar_w
|
||||
elif n[0] == "sym":
|
||||
parts.append(_symbol_svg(n[1], cx, y, fs, fill))
|
||||
cx += fs * _SYM_WIDTH
|
||||
return parts, cx - x
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user