Spaces:
Runtime error
Runtime error
| import html | |
| from htbuilder import H, HtmlElement, styles | |
| from htbuilder.units import unit | |
| # Only works in 3.7+: from htbuilder import div, span | |
| div = H.div | |
| span = H.span | |
| # Only works in 3.7+: from htbuilder.units import px, rem, em | |
| px = unit.px | |
| rem = unit.rem | |
| em = unit.em | |
| # Colors from the Streamlit palette. | |
| # These are red-70, orange-70, ..., violet-70, gray-70. | |
| PALETTE = [ | |
| "#ff4b4b", | |
| "#ffa421", | |
| "#ffe312", | |
| "#21c354", | |
| "#00d4b1", | |
| "#00c0f2", | |
| "#1c83e1", | |
| "#803df5", | |
| "#808495", | |
| ] | |
| OPACITIES = [ | |
| "33", "66", | |
| ] | |
| def annotation(body, label="", background=None, color=None, **style): | |
| """ | |
| from https://github.com/tvst/st-annotated-text/blob/master/annotated_text/util.py | |
| """ | |
| color_style = {} | |
| if color: | |
| color_style['color'] = color | |
| if not background: | |
| label_sum = sum(ord(c) for c in label) | |
| background_color = PALETTE[label_sum % len(PALETTE)] | |
| background_opacity = OPACITIES[label_sum % len(OPACITIES)] | |
| background = background_color + background_opacity | |
| return ( | |
| span( | |
| style=styles( | |
| background=background, | |
| border_radius=rem(0.33), | |
| padding=(rem(0.125), rem(0.5)), | |
| overflow="hidden", | |
| **color_style, | |
| **style, | |
| ))( | |
| html.escape(body), | |
| span( | |
| style=styles( | |
| padding_left=rem(0.5), | |
| text_transform="uppercase", | |
| ))( | |
| span( | |
| style=styles( | |
| font_size=em(0.67), | |
| opacity=0.5, | |
| ))( | |
| html.escape(label), | |
| ), | |
| ), | |
| ) | |
| ) | |
| def get_annotated_html(*args): | |
| out = div() | |
| for arg in args: | |
| if isinstance(arg, str): | |
| out(html.escape(arg)) | |
| elif isinstance(arg, HtmlElement): | |
| out(arg) | |
| elif isinstance(arg, tuple): | |
| out(annotation(*arg)) | |
| elif isinstance(arg,list): | |
| for el in arg: | |
| if isinstance(el, str): | |
| out(html.escape(el)) | |
| elif isinstance(el, HtmlElement): | |
| out(el) | |
| elif isinstance(el, tuple): | |
| out(annotation(*el)) | |
| else: | |
| raise Exception("Oh noes!") | |
| return str(out) | |