From ea43333d6af8f30c63ff49baaa9911011c3b695b Mon Sep 17 00:00:00 2001 From: tanyaionova Date: Thu, 21 Nov 2019 20:57:37 +0300 Subject: Extract renderer --- render.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 render.py (limited to 'render.py') diff --git a/render.py b/render.py new file mode 100644 index 0000000..6cd3c7d --- /dev/null +++ b/render.py @@ -0,0 +1,45 @@ +from libsolve import Poly, PolyRenderBase + + +class UnicodeRender(PolyRenderBase): + def __init__(self): + # may not work. see + # https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts + # to test with your font + self.sup = '⁰¹²³⁴⁵⁶⁷⁸⁹' # must be 0123456789 + + def render(self, poly: Poly) -> str: + rev = list(reversed(poly.vec)) + if all(r == 0 for r in rev): + return '0' + d = poly.deg() + res = [] + for i in range(len(rev)): + if rev[i] == 0: + continue + if i == 0: + if rev[i] < 0: + res.append('-') + else: + if rev[i] < 0: + res.append(' - ') + else: + res.append(' + ') + + if abs(rev[i]) != 1 or i == d: + res.append(str(abs(rev[i]))) + if i != d: + res.append(poly.letter) + if d - i != 1: + res.append(self._int2sup(d - i)) + return ''.join(res) + + def hint(self, poly: Poly) -> int: + return len(self.render(poly)) + + def _int2sup(self, n): + res = [] + while n > 0: + res.append(self.sup[n % 10]) + n //= 10 + return ''.join(reversed(res)) -- cgit v1.2.1-18-gbd029