From e50e2fca6d11379d076d9a949d963e11bbb72eae Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Tue, 22 Dec 2020 22:59:35 +0530 Subject: [PATCH 01/16] Use manimpango --- manim/mobject/svg/text_mobject.py | 121 +++++------------------------- 1 file changed, 18 insertions(+), 103 deletions(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index bf1b1d2ff6..27d3f8bdce 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -54,17 +54,17 @@ def construct(self): import cairo import cairocffi +import manimpango import pangocairocffi import pangocffi +from manimpango import PangoUtils, TextSetting from ... import config, logger from ...constants import * from ...mobject.geometry import Dot from ...mobject.svg.svg_mobject import SVGMobject from ...mobject.types.vectorized_mobject import VGroup -from ...utils.color import WHITE -from ...utils.color import Colors - +from ...utils.color import WHITE, Colors TEXT_MOB_SCALE_FACTOR = 0.05 @@ -103,68 +103,6 @@ def remove_invisible_chars(mobject): return mobject_without_dots -class PangoUtils: - @staticmethod - def str2style(string: str) -> pangocffi.Style: - """Internally used function. Converts text to Pango Understandable Styles.""" - if string == NORMAL: - return pangocffi.Style.NORMAL - elif string == ITALIC: - return pangocffi.Style.ITALIC - elif string == OBLIQUE: - return pangocffi.Style.OBLIQUE - else: - raise AttributeError("There is no Style Called %s" % string) - - @staticmethod - def str2weight(string: str) -> pangocffi.Weight: - """Internally used function. Convert text to Pango Understandable Weight""" - if string == NORMAL: - return pangocffi.Weight.NORMAL - elif string == BOLD: - return pangocffi.Weight.BOLD - elif string == THIN: - return pangocffi.Weight.THIN - elif string == ULTRALIGHT: - return pangocffi.Weight.ULTRALIGHT - elif string == LIGHT: - return pangocffi.Weight.LIGHT - elif string == SEMILIGHT: - return pangocffi.Weight.SEMILIGHT - elif string == BOOK: - return pangocffi.Weight.BOOK - elif string == MEDIUM: - return pangocffi.Weight.MEDIUM - elif string == SEMIBOLD: - return pangocffi.Weight.SEMIBOLD - elif string == ULTRABOLD: - return pangocffi.Weight.ULTRABOLD - elif string == HEAVY: - return pangocffi.Weight.HEAVY - elif string == ULTRAHEAVY: - return pangocffi.Weight.ULTRAHEAVY - else: - raise AttributeError("There is no Font Weight Called %s" % string) - - @staticmethod - def remove_last_M(file_name: str) -> None: - with open(file_name, "r") as fpr: - content = fpr.read() - content = re.sub(r'Z M [^A-Za-z]*? "\/>', 'Z "/>', content) - with open(file_name, "w") as fpw: - fpw.write(content) - - -class TextSetting(object): - def __init__(self, start, end, font, slant, weight, line_num=-1): - self.start = start - self.end = end - self.font = font - self.slant = slant - self.weight = weight - self.line_num = line_num - - class CairoText(SVGMobject): """Display (non-LaTeX) text. @@ -1012,45 +950,22 @@ def text2svg(self): file_name = os.path.join(dir_name, hash_name) + ".svg" if os.path.exists(file_name): return file_name - surface = cairocffi.SVGSurface(file_name, 600, 400) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) settings = self.text2settings() - offset_x = 0 - last_line_num = 0 - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(600)) - for setting in settings: - family = setting.font - style = PangoUtils.str2style(setting.slant) - weight = PangoUtils.str2weight(setting.weight) - text = self.text[setting.start : setting.end].replace("\n", " ") - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size)) - if family: - fontdesc.set_family(family) - fontdesc.set_style(style) - fontdesc.set_weight(weight) - layout.set_font_description(fontdesc) - if setting.line_num != last_line_num: - offset_x = 0 - last_line_num = setting.line_num - context.move_to( - START_X + offset_x, START_Y + line_spacing * setting.line_num - ) - pangocairocffi.update_layout(context, layout) - if disable_liga: - text = escape(text) - layout.set_markup( - f"{text}" - ) - else: - layout.set_text(text) - logger.debug(f"Setting Text {text}") - pangocairocffi.show_layout(context, layout) - offset_x += pangocffi.units_to_double(layout.get_size()[0]) - surface.finish() - return file_name + width = 600 + height = 400 + + return manimpango.text2svg( + settings, + size, + line_spacing, + disable_liga, + file_name, + START_X, + START_Y, + width, + height, + self.text, + ) class MarkupText(SVGMobject): From 5a676987789a80c5d4017c5cb43b11a7e53d7ac4 Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 16:52:10 +0530 Subject: [PATCH 02/16] Remove MarkUp Text not yet supported --- manim/mobject/svg/text_mobject.py | 853 +++++++++++++++--------------- pyproject.toml | 1 + 2 files changed, 426 insertions(+), 428 deletions(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 27d3f8bdce..99a4954914 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -53,10 +53,7 @@ def construct(self): from xml.sax.saxutils import escape import cairo -import cairocffi import manimpango -import pangocairocffi -import pangocffi from manimpango import PangoUtils, TextSetting from ... import config, logger @@ -968,428 +965,428 @@ def text2svg(self): ) -class MarkupText(SVGMobject): - r"""Display (non-LaTeX) text rendered using `Pango `_. - - Text objects behave like a :class:`.VGroup`-like iterable of all characters - in the given text. In particular, slicing is possible. Text can be formatted - using different tags: - - - ``bold``, ``italic`` and ``bold+italic`` - - ``
    underline
`` and ``strike through`` - - ``typewriter font`` - - ``bigger font`` and ``smaller font`` - - ``superscript`` and ``subscript`` - - ``double underline`` - - ``error underline`` - - ``temporary change of font`` - - ``temporary change of color``; colors can be specified as Manim constants like ``RED`` or ``YELLOW`` or as hex triples like ``#aabbaa`` - - ``temporary gradient``; colors specified as above - - If your text contains ligatures, the :class:`MarkupText` class may incorrectly determine - the first and last letter to be colored. This is due to the fact that e.g. ``fl`` - are two characters, but might be set as one single glyph, a ligature. If your language does - not depend on ligatures, consider setting ``disable_ligatures=True``. If you cannot - or do not want to do without ligatures, the ``gradient`` and ``color`` tag support - an optional attribute ``offset`` which can be used to compensate for that error. - Usage is as follows: - - - ``red text`` to *start* coloring one letter earlier - - ``red text`` to *end* coloring one letter earlier - - ``red text`` to *start* coloring two letters earlier and *end* one letter earlier - - Specifying a second offset may be necessary if the text to be colored does - itself contain ligatures. The same can happen when using HTML entities for - special chars. - - Escaping of special characters: ``>`` *should* be written as ``>`` whereas ``<`` and - ``&`` *must* be written as ``<`` and ``&``. - - You can find more information about Pango markup formatting at the - corresponding documentation page: - `Pango Markup `_. - Please be aware that not all features are supported by this class and that - the ```` and ```` tags mentioned above are not supported by Pango. - - Parameters - ---------- - text : :class:`str` - The text that need to created as mobject. - fill_opacity : :class:`int` - The fill opacity with 1 meaning opaque and 0 meaning transparent. - stroke_width : :class:`int` - Stroke width. - color : :class:`str` - Global color setting for the entire text. Local overrides are possible. - size : :class:`int` - Font size. - line_spacing : :class:`int` - Line spacing. - font : :class:`str` - Global font setting for the entire text. Local overrides are possible. - slant : :class:`str` - Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible. - weight : :class:`str` - Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. - gradient: :class:`tuple` - Global gradient setting. Local overrides are possible. - - - Returns - ------- - :class:`MarkupText` - The text displayed in form of a :class:`.VGroup`-like mobject. - - Examples - --------- - - .. manim:: BasicMarkupExample - :save_last_frame: - - class BasicMarkupExample(Scene): - def construct(self): - text1 = MarkupText("foo bar foobar") - text2 = MarkupText("foo bar big small") - text3 = MarkupText("H2O and H3O+") - text4 = MarkupText("type help for help") - text5 = MarkupText( - 'foo bar' - ) - group = VGroup(text1, text2, text3, text4, text5).arrange(DOWN) - self.add(group) - - .. manim:: ColorExample - :save_last_frame: - - class ColorExample(Scene): - def construct(self): - text1 = MarkupText( - 'all in red except this', color=RED - ) - text2 = MarkupText("nice gradient", gradient=(BLUE, GREEN)) - text3 = MarkupText( - 'nice intermediate gradient', - gradient=(BLUE, GREEN), - ) - text4 = MarkupText( - 'fl ligature causing trouble here' - ) - text5 = MarkupText( - 'fl ligature defeated with offset' - ) - text6 = MarkupText( - 'fl ligature floating inside' - ) - text7 = MarkupText( - 'fl ligature floating inside' - ) - group = VGroup(text1, text2, text3, text4, text5, text6, text7).arrange(DOWN) - self.add(group) - - .. manim:: FontExample - :save_last_frame: - - class FontExample(Scene): - def construct(self): - text1 = MarkupText( - 'all in sans except this', font="sans" - ) - text2 = MarkupText( - 'mixing fonts is ugly' - ) - text3 = MarkupText("special char > or >") - text4 = MarkupText("special char < and &") - group = VGroup(text1, text2, text3, text4).arrange(DOWN) - self.add(group) - - .. manim:: NewlineExample - :save_last_frame: - - class NewlineExample(Scene): - def construct(self): - text = MarkupText('foooooo\nbaaaar') - self.add(text) - - .. manim:: NoLigaturesExample - :save_last_frame: - - class NoLigaturesExample(Scene): - def construct(self): - text1 = MarkupText('floating') - text2 = MarkupText('floating', disable_ligatures=True) - group = VGroup(text1, text2).arrange(DOWN) - self.add(group) - - - As :class:`MarkupText` uses Pango to render text, rendering non-English - characters is easily possible: - - .. manim:: MultiLanguage - :save_last_frame: - - class MultiLanguage(Scene): - def construct(self): - morning = MarkupText("வணக்கம்", font="sans-serif") - chin = MarkupText( - '見 角 言 谷 辛 辰 辵 邑 酉 釆 里!' - ) # works as in ``Text``. - mess = MarkupText("Multi-Language", style=BOLD) - russ = MarkupText("Здравствуйте मस नम म ", font="sans-serif") - hin = MarkupText("नमस्ते", font="sans-serif") - japanese = MarkupText("臂猿「黛比」帶著孩子", font="sans-serif") - group = VGroup(morning, chin, mess, russ, hin, japanese).arrange(DOWN) - self.add(group) - - - Tests - ----- - - Check that the creation of :class:`~.MarkupText` works:: - - >>> MarkupText('The horse does not eat cucumber salad.') - MarkupText('The horse does not eat cucumber salad.') - - """ - - def __init__( - self, - text: str, - fill_opacity: int = 1, - stroke_width: int = 0, - color: str = WHITE, - size: int = 1, - line_spacing: int = -1, - font: str = "", - slant: str = NORMAL, - weight: str = NORMAL, - gradient: tuple = None, - tab_width: int = 4, - height: int = None, - width: int = None, - should_center: bool = True, - unpack_groups: bool = True, - disable_ligatures: bool = False, - **kwargs, - ): - self.text = text - self.size = size - self.line_spacing = line_spacing - self.font = font - self.slant = slant - self.weight = weight - self.gradient = gradient - self.tab_width = tab_width - - self.original_text = text - self.disable_ligatures = disable_ligatures - text_without_tabs = text - if "\t" in text: - text_without_tabs = text.replace("\t", " " * self.tab_width) - - colormap = self.extract_color_tags() - gradientmap = self.extract_gradient_tags() - - if self.line_spacing == -1: - self.line_spacing = self.size + self.size * 0.3 - else: - self.line_spacing = self.size + self.size * self.line_spacing - - file_name = self.text2svg() - PangoUtils.remove_last_M(file_name) - SVGMobject.__init__( - self, - file_name, - color=color, - fill_opacity=fill_opacity, - stroke_width=stroke_width, - height=height, - width=width, - should_center=should_center, - unpack_groups=unpack_groups, - **kwargs, - ) - self.chars = VGroup(*self.submobjects) - self.text = text_without_tabs.replace(" ", "").replace("\n", "") - - nppc = self.n_points_per_cubic_curve - for each in self: - if len(each.points) == 0: - continue - points = each.points - last = points[0] - each.clear_points() - for index, point in enumerate(points): - each.append_points([point]) - if ( - index != len(points) - 1 - and (index + 1) % nppc == 0 - and any(point != points[index + 1]) - ): - each.add_line_to(last) - last = points[index + 1] - each.add_line_to(last) - - if self.gradient: - self.set_color_by_gradient(*self.gradient) - for col in colormap: - self.chars[ - col["start"] - - col["start_offset"] : col["end"] - - col["start_offset"] - - col["end_offset"] - ].set_color(self._parse_color(col["color"])) - for grad in gradientmap: - self.chars[ - grad["start"] - - grad["start_offset"] : grad["end"] - - grad["start_offset"] - - grad["end_offset"] - ].set_color_by_gradient( - *(self._parse_color(grad["from"]), self._parse_color(grad["to"])) - ) - # anti-aliasing - if self.height is None and self.width is None: - self.scale(TEXT_MOB_SCALE_FACTOR) - - def text2hash(self): - """Generates ``sha256`` hash for file name.""" - settings = ( - "MARKUPPANGO" + self.font + self.slant + self.weight - ) # to differentiate from classical Pango Text - settings += str(self.line_spacing) + str(self.size) - settings += str(self.disable_ligatures) - id_str = self.text + settings - hasher = hashlib.sha256() - hasher.update(id_str.encode()) - return hasher.hexdigest()[:16] - - def text2svg(self): - """Convert the text to SVG using Pango.""" - size = self.size * 10 - line_spacing = self.line_spacing * 10 - dir_name = config.get_dir("text_dir") - disable_liga = self.disable_ligatures - if not os.path.exists(dir_name): - os.makedirs(dir_name) - hash_name = self.text2hash() - file_name = os.path.join(dir_name, hash_name) + ".svg" - if os.path.exists(file_name): - return file_name - surface = cairocffi.SVGSurface(file_name, 600, 400) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(600)) - - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size)) - if self.font: - fontdesc.set_family(self.font) - fontdesc.set_style(PangoUtils.str2style(self.slant)) - fontdesc.set_weight(PangoUtils.str2weight(self.weight)) - layout.set_font_description(fontdesc) - - context.move_to(START_X, START_Y) - pangocairocffi.update_layout(context, layout) - if disable_liga: - layout.set_markup( - f"{self.text}" - ) - else: - layout.set_markup(self.text) - logger.debug(f"Setting Text {self.text}") - pangocairocffi.show_layout(context, layout) - surface.finish() - return file_name - - def _count_real_chars(self, s): - """Counts characters that will be displayed. - - This is needed for partial coloring or gradients, because space - counts to the text's `len`, but has no corresponding character.""" - count = 0 - level = 0 - # temporarily replace HTML entities by single char - s = re.sub("&[^;]+;", "x", s) - for c in s: - if c == "<": - level += 1 - if c == ">" and level > 0: - level -= 1 - elif c != " " and c != "\t" and level == 0: - count += 1 - return count - - def extract_gradient_tags(self): - """Used to determine which parts (if any) of the string should be formatted - with a gradient. - - Removes the ```` tag, as it is not part of Pango's markup and would cause an error. - """ - tags = re.finditer( - '(.+?)', - self.original_text, - re.S, - ) - gradientmap = [] - for tag in tags: - start = self._count_real_chars(self.original_text[: tag.start(0)]) - end = start + self._count_real_chars(tag.group(5)) - offsets = tag.group(4).split(",") if tag.group(4) else [0] - start_offset = int(offsets[0]) if offsets[0] else 0 - end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 - - gradientmap.append( - { - "start": start, - "end": end, - "from": tag.group(1), - "to": tag.group(2), - "start_offset": start_offset, - "end_offset": end_offset, - } - ) - self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) - return gradientmap - - def _parse_color(self, col): - """Parse color given in ```` or ```` tags.""" - if re.match("#[0-9a-f]{6}", col): - return col - else: - return Colors[col.lower()].value - - def extract_color_tags(self): - """Used to determine which parts (if any) of the string should be formatted - with a custom color. - - Removes the ```` tag, as it is not part of Pango's markup and would cause an error. - """ - tags = re.finditer( - '(.+?)', - self.original_text, - re.S, - ) - - colormap = [] - for tag in tags: - start = self._count_real_chars(self.original_text[: tag.start(0)]) - end = start + self._count_real_chars(tag.group(4)) - offsets = tag.group(3).split(",") if tag.group(3) else [0] - start_offset = int(offsets[0]) if offsets[0] else 0 - end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 - - colormap.append( - { - "start": start, - "end": end, - "color": tag.group(1), - "start_offset": start_offset, - "end_offset": end_offset, - } - ) - self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) - return colormap - - def __repr__(self): - return f"MarkupText({repr(self.original_text)})" +# class MarkupText(SVGMobject): +# r"""Display (non-LaTeX) text rendered using `Pango `_. + +# Text objects behave like a :class:`.VGroup`-like iterable of all characters +# in the given text. In particular, slicing is possible. Text can be formatted +# using different tags: + +# - ``bold``, ``italic`` and ``bold+italic`` +# - ``
    underline
`` and ``strike through`` +# - ``typewriter font`` +# - ``bigger font`` and ``smaller font`` +# - ``superscript`` and ``subscript`` +# - ``double underline`` +# - ``error underline`` +# - ``temporary change of font`` +# - ``temporary change of color``; colors can be specified as Manim constants like ``RED`` or ``YELLOW`` or as hex triples like ``#aabbaa`` +# - ``temporary gradient``; colors specified as above + +# If your text contains ligatures, the :class:`MarkupText` class may incorrectly determine +# the first and last letter to be colored. This is due to the fact that e.g. ``fl`` +# are two characters, but might be set as one single glyph, a ligature. If your language does +# not depend on ligatures, consider setting ``disable_ligatures=True``. If you cannot +# or do not want to do without ligatures, the ``gradient`` and ``color`` tag support +# an optional attribute ``offset`` which can be used to compensate for that error. +# Usage is as follows: + +# - ``red text`` to *start* coloring one letter earlier +# - ``red text`` to *end* coloring one letter earlier +# - ``red text`` to *start* coloring two letters earlier and *end* one letter earlier + +# Specifying a second offset may be necessary if the text to be colored does +# itself contain ligatures. The same can happen when using HTML entities for +# special chars. + +# Escaping of special characters: ``>`` *should* be written as ``>`` whereas ``<`` and +# ``&`` *must* be written as ``<`` and ``&``. + +# You can find more information about Pango markup formatting at the +# corresponding documentation page: +# `Pango Markup `_. +# Please be aware that not all features are supported by this class and that +# the ```` and ```` tags mentioned above are not supported by Pango. + +# Parameters +# ---------- +# text : :class:`str` +# The text that need to created as mobject. +# fill_opacity : :class:`int` +# The fill opacity with 1 meaning opaque and 0 meaning transparent. +# stroke_width : :class:`int` +# Stroke width. +# color : :class:`str` +# Global color setting for the entire text. Local overrides are possible. +# size : :class:`int` +# Font size. +# line_spacing : :class:`int` +# Line spacing. +# font : :class:`str` +# Global font setting for the entire text. Local overrides are possible. +# slant : :class:`str` +# Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible. +# weight : :class:`str` +# Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. +# gradient: :class:`tuple` +# Global gradient setting. Local overrides are possible. + + +# Returns +# ------- +# :class:`MarkupText` +# The text displayed in form of a :class:`.VGroup`-like mobject. + +# Examples +# --------- + +# .. manim:: BasicMarkupExample +# :save_last_frame: + +# class BasicMarkupExample(Scene): +# def construct(self): +# text1 = MarkupText("foo bar foobar") +# text2 = MarkupText("foo bar big small") +# text3 = MarkupText("H2O and H3O+") +# text4 = MarkupText("type help for help") +# text5 = MarkupText( +# 'foo bar' +# ) +# group = VGroup(text1, text2, text3, text4, text5).arrange(DOWN) +# self.add(group) + +# .. manim:: ColorExample +# :save_last_frame: + +# class ColorExample(Scene): +# def construct(self): +# text1 = MarkupText( +# 'all in red except this', color=RED +# ) +# text2 = MarkupText("nice gradient", gradient=(BLUE, GREEN)) +# text3 = MarkupText( +# 'nice intermediate gradient', +# gradient=(BLUE, GREEN), +# ) +# text4 = MarkupText( +# 'fl ligature causing trouble here' +# ) +# text5 = MarkupText( +# 'fl ligature defeated with offset' +# ) +# text6 = MarkupText( +# 'fl ligature floating inside' +# ) +# text7 = MarkupText( +# 'fl ligature floating inside' +# ) +# group = VGroup(text1, text2, text3, text4, text5, text6, text7).arrange(DOWN) +# self.add(group) + +# .. manim:: FontExample +# :save_last_frame: + +# class FontExample(Scene): +# def construct(self): +# text1 = MarkupText( +# 'all in sans except this', font="sans" +# ) +# text2 = MarkupText( +# 'mixing fonts is ugly' +# ) +# text3 = MarkupText("special char > or >") +# text4 = MarkupText("special char < and &") +# group = VGroup(text1, text2, text3, text4).arrange(DOWN) +# self.add(group) + +# .. manim:: NewlineExample +# :save_last_frame: + +# class NewlineExample(Scene): +# def construct(self): +# text = MarkupText('foooooo\nbaaaar') +# self.add(text) + +# .. manim:: NoLigaturesExample +# :save_last_frame: + +# class NoLigaturesExample(Scene): +# def construct(self): +# text1 = MarkupText('floating') +# text2 = MarkupText('floating', disable_ligatures=True) +# group = VGroup(text1, text2).arrange(DOWN) +# self.add(group) + + +# As :class:`MarkupText` uses Pango to render text, rendering non-English +# characters is easily possible: + +# .. manim:: MultiLanguage +# :save_last_frame: + +# class MultiLanguage(Scene): +# def construct(self): +# morning = MarkupText("வணக்கம்", font="sans-serif") +# chin = MarkupText( +# '見 角 言 谷 辛 辰 辵 邑 酉 釆 里!' +# ) # works as in ``Text``. +# mess = MarkupText("Multi-Language", style=BOLD) +# russ = MarkupText("Здравствуйте मस नम म ", font="sans-serif") +# hin = MarkupText("नमस्ते", font="sans-serif") +# japanese = MarkupText("臂猿「黛比」帶著孩子", font="sans-serif") +# group = VGroup(morning, chin, mess, russ, hin, japanese).arrange(DOWN) +# self.add(group) + + +# Tests +# ----- + +# Check that the creation of :class:`~.MarkupText` works:: + +# >>> MarkupText('The horse does not eat cucumber salad.') +# MarkupText('The horse does not eat cucumber salad.') + +# """ + +# def __init__( +# self, +# text: str, +# fill_opacity: int = 1, +# stroke_width: int = 0, +# color: str = WHITE, +# size: int = 1, +# line_spacing: int = -1, +# font: str = "", +# slant: str = NORMAL, +# weight: str = NORMAL, +# gradient: tuple = None, +# tab_width: int = 4, +# height: int = None, +# width: int = None, +# should_center: bool = True, +# unpack_groups: bool = True, +# disable_ligatures: bool = False, +# **kwargs, +# ): +# self.text = text +# self.size = size +# self.line_spacing = line_spacing +# self.font = font +# self.slant = slant +# self.weight = weight +# self.gradient = gradient +# self.tab_width = tab_width + +# self.original_text = text +# self.disable_ligatures = disable_ligatures +# text_without_tabs = text +# if "\t" in text: +# text_without_tabs = text.replace("\t", " " * self.tab_width) + +# colormap = self.extract_color_tags() +# gradientmap = self.extract_gradient_tags() + +# if self.line_spacing == -1: +# self.line_spacing = self.size + self.size * 0.3 +# else: +# self.line_spacing = self.size + self.size * self.line_spacing + +# file_name = self.text2svg() +# PangoUtils.remove_last_M(file_name) +# SVGMobject.__init__( +# self, +# file_name, +# color=color, +# fill_opacity=fill_opacity, +# stroke_width=stroke_width, +# height=height, +# width=width, +# should_center=should_center, +# unpack_groups=unpack_groups, +# **kwargs, +# ) +# self.chars = VGroup(*self.submobjects) +# self.text = text_without_tabs.replace(" ", "").replace("\n", "") + +# nppc = self.n_points_per_cubic_curve +# for each in self: +# if len(each.points) == 0: +# continue +# points = each.points +# last = points[0] +# each.clear_points() +# for index, point in enumerate(points): +# each.append_points([point]) +# if ( +# index != len(points) - 1 +# and (index + 1) % nppc == 0 +# and any(point != points[index + 1]) +# ): +# each.add_line_to(last) +# last = points[index + 1] +# each.add_line_to(last) + +# if self.gradient: +# self.set_color_by_gradient(*self.gradient) +# for col in colormap: +# self.chars[ +# col["start"] +# - col["start_offset"] : col["end"] +# - col["start_offset"] +# - col["end_offset"] +# ].set_color(self._parse_color(col["color"])) +# for grad in gradientmap: +# self.chars[ +# grad["start"] +# - grad["start_offset"] : grad["end"] +# - grad["start_offset"] +# - grad["end_offset"] +# ].set_color_by_gradient( +# *(self._parse_color(grad["from"]), self._parse_color(grad["to"])) +# ) +# # anti-aliasing +# if self.height is None and self.width is None: +# self.scale(TEXT_MOB_SCALE_FACTOR) + +# def text2hash(self): +# """Generates ``sha256`` hash for file name.""" +# settings = ( +# "MARKUPPANGO" + self.font + self.slant + self.weight +# ) # to differentiate from classical Pango Text +# settings += str(self.line_spacing) + str(self.size) +# settings += str(self.disable_ligatures) +# id_str = self.text + settings +# hasher = hashlib.sha256() +# hasher.update(id_str.encode()) +# return hasher.hexdigest()[:16] + +# def text2svg(self): +# """Convert the text to SVG using Pango.""" +# size = self.size * 10 +# line_spacing = self.line_spacing * 10 +# dir_name = config.get_dir("text_dir") +# disable_liga = self.disable_ligatures +# if not os.path.exists(dir_name): +# os.makedirs(dir_name) +# hash_name = self.text2hash() +# file_name = os.path.join(dir_name, hash_name) + ".svg" +# if os.path.exists(file_name): +# return file_name +# surface = cairocffi.SVGSurface(file_name, 600, 400) +# context = cairocffi.Context(surface) +# context.move_to(START_X, START_Y) +# layout = pangocairocffi.create_layout(context) +# layout.set_width(pangocffi.units_from_double(600)) + +# fontdesc = pangocffi.FontDescription() +# fontdesc.set_size(pangocffi.units_from_double(size)) +# if self.font: +# fontdesc.set_family(self.font) +# fontdesc.set_style(PangoUtils.str2style(self.slant)) +# fontdesc.set_weight(PangoUtils.str2weight(self.weight)) +# layout.set_font_description(fontdesc) + +# context.move_to(START_X, START_Y) +# pangocairocffi.update_layout(context, layout) +# if disable_liga: +# layout.set_markup( +# f"{self.text}" +# ) +# else: +# layout.set_markup(self.text) +# logger.debug(f"Setting Text {self.text}") +# pangocairocffi.show_layout(context, layout) +# surface.finish() +# return file_name + +# def _count_real_chars(self, s): +# """Counts characters that will be displayed. + +# This is needed for partial coloring or gradients, because space +# counts to the text's `len`, but has no corresponding character.""" +# count = 0 +# level = 0 +# # temporarily replace HTML entities by single char +# s = re.sub("&[^;]+;", "x", s) +# for c in s: +# if c == "<": +# level += 1 +# if c == ">" and level > 0: +# level -= 1 +# elif c != " " and c != "\t" and level == 0: +# count += 1 +# return count + +# def extract_gradient_tags(self): +# """Used to determine which parts (if any) of the string should be formatted +# with a gradient. + +# Removes the ```` tag, as it is not part of Pango's markup and would cause an error. +# """ +# tags = re.finditer( +# '(.+?)', +# self.original_text, +# re.S, +# ) +# gradientmap = [] +# for tag in tags: +# start = self._count_real_chars(self.original_text[: tag.start(0)]) +# end = start + self._count_real_chars(tag.group(5)) +# offsets = tag.group(4).split(",") if tag.group(4) else [0] +# start_offset = int(offsets[0]) if offsets[0] else 0 +# end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 + +# gradientmap.append( +# { +# "start": start, +# "end": end, +# "from": tag.group(1), +# "to": tag.group(2), +# "start_offset": start_offset, +# "end_offset": end_offset, +# } +# ) +# self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) +# return gradientmap + +# def _parse_color(self, col): +# """Parse color given in ```` or ```` tags.""" +# if re.match("#[0-9a-f]{6}", col): +# return col +# else: +# return Colors[col.lower()].value + +# def extract_color_tags(self): +# """Used to determine which parts (if any) of the string should be formatted +# with a custom color. + +# Removes the ```` tag, as it is not part of Pango's markup and would cause an error. +# """ +# tags = re.finditer( +# '(.+?)', +# self.original_text, +# re.S, +# ) + +# colormap = [] +# for tag in tags: +# start = self._count_real_chars(self.original_text[: tag.start(0)]) +# end = start + self._count_real_chars(tag.group(4)) +# offsets = tag.group(3).split(",") if tag.group(3) else [0] +# start_offset = int(offsets[0]) if offsets[0] else 0 +# end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 + +# colormap.append( +# { +# "start": start, +# "end": end, +# "color": tag.group(1), +# "start_offset": start_offset, +# "end_offset": end_offset, +# } +# ) +# self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) +# return colormap + +# def __repr__(self): +# return f"MarkupText({repr(self.original_text)})" diff --git a/pyproject.toml b/pyproject.toml index 8e98758011..80525d17e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ cairocffi = "^1.1.0" grpcio = { version = "*", optional = true } grpcio-tools = { version = "*", optional = true } watchdog = { version = "*", optional = true } +manimpango = "^0.1.0" [tool.poetry.extras] js_renderer = ["grpcio","grpcio-tools","watchdog"] From 58fffbbe75d06b35b0d67d63dbe33fe389641d91 Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 17:02:23 +0530 Subject: [PATCH 03/16] add manimpango as dep --- poetry.lock | 463 +++++++++++++++++++++---------------------------- pyproject.toml | 5 +- 2 files changed, 195 insertions(+), 273 deletions(-) diff --git a/poetry.lock b/poetry.lock index fe77424bb4..9c59a2106e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -84,48 +84,21 @@ typing-extensions = ">=3.7.4" colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] -[[package]] -name = "cairocffi" -version = "1.2.0" -description = "cffi-based cairo bindings for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.1.0" - -[package.extras] -doc = ["sphinx", "sphinx-rtd-theme"] -test = ["pytest-runner", "pytest-cov", "pytest-flake8", "pytest-isort"] -xcb = ["xcffib (>=0.3.2)"] - [[package]] name = "certifi" -version = "2020.11.8" +version = "2020.12.5" description = "Python package for providing Mozilla's CA Bundle." category = "dev" optional = false python-versions = "*" -[[package]] -name = "cffi" -version = "1.14.4" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pycparser = "*" - [[package]] name = "chardet" -version = "3.0.4" +version = "4.0.0" description = "Universal encoding detector for Python 2 and 3" category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "click" @@ -163,7 +136,7 @@ optional = false python-versions = "*" [package.extras] -test = ["flake8 (3.7.8)", "hypothesis (3.55.3)"] +test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "cycler" @@ -194,7 +167,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "grpcio" -version = "1.33.2" +version = "1.34.0" description = "HTTP/2-based RPC framework" category = "main" optional = true @@ -204,18 +177,18 @@ python-versions = "*" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.33.2)"] +protobuf = ["grpcio-tools (>=1.34.0)"] [[package]] name = "grpcio-tools" -version = "1.33.2" +version = "1.34.0" description = "Protobuf code generator for gRPC" category = "main" optional = true python-versions = "*" [package.dependencies] -grpcio = ">=1.33.2" +grpcio = ">=1.34.0" protobuf = ">=3.5.0.post1,<4.0dev" [[package]] @@ -247,18 +220,19 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "3.1.0" +version = "3.3.0" description = "Read metadata from Python packages" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "rst.linker"] -testing = ["packaging", "pep517", "unittest2", "importlib-resources (>=1.3)"] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] [[package]] name = "iniconfig" @@ -311,6 +285,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "manimpango" +version = "0.1.0" +description = "Bindings for Pango for using with Manim." +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "markupsafe" version = "1.1.1" @@ -361,7 +343,7 @@ python-versions = ">=3.6" [[package]] name = "packaging" -version = "20.7" +version = "20.8" description = "Core utilities for Python packages" category = "dev" optional = false @@ -370,30 +352,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pyparsing = ">=2.0.2" -[[package]] -name = "pangocairocffi" -version = "0.4.0" -description = "CFFI-based pango-cairo bindings for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cairocffi = ">=1.0.2" -cffi = ">=1.1.0" -pangocffi = ">=0.8.0" - -[[package]] -name = "pangocffi" -version = "0.8.0" -description = "CFFI-based pango bindings for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.1.0" - [[package]] name = "pathspec" version = "0.8.1" @@ -402,14 +360,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "pathtools" -version = "0.1.2" -description = "File system general utilities" -category = "main" -optional = true -python-versions = "*" - [[package]] name = "pillow" version = "8.0.1" @@ -453,7 +403,7 @@ six = ">=1.9" [[package]] name = "py" -version = "1.9.0" +version = "1.10.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "dev" optional = false @@ -467,14 +417,6 @@ category = "main" optional = false python-versions = ">=3.6, <4" -[[package]] -name = "pycparser" -version = "2.20" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "pydub" version = "0.24.1" @@ -485,7 +427,7 @@ python-versions = "*" [[package]] name = "pygments" -version = "2.7.2" +version = "2.7.3" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -516,25 +458,24 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pytest" -version = "6.1.2" +version = "6.2.1" description = "pytest: simple powerful testing with Python" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=17.4.0" +attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0" +pluggy = ">=0.12,<1.0.0a1" py = ">=1.8.2" toml = "*" [package.extras] -checkqa_mypy = ["mypy (0.780)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] @@ -558,7 +499,7 @@ python-versions = "*" [[package]] name = "recommonmark" -version = "0.6.0" +version = "0.7.1" description = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects." category = "dev" optional = false @@ -579,7 +520,7 @@ python-versions = "*" [[package]] name = "requests" -version = "2.25.0" +version = "2.25.1" description = "Python HTTP for Humans." category = "dev" optional = false @@ -587,13 +528,13 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] certifi = ">=2017.4.17" -chardet = ">=3.0.2,<4" +chardet = ">=3.0.2,<5" idna = ">=2.5,<3" urllib3 = ">=1.21.1,<1.27" [package.extras] security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] name = "rich" @@ -642,7 +583,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "3.3.1" +version = "3.4.0" description = "Python documentation generator" category = "dev" optional = false @@ -668,8 +609,8 @@ sphinxcontrib-serializinghtml = "*" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.790)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.790)", "docutils-stubs"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinxcontrib-applehelp" @@ -752,7 +693,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.54.0" +version = "4.54.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -788,18 +729,15 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "watchdog" -version = "0.10.4" +version = "1.0.2" description = "Filesystem events monitoring" category = "main" optional = true -python-versions = "*" - -[package.dependencies] -pathtools = ">=0.1.1" +python-versions = ">=3.6" [package.extras] watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] @@ -822,7 +760,7 @@ python-versions = ">=3.6" [package.extras] docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [extras] js_renderer = ["grpcio", "grpcio-tools", "watchdog"] @@ -830,7 +768,7 @@ js_renderer = ["grpcio", "grpcio-tools", "watchdog"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "f66610f54761f5f832bba54c4b8fb33ca584624493965927935763b24df6e08f" +content-hash = "1ad81de17a5e5801c00a9f45f9db9380dc54e2685f55c3dbf52f26960877a07b" [metadata.files] alabaster = [ @@ -860,52 +798,13 @@ babel = [ black = [ {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, ] -cairocffi = [ - {file = "cairocffi-1.2.0.tar.gz", hash = "sha256:9a979b500c64c8179fec286f337e8fe644eca2f2cd05860ce0b62d25f22ea140"}, -] certifi = [ - {file = "certifi-2020.11.8-py2.py3-none-any.whl", hash = "sha256:1f422849db327d534e3d0c5f02a263458c3955ec0aae4ff09b95f195c59f4edd"}, - {file = "certifi-2020.11.8.tar.gz", hash = "sha256:f05def092c44fbf25834a51509ef6e631dc19765ab8a57b4e7ab85531f0a9cf4"}, -] -cffi = [ - {file = "cffi-1.14.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ebb253464a5d0482b191274f1c8bf00e33f7e0b9c66405fbffc61ed2c839c775"}, - {file = "cffi-1.14.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c24d61263f511551f740d1a065eb0212db1dbbbbd241db758f5244281590c06"}, - {file = "cffi-1.14.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9f7a31251289b2ab6d4012f6e83e58bc3b96bd151f5b5262467f4bb6b34a7c26"}, - {file = "cffi-1.14.4-cp27-cp27m-win32.whl", hash = "sha256:5cf4be6c304ad0b6602f5c4e90e2f59b47653ac1ed9c662ed379fe48a8f26b0c"}, - {file = "cffi-1.14.4-cp27-cp27m-win_amd64.whl", hash = "sha256:f60567825f791c6f8a592f3c6e3bd93dd2934e3f9dac189308426bd76b00ef3b"}, - {file = "cffi-1.14.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:c6332685306b6417a91b1ff9fae889b3ba65c2292d64bd9245c093b1b284809d"}, - {file = "cffi-1.14.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d9efd8b7a3ef378dd61a1e77367f1924375befc2eba06168b6ebfa903a5e59ca"}, - {file = "cffi-1.14.4-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:51a8b381b16ddd370178a65360ebe15fbc1c71cf6f584613a7ea08bfad946698"}, - {file = "cffi-1.14.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:1d2c4994f515e5b485fd6d3a73d05526aa0fcf248eb135996b088d25dfa1865b"}, - {file = "cffi-1.14.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:af5c59122a011049aad5dd87424b8e65a80e4a6477419c0c1015f73fb5ea0293"}, - {file = "cffi-1.14.4-cp35-cp35m-win32.whl", hash = "sha256:594234691ac0e9b770aee9fcdb8fa02c22e43e5c619456efd0d6c2bf276f3eb2"}, - {file = "cffi-1.14.4-cp35-cp35m-win_amd64.whl", hash = "sha256:64081b3f8f6f3c3de6191ec89d7dc6c86a8a43911f7ecb422c60e90c70be41c7"}, - {file = "cffi-1.14.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f803eaa94c2fcda012c047e62bc7a51b0bdabda1cad7a92a522694ea2d76e49f"}, - {file = "cffi-1.14.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:105abaf8a6075dc96c1fe5ae7aae073f4696f2905fde6aeada4c9d2926752362"}, - {file = "cffi-1.14.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0638c3ae1a0edfb77c6765d487fee624d2b1ee1bdfeffc1f0b58c64d149e7eec"}, - {file = "cffi-1.14.4-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:7c6b1dece89874d9541fc974917b631406233ea0440d0bdfbb8e03bf39a49b3b"}, - {file = "cffi-1.14.4-cp36-cp36m-win32.whl", hash = "sha256:155136b51fd733fa94e1c2ea5211dcd4c8879869008fc811648f16541bf99668"}, - {file = "cffi-1.14.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6bc25fc545a6b3d57b5f8618e59fc13d3a3a68431e8ca5fd4c13241cd70d0009"}, - {file = "cffi-1.14.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a7711edca4dcef1a75257b50a2fbfe92a65187c47dab5a0f1b9b332c5919a3fb"}, - {file = "cffi-1.14.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:00e28066507bfc3fe865a31f325c8391a1ac2916219340f87dfad602c3e48e5d"}, - {file = "cffi-1.14.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03"}, - {file = "cffi-1.14.4-cp37-cp37m-win32.whl", hash = "sha256:00a1ba5e2e95684448de9b89888ccd02c98d512064b4cb987d48f4b40aa0421e"}, - {file = "cffi-1.14.4-cp37-cp37m-win_amd64.whl", hash = "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35"}, - {file = "cffi-1.14.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:df5169c4396adc04f9b0a05f13c074df878b6052430e03f50e68adf3a57aa28d"}, - {file = "cffi-1.14.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:9ffb888f19d54a4d4dfd4b3f29bc2c16aa4972f1c2ab9c4ab09b8ab8685b9c2b"}, - {file = "cffi-1.14.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53"}, - {file = "cffi-1.14.4-cp38-cp38-win32.whl", hash = "sha256:b4e248d1087abf9f4c10f3c398896c87ce82a9856494a7155823eb45a892395d"}, - {file = "cffi-1.14.4-cp38-cp38-win_amd64.whl", hash = "sha256:ec80dc47f54e6e9a78181ce05feb71a0353854cc26999db963695f950b5fb375"}, - {file = "cffi-1.14.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909"}, - {file = "cffi-1.14.4-cp39-cp39-manylinux1_i686.whl", hash = "sha256:b18e0a9ef57d2b41f5c68beefa32317d286c3d6ac0484efd10d6e07491bb95dd"}, - {file = "cffi-1.14.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:045d792900a75e8b1e1b0ab6787dd733a8190ffcf80e8c8ceb2fb10a29ff238a"}, - {file = "cffi-1.14.4-cp39-cp39-win32.whl", hash = "sha256:ba4e9e0ae13fc41c6b23299545e5ef73055213e466bd107953e4a013a5ddd7e3"}, - {file = "cffi-1.14.4-cp39-cp39-win_amd64.whl", hash = "sha256:f032b34669220030f905152045dfa27741ce1a6db3324a5bc0b96b6c7420c87b"}, - {file = "cffi-1.14.4.tar.gz", hash = "sha256:1a465cbe98a7fd391d47dce4b8f7e5b921e6cd805ef421d04f5f66ba8f06086c"}, + {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, + {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, ] chardet = [ - {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, - {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -936,100 +835,100 @@ docutils = [ {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] grpcio = [ - {file = "grpcio-1.33.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c5030be8a60fb18de1fc8d93d130d57e4296c02f229200df814f6578da00429e"}, - {file = "grpcio-1.33.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5b21d3de520a699cb631cfd3a773a57debeb36b131be366bf832153405cc5404"}, - {file = "grpcio-1.33.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b412f43c99ca72769306293ba83811b241d41b62ca8f358e47e0fdaf7b6fbbd7"}, - {file = "grpcio-1.33.2-cp27-cp27m-win32.whl", hash = "sha256:703da25278ee7318acb766be1c6d3b67d392920d002b2d0304e7f3431b74f6c1"}, - {file = "grpcio-1.33.2-cp27-cp27m-win_amd64.whl", hash = "sha256:2f2eabfd514af8945ee415083a0f849eea6cb3af444999453bb6666fadc10f54"}, - {file = "grpcio-1.33.2-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:d51ddfb3d481a6a3439db09d4b08447fb9f6b60d862ab301238f37bea8f60a6d"}, - {file = "grpcio-1.33.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:407b4d869ce5c6a20af5b96bb885e3ecaf383e3fb008375919eb26cf8f10d9cd"}, - {file = "grpcio-1.33.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:abaf30d18874310d4439a23a0afb6e4b5709c4266966401de7c4ae345cc810ee"}, - {file = "grpcio-1.33.2-cp35-cp35m-linux_armv7l.whl", hash = "sha256:f2673c51e8535401c68806d331faba614bcff3ee16373481158a2e74f510b7f6"}, - {file = "grpcio-1.33.2-cp35-cp35m-macosx_10_7_intel.whl", hash = "sha256:65b06fa2db2edd1b779f9b256e270f7a58d60e40121660d8b5fd6e8b88f122ed"}, - {file = "grpcio-1.33.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:514b4a6790d6597fc95608f49f2f13fe38329b2058538095f0502b734b98ffd2"}, - {file = "grpcio-1.33.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4cef3eb2df338abd9b6164427ede961d351c6bf39b4a01448a65f9e795f56575"}, - {file = "grpcio-1.33.2-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:3ac453387add933b6cfbc67cc8635f91ff9895299130fc612c3c4b904e91d82a"}, - {file = "grpcio-1.33.2-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:7d292dabf7ded9c062357f8207e20e94095a397d487ffd25aa213a2c3dff0ab4"}, - {file = "grpcio-1.33.2-cp35-cp35m-win32.whl", hash = "sha256:0aeed3558a0eec0b31700af6072f1c90e8fd5701427849e76bc469554a14b4f5"}, - {file = "grpcio-1.33.2-cp35-cp35m-win_amd64.whl", hash = "sha256:88f2a102cbc67e91f42b4323cec13348bf6255b25f80426088079872bd4f3c5c"}, - {file = "grpcio-1.33.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:affbb739fde390710190e3540acc9f3e65df25bd192cc0aa554f368288ee0ea2"}, - {file = "grpcio-1.33.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ffec0b854d2ed6ee98776c7168c778cdd18503642a68d36c00ba0f96d4ccff7c"}, - {file = "grpcio-1.33.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:7744468ee48be3265db798f27e66e118c324d7831a34fd39d5775bcd5a70a2c4"}, - {file = "grpcio-1.33.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:6a1b5b7e47600edcaeaa42983b1c19e7a5892c6b98bcde32ae2aa509a99e0436"}, - {file = "grpcio-1.33.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:289671cfe441069f617bf23c41b1fa07053a31ff64de918d1016ac73adda2f73"}, - {file = "grpcio-1.33.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:a8c84db387907e8d800c383e4c92f39996343adedf635ae5206a684f94df8311"}, - {file = "grpcio-1.33.2-cp36-cp36m-win32.whl", hash = "sha256:4bb771c4c2411196b778871b519c7e12e87f3fa72b0517b22f952c64ead07958"}, - {file = "grpcio-1.33.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b581ddb8df619402c377c81f186ad7f5e2726ad9f8d57047144b352f83f37522"}, - {file = "grpcio-1.33.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:02a4a637a774382d6ac8e65c0a7af4f7f4b9704c980a0a9f4f7bbc1e97c5b733"}, - {file = "grpcio-1.33.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:592656b10528aa327058d2007f7ab175dc9eb3754b289e24cac36e09129a2f6b"}, - {file = "grpcio-1.33.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c89510381cbf8c8317e14e747a8b53988ad226f0ed240824064a9297b65f921d"}, - {file = "grpcio-1.33.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:7fda62846ef8d86caf06bd1ecfddcae2c7e59479a4ee28808120e170064d36cc"}, - {file = "grpcio-1.33.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:d386630af995fd4de225d550b6806507ca09f5a650f227fddb29299335cda55e"}, - {file = "grpcio-1.33.2-cp37-cp37m-win32.whl", hash = "sha256:bf7de9e847d2d14a0efcd48b290ee181fdbffb2ae54dfa2ec2a935a093730bac"}, - {file = "grpcio-1.33.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7c1ea6ea6daa82031af6eb5b7d1ab56b1193840389ea7cf46d80e98636f8aff5"}, - {file = "grpcio-1.33.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e56ab125b35b1373205b3802f58119e70ffedfe0d7e2821999126058f7c44f"}, - {file = "grpcio-1.33.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0cebba3907441d5c620f7b491a780ed155140fbd590da0886ecfb1df6ad947b9"}, - {file = "grpcio-1.33.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:52143467237bfa77331ed1979dc3e203a1c12511ee37b3ddd9ff41b05804fb10"}, - {file = "grpcio-1.33.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:8cf67b8493bff50fa12b4bc30ab40ce1f1f216eb54145962b525852959b0ab3d"}, - {file = "grpcio-1.33.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:fa78bd55ec652d4a88ba254c8dae623c9992e2ce647bd17ba1a37ca2b7b42222"}, - {file = "grpcio-1.33.2-cp38-cp38-win32.whl", hash = "sha256:143b4fe72c01000fc0667bf62ace402a6518939b3511b3c2bec04d44b1d7591c"}, - {file = "grpcio-1.33.2-cp38-cp38-win_amd64.whl", hash = "sha256:08b6a58c8a83e71af5650f8f879fe14b7b84dce0c4969f3817b42c72989dacf0"}, - {file = "grpcio-1.33.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56e2a985efdba8e2282e856470b684e83a3cadd920f04fcd360b4b826ced0dd3"}, - {file = "grpcio-1.33.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:62ce7e86f11e8c4ff772e63c282fb5a7904274258be0034adf37aa679cf96ba0"}, - {file = "grpcio-1.33.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7f727b8b6d9f92fcab19dbc62ec956d8352c6767b97b8ab18754b2dfa84d784f"}, - {file = "grpcio-1.33.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2d5124284f9d29e4f06f674a12ebeb23fc16ce0f96f78a80a6036930642ae5ab"}, - {file = "grpcio-1.33.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:eff55d318a114742ed2a06972f5daacfe3d5ad0c0c0d9146bcaf10acb427e6be"}, - {file = "grpcio-1.33.2-cp39-cp39-win32.whl", hash = "sha256:dd47fac2878f6102efa211461eb6fa0a6dd7b4899cd1ade6cdcb9fa9748363eb"}, - {file = "grpcio-1.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:89add4f4cda9546f61cb8a6988bc5b22101dd8ca4af610dff6f28105d1f78695"}, - {file = "grpcio-1.33.2.tar.gz", hash = "sha256:21265511880056d19ce4f809ce3fbe2a3fa98ec1fc7167dbdf30a80d3276202e"}, + {file = "grpcio-1.34.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:e2ffa46db9103706640c74886ac23ed18d1487a8523cc128da239e1d5a4e3301"}, + {file = "grpcio-1.34.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:843436e69c37eb45b0285fa42f7acc06d147f2e9c1d515b0f901e94d40107e79"}, + {file = "grpcio-1.34.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a403ed4d8fcc441a2c2ec9ede838b0ae5f9da996d950cf2ff9f82242b496e0a7"}, + {file = "grpcio-1.34.0-cp27-cp27m-win32.whl", hash = "sha256:dc45f5750ce50f34f20a0607efae5c797d01681a44465b8287bebef1e9847d5b"}, + {file = "grpcio-1.34.0-cp27-cp27m-win_amd64.whl", hash = "sha256:2fd4a80f267aa258f5a74df5fe243eff80299a4f5b356c1da53f6f5793bbbf4b"}, + {file = "grpcio-1.34.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:f2e4d64675351a058f9cb35fe390ca0956bd2926171bfb7c87596a1ee10ff6ba"}, + {file = "grpcio-1.34.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:4a2c85cd4a67c36fe12535fe32eb336635843d1eb31d3fa301444e60a8df9c90"}, + {file = "grpcio-1.34.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:32ad56f6d3d7e699f9a0d62719f2de9092e79f444d875d70f58cf7f8bb19684c"}, + {file = "grpcio-1.34.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:e69ac6fc9096bbb43f5276655661db746233cd320808e0d302198eb43dc7bd04"}, + {file = "grpcio-1.34.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:5b105adb44486fb594b8d8142b5d4fbe50cb125c77ac7d270f5d0277ce5c554a"}, + {file = "grpcio-1.34.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:923a3b18badc3749c4d715216934f62f46a818790e325ece6184d07e7d6c7f73"}, + {file = "grpcio-1.34.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9579f22222ac89ceee64c1101cced6434d9f6b12078b43ece0f9d8ebdb657f73"}, + {file = "grpcio-1.34.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:dfa098a6ff8d1b68ed7bd655150ee91f57c29042c093ff51113176aded3f0071"}, + {file = "grpcio-1.34.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:32fbc78d558d9468a4b16f79f4130daec8e431bc7a3b1775b0e98f09a7ab45a2"}, + {file = "grpcio-1.34.0-cp35-cp35m-win32.whl", hash = "sha256:205eda06d8aeffc87a1e29ff1f090546adf0b6e766378cc4c13686534397fdb4"}, + {file = "grpcio-1.34.0-cp35-cp35m-win_amd64.whl", hash = "sha256:2ea864ae3d3abc99d3988d1d27dee3f6350b60149ccf810a89cd9a9d02a675d6"}, + {file = "grpcio-1.34.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:5d8108b240fd5b8a0483f95ab2651fe2d633311faae93a12938ea06cf61a5efd"}, + {file = "grpcio-1.34.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:bda0f52eb1279a7119526df2ef33ea2808691120daf9effaf60ca0c07f76058a"}, + {file = "grpcio-1.34.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:c89b6a3eca8eae10eea78896ccfdc9d04aa2f7b2ee96de20246e5c96494c68f5"}, + {file = "grpcio-1.34.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa834f4c70b9df83d5af610097747c224513d59af1f03e8c06bca9a7d81fd1a3"}, + {file = "grpcio-1.34.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:20606ec7c265f81c5a0226f69842dc8dde66d921968ab9448e59d440cf98bebf"}, + {file = "grpcio-1.34.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:72b6a89aabf937d706946230f5aa13bdf7d2a42874810fa54436c647577b543e"}, + {file = "grpcio-1.34.0-cp36-cp36m-win32.whl", hash = "sha256:49da07ae43c552280b8b4c70617f9b589588404c2545d6eba2c55179b3d836af"}, + {file = "grpcio-1.34.0-cp36-cp36m-win_amd64.whl", hash = "sha256:beef6be49ada569edf3b73fd4eb57d6c2af7e10c0c82a210dbe51de7c4a1ed53"}, + {file = "grpcio-1.34.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8d92e884f6d67b9a2a4514631d3c9836281044caedb5fd34d4ce2bbec138c87d"}, + {file = "grpcio-1.34.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:e238a554f29d90b0e7fca15e8119b9a7c5f88faacbf9b982751ad54d639b57f8"}, + {file = "grpcio-1.34.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:98b0b6e44c451093354a38b620e6e0df958b0710abd6a0ddd84da84424bce003"}, + {file = "grpcio-1.34.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:bbd3522f821fb5d01049db214fb9f949a8b2d92761c2780a20ff73818efd5360"}, + {file = "grpcio-1.34.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:2f54046ca2a81ff45ec8f6d3d7447ad562adb067c3640c35354e440fd771b625"}, + {file = "grpcio-1.34.0-cp37-cp37m-win32.whl", hash = "sha256:50c4f10e7deff96d197bc6d1988c2a5a0bc6252bbd31d7fb374ce8923f937e7a"}, + {file = "grpcio-1.34.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6fafdba42c26bbdf78948c09a93a8b3a8a509c66c6b4324bc1fb360bf4e82b9d"}, + {file = "grpcio-1.34.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:bd7634f8c49c8467fec5fd9e0d1abb205b0aa61670ff0113ef835ca6548aad3d"}, + {file = "grpcio-1.34.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:69127393fc3513da228bc3908914df2284923e0eacf8d73f21ad387317450317"}, + {file = "grpcio-1.34.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5e8e6035d4f9ab856ab437e381e652b31dfd42443d2243d45bdf4b90adaf3559"}, + {file = "grpcio-1.34.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:95de4ad9ae39590668e3330d414253f672aedd46cc107d7f71b4a2268f3d6066"}, + {file = "grpcio-1.34.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a1024006fe61ee7e43e7099faf08f4508ea0c944a1558e8d715a5b4556937ace"}, + {file = "grpcio-1.34.0-cp38-cp38-win32.whl", hash = "sha256:dea35dcf09aee91552cb4b3e250efdbcb79564b5b5517246bcbead8d5871e291"}, + {file = "grpcio-1.34.0-cp38-cp38-win_amd64.whl", hash = "sha256:e95bda60c584b3deb5c37babb44d4300cf4bf3a6c43198a244ddcaddca3fde3a"}, + {file = "grpcio-1.34.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c88ce184973fe2035ffa176eb08cd492db090505e6b1ddc68b5cc1e0b01a07a0"}, + {file = "grpcio-1.34.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:57a30f9df0f5342e4dad384e7023b9f88742c325838da977828c37f49eb8940a"}, + {file = "grpcio-1.34.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:924d5e8b18942ebea1260e60be7e2bde2a3587ea386190b442790f84180bf372"}, + {file = "grpcio-1.34.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:43fafebcc2e81d012f7147a0ddf9be69864c40fc4edd9844937eba0020508297"}, + {file = "grpcio-1.34.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:9550b7c9d2f11579b484accc6183e02ebe33ce80a0ff15f5c28895df6b3d3108"}, + {file = "grpcio-1.34.0-cp39-cp39-win32.whl", hash = "sha256:d16f7f5a10bf24640fa639974d409c220e587b3e2fa2620af00d43ba36dafc2c"}, + {file = "grpcio-1.34.0-cp39-cp39-win_amd64.whl", hash = "sha256:25958bd7c6773e6de79781cc0d6f19d0c82332984dd07ef238889e93485d5afc"}, + {file = "grpcio-1.34.0.tar.gz", hash = "sha256:f98f746cacbaa681de0bcd90d7aa77b440e3e1327a9988f6a2b580d54e27d4c3"}, ] grpcio-tools = [ - {file = "grpcio-tools-1.33.2.tar.gz", hash = "sha256:af40774c0275f5465f49fd92bfcd9831b19b013de4cc77b8fb38aea76fa6dce3"}, - {file = "grpcio_tools-1.33.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f80943d6ff6fb0125e68a7af7591a5373d177c8e97a9fcfaeb873cb0a11efbff"}, - {file = "grpcio_tools-1.33.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:74762069fb0336535518097cb765250fe2800c19dfb9a62bd3ebf7c1d31f568c"}, - {file = "grpcio_tools-1.33.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:895f6926310e6c1bd4424af2c9b1c777481c246a87c9943478e9d12631fa5331"}, - {file = "grpcio_tools-1.33.2-cp27-cp27m-win32.whl", hash = "sha256:76d51b8625f49a52ffd207b586e459e9f04f2451226c1602e9eb1e67c530d830"}, - {file = "grpcio_tools-1.33.2-cp27-cp27m-win_amd64.whl", hash = "sha256:6b3e10a2b1409e4bbc744d8f966b2291bf042fea612d3c144797d8e845335ee4"}, - {file = "grpcio_tools-1.33.2-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:584888e7b679e329c18ec1cc93b8d43514d7311a83080382bdde36edaa2fc3f8"}, - {file = "grpcio_tools-1.33.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7d7c98448835df0d64c34c205b53a088c631efa2623f180ae08f13d3427c6905"}, - {file = "grpcio_tools-1.33.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d0b1651a66c0254e84207b108cb5f76a0076141dda35d522de1f4a4a33e2db82"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-linux_armv7l.whl", hash = "sha256:7a4b1d0399259449b9ead9a1e43611da281c6cce6fab2629ad4f9b16887679a9"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:aeae23f77c668b9d4bce43007eeeb395d8e87c72f1281d2329872bc43ea66a83"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:40aae8f6c75864b9063aed405158b6926dc71d1a6b9a3f89c4b4ce5915f7b154"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:2db16055baed821fd1e12d3154cab26bec6a947ff47eaad7aedc2f86b4dead02"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:4346774a7edf07d29fa1bc96ec69a53c3bb222e1e07d1046ed19fe3cff1c96bc"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:ba2971017ed3e1d429abeef7e3d98a7aff5191d76e63ebf5b0a700d6b505d342"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-win32.whl", hash = "sha256:7a9877611bbd9587dbf8cc2d80edb99fce371faaa504960cf27ca4bb43b3eeb3"}, - {file = "grpcio_tools-1.33.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9777378bfb59e5bfe9f972d01c27e502b577f8c5d539967ae17409e562b3b347"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:5a90192f5b198a5d3b2d8015f9088f4fcfdf8c1020931afb48f8bb52db02ef92"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ed34b6316c6a932d8586a3567d341599aff5a61a34f9d6640501f4af5537b95e"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:eb2a452ecf9b8c0beee6a49ea3e42bd5344e07dab9692b0c60ef7caf9dbf0e7e"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:be6f34a188806dbec3dba9e6c6b41253507f3b7e4beeb344a02903609d708659"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:c2a3a69871047dccd49507cb989b6f84e24f5427902930d92e10cf1e366e578a"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09f25ad6d47566b5ca3eefae7d499d1c431646d20b6543a00b70fe7fe61b1a02"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-win32.whl", hash = "sha256:36b71fddb8876d619b6f00e49d47b917b716ca5761b9037631f1256851ed74dc"}, - {file = "grpcio_tools-1.33.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2e6f9b93b19ad5d680beeccd937357e8bd8403f1090a6ce4369c9fc162d5c3f1"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b57fcd12c210916f8addbb983ff2264a675acdd0665be0df87f30efccec50119"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55f4e125b5d4af409ec5783009794262fb28fc9d01cc1cd0a123c59ea7d9a03b"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:fb0651c7ba378b18865dac9f10414c0e15ddc190ea6fd0b5c96bfe235276304e"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:bc33d340c981b5f2ecdc11888e4c9f462fe25811da0bd98080a0f239a5c71cc0"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:ba1bd7e60872727b0123b80658a723ba39357f3baa85a53d3a4a877fdc68e218"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-win32.whl", hash = "sha256:278092221bcbf3e9710e64e0f64b3ffd91879da87cc901151f52f50ab2c1e364"}, - {file = "grpcio_tools-1.33.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3a407b9e2ca0a15b4d337120e8a5ad35fedaaf658c40c445d63d41abb8f8f5e3"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9bfae79bd3c2bd6f49d72243408c269a4cb9f6e2231aae06c5df5106d60ebf5d"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a35f0663154f5083b4e84661c33bf193797de7d68138a1e94ddd9bec4b7d0d39"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5979937daddc1cf624a11ee5e45baa6e7f1c03948f8534529e08c0baef963b2d"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:6400950ebc37cc74c8b1d8a25ef4c624f3daf08b5f61c6ba6175845908c0e9d7"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:cb0dbc3203975efaf541887fa641742287c3473298a9a45b9619506b27ce7028"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-win32.whl", hash = "sha256:686462d1abbd4d9c13f96a8b3442e62ce4ed412272996012cc561a6dcc7e65b2"}, - {file = "grpcio_tools-1.33.2-cp38-cp38-win_amd64.whl", hash = "sha256:947f9d96271c7ab0470b58438bd788ce1d4308c73696eea64eab58e7e68c1d39"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:853f632fcb354c4c48c4abb151a3f7d9ecf1ab662fbc3483eb4f941f61573b88"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:792e4ed3ab2063d330067253cf76d9b6d4b957fb723cb191adf025486df69f3f"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:081cad29621dadec6b5cedb818c3261ac25ba5a78c09dffe18d51637debfd750"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:0d44a17cac96005cec38e8197ec2b76a61fea6f3861c38765a3b51a4787fdbef"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ed36ca81cdbe08f2976323930f8430ec97a68ec7d690606d59a7303ae6b61726"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-win32.whl", hash = "sha256:da31aeebb9c3a901bf1f0773fac20cb9e9d662cdf4f19eabc6dc55c52409d09c"}, - {file = "grpcio_tools-1.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:b68ce929acb8c392b83c49257e18f03d73ca3af408bfd5f7e78fe351c384c008"}, + {file = "grpcio-tools-1.34.0.tar.gz", hash = "sha256:db5a6f0130256d534cbe35eab37d37a448d96f4fd736e5051c6be1aee49cea1d"}, + {file = "grpcio_tools-1.34.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:2f855558a71f512aa9882110aa2358d8c5b336e4718cf55848744c1d488b3c66"}, + {file = "grpcio_tools-1.34.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:852f56847031e5de0f6957da172a2c74ad5a17d2b947720d5891b2d578c01c42"}, + {file = "grpcio_tools-1.34.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:915ade7fea3df556a8a207ccb2976f6c715a50dbdb94a83ce9ec089f20653916"}, + {file = "grpcio_tools-1.34.0-cp27-cp27m-win32.whl", hash = "sha256:378389f013b4dc5bcaf886b8f9d975daed8f9ec3af0a1e9933229b315e5c4c94"}, + {file = "grpcio_tools-1.34.0-cp27-cp27m-win_amd64.whl", hash = "sha256:9d5ae84ef0c1e4dac2fc515361dc8057fb8c8ebc07d0add4a11265107a3ee1be"}, + {file = "grpcio_tools-1.34.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:a146cd89ff63dd4caefcc9fdbcb5ac4bea0320e0d6329383ead6c3d777b34c93"}, + {file = "grpcio_tools-1.34.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:0805a0c87a6452137ddb2afa696d25ab56557325a6c5251e09df3ec6f0340d07"}, + {file = "grpcio_tools-1.34.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3dddb5795a4c991b764cf1459d0616c0b3b431deac82a8133518f0b458ca98c6"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:fcf2820e5b5a18fb533e7e85eac852b659c2bbe817750042d4772bfc8bd5f942"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:a439e2d677bd4fe15e2a371bdf40dfcae82014069c79db5f6d63bc61bd457cf5"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:5267b8034d2c3ad372d551ac68dc314fc46008da8c8f19ec0aba5d9f614215f7"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a91980b101ee4eaf6eb5fe07b7cb0e023e9c0cdc2880d67b6c507becddf42876"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:e7fafc9d3f59ade993225b80006f25e2df2e1643dde93bd3e6ee9b26f081eb8a"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:37c37a80d0c59d44eb5c02a9336f4df13a10d2a34b3753bd9bc8f407430e4190"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-win32.whl", hash = "sha256:b84435532676715c85100a54e6fc48bdeb04962de7f4ddb2c80cdc6fcb1ee781"}, + {file = "grpcio_tools-1.34.0-cp35-cp35m-win_amd64.whl", hash = "sha256:76531079c4b7bca54603e8c2ca16bae78ad05970c3e10f808e6b14625a3d4b16"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:94d25eb9beae25b14a11e47100398efc1248738488a6dd4bbf854eb15d4935c5"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:22d6722813eaba5b0218ce37a7e71d099727063304544782932489ad7b83abde"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:2b420fb6aa533334b6e2b2773fa3a9d98b4c34b8307720c9dad87b9d8bc48412"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:67702f5beef87b54b46b0d513415f9f5817c379496703a7ad0889ff5df40aef0"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:118af1f41cd8956df6a7f0ce5e62ffd85b4e9937e0f7401ebb1f8d865412d47e"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:1d4246aa03afbc61dd0ad60de581b12a1b40ab4d9f5817ca1afdadbefb9f0782"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-win32.whl", hash = "sha256:8698c627740fdfb638f78d91ac316af351a254791ecbfba8385236b02a2c3c46"}, + {file = "grpcio_tools-1.34.0-cp36-cp36m-win_amd64.whl", hash = "sha256:475c46a36dfc1ced031896870d987207bba43b9452669e63374498847a4b6dbd"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:edc3ab63b5f4db0e4b2dbfea1272de5a77dec06341407978df64367ec5090bf5"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:75a9f3678a2665bd543fed0a7bf380c7850a31a15dc576d7f8424268d72fe3b7"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:dc37a038bb8ce131a08a567421e4a9e8f7d638ba166edf7964fbabf05bc202b9"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c36b1ddabd4d79d7abb3649031858dd30cf3d066b8a03454de38b676c91ae14b"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:664f685e22b840b3f71cfaf9307fe8dc33aa80cf67ff7af856269432d0c76435"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-win32.whl", hash = "sha256:562ac734e6f69f0dbae6d5983751c46bf525a935d5c90a59b159382c77baa6f4"}, + {file = "grpcio_tools-1.34.0-cp37-cp37m-win_amd64.whl", hash = "sha256:15bb0b800f73a9a62aff7584d45c36ebc105bf3ed8ba6056abac21402077e093"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:58a455e35c6068f2420a4909b3c332f4d00463cba096b9a3d6ec2383aab27dd1"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:935fb6eb425558ac5354337946c5b2e09c68eaa34937f478cb8368d50b5c4479"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:3fffcb165a742bff95a980b4093a9fed5d403f6375cdd5da73636696974d6e76"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:01a5939c325cb32e82837923ce8b14df8590c885fc23e28cae9dbfbe28acb69f"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:9a025d8a6e765ec3530c9b4bdfb5e7b05587497b279a935f7b778b9f903ab571"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-win32.whl", hash = "sha256:e3d425a78d8de119ddebf4472bac30a86f7bdf3fa26b6f2cf63ba0beb1477f4a"}, + {file = "grpcio_tools-1.34.0-cp38-cp38-win_amd64.whl", hash = "sha256:2a5e83e734556bd3f36f836f6c6d0ff3127914be96ebeda409d726f6fdc8a498"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:698028452697e65b8aacb422170747bfaf25e67ad579cb5c4ff6910c19dd125d"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4aded8e8230df28f779318c1c4569ffd1a3df0da10b2602d22fcd33186b7af19"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6ba9877d7ed7c4a120dd4efd167680b2d2946631a00eda3d6173d378e90702d2"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:73f92810901d22b6ac55b2a0e001edccfe576e0e5b67fe81389235fde2e72d1c"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6a952248a2f057f8556ed847583b5630d1b840b5a51bf4b2fbe56f374db6c77a"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-win32.whl", hash = "sha256:2639e15d8f85c82deb1217f4dfceeec18f68990198cb7e6d2842070ecf86eb06"}, + {file = "grpcio_tools-1.34.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8bf37e1f3d4f8bc5df130aa682a256a8c1747e2498a7a68a00980050d5221d6"}, ] guzzle-sphinx-theme = [ {file = "guzzle_sphinx_theme-0.7.11.tar.gz", hash = "sha256:9b8c1639c343c02c3f3db7df660ddf6f533b5454ee92a5f7b02edaa573fed3e6"}, @@ -1043,8 +942,8 @@ imagesize = [ {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, ] importlib-metadata = [ - {file = "importlib_metadata-3.1.0-py2.py3-none-any.whl", hash = "sha256:590690d61efdd716ff82c39ca9a9d4209252adfe288a4b5721181050acbd4175"}, - {file = "importlib_metadata-3.1.0.tar.gz", hash = "sha256:d9b8a46a0885337627a6430db287176970fff18ad421becec1d64cfc763c2099"}, + {file = "importlib_metadata-3.3.0-py3-none-any.whl", hash = "sha256:bf792d480abbd5eda85794e4afb09dd538393f7d6e6ffef6e9f03d2014cf9450"}, + {file = "importlib_metadata-3.3.0.tar.gz", hash = "sha256:5c5a2720817414a6c41f0a49993908068243ae02c1635a228126519b509c8aed"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -1115,6 +1014,29 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.4.3-cp38-cp38-win32.whl", hash = "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd"}, {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, ] +manimpango = [ + {file = "manimpango-0.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2f7577430cdc0640d886166b1a81cf5bc2f2b00f9b104c6253e8aa701f9a19ac"}, + {file = "manimpango-0.1.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366ceaa8b434ec55550e59b48200f2be9e954120d8e13653d198c8d8f3418cd8"}, + {file = "manimpango-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:737bd2c556fe8348e78a8b840a663111032950d80f701ccfc95e243b96f8bec6"}, + {file = "manimpango-0.1.0-cp36-cp36m-win32.whl", hash = "sha256:25af0ba19071691b734c8e8bb4adb76a5526e654087e424ff7fe9aac53313ac8"}, + {file = "manimpango-0.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4672bf880e03d12a2a4f8e09e4687fb5c091e0db0521c0507b8c6344362aa5bd"}, + {file = "manimpango-0.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:945b6abb73256c0d8abf232ca780801027a8e4501c16b32d1b5091da3d5c9d66"}, + {file = "manimpango-0.1.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:29dd5517fd213a975b23f8e0e442ef5cbdc793a639ba7833188b13b458b61bd4"}, + {file = "manimpango-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c5a5583d05fb1c33ab720e3a710356e803a6567afc7a0ebad4e0f1d93e629a34"}, + {file = "manimpango-0.1.0-cp37-cp37m-win32.whl", hash = "sha256:02b9e59a8eb739f2bc8311611f49169c570bb980dd76ce6e5d3ab2074ada344f"}, + {file = "manimpango-0.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:241cc81adbf56538940cbda7254e566e5c9419b19d6fae42b0dfe4755b7a5b80"}, + {file = "manimpango-0.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:df32da5adbd0ef6c03a46e4a3fe8fa512f9cb235aae8cad5607029e8e3d6aabb"}, + {file = "manimpango-0.1.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:2d7b69903fc669280ed654e6055aecefcb9bbee2959418f4d1bbf31a9fbe56b6"}, + {file = "manimpango-0.1.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9c9c0f3bea5d1273bd66e8367f0317741bdedd63f579370cfa72d4b60c99a12e"}, + {file = "manimpango-0.1.0-cp38-cp38-win32.whl", hash = "sha256:b6585e5c72c18f1e0b50a08f41980aef189087e728f5a5d14d07d18a3ed7687a"}, + {file = "manimpango-0.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3707a012c6232fc97196e0b528e0c862eeea9be775256663cf51ad2b71b4ebec"}, + {file = "manimpango-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9d6b148e09b9bb0a1d8d776223493e70d24b69f6285ed9d49761956eaf3b9b95"}, + {file = "manimpango-0.1.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2b672024a491faf40f8b4e0340c9a4cd8b3d7dd53c6c10525771770cd707a673"}, + {file = "manimpango-0.1.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:9693bb7c118b4431a1ae50ba3df895ca439ccc99bd7d161ade869698553edc24"}, + {file = "manimpango-0.1.0-cp39-cp39-win32.whl", hash = "sha256:c35bb5888ab89de6b7676fff69e64c6ea178c6655fb34e66e6b63754531595b2"}, + {file = "manimpango-0.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c95bb421f19aba4a34f3efe970154aed054119d077a33f929ecd8fec56ec42c"}, + {file = "manimpango-0.1.0.tar.gz", hash = "sha256:4e8854256059c30d9b2f7c46d5b5368a8df7048ea7bfbe2dfea9ff8be2b1de60"}, +] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, @@ -1222,22 +1144,13 @@ numpy = [ {file = "numpy-1.19.4.zip", hash = "sha256:141ec3a3300ab89c7f2b0775289954d193cc8edb621ea05f99db9cb181530512"}, ] packaging = [ - {file = "packaging-20.7-py2.py3-none-any.whl", hash = "sha256:eb41423378682dadb7166144a4926e443093863024de508ca5c9737d6bc08376"}, - {file = "packaging-20.7.tar.gz", hash = "sha256:05af3bb85d320377db281cf254ab050e1a7ebcbf5410685a9a407e18a1f81236"}, -] -pangocairocffi = [ - {file = "pangocairocffi-0.4.0.tar.gz", hash = "sha256:ebebffb16861aca36823d39dfbcabe963eb4af03035ed9e0a701bd97a0e16af0"}, -] -pangocffi = [ - {file = "pangocffi-0.8.0.tar.gz", hash = "sha256:f8b03bc7dcc85e70f8cc58ca2b56b2077511a44c3d5c20bb0abdcbc66132288d"}, + {file = "packaging-20.8-py2.py3-none-any.whl", hash = "sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858"}, + {file = "packaging-20.8.tar.gz", hash = "sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093"}, ] pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] -pathtools = [ - {file = "pathtools-0.1.2.tar.gz", hash = "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0"}, -] pillow = [ {file = "Pillow-8.0.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:b63d4ff734263ae4ce6593798bcfee6dbfb00523c82753a3a03cbc05555a9cc3"}, {file = "Pillow-8.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5f9403af9c790cc18411ea398a6950ee2def2a830ad0cfe6dc9122e6d528b302"}, @@ -1296,8 +1209,8 @@ protobuf = [ {file = "protobuf-3.14.0.tar.gz", hash = "sha256:1d63eb389347293d8915fb47bee0951c7b5dab522a4a60118b9a18f33e21f8ce"}, ] py = [ - {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, - {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, + {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, + {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pycairo = [ {file = "pycairo-1.20.0-cp36-cp36m-win32.whl", hash = "sha256:e5a3433690c473e073a9917dc8f1fc7dc8b9af7b201bf372894b8ad70d960c6d"}, @@ -1310,17 +1223,13 @@ pycairo = [ {file = "pycairo-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:57166119e424d71eccdba6b318bd731bdabd17188e2ba10d4f315f7bf16ace3f"}, {file = "pycairo-1.20.0.tar.gz", hash = "sha256:5695a10cb7f9ae0d01f665b56602a845b0a8cb17e2123bfece10c2e58552468c"}, ] -pycparser = [ - {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, - {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, -] pydub = [ {file = "pydub-0.24.1-py2.py3-none-any.whl", hash = "sha256:25fdfbbfd4c69363006a27c7bd2346c4b886a0dd3da264c14d858b71a9593284"}, {file = "pydub-0.24.1.tar.gz", hash = "sha256:630c68bfff9bb27cbc5e1f02923f717c3bc5f4d73fd685fda08b6ce90f76dc69"}, ] pygments = [ - {file = "Pygments-2.7.2-py3-none-any.whl", hash = "sha256:88a0bbcd659fcb9573703957c6b9cff9fab7295e6e76db54c9d00ae42df32773"}, - {file = "Pygments-2.7.2.tar.gz", hash = "sha256:381985fcc551eb9d37c52088a32914e00517e57f4a21609f48141ba08e193fa0"}, + {file = "Pygments-2.7.3-py3-none-any.whl", hash = "sha256:f275b6c0909e5dafd2d6269a656aa90fa58ebf4a74f8fcf9053195d226b24a08"}, + {file = "Pygments-2.7.3.tar.gz", hash = "sha256:ccf3acacf3782cbed4a989426012f1c535c9a90d3a7fc3f16d231b9372d2b716"}, ] pylint = [ {file = "pylint-2.6.0-py3-none-any.whl", hash = "sha256:bfe68f020f8a0fece830a22dd4d5dddb4ecc6137db04face4c3420a46a52239f"}, @@ -1331,8 +1240,8 @@ pyparsing = [ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pytest = [ - {file = "pytest-6.1.2-py3-none-any.whl", hash = "sha256:4288fed0d9153d9646bfcdf0c0428197dba1ecb27a33bb6e031d002fa88653fe"}, - {file = "pytest-6.1.2.tar.gz", hash = "sha256:c0a7e94a8cdbc5422a51ccdad8e6f1024795939cc89159a0ae7f0b316ad3823e"}, + {file = "pytest-6.2.1-py3-none-any.whl", hash = "sha256:1969f797a1a0dbd8ccf0fecc80262312729afea9c17f1d70ebf85c5e76c6f7c8"}, + {file = "pytest-6.2.1.tar.gz", hash = "sha256:66e419b1899bc27346cb2c993e12c5e5e8daba9073c1fbce33b9807abc95c306"}, ] python-dateutil = [ {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"}, @@ -1343,8 +1252,8 @@ pytz = [ {file = "pytz-2020.4.tar.gz", hash = "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268"}, ] recommonmark = [ - {file = "recommonmark-0.6.0-py2.py3-none-any.whl", hash = "sha256:2ec4207a574289355d5b6ae4ae4abb29043346ca12cdd5f07d374dc5987d2852"}, - {file = "recommonmark-0.6.0.tar.gz", hash = "sha256:29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb"}, + {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, + {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, ] regex = [ {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, @@ -1390,8 +1299,8 @@ regex = [ {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, ] requests = [ - {file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"}, - {file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"}, + {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, + {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] rich = [ {file = "rich-6.2.0-py3-none-any.whl", hash = "sha256:fa55d5d6ba9a0df1f1c95518891b57b13f1d45548a9a198a87b093fceee513ec"}, @@ -1433,8 +1342,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, ] sphinx = [ - {file = "Sphinx-3.3.1-py3-none-any.whl", hash = "sha256:d4e59ad4ea55efbb3c05cde3bfc83bfc14f0c95aa95c3d75346fcce186a47960"}, - {file = "Sphinx-3.3.1.tar.gz", hash = "sha256:1e8d592225447104d1172be415bc2972bd1357e3e12fdc76edf2261105db4300"}, + {file = "Sphinx-3.4.0-py3-none-any.whl", hash = "sha256:77c801947eb86457822e01eadd5c2e2de020db0201f1f9fc98b0927980b6d212"}, + {file = "Sphinx-3.4.0.tar.gz", hash = "sha256:4dcde313801f23ea4789ac31e5405e240cb758b5d375804807f2f3cc3c396bfa"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, @@ -1465,8 +1374,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.54.0-py2.py3-none-any.whl", hash = "sha256:9e7b8ab0ecbdbf0595adadd5f0ebbb9e69010e0bd48bbb0c15e550bf2a5292df"}, - {file = "tqdm-4.54.0.tar.gz", hash = "sha256:5c0d04e06ccc0da1bd3fa5ae4550effcce42fcad947b4a6cafa77bdc9b09ff22"}, + {file = "tqdm-4.54.1-py2.py3-none-any.whl", hash = "sha256:d4f413aecb61c9779888c64ddf0c62910ad56dcbe857d8922bb505d4dbff0df1"}, + {file = "tqdm-4.54.1.tar.gz", hash = "sha256:38b658a3e4ecf9b4f6f8ff75ca16221ae3378b2e175d846b6b33ea3a20852cf5"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, @@ -1510,7 +1419,23 @@ urllib3 = [ {file = "urllib3-1.26.2.tar.gz", hash = "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08"}, ] watchdog = [ - {file = "watchdog-0.10.4.tar.gz", hash = "sha256:e38bffc89b15bafe2a131f0e1c74924cf07dcec020c2e0a26cccd208831fcd43"}, + {file = "watchdog-1.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e2a531e71be7b5cc3499ae2d1494d51b6a26684bcc7c3146f63c810c00e8a3cc"}, + {file = "watchdog-1.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7c73edef48f4ceeebb987317a67e0080e5c9228601ff67b3c4062fa020403c7"}, + {file = "watchdog-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e6574395aa6c1e14e0f030d9d7f35c2340a6cf95d5671354ce876ac3ffdd4d"}, + {file = "watchdog-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27d9b4666938d5d40afdcdf2c751781e9ce36320788b70208d0f87f7401caf93"}, + {file = "watchdog-1.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f1ade0d0802503fda4340374d333408831cff23da66d7e711e279ba50fe6c4a"}, + {file = "watchdog-1.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f1d0e878fd69129d0d68b87cee5d9543f20d8018e82998efb79f7e412d42154a"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d948ad9ab9aba705f9836625b32e965b9ae607284811cd98334423f659ea537a"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:101532b8db506559e52a9b5d75a308729b3f68264d930670e6155c976d0e52a0"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:b1d723852ce90a14abf0ec0ca9e80689d9509ee4c9ee27163118d87b564a12ac"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:68744de2003a5ea2dfbb104f9a74192cf381334a9e2c0ed2bbe1581828d50b61"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:602dbd9498592eacc42e0632c19781c3df1728ef9cbab555fab6778effc29eeb"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:5f1f3b65142175366ba94c64d8d4c8f4015825e0beaacee1c301823266b47b9b"}, + {file = "watchdog-1.0.2-py3-none-win32.whl", hash = "sha256:57f05e55aa603c3b053eed7e679f0a83873c540255b88d58c6223c7493833bac"}, + {file = "watchdog-1.0.2-py3-none-win_amd64.whl", hash = "sha256:f84146f7864339c8addf2c2b9903271df21d18d2c721e9a77f779493234a82b5"}, + {file = "watchdog-1.0.2-py3-none-win_ia64.whl", hash = "sha256:ee21aeebe6b3e51e4ba64564c94cee8dbe7438b9cb60f0bb350c4fa70d1b52c2"}, + {file = "watchdog-1.0.2.tar.gz", hash = "sha256:376cbc2a35c0392b0fe7ff16fbc1b303fd99d4dd9911ab5581ee9d69adc88982"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, diff --git a/pyproject.toml b/pyproject.toml index 80525d17e0..26c31d0c46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,13 +35,10 @@ pydub = "*" pygments = "*" rich = "^6.0" pycairo = "^1.19" -pangocffi = "^0.8.0" -pangocairocffi = "^0.4.0" -cairocffi = "^1.1.0" +manimpango = "^0" grpcio = { version = "*", optional = true } grpcio-tools = { version = "*", optional = true } watchdog = { version = "*", optional = true } -manimpango = "^0.1.0" [tool.poetry.extras] js_renderer = ["grpcio","grpcio-tools","watchdog"] From 8ae1ab19ba63786be2e93bde7fde309ad4d97060 Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 19:46:48 +0530 Subject: [PATCH 04/16] remove MarkupText from __all__ --- manim/mobject/svg/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 99a4954914..2e6291ee80 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -42,7 +42,7 @@ def construct(self): """ -__all__ = ["Text", "Paragraph", "CairoText", "MarkupText"] +__all__ = ["Text", "Paragraph", "CairoText"] import copy From 6cdc57ca3fa7852107655a9337cca55f92e2144f Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 19:54:06 +0530 Subject: [PATCH 05/16] Fix CairoText --- manim/mobject/svg/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 2e6291ee80..f6c65db378 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -383,7 +383,7 @@ def text2svg(self): offset_x = 0 last_line_num = 0 for setting in settings: - font = setting.font + font = setting.font.decode('utf-8') slant = self.str2slant(setting.slant) weight = self.str2weight(setting.weight) text = self.text[setting.start : setting.end].replace("\n", " ") From 93b81972ee3d6e87efc5f55c264d23c35e7f145e Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 20:01:01 +0530 Subject: [PATCH 06/16] Remove test for Pango --- tests/test_pango.py | 156 -------------------------------------------- 1 file changed, 156 deletions(-) delete mode 100644 tests/test_pango.py diff --git a/tests/test_pango.py b/tests/test_pango.py deleted file mode 100644 index 3c393673c5..0000000000 --- a/tests/test_pango.py +++ /dev/null @@ -1,156 +0,0 @@ -"""Tests :class:`Text` by comparing SVG files created. -""" -import os -import re - -import cairocffi -import pangocairocffi -import pangocffi -from manim import START_X, START_Y, Text, SVGMobject, ITALIC - -RTL_TEXT: str = """صباح الخير -مرحبا جميعا""" - -WIDTH: int = 600 -HEIGTH: int = 400 -folder: str = os.path.abspath(os.path.join("media", "texts")) -filename: str = os.path.join(folder, "hello.svg") - - -def remove_last_M(file_path: str) -> None: # pylint: disable=invalid-name - """Format SVG file so that it can be compared""" - with open(file_path, "r") as fpr: - content = fpr.read() - content = re.sub(r'Z M [^A-Za-z]*? "\/>', 'Z "/>', content) - with open(file_path, "w") as fpw: - fpw.write(content) - - -def compare_SVGObject_with_PangoText( # pylint: disable=invalid-name - text: Text, svg_path: str -) -> bool: - """Checks for the path_string formed by Text and Formed SVG file. - Uses SVGMobject as it parses the SVG and returns the path_string - """ - remove_last_M(svg_path) # to prevent issue displaying - svg = SVGMobject(svg_path) - assert len(text.submobjects) == len(svg.submobjects) - assert (text.points == svg.points).all() - for i in range(len(text.submobjects)): - assert text.submobjects[i].path_string == svg.submobjects[i].path_string - assert ( - text.submobjects[i].sheen_direction == svg.submobjects[i].sheen_direction - ).all() - assert ( - text.submobjects[i].stroke_rgbas == svg.submobjects[i].stroke_rgbas - ).all() - return True - - -def test_general_text_svgobject() -> None: - """Checks number of submobjects generated when directly - called using ``SVGMobject`` - """ - text = "hello" - size = 1 - temp_pango_text = Text(text, size=size) - surface = cairocffi.SVGSurface(filename, WIDTH, HEIGTH) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(WIDTH)) - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size * 10)) - layout.set_font_description(fontdesc) - layout.set_text(text) - pangocairocffi.show_layout(context, layout) - surface.finish() - assert compare_SVGObject_with_PangoText(temp_pango_text, filename) - - -def test_rtl_text_to_svgobject() -> None: - """Checks number of submobjects generated when directly - called using ``SVGMobject``""" - size = 1 - text = RTL_TEXT.replace("\n", "") - temp_pango_text = Text(text, size=1) - surface = cairocffi.SVGSurface(filename, WIDTH, HEIGTH) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(WIDTH)) - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size * 10)) - layout.set_font_description(fontdesc) - layout.set_text(text) - pangocairocffi.show_layout(context, layout) - surface.finish() - assert compare_SVGObject_with_PangoText(temp_pango_text, filename) - - -def test_font_face() -> None: - """Checks font face using submobject len""" - size = 1 - text = RTL_TEXT.replace("\n", "") - font_face = "sans" - temp_pango_text = Text(text, size=1, font=font_face) - surface = cairocffi.SVGSurface(filename, WIDTH, HEIGTH) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(WIDTH)) - fontdesc = pangocffi.FontDescription() - fontdesc.set_family(font_face) - fontdesc.set_size(pangocffi.units_from_double(size * 10)) - layout.set_font_description(fontdesc) - layout.set_text(text) - pangocairocffi.show_layout(context, layout) - surface.finish() - assert compare_SVGObject_with_PangoText(temp_pango_text, filename) - - -def test_whether_svg_file_created() -> None: - """Checks Whether SVG file is created in desired location""" - temp_pango_text = Text("hello", size=1) - theo_path = os.path.abspath( - os.path.join(folder, temp_pango_text.text2hash() + ".svg") - ) - actual_path = os.path.abspath(temp_pango_text.text2svg()) - assert theo_path == actual_path - - -def test_tabs_replace() -> None: - """Checks whether are there in end svg image. - Pango should handle tabs and line breaks.""" - size = 1 - temp_pango_text = Text("hello\thi\nf") - assert temp_pango_text.text == "hellohif" - surface = cairocffi.SVGSurface(filename, WIDTH, HEIGTH) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(WIDTH)) - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size * 10)) - layout.set_font_description(fontdesc) - layout.set_text("hellohif") - pangocairocffi.show_layout(context, layout) - surface.finish() - assert compare_SVGObject_with_PangoText(temp_pango_text, filename) - - -def test_t2s() -> None: - size = 1 - temp_pango_text = Text("Helloworld", t2s={"world": ITALIC}) - surface = cairocffi.SVGSurface(filename, WIDTH, HEIGTH) - context = cairocffi.Context(surface) - context.move_to(START_X, START_Y) - layout = pangocairocffi.create_layout(context) - layout.set_width(pangocffi.units_from_double(WIDTH)) - fontdesc = pangocffi.FontDescription() - fontdesc.set_size(pangocffi.units_from_double(size * 10)) - layout.set_font_description(fontdesc) - layout.set_markup('Helloworld') # yay, pango markup - pangocairocffi.show_layout(context, layout) - surface.finish() - assert compare_SVGObject_with_PangoText(temp_pango_text, filename) From 4315979c5890463dd47d1dc5b483eca14fa26b1a Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 20:10:48 +0530 Subject: [PATCH 07/16] Run black --- manim/mobject/svg/text_mobject.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index f6c65db378..5ace300a08 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -383,7 +383,7 @@ def text2svg(self): offset_x = 0 last_line_num = 0 for setting in settings: - font = setting.font.decode('utf-8') + font = setting.font.decode("utf-8") slant = self.str2slant(setting.slant) weight = self.str2weight(setting.weight) text = self.text[setting.start : setting.end].replace("\n", " ") From c6a59d46f55a58304467cba12668f32be1dfe46a Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 20:24:23 +0530 Subject: [PATCH 08/16] Update ManimPango --- poetry.lock | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9c59a2106e..3ce51e07cf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -287,7 +287,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "manimpango" -version = "0.1.0" +version = "0.1.1" description = "Bindings for Pango for using with Manim." category = "main" optional = false @@ -1015,27 +1015,23 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, ] manimpango = [ - {file = "manimpango-0.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2f7577430cdc0640d886166b1a81cf5bc2f2b00f9b104c6253e8aa701f9a19ac"}, - {file = "manimpango-0.1.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366ceaa8b434ec55550e59b48200f2be9e954120d8e13653d198c8d8f3418cd8"}, - {file = "manimpango-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:737bd2c556fe8348e78a8b840a663111032950d80f701ccfc95e243b96f8bec6"}, - {file = "manimpango-0.1.0-cp36-cp36m-win32.whl", hash = "sha256:25af0ba19071691b734c8e8bb4adb76a5526e654087e424ff7fe9aac53313ac8"}, - {file = "manimpango-0.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4672bf880e03d12a2a4f8e09e4687fb5c091e0db0521c0507b8c6344362aa5bd"}, - {file = "manimpango-0.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:945b6abb73256c0d8abf232ca780801027a8e4501c16b32d1b5091da3d5c9d66"}, - {file = "manimpango-0.1.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:29dd5517fd213a975b23f8e0e442ef5cbdc793a639ba7833188b13b458b61bd4"}, - {file = "manimpango-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c5a5583d05fb1c33ab720e3a710356e803a6567afc7a0ebad4e0f1d93e629a34"}, - {file = "manimpango-0.1.0-cp37-cp37m-win32.whl", hash = "sha256:02b9e59a8eb739f2bc8311611f49169c570bb980dd76ce6e5d3ab2074ada344f"}, - {file = "manimpango-0.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:241cc81adbf56538940cbda7254e566e5c9419b19d6fae42b0dfe4755b7a5b80"}, - {file = "manimpango-0.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:df32da5adbd0ef6c03a46e4a3fe8fa512f9cb235aae8cad5607029e8e3d6aabb"}, - {file = "manimpango-0.1.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:2d7b69903fc669280ed654e6055aecefcb9bbee2959418f4d1bbf31a9fbe56b6"}, - {file = "manimpango-0.1.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9c9c0f3bea5d1273bd66e8367f0317741bdedd63f579370cfa72d4b60c99a12e"}, - {file = "manimpango-0.1.0-cp38-cp38-win32.whl", hash = "sha256:b6585e5c72c18f1e0b50a08f41980aef189087e728f5a5d14d07d18a3ed7687a"}, - {file = "manimpango-0.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3707a012c6232fc97196e0b528e0c862eeea9be775256663cf51ad2b71b4ebec"}, - {file = "manimpango-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9d6b148e09b9bb0a1d8d776223493e70d24b69f6285ed9d49761956eaf3b9b95"}, - {file = "manimpango-0.1.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2b672024a491faf40f8b4e0340c9a4cd8b3d7dd53c6c10525771770cd707a673"}, - {file = "manimpango-0.1.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:9693bb7c118b4431a1ae50ba3df895ca439ccc99bd7d161ade869698553edc24"}, - {file = "manimpango-0.1.0-cp39-cp39-win32.whl", hash = "sha256:c35bb5888ab89de6b7676fff69e64c6ea178c6655fb34e66e6b63754531595b2"}, - {file = "manimpango-0.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c95bb421f19aba4a34f3efe970154aed054119d077a33f929ecd8fec56ec42c"}, - {file = "manimpango-0.1.0.tar.gz", hash = "sha256:4e8854256059c30d9b2f7c46d5b5368a8df7048ea7bfbe2dfea9ff8be2b1de60"}, + {file = "manimpango-0.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bedd1bf5be4f3e27175226e7cc95d45ef943ef2ef05b6d6bd1feb2da0ea2fc7e"}, + {file = "manimpango-0.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:5fad9f14058cb8a707d5bcaac7c254e3e72ab1754c49fa4e51beb787b808f3d3"}, + {file = "manimpango-0.1.1-cp36-cp36m-win32.whl", hash = "sha256:0c593c93a3bcb9bab7d9f8678bc5783faf6ae256a6009a4954c759ea63a9a356"}, + {file = "manimpango-0.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8e08a5023b83db85ff0890afa551f81a72a83d66a74ecbafad01ee245cd0ea52"}, + {file = "manimpango-0.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:eaddcc8a54e97cc58eee9a10dad459fc62d2201fd1d9ff3722decbb936bb3911"}, + {file = "manimpango-0.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1c7dc7eeeff7dc624e6e23ff6d35794252d608c2b9fe30aad99127f6ae2dad9f"}, + {file = "manimpango-0.1.1-cp37-cp37m-win32.whl", hash = "sha256:214cf126df84d8bdc9043e905a30293941330d8f3798e5bccb25a292958dfcfc"}, + {file = "manimpango-0.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea8d98c0cd9c960863c0b8254245a0be2e4c78d77f48e700db170ae27f11ea7"}, + {file = "manimpango-0.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9377d4fb00567afebcc371af85cf422f7cd05f420e6f277d7e6c4aa0f93f24a9"}, + {file = "manimpango-0.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a5491894567fe095337a1007b5650d5e9c9d22360530cf33a1736d2d44514068"}, + {file = "manimpango-0.1.1-cp38-cp38-win32.whl", hash = "sha256:dcdac61dd57b1bc49bd92e67b806cb013c756c27bf00471039537069e55c3c10"}, + {file = "manimpango-0.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:eb41de07c24c4eb6e5d1c2e4234d14012f68fdeadb8c8a0ef942b608e4d423b1"}, + {file = "manimpango-0.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:188477df24d667798ce874a6beb83b5c9eab6900d487967b22527ecee1b88601"}, + {file = "manimpango-0.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1e311e343aa82e5d813b72ac083575a57eba9f7c0d01eda32bb795c57236eb04"}, + {file = "manimpango-0.1.1-cp39-cp39-win32.whl", hash = "sha256:1d41cf62595472adc2c2aa2c68da613dec7d4334a7fa84d18fb5148c1cdb9bbc"}, + {file = "manimpango-0.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:1049a3030cd70875102323cb865ef6d9c571a6f8b471aaef857f355b07ec28f2"}, + {file = "manimpango-0.1.1.tar.gz", hash = "sha256:7384764487da7fd5202d39c8c153c159bcd50cf8ea42aeef8186ab7ea1eb0dc5"}, ] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, From 9df889daeede34e426532e0eb9f487b2ec98192c Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 20:42:10 +0530 Subject: [PATCH 09/16] Try fixing MacOS CI by restricting version of grpc --- poetry.lock | 38 ++++++++++++++++++-------------------- pyproject.toml | 4 ++-- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3ce51e07cf..41f1a2cd2b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -360,6 +360,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "pathtools" +version = "0.1.2" +description = "File system general utilities" +category = "main" +optional = true +python-versions = "*" + [[package]] name = "pillow" version = "8.0.1" @@ -733,11 +741,14 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "watchdog" -version = "1.0.2" +version = "0.10.4" description = "Filesystem events monitoring" category = "main" optional = true -python-versions = ">=3.6" +python-versions = "*" + +[package.dependencies] +pathtools = ">=0.1.1" [package.extras] watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] @@ -768,7 +779,7 @@ js_renderer = ["grpcio", "grpcio-tools", "watchdog"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "1ad81de17a5e5801c00a9f45f9db9380dc54e2685f55c3dbf52f26960877a07b" +content-hash = "b066404ddfb818c03b81325b355d363ae8f8c8e25ec8ed124a72d4a3de6d5138" [metadata.files] alabaster = [ @@ -1147,6 +1158,9 @@ pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] +pathtools = [ + {file = "pathtools-0.1.2.tar.gz", hash = "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0"}, +] pillow = [ {file = "Pillow-8.0.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:b63d4ff734263ae4ce6593798bcfee6dbfb00523c82753a3a03cbc05555a9cc3"}, {file = "Pillow-8.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5f9403af9c790cc18411ea398a6950ee2def2a830ad0cfe6dc9122e6d528b302"}, @@ -1415,23 +1429,7 @@ urllib3 = [ {file = "urllib3-1.26.2.tar.gz", hash = "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08"}, ] watchdog = [ - {file = "watchdog-1.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e2a531e71be7b5cc3499ae2d1494d51b6a26684bcc7c3146f63c810c00e8a3cc"}, - {file = "watchdog-1.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7c73edef48f4ceeebb987317a67e0080e5c9228601ff67b3c4062fa020403c7"}, - {file = "watchdog-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e6574395aa6c1e14e0f030d9d7f35c2340a6cf95d5671354ce876ac3ffdd4d"}, - {file = "watchdog-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27d9b4666938d5d40afdcdf2c751781e9ce36320788b70208d0f87f7401caf93"}, - {file = "watchdog-1.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f1ade0d0802503fda4340374d333408831cff23da66d7e711e279ba50fe6c4a"}, - {file = "watchdog-1.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f1d0e878fd69129d0d68b87cee5d9543f20d8018e82998efb79f7e412d42154a"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d948ad9ab9aba705f9836625b32e965b9ae607284811cd98334423f659ea537a"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:101532b8db506559e52a9b5d75a308729b3f68264d930670e6155c976d0e52a0"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:b1d723852ce90a14abf0ec0ca9e80689d9509ee4c9ee27163118d87b564a12ac"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:68744de2003a5ea2dfbb104f9a74192cf381334a9e2c0ed2bbe1581828d50b61"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:602dbd9498592eacc42e0632c19781c3df1728ef9cbab555fab6778effc29eeb"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18"}, - {file = "watchdog-1.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:5f1f3b65142175366ba94c64d8d4c8f4015825e0beaacee1c301823266b47b9b"}, - {file = "watchdog-1.0.2-py3-none-win32.whl", hash = "sha256:57f05e55aa603c3b053eed7e679f0a83873c540255b88d58c6223c7493833bac"}, - {file = "watchdog-1.0.2-py3-none-win_amd64.whl", hash = "sha256:f84146f7864339c8addf2c2b9903271df21d18d2c721e9a77f779493234a82b5"}, - {file = "watchdog-1.0.2-py3-none-win_ia64.whl", hash = "sha256:ee21aeebe6b3e51e4ba64564c94cee8dbe7438b9cb60f0bb350c4fa70d1b52c2"}, - {file = "watchdog-1.0.2.tar.gz", hash = "sha256:376cbc2a35c0392b0fe7ff16fbc1b303fd99d4dd9911ab5581ee9d69adc88982"}, + {file = "watchdog-0.10.4.tar.gz", hash = "sha256:e38bffc89b15bafe2a131f0e1c74924cf07dcec020c2e0a26cccd208831fcd43"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, diff --git a/pyproject.toml b/pyproject.toml index 26c31d0c46..15ca6eed83 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,9 +36,9 @@ pygments = "*" rich = "^6.0" pycairo = "^1.19" manimpango = "^0" -grpcio = { version = "*", optional = true } +grpcio = { version = "^1.33", optional = true } grpcio-tools = { version = "*", optional = true } -watchdog = { version = "*", optional = true } +watchdog = { version = "^0", optional = true } [tool.poetry.extras] js_renderer = ["grpcio","grpcio-tools","watchdog"] From 45b1dd6f7d65a03c8e7a00a46802a43e0c8a3981 Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 23 Dec 2020 20:56:15 +0530 Subject: [PATCH 10/16] Try fixing MacOS CI - 2 --- poetry.lock | 230 +++++++++++++++++++++++++------------------------ pyproject.toml | 6 +- 2 files changed, 119 insertions(+), 117 deletions(-) diff --git a/poetry.lock b/poetry.lock index 41f1a2cd2b..9d56ddb5f9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -167,7 +167,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "grpcio" -version = "1.34.0" +version = "1.33.2" description = "HTTP/2-based RPC framework" category = "main" optional = true @@ -177,18 +177,18 @@ python-versions = "*" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.34.0)"] +protobuf = ["grpcio-tools (>=1.33.2)"] [[package]] name = "grpcio-tools" -version = "1.34.0" +version = "1.33.2" description = "Protobuf code generator for gRPC" category = "main" optional = true python-versions = "*" [package.dependencies] -grpcio = ">=1.34.0" +grpcio = ">=1.33.2" protobuf = ">=3.5.0.post1,<4.0dev" [[package]] @@ -360,14 +360,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "pathtools" -version = "0.1.2" -description = "File system general utilities" -category = "main" -optional = true -python-versions = "*" - [[package]] name = "pillow" version = "8.0.1" @@ -741,14 +733,11 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "watchdog" -version = "0.10.4" +version = "1.0.2" description = "Filesystem events monitoring" category = "main" optional = true -python-versions = "*" - -[package.dependencies] -pathtools = ">=0.1.1" +python-versions = ">=3.6" [package.extras] watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] @@ -779,7 +768,7 @@ js_renderer = ["grpcio", "grpcio-tools", "watchdog"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "b066404ddfb818c03b81325b355d363ae8f8c8e25ec8ed124a72d4a3de6d5138" +content-hash = "466e03c57b5237182c6cc7ec99e6d68ff8e3375bfc5be53033d26316ae68dbe4" [metadata.files] alabaster = [ @@ -846,100 +835,100 @@ docutils = [ {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] grpcio = [ - {file = "grpcio-1.34.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:e2ffa46db9103706640c74886ac23ed18d1487a8523cc128da239e1d5a4e3301"}, - {file = "grpcio-1.34.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:843436e69c37eb45b0285fa42f7acc06d147f2e9c1d515b0f901e94d40107e79"}, - {file = "grpcio-1.34.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a403ed4d8fcc441a2c2ec9ede838b0ae5f9da996d950cf2ff9f82242b496e0a7"}, - {file = "grpcio-1.34.0-cp27-cp27m-win32.whl", hash = "sha256:dc45f5750ce50f34f20a0607efae5c797d01681a44465b8287bebef1e9847d5b"}, - {file = "grpcio-1.34.0-cp27-cp27m-win_amd64.whl", hash = "sha256:2fd4a80f267aa258f5a74df5fe243eff80299a4f5b356c1da53f6f5793bbbf4b"}, - {file = "grpcio-1.34.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:f2e4d64675351a058f9cb35fe390ca0956bd2926171bfb7c87596a1ee10ff6ba"}, - {file = "grpcio-1.34.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:4a2c85cd4a67c36fe12535fe32eb336635843d1eb31d3fa301444e60a8df9c90"}, - {file = "grpcio-1.34.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:32ad56f6d3d7e699f9a0d62719f2de9092e79f444d875d70f58cf7f8bb19684c"}, - {file = "grpcio-1.34.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:e69ac6fc9096bbb43f5276655661db746233cd320808e0d302198eb43dc7bd04"}, - {file = "grpcio-1.34.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:5b105adb44486fb594b8d8142b5d4fbe50cb125c77ac7d270f5d0277ce5c554a"}, - {file = "grpcio-1.34.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:923a3b18badc3749c4d715216934f62f46a818790e325ece6184d07e7d6c7f73"}, - {file = "grpcio-1.34.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9579f22222ac89ceee64c1101cced6434d9f6b12078b43ece0f9d8ebdb657f73"}, - {file = "grpcio-1.34.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:dfa098a6ff8d1b68ed7bd655150ee91f57c29042c093ff51113176aded3f0071"}, - {file = "grpcio-1.34.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:32fbc78d558d9468a4b16f79f4130daec8e431bc7a3b1775b0e98f09a7ab45a2"}, - {file = "grpcio-1.34.0-cp35-cp35m-win32.whl", hash = "sha256:205eda06d8aeffc87a1e29ff1f090546adf0b6e766378cc4c13686534397fdb4"}, - {file = "grpcio-1.34.0-cp35-cp35m-win_amd64.whl", hash = "sha256:2ea864ae3d3abc99d3988d1d27dee3f6350b60149ccf810a89cd9a9d02a675d6"}, - {file = "grpcio-1.34.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:5d8108b240fd5b8a0483f95ab2651fe2d633311faae93a12938ea06cf61a5efd"}, - {file = "grpcio-1.34.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:bda0f52eb1279a7119526df2ef33ea2808691120daf9effaf60ca0c07f76058a"}, - {file = "grpcio-1.34.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:c89b6a3eca8eae10eea78896ccfdc9d04aa2f7b2ee96de20246e5c96494c68f5"}, - {file = "grpcio-1.34.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa834f4c70b9df83d5af610097747c224513d59af1f03e8c06bca9a7d81fd1a3"}, - {file = "grpcio-1.34.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:20606ec7c265f81c5a0226f69842dc8dde66d921968ab9448e59d440cf98bebf"}, - {file = "grpcio-1.34.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:72b6a89aabf937d706946230f5aa13bdf7d2a42874810fa54436c647577b543e"}, - {file = "grpcio-1.34.0-cp36-cp36m-win32.whl", hash = "sha256:49da07ae43c552280b8b4c70617f9b589588404c2545d6eba2c55179b3d836af"}, - {file = "grpcio-1.34.0-cp36-cp36m-win_amd64.whl", hash = "sha256:beef6be49ada569edf3b73fd4eb57d6c2af7e10c0c82a210dbe51de7c4a1ed53"}, - {file = "grpcio-1.34.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8d92e884f6d67b9a2a4514631d3c9836281044caedb5fd34d4ce2bbec138c87d"}, - {file = "grpcio-1.34.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:e238a554f29d90b0e7fca15e8119b9a7c5f88faacbf9b982751ad54d639b57f8"}, - {file = "grpcio-1.34.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:98b0b6e44c451093354a38b620e6e0df958b0710abd6a0ddd84da84424bce003"}, - {file = "grpcio-1.34.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:bbd3522f821fb5d01049db214fb9f949a8b2d92761c2780a20ff73818efd5360"}, - {file = "grpcio-1.34.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:2f54046ca2a81ff45ec8f6d3d7447ad562adb067c3640c35354e440fd771b625"}, - {file = "grpcio-1.34.0-cp37-cp37m-win32.whl", hash = "sha256:50c4f10e7deff96d197bc6d1988c2a5a0bc6252bbd31d7fb374ce8923f937e7a"}, - {file = "grpcio-1.34.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6fafdba42c26bbdf78948c09a93a8b3a8a509c66c6b4324bc1fb360bf4e82b9d"}, - {file = "grpcio-1.34.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:bd7634f8c49c8467fec5fd9e0d1abb205b0aa61670ff0113ef835ca6548aad3d"}, - {file = "grpcio-1.34.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:69127393fc3513da228bc3908914df2284923e0eacf8d73f21ad387317450317"}, - {file = "grpcio-1.34.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5e8e6035d4f9ab856ab437e381e652b31dfd42443d2243d45bdf4b90adaf3559"}, - {file = "grpcio-1.34.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:95de4ad9ae39590668e3330d414253f672aedd46cc107d7f71b4a2268f3d6066"}, - {file = "grpcio-1.34.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a1024006fe61ee7e43e7099faf08f4508ea0c944a1558e8d715a5b4556937ace"}, - {file = "grpcio-1.34.0-cp38-cp38-win32.whl", hash = "sha256:dea35dcf09aee91552cb4b3e250efdbcb79564b5b5517246bcbead8d5871e291"}, - {file = "grpcio-1.34.0-cp38-cp38-win_amd64.whl", hash = "sha256:e95bda60c584b3deb5c37babb44d4300cf4bf3a6c43198a244ddcaddca3fde3a"}, - {file = "grpcio-1.34.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c88ce184973fe2035ffa176eb08cd492db090505e6b1ddc68b5cc1e0b01a07a0"}, - {file = "grpcio-1.34.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:57a30f9df0f5342e4dad384e7023b9f88742c325838da977828c37f49eb8940a"}, - {file = "grpcio-1.34.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:924d5e8b18942ebea1260e60be7e2bde2a3587ea386190b442790f84180bf372"}, - {file = "grpcio-1.34.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:43fafebcc2e81d012f7147a0ddf9be69864c40fc4edd9844937eba0020508297"}, - {file = "grpcio-1.34.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:9550b7c9d2f11579b484accc6183e02ebe33ce80a0ff15f5c28895df6b3d3108"}, - {file = "grpcio-1.34.0-cp39-cp39-win32.whl", hash = "sha256:d16f7f5a10bf24640fa639974d409c220e587b3e2fa2620af00d43ba36dafc2c"}, - {file = "grpcio-1.34.0-cp39-cp39-win_amd64.whl", hash = "sha256:25958bd7c6773e6de79781cc0d6f19d0c82332984dd07ef238889e93485d5afc"}, - {file = "grpcio-1.34.0.tar.gz", hash = "sha256:f98f746cacbaa681de0bcd90d7aa77b440e3e1327a9988f6a2b580d54e27d4c3"}, + {file = "grpcio-1.33.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c5030be8a60fb18de1fc8d93d130d57e4296c02f229200df814f6578da00429e"}, + {file = "grpcio-1.33.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5b21d3de520a699cb631cfd3a773a57debeb36b131be366bf832153405cc5404"}, + {file = "grpcio-1.33.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b412f43c99ca72769306293ba83811b241d41b62ca8f358e47e0fdaf7b6fbbd7"}, + {file = "grpcio-1.33.2-cp27-cp27m-win32.whl", hash = "sha256:703da25278ee7318acb766be1c6d3b67d392920d002b2d0304e7f3431b74f6c1"}, + {file = "grpcio-1.33.2-cp27-cp27m-win_amd64.whl", hash = "sha256:2f2eabfd514af8945ee415083a0f849eea6cb3af444999453bb6666fadc10f54"}, + {file = "grpcio-1.33.2-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:d51ddfb3d481a6a3439db09d4b08447fb9f6b60d862ab301238f37bea8f60a6d"}, + {file = "grpcio-1.33.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:407b4d869ce5c6a20af5b96bb885e3ecaf383e3fb008375919eb26cf8f10d9cd"}, + {file = "grpcio-1.33.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:abaf30d18874310d4439a23a0afb6e4b5709c4266966401de7c4ae345cc810ee"}, + {file = "grpcio-1.33.2-cp35-cp35m-linux_armv7l.whl", hash = "sha256:f2673c51e8535401c68806d331faba614bcff3ee16373481158a2e74f510b7f6"}, + {file = "grpcio-1.33.2-cp35-cp35m-macosx_10_7_intel.whl", hash = "sha256:65b06fa2db2edd1b779f9b256e270f7a58d60e40121660d8b5fd6e8b88f122ed"}, + {file = "grpcio-1.33.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:514b4a6790d6597fc95608f49f2f13fe38329b2058538095f0502b734b98ffd2"}, + {file = "grpcio-1.33.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4cef3eb2df338abd9b6164427ede961d351c6bf39b4a01448a65f9e795f56575"}, + {file = "grpcio-1.33.2-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:3ac453387add933b6cfbc67cc8635f91ff9895299130fc612c3c4b904e91d82a"}, + {file = "grpcio-1.33.2-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:7d292dabf7ded9c062357f8207e20e94095a397d487ffd25aa213a2c3dff0ab4"}, + {file = "grpcio-1.33.2-cp35-cp35m-win32.whl", hash = "sha256:0aeed3558a0eec0b31700af6072f1c90e8fd5701427849e76bc469554a14b4f5"}, + {file = "grpcio-1.33.2-cp35-cp35m-win_amd64.whl", hash = "sha256:88f2a102cbc67e91f42b4323cec13348bf6255b25f80426088079872bd4f3c5c"}, + {file = "grpcio-1.33.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:affbb739fde390710190e3540acc9f3e65df25bd192cc0aa554f368288ee0ea2"}, + {file = "grpcio-1.33.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ffec0b854d2ed6ee98776c7168c778cdd18503642a68d36c00ba0f96d4ccff7c"}, + {file = "grpcio-1.33.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:7744468ee48be3265db798f27e66e118c324d7831a34fd39d5775bcd5a70a2c4"}, + {file = "grpcio-1.33.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:6a1b5b7e47600edcaeaa42983b1c19e7a5892c6b98bcde32ae2aa509a99e0436"}, + {file = "grpcio-1.33.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:289671cfe441069f617bf23c41b1fa07053a31ff64de918d1016ac73adda2f73"}, + {file = "grpcio-1.33.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:a8c84db387907e8d800c383e4c92f39996343adedf635ae5206a684f94df8311"}, + {file = "grpcio-1.33.2-cp36-cp36m-win32.whl", hash = "sha256:4bb771c4c2411196b778871b519c7e12e87f3fa72b0517b22f952c64ead07958"}, + {file = "grpcio-1.33.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b581ddb8df619402c377c81f186ad7f5e2726ad9f8d57047144b352f83f37522"}, + {file = "grpcio-1.33.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:02a4a637a774382d6ac8e65c0a7af4f7f4b9704c980a0a9f4f7bbc1e97c5b733"}, + {file = "grpcio-1.33.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:592656b10528aa327058d2007f7ab175dc9eb3754b289e24cac36e09129a2f6b"}, + {file = "grpcio-1.33.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c89510381cbf8c8317e14e747a8b53988ad226f0ed240824064a9297b65f921d"}, + {file = "grpcio-1.33.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:7fda62846ef8d86caf06bd1ecfddcae2c7e59479a4ee28808120e170064d36cc"}, + {file = "grpcio-1.33.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:d386630af995fd4de225d550b6806507ca09f5a650f227fddb29299335cda55e"}, + {file = "grpcio-1.33.2-cp37-cp37m-win32.whl", hash = "sha256:bf7de9e847d2d14a0efcd48b290ee181fdbffb2ae54dfa2ec2a935a093730bac"}, + {file = "grpcio-1.33.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7c1ea6ea6daa82031af6eb5b7d1ab56b1193840389ea7cf46d80e98636f8aff5"}, + {file = "grpcio-1.33.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e56ab125b35b1373205b3802f58119e70ffedfe0d7e2821999126058f7c44f"}, + {file = "grpcio-1.33.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0cebba3907441d5c620f7b491a780ed155140fbd590da0886ecfb1df6ad947b9"}, + {file = "grpcio-1.33.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:52143467237bfa77331ed1979dc3e203a1c12511ee37b3ddd9ff41b05804fb10"}, + {file = "grpcio-1.33.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:8cf67b8493bff50fa12b4bc30ab40ce1f1f216eb54145962b525852959b0ab3d"}, + {file = "grpcio-1.33.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:fa78bd55ec652d4a88ba254c8dae623c9992e2ce647bd17ba1a37ca2b7b42222"}, + {file = "grpcio-1.33.2-cp38-cp38-win32.whl", hash = "sha256:143b4fe72c01000fc0667bf62ace402a6518939b3511b3c2bec04d44b1d7591c"}, + {file = "grpcio-1.33.2-cp38-cp38-win_amd64.whl", hash = "sha256:08b6a58c8a83e71af5650f8f879fe14b7b84dce0c4969f3817b42c72989dacf0"}, + {file = "grpcio-1.33.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56e2a985efdba8e2282e856470b684e83a3cadd920f04fcd360b4b826ced0dd3"}, + {file = "grpcio-1.33.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:62ce7e86f11e8c4ff772e63c282fb5a7904274258be0034adf37aa679cf96ba0"}, + {file = "grpcio-1.33.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7f727b8b6d9f92fcab19dbc62ec956d8352c6767b97b8ab18754b2dfa84d784f"}, + {file = "grpcio-1.33.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2d5124284f9d29e4f06f674a12ebeb23fc16ce0f96f78a80a6036930642ae5ab"}, + {file = "grpcio-1.33.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:eff55d318a114742ed2a06972f5daacfe3d5ad0c0c0d9146bcaf10acb427e6be"}, + {file = "grpcio-1.33.2-cp39-cp39-win32.whl", hash = "sha256:dd47fac2878f6102efa211461eb6fa0a6dd7b4899cd1ade6cdcb9fa9748363eb"}, + {file = "grpcio-1.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:89add4f4cda9546f61cb8a6988bc5b22101dd8ca4af610dff6f28105d1f78695"}, + {file = "grpcio-1.33.2.tar.gz", hash = "sha256:21265511880056d19ce4f809ce3fbe2a3fa98ec1fc7167dbdf30a80d3276202e"}, ] grpcio-tools = [ - {file = "grpcio-tools-1.34.0.tar.gz", hash = "sha256:db5a6f0130256d534cbe35eab37d37a448d96f4fd736e5051c6be1aee49cea1d"}, - {file = "grpcio_tools-1.34.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:2f855558a71f512aa9882110aa2358d8c5b336e4718cf55848744c1d488b3c66"}, - {file = "grpcio_tools-1.34.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:852f56847031e5de0f6957da172a2c74ad5a17d2b947720d5891b2d578c01c42"}, - {file = "grpcio_tools-1.34.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:915ade7fea3df556a8a207ccb2976f6c715a50dbdb94a83ce9ec089f20653916"}, - {file = "grpcio_tools-1.34.0-cp27-cp27m-win32.whl", hash = "sha256:378389f013b4dc5bcaf886b8f9d975daed8f9ec3af0a1e9933229b315e5c4c94"}, - {file = "grpcio_tools-1.34.0-cp27-cp27m-win_amd64.whl", hash = "sha256:9d5ae84ef0c1e4dac2fc515361dc8057fb8c8ebc07d0add4a11265107a3ee1be"}, - {file = "grpcio_tools-1.34.0-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:a146cd89ff63dd4caefcc9fdbcb5ac4bea0320e0d6329383ead6c3d777b34c93"}, - {file = "grpcio_tools-1.34.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:0805a0c87a6452137ddb2afa696d25ab56557325a6c5251e09df3ec6f0340d07"}, - {file = "grpcio_tools-1.34.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3dddb5795a4c991b764cf1459d0616c0b3b431deac82a8133518f0b458ca98c6"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-linux_armv7l.whl", hash = "sha256:fcf2820e5b5a18fb533e7e85eac852b659c2bbe817750042d4772bfc8bd5f942"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:a439e2d677bd4fe15e2a371bdf40dfcae82014069c79db5f6d63bc61bd457cf5"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:5267b8034d2c3ad372d551ac68dc314fc46008da8c8f19ec0aba5d9f614215f7"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a91980b101ee4eaf6eb5fe07b7cb0e023e9c0cdc2880d67b6c507becddf42876"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:e7fafc9d3f59ade993225b80006f25e2df2e1643dde93bd3e6ee9b26f081eb8a"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:37c37a80d0c59d44eb5c02a9336f4df13a10d2a34b3753bd9bc8f407430e4190"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-win32.whl", hash = "sha256:b84435532676715c85100a54e6fc48bdeb04962de7f4ddb2c80cdc6fcb1ee781"}, - {file = "grpcio_tools-1.34.0-cp35-cp35m-win_amd64.whl", hash = "sha256:76531079c4b7bca54603e8c2ca16bae78ad05970c3e10f808e6b14625a3d4b16"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:94d25eb9beae25b14a11e47100398efc1248738488a6dd4bbf854eb15d4935c5"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:22d6722813eaba5b0218ce37a7e71d099727063304544782932489ad7b83abde"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:2b420fb6aa533334b6e2b2773fa3a9d98b4c34b8307720c9dad87b9d8bc48412"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:67702f5beef87b54b46b0d513415f9f5817c379496703a7ad0889ff5df40aef0"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:118af1f41cd8956df6a7f0ce5e62ffd85b4e9937e0f7401ebb1f8d865412d47e"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:1d4246aa03afbc61dd0ad60de581b12a1b40ab4d9f5817ca1afdadbefb9f0782"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-win32.whl", hash = "sha256:8698c627740fdfb638f78d91ac316af351a254791ecbfba8385236b02a2c3c46"}, - {file = "grpcio_tools-1.34.0-cp36-cp36m-win_amd64.whl", hash = "sha256:475c46a36dfc1ced031896870d987207bba43b9452669e63374498847a4b6dbd"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:edc3ab63b5f4db0e4b2dbfea1272de5a77dec06341407978df64367ec5090bf5"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:75a9f3678a2665bd543fed0a7bf380c7850a31a15dc576d7f8424268d72fe3b7"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:dc37a038bb8ce131a08a567421e4a9e8f7d638ba166edf7964fbabf05bc202b9"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c36b1ddabd4d79d7abb3649031858dd30cf3d066b8a03454de38b676c91ae14b"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:664f685e22b840b3f71cfaf9307fe8dc33aa80cf67ff7af856269432d0c76435"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-win32.whl", hash = "sha256:562ac734e6f69f0dbae6d5983751c46bf525a935d5c90a59b159382c77baa6f4"}, - {file = "grpcio_tools-1.34.0-cp37-cp37m-win_amd64.whl", hash = "sha256:15bb0b800f73a9a62aff7584d45c36ebc105bf3ed8ba6056abac21402077e093"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:58a455e35c6068f2420a4909b3c332f4d00463cba096b9a3d6ec2383aab27dd1"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:935fb6eb425558ac5354337946c5b2e09c68eaa34937f478cb8368d50b5c4479"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:3fffcb165a742bff95a980b4093a9fed5d403f6375cdd5da73636696974d6e76"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:01a5939c325cb32e82837923ce8b14df8590c885fc23e28cae9dbfbe28acb69f"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:9a025d8a6e765ec3530c9b4bdfb5e7b05587497b279a935f7b778b9f903ab571"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-win32.whl", hash = "sha256:e3d425a78d8de119ddebf4472bac30a86f7bdf3fa26b6f2cf63ba0beb1477f4a"}, - {file = "grpcio_tools-1.34.0-cp38-cp38-win_amd64.whl", hash = "sha256:2a5e83e734556bd3f36f836f6c6d0ff3127914be96ebeda409d726f6fdc8a498"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:698028452697e65b8aacb422170747bfaf25e67ad579cb5c4ff6910c19dd125d"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4aded8e8230df28f779318c1c4569ffd1a3df0da10b2602d22fcd33186b7af19"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6ba9877d7ed7c4a120dd4efd167680b2d2946631a00eda3d6173d378e90702d2"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:73f92810901d22b6ac55b2a0e001edccfe576e0e5b67fe81389235fde2e72d1c"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6a952248a2f057f8556ed847583b5630d1b840b5a51bf4b2fbe56f374db6c77a"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-win32.whl", hash = "sha256:2639e15d8f85c82deb1217f4dfceeec18f68990198cb7e6d2842070ecf86eb06"}, - {file = "grpcio_tools-1.34.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8bf37e1f3d4f8bc5df130aa682a256a8c1747e2498a7a68a00980050d5221d6"}, + {file = "grpcio-tools-1.33.2.tar.gz", hash = "sha256:af40774c0275f5465f49fd92bfcd9831b19b013de4cc77b8fb38aea76fa6dce3"}, + {file = "grpcio_tools-1.33.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f80943d6ff6fb0125e68a7af7591a5373d177c8e97a9fcfaeb873cb0a11efbff"}, + {file = "grpcio_tools-1.33.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:74762069fb0336535518097cb765250fe2800c19dfb9a62bd3ebf7c1d31f568c"}, + {file = "grpcio_tools-1.33.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:895f6926310e6c1bd4424af2c9b1c777481c246a87c9943478e9d12631fa5331"}, + {file = "grpcio_tools-1.33.2-cp27-cp27m-win32.whl", hash = "sha256:76d51b8625f49a52ffd207b586e459e9f04f2451226c1602e9eb1e67c530d830"}, + {file = "grpcio_tools-1.33.2-cp27-cp27m-win_amd64.whl", hash = "sha256:6b3e10a2b1409e4bbc744d8f966b2291bf042fea612d3c144797d8e845335ee4"}, + {file = "grpcio_tools-1.33.2-cp27-cp27mu-linux_armv7l.whl", hash = "sha256:584888e7b679e329c18ec1cc93b8d43514d7311a83080382bdde36edaa2fc3f8"}, + {file = "grpcio_tools-1.33.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7d7c98448835df0d64c34c205b53a088c631efa2623f180ae08f13d3427c6905"}, + {file = "grpcio_tools-1.33.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d0b1651a66c0254e84207b108cb5f76a0076141dda35d522de1f4a4a33e2db82"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-linux_armv7l.whl", hash = "sha256:7a4b1d0399259449b9ead9a1e43611da281c6cce6fab2629ad4f9b16887679a9"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-macosx_10_9_intel.whl", hash = "sha256:aeae23f77c668b9d4bce43007eeeb395d8e87c72f1281d2329872bc43ea66a83"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:40aae8f6c75864b9063aed405158b6926dc71d1a6b9a3f89c4b4ce5915f7b154"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:2db16055baed821fd1e12d3154cab26bec6a947ff47eaad7aedc2f86b4dead02"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:4346774a7edf07d29fa1bc96ec69a53c3bb222e1e07d1046ed19fe3cff1c96bc"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:ba2971017ed3e1d429abeef7e3d98a7aff5191d76e63ebf5b0a700d6b505d342"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-win32.whl", hash = "sha256:7a9877611bbd9587dbf8cc2d80edb99fce371faaa504960cf27ca4bb43b3eeb3"}, + {file = "grpcio_tools-1.33.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9777378bfb59e5bfe9f972d01c27e502b577f8c5d539967ae17409e562b3b347"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:5a90192f5b198a5d3b2d8015f9088f4fcfdf8c1020931afb48f8bb52db02ef92"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ed34b6316c6a932d8586a3567d341599aff5a61a34f9d6640501f4af5537b95e"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:eb2a452ecf9b8c0beee6a49ea3e42bd5344e07dab9692b0c60ef7caf9dbf0e7e"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:be6f34a188806dbec3dba9e6c6b41253507f3b7e4beeb344a02903609d708659"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:c2a3a69871047dccd49507cb989b6f84e24f5427902930d92e10cf1e366e578a"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:09f25ad6d47566b5ca3eefae7d499d1c431646d20b6543a00b70fe7fe61b1a02"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-win32.whl", hash = "sha256:36b71fddb8876d619b6f00e49d47b917b716ca5761b9037631f1256851ed74dc"}, + {file = "grpcio_tools-1.33.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2e6f9b93b19ad5d680beeccd937357e8bd8403f1090a6ce4369c9fc162d5c3f1"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b57fcd12c210916f8addbb983ff2264a675acdd0665be0df87f30efccec50119"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55f4e125b5d4af409ec5783009794262fb28fc9d01cc1cd0a123c59ea7d9a03b"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:fb0651c7ba378b18865dac9f10414c0e15ddc190ea6fd0b5c96bfe235276304e"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:bc33d340c981b5f2ecdc11888e4c9f462fe25811da0bd98080a0f239a5c71cc0"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:ba1bd7e60872727b0123b80658a723ba39357f3baa85a53d3a4a877fdc68e218"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-win32.whl", hash = "sha256:278092221bcbf3e9710e64e0f64b3ffd91879da87cc901151f52f50ab2c1e364"}, + {file = "grpcio_tools-1.33.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3a407b9e2ca0a15b4d337120e8a5ad35fedaaf658c40c445d63d41abb8f8f5e3"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9bfae79bd3c2bd6f49d72243408c269a4cb9f6e2231aae06c5df5106d60ebf5d"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:a35f0663154f5083b4e84661c33bf193797de7d68138a1e94ddd9bec4b7d0d39"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5979937daddc1cf624a11ee5e45baa6e7f1c03948f8534529e08c0baef963b2d"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:6400950ebc37cc74c8b1d8a25ef4c624f3daf08b5f61c6ba6175845908c0e9d7"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:cb0dbc3203975efaf541887fa641742287c3473298a9a45b9619506b27ce7028"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-win32.whl", hash = "sha256:686462d1abbd4d9c13f96a8b3442e62ce4ed412272996012cc561a6dcc7e65b2"}, + {file = "grpcio_tools-1.33.2-cp38-cp38-win_amd64.whl", hash = "sha256:947f9d96271c7ab0470b58438bd788ce1d4308c73696eea64eab58e7e68c1d39"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:853f632fcb354c4c48c4abb151a3f7d9ecf1ab662fbc3483eb4f941f61573b88"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:792e4ed3ab2063d330067253cf76d9b6d4b957fb723cb191adf025486df69f3f"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:081cad29621dadec6b5cedb818c3261ac25ba5a78c09dffe18d51637debfd750"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:0d44a17cac96005cec38e8197ec2b76a61fea6f3861c38765a3b51a4787fdbef"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ed36ca81cdbe08f2976323930f8430ec97a68ec7d690606d59a7303ae6b61726"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-win32.whl", hash = "sha256:da31aeebb9c3a901bf1f0773fac20cb9e9d662cdf4f19eabc6dc55c52409d09c"}, + {file = "grpcio_tools-1.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:b68ce929acb8c392b83c49257e18f03d73ca3af408bfd5f7e78fe351c384c008"}, ] guzzle-sphinx-theme = [ {file = "guzzle_sphinx_theme-0.7.11.tar.gz", hash = "sha256:9b8c1639c343c02c3f3db7df660ddf6f533b5454ee92a5f7b02edaa573fed3e6"}, @@ -1158,9 +1147,6 @@ pathspec = [ {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] -pathtools = [ - {file = "pathtools-0.1.2.tar.gz", hash = "sha256:7c35c5421a39bb82e58018febd90e3b6e5db34c5443aaaf742b3f33d4655f1c0"}, -] pillow = [ {file = "Pillow-8.0.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:b63d4ff734263ae4ce6593798bcfee6dbfb00523c82753a3a03cbc05555a9cc3"}, {file = "Pillow-8.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5f9403af9c790cc18411ea398a6950ee2def2a830ad0cfe6dc9122e6d528b302"}, @@ -1429,7 +1415,23 @@ urllib3 = [ {file = "urllib3-1.26.2.tar.gz", hash = "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08"}, ] watchdog = [ - {file = "watchdog-0.10.4.tar.gz", hash = "sha256:e38bffc89b15bafe2a131f0e1c74924cf07dcec020c2e0a26cccd208831fcd43"}, + {file = "watchdog-1.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e2a531e71be7b5cc3499ae2d1494d51b6a26684bcc7c3146f63c810c00e8a3cc"}, + {file = "watchdog-1.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7c73edef48f4ceeebb987317a67e0080e5c9228601ff67b3c4062fa020403c7"}, + {file = "watchdog-1.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e6574395aa6c1e14e0f030d9d7f35c2340a6cf95d5671354ce876ac3ffdd4d"}, + {file = "watchdog-1.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27d9b4666938d5d40afdcdf2c751781e9ce36320788b70208d0f87f7401caf93"}, + {file = "watchdog-1.0.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f1ade0d0802503fda4340374d333408831cff23da66d7e711e279ba50fe6c4a"}, + {file = "watchdog-1.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f1d0e878fd69129d0d68b87cee5d9543f20d8018e82998efb79f7e412d42154a"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d948ad9ab9aba705f9836625b32e965b9ae607284811cd98334423f659ea537a"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:101532b8db506559e52a9b5d75a308729b3f68264d930670e6155c976d0e52a0"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:b1d723852ce90a14abf0ec0ca9e80689d9509ee4c9ee27163118d87b564a12ac"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:68744de2003a5ea2dfbb104f9a74192cf381334a9e2c0ed2bbe1581828d50b61"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:602dbd9498592eacc42e0632c19781c3df1728ef9cbab555fab6778effc29eeb"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:016b01495b9c55b5d4126ed8ae75d93ea0d99377084107c33162df52887cee18"}, + {file = "watchdog-1.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:5f1f3b65142175366ba94c64d8d4c8f4015825e0beaacee1c301823266b47b9b"}, + {file = "watchdog-1.0.2-py3-none-win32.whl", hash = "sha256:57f05e55aa603c3b053eed7e679f0a83873c540255b88d58c6223c7493833bac"}, + {file = "watchdog-1.0.2-py3-none-win_amd64.whl", hash = "sha256:f84146f7864339c8addf2c2b9903271df21d18d2c721e9a77f779493234a82b5"}, + {file = "watchdog-1.0.2-py3-none-win_ia64.whl", hash = "sha256:ee21aeebe6b3e51e4ba64564c94cee8dbe7438b9cb60f0bb350c4fa70d1b52c2"}, + {file = "watchdog-1.0.2.tar.gz", hash = "sha256:376cbc2a35c0392b0fe7ff16fbc1b303fd99d4dd9911ab5581ee9d69adc88982"}, ] wrapt = [ {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, diff --git a/pyproject.toml b/pyproject.toml index 15ca6eed83..6b2382a551 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,9 +36,9 @@ pygments = "*" rich = "^6.0" pycairo = "^1.19" manimpango = "^0" -grpcio = { version = "^1.33", optional = true } -grpcio-tools = { version = "*", optional = true } -watchdog = { version = "^0", optional = true } +grpcio = { version = "1.33.*", optional = true } +grpcio-tools = { version = "1.33.*", optional = true } +watchdog = { version = "*", optional = true } [tool.poetry.extras] js_renderer = ["grpcio","grpcio-tools","watchdog"] From 5de6375ea15ca08464f6bc52ac87bde066f31768 Mon Sep 17 00:00:00 2001 From: Philipp Imhof <52650214+PhilippImhof@users.noreply.github.com> Date: Thu, 24 Dec 2020 15:31:01 +0100 Subject: [PATCH 11/16] Make MarkupText use manimpango (#26) --- manim/mobject/svg/text_mobject.py | 844 +++++++++++++++--------------- 1 file changed, 417 insertions(+), 427 deletions(-) diff --git a/manim/mobject/svg/text_mobject.py b/manim/mobject/svg/text_mobject.py index 5ace300a08..ed2e024dde 100644 --- a/manim/mobject/svg/text_mobject.py +++ b/manim/mobject/svg/text_mobject.py @@ -42,7 +42,7 @@ def construct(self): """ -__all__ = ["Text", "Paragraph", "CairoText"] +__all__ = ["Text", "Paragraph", "CairoText", "MarkupText"] import copy @@ -54,7 +54,7 @@ def construct(self): import cairo import manimpango -from manimpango import PangoUtils, TextSetting +from manimpango import PangoUtils, TextSetting, MarkupUtils from ... import config, logger from ...constants import * @@ -965,428 +965,418 @@ def text2svg(self): ) -# class MarkupText(SVGMobject): -# r"""Display (non-LaTeX) text rendered using `Pango `_. - -# Text objects behave like a :class:`.VGroup`-like iterable of all characters -# in the given text. In particular, slicing is possible. Text can be formatted -# using different tags: - -# - ``bold``, ``italic`` and ``bold+italic`` -# - ``
    underline
`` and ``strike through`` -# - ``typewriter font`` -# - ``bigger font`` and ``smaller font`` -# - ``superscript`` and ``subscript`` -# - ``double underline`` -# - ``error underline`` -# - ``temporary change of font`` -# - ``temporary change of color``; colors can be specified as Manim constants like ``RED`` or ``YELLOW`` or as hex triples like ``#aabbaa`` -# - ``temporary gradient``; colors specified as above - -# If your text contains ligatures, the :class:`MarkupText` class may incorrectly determine -# the first and last letter to be colored. This is due to the fact that e.g. ``fl`` -# are two characters, but might be set as one single glyph, a ligature. If your language does -# not depend on ligatures, consider setting ``disable_ligatures=True``. If you cannot -# or do not want to do without ligatures, the ``gradient`` and ``color`` tag support -# an optional attribute ``offset`` which can be used to compensate for that error. -# Usage is as follows: - -# - ``red text`` to *start* coloring one letter earlier -# - ``red text`` to *end* coloring one letter earlier -# - ``red text`` to *start* coloring two letters earlier and *end* one letter earlier - -# Specifying a second offset may be necessary if the text to be colored does -# itself contain ligatures. The same can happen when using HTML entities for -# special chars. - -# Escaping of special characters: ``>`` *should* be written as ``>`` whereas ``<`` and -# ``&`` *must* be written as ``<`` and ``&``. - -# You can find more information about Pango markup formatting at the -# corresponding documentation page: -# `Pango Markup `_. -# Please be aware that not all features are supported by this class and that -# the ```` and ```` tags mentioned above are not supported by Pango. - -# Parameters -# ---------- -# text : :class:`str` -# The text that need to created as mobject. -# fill_opacity : :class:`int` -# The fill opacity with 1 meaning opaque and 0 meaning transparent. -# stroke_width : :class:`int` -# Stroke width. -# color : :class:`str` -# Global color setting for the entire text. Local overrides are possible. -# size : :class:`int` -# Font size. -# line_spacing : :class:`int` -# Line spacing. -# font : :class:`str` -# Global font setting for the entire text. Local overrides are possible. -# slant : :class:`str` -# Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible. -# weight : :class:`str` -# Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. -# gradient: :class:`tuple` -# Global gradient setting. Local overrides are possible. - - -# Returns -# ------- -# :class:`MarkupText` -# The text displayed in form of a :class:`.VGroup`-like mobject. - -# Examples -# --------- - -# .. manim:: BasicMarkupExample -# :save_last_frame: - -# class BasicMarkupExample(Scene): -# def construct(self): -# text1 = MarkupText("foo bar foobar") -# text2 = MarkupText("foo bar big small") -# text3 = MarkupText("H2O and H3O+") -# text4 = MarkupText("type help for help") -# text5 = MarkupText( -# 'foo bar' -# ) -# group = VGroup(text1, text2, text3, text4, text5).arrange(DOWN) -# self.add(group) - -# .. manim:: ColorExample -# :save_last_frame: - -# class ColorExample(Scene): -# def construct(self): -# text1 = MarkupText( -# 'all in red except this', color=RED -# ) -# text2 = MarkupText("nice gradient", gradient=(BLUE, GREEN)) -# text3 = MarkupText( -# 'nice intermediate gradient', -# gradient=(BLUE, GREEN), -# ) -# text4 = MarkupText( -# 'fl ligature causing trouble here' -# ) -# text5 = MarkupText( -# 'fl ligature defeated with offset' -# ) -# text6 = MarkupText( -# 'fl ligature floating inside' -# ) -# text7 = MarkupText( -# 'fl ligature floating inside' -# ) -# group = VGroup(text1, text2, text3, text4, text5, text6, text7).arrange(DOWN) -# self.add(group) - -# .. manim:: FontExample -# :save_last_frame: - -# class FontExample(Scene): -# def construct(self): -# text1 = MarkupText( -# 'all in sans except this', font="sans" -# ) -# text2 = MarkupText( -# 'mixing fonts is ugly' -# ) -# text3 = MarkupText("special char > or >") -# text4 = MarkupText("special char < and &") -# group = VGroup(text1, text2, text3, text4).arrange(DOWN) -# self.add(group) - -# .. manim:: NewlineExample -# :save_last_frame: - -# class NewlineExample(Scene): -# def construct(self): -# text = MarkupText('foooooo\nbaaaar') -# self.add(text) - -# .. manim:: NoLigaturesExample -# :save_last_frame: - -# class NoLigaturesExample(Scene): -# def construct(self): -# text1 = MarkupText('floating') -# text2 = MarkupText('floating', disable_ligatures=True) -# group = VGroup(text1, text2).arrange(DOWN) -# self.add(group) - - -# As :class:`MarkupText` uses Pango to render text, rendering non-English -# characters is easily possible: - -# .. manim:: MultiLanguage -# :save_last_frame: - -# class MultiLanguage(Scene): -# def construct(self): -# morning = MarkupText("வணக்கம்", font="sans-serif") -# chin = MarkupText( -# '見 角 言 谷 辛 辰 辵 邑 酉 釆 里!' -# ) # works as in ``Text``. -# mess = MarkupText("Multi-Language", style=BOLD) -# russ = MarkupText("Здравствуйте मस नम म ", font="sans-serif") -# hin = MarkupText("नमस्ते", font="sans-serif") -# japanese = MarkupText("臂猿「黛比」帶著孩子", font="sans-serif") -# group = VGroup(morning, chin, mess, russ, hin, japanese).arrange(DOWN) -# self.add(group) - - -# Tests -# ----- - -# Check that the creation of :class:`~.MarkupText` works:: - -# >>> MarkupText('The horse does not eat cucumber salad.') -# MarkupText('The horse does not eat cucumber salad.') - -# """ - -# def __init__( -# self, -# text: str, -# fill_opacity: int = 1, -# stroke_width: int = 0, -# color: str = WHITE, -# size: int = 1, -# line_spacing: int = -1, -# font: str = "", -# slant: str = NORMAL, -# weight: str = NORMAL, -# gradient: tuple = None, -# tab_width: int = 4, -# height: int = None, -# width: int = None, -# should_center: bool = True, -# unpack_groups: bool = True, -# disable_ligatures: bool = False, -# **kwargs, -# ): -# self.text = text -# self.size = size -# self.line_spacing = line_spacing -# self.font = font -# self.slant = slant -# self.weight = weight -# self.gradient = gradient -# self.tab_width = tab_width - -# self.original_text = text -# self.disable_ligatures = disable_ligatures -# text_without_tabs = text -# if "\t" in text: -# text_without_tabs = text.replace("\t", " " * self.tab_width) - -# colormap = self.extract_color_tags() -# gradientmap = self.extract_gradient_tags() - -# if self.line_spacing == -1: -# self.line_spacing = self.size + self.size * 0.3 -# else: -# self.line_spacing = self.size + self.size * self.line_spacing - -# file_name = self.text2svg() -# PangoUtils.remove_last_M(file_name) -# SVGMobject.__init__( -# self, -# file_name, -# color=color, -# fill_opacity=fill_opacity, -# stroke_width=stroke_width, -# height=height, -# width=width, -# should_center=should_center, -# unpack_groups=unpack_groups, -# **kwargs, -# ) -# self.chars = VGroup(*self.submobjects) -# self.text = text_without_tabs.replace(" ", "").replace("\n", "") - -# nppc = self.n_points_per_cubic_curve -# for each in self: -# if len(each.points) == 0: -# continue -# points = each.points -# last = points[0] -# each.clear_points() -# for index, point in enumerate(points): -# each.append_points([point]) -# if ( -# index != len(points) - 1 -# and (index + 1) % nppc == 0 -# and any(point != points[index + 1]) -# ): -# each.add_line_to(last) -# last = points[index + 1] -# each.add_line_to(last) - -# if self.gradient: -# self.set_color_by_gradient(*self.gradient) -# for col in colormap: -# self.chars[ -# col["start"] -# - col["start_offset"] : col["end"] -# - col["start_offset"] -# - col["end_offset"] -# ].set_color(self._parse_color(col["color"])) -# for grad in gradientmap: -# self.chars[ -# grad["start"] -# - grad["start_offset"] : grad["end"] -# - grad["start_offset"] -# - grad["end_offset"] -# ].set_color_by_gradient( -# *(self._parse_color(grad["from"]), self._parse_color(grad["to"])) -# ) -# # anti-aliasing -# if self.height is None and self.width is None: -# self.scale(TEXT_MOB_SCALE_FACTOR) - -# def text2hash(self): -# """Generates ``sha256`` hash for file name.""" -# settings = ( -# "MARKUPPANGO" + self.font + self.slant + self.weight -# ) # to differentiate from classical Pango Text -# settings += str(self.line_spacing) + str(self.size) -# settings += str(self.disable_ligatures) -# id_str = self.text + settings -# hasher = hashlib.sha256() -# hasher.update(id_str.encode()) -# return hasher.hexdigest()[:16] - -# def text2svg(self): -# """Convert the text to SVG using Pango.""" -# size = self.size * 10 -# line_spacing = self.line_spacing * 10 -# dir_name = config.get_dir("text_dir") -# disable_liga = self.disable_ligatures -# if not os.path.exists(dir_name): -# os.makedirs(dir_name) -# hash_name = self.text2hash() -# file_name = os.path.join(dir_name, hash_name) + ".svg" -# if os.path.exists(file_name): -# return file_name -# surface = cairocffi.SVGSurface(file_name, 600, 400) -# context = cairocffi.Context(surface) -# context.move_to(START_X, START_Y) -# layout = pangocairocffi.create_layout(context) -# layout.set_width(pangocffi.units_from_double(600)) - -# fontdesc = pangocffi.FontDescription() -# fontdesc.set_size(pangocffi.units_from_double(size)) -# if self.font: -# fontdesc.set_family(self.font) -# fontdesc.set_style(PangoUtils.str2style(self.slant)) -# fontdesc.set_weight(PangoUtils.str2weight(self.weight)) -# layout.set_font_description(fontdesc) - -# context.move_to(START_X, START_Y) -# pangocairocffi.update_layout(context, layout) -# if disable_liga: -# layout.set_markup( -# f"{self.text}" -# ) -# else: -# layout.set_markup(self.text) -# logger.debug(f"Setting Text {self.text}") -# pangocairocffi.show_layout(context, layout) -# surface.finish() -# return file_name - -# def _count_real_chars(self, s): -# """Counts characters that will be displayed. - -# This is needed for partial coloring or gradients, because space -# counts to the text's `len`, but has no corresponding character.""" -# count = 0 -# level = 0 -# # temporarily replace HTML entities by single char -# s = re.sub("&[^;]+;", "x", s) -# for c in s: -# if c == "<": -# level += 1 -# if c == ">" and level > 0: -# level -= 1 -# elif c != " " and c != "\t" and level == 0: -# count += 1 -# return count - -# def extract_gradient_tags(self): -# """Used to determine which parts (if any) of the string should be formatted -# with a gradient. - -# Removes the ```` tag, as it is not part of Pango's markup and would cause an error. -# """ -# tags = re.finditer( -# '(.+?)', -# self.original_text, -# re.S, -# ) -# gradientmap = [] -# for tag in tags: -# start = self._count_real_chars(self.original_text[: tag.start(0)]) -# end = start + self._count_real_chars(tag.group(5)) -# offsets = tag.group(4).split(",") if tag.group(4) else [0] -# start_offset = int(offsets[0]) if offsets[0] else 0 -# end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 - -# gradientmap.append( -# { -# "start": start, -# "end": end, -# "from": tag.group(1), -# "to": tag.group(2), -# "start_offset": start_offset, -# "end_offset": end_offset, -# } -# ) -# self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) -# return gradientmap - -# def _parse_color(self, col): -# """Parse color given in ```` or ```` tags.""" -# if re.match("#[0-9a-f]{6}", col): -# return col -# else: -# return Colors[col.lower()].value - -# def extract_color_tags(self): -# """Used to determine which parts (if any) of the string should be formatted -# with a custom color. - -# Removes the ```` tag, as it is not part of Pango's markup and would cause an error. -# """ -# tags = re.finditer( -# '(.+?)', -# self.original_text, -# re.S, -# ) - -# colormap = [] -# for tag in tags: -# start = self._count_real_chars(self.original_text[: tag.start(0)]) -# end = start + self._count_real_chars(tag.group(4)) -# offsets = tag.group(3).split(",") if tag.group(3) else [0] -# start_offset = int(offsets[0]) if offsets[0] else 0 -# end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 - -# colormap.append( -# { -# "start": start, -# "end": end, -# "color": tag.group(1), -# "start_offset": start_offset, -# "end_offset": end_offset, -# } -# ) -# self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) -# return colormap - -# def __repr__(self): -# return f"MarkupText({repr(self.original_text)})" +class MarkupText(SVGMobject): + r"""Display (non-LaTeX) text rendered using `Pango `_. + + Text objects behave like a :class:`.VGroup`-like iterable of all characters + in the given text. In particular, slicing is possible. Text can be formatted + using different tags: + + - ``bold``, ``italic`` and ``bold+italic`` + - ``
    underline
`` and ``strike through`` + - ``typewriter font`` + - ``bigger font`` and ``smaller font`` + - ``superscript`` and ``subscript`` + - ``double underline`` + - ``error underline`` + - ``temporary change of font`` + - ``temporary change of color``; colors can be specified as Manim constants like ``RED`` or ``YELLOW`` or as hex triples like ``#aabbaa`` + - ``temporary gradient``; colors specified as above + + If your text contains ligatures, the :class:`MarkupText` class may incorrectly determine + the first and last letter to be colored. This is due to the fact that e.g. ``fl`` + are two characters, but might be set as one single glyph, a ligature. If your language does + not depend on ligatures, consider setting ``disable_ligatures=True``. If you cannot + or do not want to do without ligatures, the ``gradient`` and ``color`` tag support + an optional attribute ``offset`` which can be used to compensate for that error. + Usage is as follows: + + - ``red text`` to *start* coloring one letter earlier + - ``red text`` to *end* coloring one letter earlier + - ``red text`` to *start* coloring two letters earlier and *end* one letter earlier + + Specifying a second offset may be necessary if the text to be colored does + itself contain ligatures. The same can happen when using HTML entities for + special chars. + + Escaping of special characters: ``>`` *should* be written as ``>`` whereas ``<`` and + ``&`` *must* be written as ``<`` and ``&``. + + You can find more information about Pango markup formatting at the + corresponding documentation page: + `Pango Markup `_. + Please be aware that not all features are supported by this class and that + the ```` and ```` tags mentioned above are not supported by Pango. + + Parameters + ---------- + text : :class:`str` + The text that need to created as mobject. + fill_opacity : :class:`int` + The fill opacity with 1 meaning opaque and 0 meaning transparent. + stroke_width : :class:`int` + Stroke width. + color : :class:`str` + Global color setting for the entire text. Local overrides are possible. + size : :class:`int` + Font size. + line_spacing : :class:`int` + Line spacing. + font : :class:`str` + Global font setting for the entire text. Local overrides are possible. + slant : :class:`str` + Global slant setting, e.g. `NORMAL` or `ITALIC`. Local overrides are possible. + weight : :class:`str` + Global weight setting, e.g. `NORMAL` or `BOLD`. Local overrides are possible. + gradient: :class:`tuple` + Global gradient setting. Local overrides are possible. + + + Returns + ------- + :class:`MarkupText` + The text displayed in form of a :class:`.VGroup`-like mobject. + + Examples + --------- + + .. manim:: BasicMarkupExample + :save_last_frame: + + class BasicMarkupExample(Scene): + def construct(self): + text1 = MarkupText("foo bar foobar") + text2 = MarkupText("foo bar big small") + text3 = MarkupText("H2O and H3O+") + text4 = MarkupText("type help for help") + text5 = MarkupText( + 'foo bar' + ) + group = VGroup(text1, text2, text3, text4, text5).arrange(DOWN) + self.add(group) + + .. manim:: ColorExample + :save_last_frame: + + class ColorExample(Scene): + def construct(self): + text1 = MarkupText( + 'all in red except this', color=RED + ) + text2 = MarkupText("nice gradient", gradient=(BLUE, GREEN)) + text3 = MarkupText( + 'nice intermediate gradient', + gradient=(BLUE, GREEN), + ) + text4 = MarkupText( + 'fl ligature causing trouble here' + ) + text5 = MarkupText( + 'fl ligature defeated with offset' + ) + text6 = MarkupText( + 'fl ligature floating inside' + ) + text7 = MarkupText( + 'fl ligature floating inside' + ) + group = VGroup(text1, text2, text3, text4, text5, text6, text7).arrange(DOWN) + self.add(group) + + .. manim:: FontExample + :save_last_frame: + + class FontExample(Scene): + def construct(self): + text1 = MarkupText( + 'all in sans except this', font="sans" + ) + text2 = MarkupText( + 'mixing fonts is ugly' + ) + text3 = MarkupText("special char > or >") + text4 = MarkupText("special char < and &") + group = VGroup(text1, text2, text3, text4).arrange(DOWN) + self.add(group) + + .. manim:: NewlineExample + :save_last_frame: + + class NewlineExample(Scene): + def construct(self): + text = MarkupText('foooooo\nbaaaar') + self.add(text) + + .. manim:: NoLigaturesExample + :save_last_frame: + + class NoLigaturesExample(Scene): + def construct(self): + text1 = MarkupText('floating') + text2 = MarkupText('floating', disable_ligatures=True) + group = VGroup(text1, text2).arrange(DOWN) + self.add(group) + + + As :class:`MarkupText` uses Pango to render text, rendering non-English + characters is easily possible: + + .. manim:: MultiLanguage + :save_last_frame: + + class MultiLanguage(Scene): + def construct(self): + morning = MarkupText("வணக்கம்", font="sans-serif") + chin = MarkupText( + '見 角 言 谷 辛 辰 辵 邑 酉 釆 里!' + ) # works as in ``Text``. + mess = MarkupText("Multi-Language", style=BOLD) + russ = MarkupText("Здравствуйте मस नम म ", font="sans-serif") + hin = MarkupText("नमस्ते", font="sans-serif") + japanese = MarkupText("臂猿「黛比」帶著孩子", font="sans-serif") + group = VGroup(morning, chin, mess, russ, hin, japanese).arrange(DOWN) + self.add(group) + + + Tests + ----- + + Check that the creation of :class:`~.MarkupText` works:: + + >>> MarkupText('The horse does not eat cucumber salad.') + MarkupText('The horse does not eat cucumber salad.') + + """ + + def __init__( + self, + text: str, + fill_opacity: int = 1, + stroke_width: int = 0, + color: str = WHITE, + size: int = 1, + line_spacing: int = -1, + font: str = "", + slant: str = NORMAL, + weight: str = NORMAL, + gradient: tuple = None, + tab_width: int = 4, + height: int = None, + width: int = None, + should_center: bool = True, + unpack_groups: bool = True, + disable_ligatures: bool = False, + **kwargs, + ): + self.text = text + self.size = size + self.line_spacing = line_spacing + self.font = font + self.slant = slant + self.weight = weight + self.gradient = gradient + self.tab_width = tab_width + + self.original_text = text + self.disable_ligatures = disable_ligatures + text_without_tabs = text + if "\t" in text: + text_without_tabs = text.replace("\t", " " * self.tab_width) + + colormap = self.extract_color_tags() + gradientmap = self.extract_gradient_tags() + + if self.line_spacing == -1: + self.line_spacing = self.size + self.size * 0.3 + else: + self.line_spacing = self.size + self.size * self.line_spacing + + file_name = self.text2svg() + PangoUtils.remove_last_M(file_name) + SVGMobject.__init__( + self, + file_name, + color=color, + fill_opacity=fill_opacity, + stroke_width=stroke_width, + height=height, + width=width, + should_center=should_center, + unpack_groups=unpack_groups, + **kwargs, + ) + self.chars = VGroup(*self.submobjects) + self.text = text_without_tabs.replace(" ", "").replace("\n", "") + + nppc = self.n_points_per_cubic_curve + for each in self: + if len(each.points) == 0: + continue + points = each.points + last = points[0] + each.clear_points() + for index, point in enumerate(points): + each.append_points([point]) + if ( + index != len(points) - 1 + and (index + 1) % nppc == 0 + and any(point != points[index + 1]) + ): + each.add_line_to(last) + last = points[index + 1] + each.add_line_to(last) + + if self.gradient: + self.set_color_by_gradient(*self.gradient) + for col in colormap: + self.chars[ + col["start"] + - col["start_offset"] : col["end"] + - col["start_offset"] + - col["end_offset"] + ].set_color(self._parse_color(col["color"])) + for grad in gradientmap: + self.chars[ + grad["start"] + - grad["start_offset"] : grad["end"] + - grad["start_offset"] + - grad["end_offset"] + ].set_color_by_gradient( + *(self._parse_color(grad["from"]), self._parse_color(grad["to"])) + ) + # anti-aliasing + if self.height is None and self.width is None: + self.scale(TEXT_MOB_SCALE_FACTOR) + + def text2hash(self): + """Generates ``sha256`` hash for file name.""" + settings = ( + "MARKUPPANGO" + self.font + self.slant + self.weight + ) # to differentiate from classical Pango Text + settings += str(self.line_spacing) + str(self.size) + settings += str(self.disable_ligatures) + id_str = self.text + settings + hasher = hashlib.sha256() + hasher.update(id_str.encode()) + return hasher.hexdigest()[:16] + + def text2svg(self): + """Convert the text to SVG using Pango.""" + size = self.size * 10 + line_spacing = self.line_spacing * 10 + dir_name = config.get_dir("text_dir") + disable_liga = self.disable_ligatures + if not os.path.exists(dir_name): + os.makedirs(dir_name) + hash_name = self.text2hash() + file_name = os.path.join(dir_name, hash_name) + ".svg" + if os.path.exists(file_name): + return file_name + + logger.debug(f"Setting Text {self.text}") + return MarkupUtils.text2svg( + self.text, + self.font, + self.slant, + self.weight, + size, + line_spacing, + disable_liga, + file_name, + START_X, + START_Y, + 600, # width + 400, # height + ) + + def _count_real_chars(self, s): + """Counts characters that will be displayed. + + This is needed for partial coloring or gradients, because space + counts to the text's `len`, but has no corresponding character.""" + count = 0 + level = 0 + # temporarily replace HTML entities by single char + s = re.sub("&[^;]+;", "x", s) + for c in s: + if c == "<": + level += 1 + if c == ">" and level > 0: + level -= 1 + elif c != " " and c != "\t" and level == 0: + count += 1 + return count + + def extract_gradient_tags(self): + """Used to determine which parts (if any) of the string should be formatted + with a gradient. + + Removes the ```` tag, as it is not part of Pango's markup and would cause an error. + """ + tags = re.finditer( + '(.+?)', + self.original_text, + re.S, + ) + gradientmap = [] + for tag in tags: + start = self._count_real_chars(self.original_text[: tag.start(0)]) + end = start + self._count_real_chars(tag.group(5)) + offsets = tag.group(4).split(",") if tag.group(4) else [0] + start_offset = int(offsets[0]) if offsets[0] else 0 + end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 + + gradientmap.append( + { + "start": start, + "end": end, + "from": tag.group(1), + "to": tag.group(2), + "start_offset": start_offset, + "end_offset": end_offset, + } + ) + self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) + return gradientmap + + def _parse_color(self, col): + """Parse color given in ```` or ```` tags.""" + if re.match("#[0-9a-f]{6}", col): + return col + else: + return Colors[col.lower()].value + + def extract_color_tags(self): + """Used to determine which parts (if any) of the string should be formatted + with a custom color. + + Removes the ```` tag, as it is not part of Pango's markup and would cause an error. + """ + tags = re.finditer( + '(.+?)', + self.original_text, + re.S, + ) + + colormap = [] + for tag in tags: + start = self._count_real_chars(self.original_text[: tag.start(0)]) + end = start + self._count_real_chars(tag.group(4)) + offsets = tag.group(3).split(",") if tag.group(3) else [0] + start_offset = int(offsets[0]) if offsets[0] else 0 + end_offset = int(offsets[1]) if len(offsets) == 2 and offsets[1] else 0 + + colormap.append( + { + "start": start, + "end": end, + "color": tag.group(1), + "start_offset": start_offset, + "end_offset": end_offset, + } + ) + self.text = re.sub("]+>(.+?)", r"\1", self.text, 0, re.S) + return colormap + + def __repr__(self): + return f"MarkupText({repr(self.original_text)})" From e648d1caa9aaa3ae52b0ea71cf6d0185cd6a798a Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Thu, 24 Dec 2020 21:10:12 +0530 Subject: [PATCH 12/16] Update ManimPango --- poetry.lock | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9d56ddb5f9..d391afbb2e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -287,7 +287,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "manimpango" -version = "0.1.1" +version = "0.1.2" description = "Bindings for Pango for using with Manim." category = "main" optional = false @@ -583,7 +583,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "3.4.0" +version = "3.4.1" description = "Python documentation generator" category = "dev" optional = false @@ -1015,23 +1015,27 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, ] manimpango = [ - {file = "manimpango-0.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bedd1bf5be4f3e27175226e7cc95d45ef943ef2ef05b6d6bd1feb2da0ea2fc7e"}, - {file = "manimpango-0.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:5fad9f14058cb8a707d5bcaac7c254e3e72ab1754c49fa4e51beb787b808f3d3"}, - {file = "manimpango-0.1.1-cp36-cp36m-win32.whl", hash = "sha256:0c593c93a3bcb9bab7d9f8678bc5783faf6ae256a6009a4954c759ea63a9a356"}, - {file = "manimpango-0.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8e08a5023b83db85ff0890afa551f81a72a83d66a74ecbafad01ee245cd0ea52"}, - {file = "manimpango-0.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:eaddcc8a54e97cc58eee9a10dad459fc62d2201fd1d9ff3722decbb936bb3911"}, - {file = "manimpango-0.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:1c7dc7eeeff7dc624e6e23ff6d35794252d608c2b9fe30aad99127f6ae2dad9f"}, - {file = "manimpango-0.1.1-cp37-cp37m-win32.whl", hash = "sha256:214cf126df84d8bdc9043e905a30293941330d8f3798e5bccb25a292958dfcfc"}, - {file = "manimpango-0.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea8d98c0cd9c960863c0b8254245a0be2e4c78d77f48e700db170ae27f11ea7"}, - {file = "manimpango-0.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9377d4fb00567afebcc371af85cf422f7cd05f420e6f277d7e6c4aa0f93f24a9"}, - {file = "manimpango-0.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a5491894567fe095337a1007b5650d5e9c9d22360530cf33a1736d2d44514068"}, - {file = "manimpango-0.1.1-cp38-cp38-win32.whl", hash = "sha256:dcdac61dd57b1bc49bd92e67b806cb013c756c27bf00471039537069e55c3c10"}, - {file = "manimpango-0.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:eb41de07c24c4eb6e5d1c2e4234d14012f68fdeadb8c8a0ef942b608e4d423b1"}, - {file = "manimpango-0.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:188477df24d667798ce874a6beb83b5c9eab6900d487967b22527ecee1b88601"}, - {file = "manimpango-0.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1e311e343aa82e5d813b72ac083575a57eba9f7c0d01eda32bb795c57236eb04"}, - {file = "manimpango-0.1.1-cp39-cp39-win32.whl", hash = "sha256:1d41cf62595472adc2c2aa2c68da613dec7d4334a7fa84d18fb5148c1cdb9bbc"}, - {file = "manimpango-0.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:1049a3030cd70875102323cb865ef6d9c571a6f8b471aaef857f355b07ec28f2"}, - {file = "manimpango-0.1.1.tar.gz", hash = "sha256:7384764487da7fd5202d39c8c153c159bcd50cf8ea42aeef8186ab7ea1eb0dc5"}, + {file = "manimpango-0.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:561772f12c6e16360fb4a0dac2f92832d24b1c43a7efd78d41fb287abba02fe1"}, + {file = "manimpango-0.1.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:53366f9d29344351debc403d934a5f1265bbec090799af9a2091e0d98316a517"}, + {file = "manimpango-0.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:18b8309ae9463fd3777cce56764c2a2bee0f2e15d1d0b54feb1366a21dd26d11"}, + {file = "manimpango-0.1.2-cp36-cp36m-win32.whl", hash = "sha256:ea6cc893dc57865d16da79b68b29366b91b21ed2b70d5bf6ea6a65d598cddbd2"}, + {file = "manimpango-0.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:69d2d4cb85c14215593364ac46ea3decd5c3343e56b3f00bd7c588ec890afa5e"}, + {file = "manimpango-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0a5ec342098cb1c987653f8803ccd405a7d7d88edf286526e2c41415aa075741"}, + {file = "manimpango-0.1.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d8a003a3cc91fccf59a460071eb813779177498b34021460ee864ade15d16be3"}, + {file = "manimpango-0.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:684824afc923fc8c532d15316e0646a2bb0421c9c91b1f4d2279e082e017838a"}, + {file = "manimpango-0.1.2-cp37-cp37m-win32.whl", hash = "sha256:fc5d2f675ea38d3afe193b3bd92c441e179a0abc9ccaf17bd38b128d15402852"}, + {file = "manimpango-0.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3a29dd49165c2304a58dd32c9936154d3557f4885225e64fb149c5fb2e3682e3"}, + {file = "manimpango-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53eb5dab820876456c76bb0d9ede146d6835088b6c59c576af2d54f894637052"}, + {file = "manimpango-0.1.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d4294e3b1f24b32a6673d0220293a89de428d82f7834f5df143c8a4c6d267723"}, + {file = "manimpango-0.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1a9036efdc52e1ad3526a99e6b9d4fbde4ac4eb2888e5843935a42406c7e7439"}, + {file = "manimpango-0.1.2-cp38-cp38-win32.whl", hash = "sha256:b6d16b7098b77b2e80e84fb9f8571d2d1e73977cae7ed765d8feadef9cd560d8"}, + {file = "manimpango-0.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:ffcd5e0a03347dd7fd0b4064afeb958adb23b19e9cb5057e66da9574f903073e"}, + {file = "manimpango-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4bb2a6467c52b4cbf6caae2a2bc557edbde65a2cc4fa3d9f3dfde5278ee3ab2e"}, + {file = "manimpango-0.1.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:6367dfb60967489ce1aab5edfbf10b76524866e1c624dd411830d9c020932a6c"}, + {file = "manimpango-0.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:a18c59f0d622b11887acfefc94587a964c79051afb63c983b8096e86c069a4ae"}, + {file = "manimpango-0.1.2-cp39-cp39-win32.whl", hash = "sha256:1178ad5bf75daaee6c050197df79e3550a9b5497dce453f18c1f53d2e4336ddb"}, + {file = "manimpango-0.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0fb42b82f883740d487ea50a98e30c0fd388e7e1a151beec5452601155a4bbbc"}, + {file = "manimpango-0.1.2.tar.gz", hash = "sha256:ab281db42b37bd75ec58b9cecdd412ac0691610d9d74f7ebd00a46a1e49501d3"}, ] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, @@ -1338,8 +1342,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, ] sphinx = [ - {file = "Sphinx-3.4.0-py3-none-any.whl", hash = "sha256:77c801947eb86457822e01eadd5c2e2de020db0201f1f9fc98b0927980b6d212"}, - {file = "Sphinx-3.4.0.tar.gz", hash = "sha256:4dcde313801f23ea4789ac31e5405e240cb758b5d375804807f2f3cc3c396bfa"}, + {file = "Sphinx-3.4.1-py3-none-any.whl", hash = "sha256:aeef652b14629431c82d3fe994ce39ead65b3fe87cf41b9a3714168ff8b83376"}, + {file = "Sphinx-3.4.1.tar.gz", hash = "sha256:e450cb205ff8924611085183bf1353da26802ae73d9251a8fcdf220a8f8712ef"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, From 974c2aeaef0dd9343263d5520b533b4fb6ea89f0 Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Wed, 30 Dec 2020 21:07:06 +0530 Subject: [PATCH 13/16] update manimpango --- poetry.lock | 62 ++++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index d391afbb2e..c6342e9231 100644 --- a/poetry.lock +++ b/poetry.lock @@ -287,7 +287,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "manimpango" -version = "0.1.2" +version = "0.1.4" description = "Bindings for Pango for using with Manim." category = "main" optional = false @@ -491,7 +491,7 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2020.4" +version = "2020.5" description = "World timezone definitions, modern and historical" category = "dev" optional = false @@ -693,14 +693,15 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tqdm" -version = "4.54.1" +version = "4.55.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown", "wheel"] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +telegram = ["requests"] [[package]] name = "typed-ast" @@ -768,7 +769,7 @@ js_renderer = ["grpcio", "grpcio-tools", "watchdog"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "466e03c57b5237182c6cc7ec99e6d68ff8e3375bfc5be53033d26316ae68dbe4" +content-hash = "c2d54eafca0b27220ef8fd1432501a461399480e4bc81e61adce393b17d98f30" [metadata.files] alabaster = [ @@ -1015,27 +1016,28 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239"}, ] manimpango = [ - {file = "manimpango-0.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:561772f12c6e16360fb4a0dac2f92832d24b1c43a7efd78d41fb287abba02fe1"}, - {file = "manimpango-0.1.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:53366f9d29344351debc403d934a5f1265bbec090799af9a2091e0d98316a517"}, - {file = "manimpango-0.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:18b8309ae9463fd3777cce56764c2a2bee0f2e15d1d0b54feb1366a21dd26d11"}, - {file = "manimpango-0.1.2-cp36-cp36m-win32.whl", hash = "sha256:ea6cc893dc57865d16da79b68b29366b91b21ed2b70d5bf6ea6a65d598cddbd2"}, - {file = "manimpango-0.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:69d2d4cb85c14215593364ac46ea3decd5c3343e56b3f00bd7c588ec890afa5e"}, - {file = "manimpango-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0a5ec342098cb1c987653f8803ccd405a7d7d88edf286526e2c41415aa075741"}, - {file = "manimpango-0.1.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d8a003a3cc91fccf59a460071eb813779177498b34021460ee864ade15d16be3"}, - {file = "manimpango-0.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:684824afc923fc8c532d15316e0646a2bb0421c9c91b1f4d2279e082e017838a"}, - {file = "manimpango-0.1.2-cp37-cp37m-win32.whl", hash = "sha256:fc5d2f675ea38d3afe193b3bd92c441e179a0abc9ccaf17bd38b128d15402852"}, - {file = "manimpango-0.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3a29dd49165c2304a58dd32c9936154d3557f4885225e64fb149c5fb2e3682e3"}, - {file = "manimpango-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53eb5dab820876456c76bb0d9ede146d6835088b6c59c576af2d54f894637052"}, - {file = "manimpango-0.1.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d4294e3b1f24b32a6673d0220293a89de428d82f7834f5df143c8a4c6d267723"}, - {file = "manimpango-0.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1a9036efdc52e1ad3526a99e6b9d4fbde4ac4eb2888e5843935a42406c7e7439"}, - {file = "manimpango-0.1.2-cp38-cp38-win32.whl", hash = "sha256:b6d16b7098b77b2e80e84fb9f8571d2d1e73977cae7ed765d8feadef9cd560d8"}, - {file = "manimpango-0.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:ffcd5e0a03347dd7fd0b4064afeb958adb23b19e9cb5057e66da9574f903073e"}, - {file = "manimpango-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4bb2a6467c52b4cbf6caae2a2bc557edbde65a2cc4fa3d9f3dfde5278ee3ab2e"}, - {file = "manimpango-0.1.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:6367dfb60967489ce1aab5edfbf10b76524866e1c624dd411830d9c020932a6c"}, - {file = "manimpango-0.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:a18c59f0d622b11887acfefc94587a964c79051afb63c983b8096e86c069a4ae"}, - {file = "manimpango-0.1.2-cp39-cp39-win32.whl", hash = "sha256:1178ad5bf75daaee6c050197df79e3550a9b5497dce453f18c1f53d2e4336ddb"}, - {file = "manimpango-0.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0fb42b82f883740d487ea50a98e30c0fd388e7e1a151beec5452601155a4bbbc"}, - {file = "manimpango-0.1.2.tar.gz", hash = "sha256:ab281db42b37bd75ec58b9cecdd412ac0691610d9d74f7ebd00a46a1e49501d3"}, + {file = "manimpango-0.1.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b4d61797b36b9938c226bd38a32fd15eea580bf052044143749326921bf0a6cd"}, + {file = "manimpango-0.1.4-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:fcbe104da7b63d8781d1e9952cba6bf4358a9c341c4e98f158bc91b913384f91"}, + {file = "manimpango-0.1.4-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:6e02472fbb05176ba5d0b70866221152507fe6daa4bdf1eb1cf30dffb6f606bd"}, + {file = "manimpango-0.1.4-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:05a055c41db3b731cbd3fcb3cfe7b1765d4bb1c3b6201db392a3ee9e57772976"}, + {file = "manimpango-0.1.4-cp36-cp36m-win32.whl", hash = "sha256:3cb3622f4defdcbb0c90bbd86aa20ec2ae9b548a967d31a49f5a06a848b5b923"}, + {file = "manimpango-0.1.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4059eac98f93296da9431a2dd3c2e863819a311cc945d3c8e6112a48e4657005"}, + {file = "manimpango-0.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f489bc3f5fe0c908894a480ed14e5ac0cc87a959aeb073cf5a82a48eecd07bcb"}, + {file = "manimpango-0.1.4-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c3b493dd5cf53f0243c3d7d861415869bac7e04ec86a816536d23aab2aa88230"}, + {file = "manimpango-0.1.4-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:205e7ded2e74f174be4d1e96b27a2fc3bf9b0bdfedccc095b79d627d659d4238"}, + {file = "manimpango-0.1.4-cp37-cp37m-win32.whl", hash = "sha256:4d5eb4a98684dfd91809c0c910637a952c14c35e0029776e4f907aaf61c206fa"}, + {file = "manimpango-0.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:306a8e67782178f968e5f1414f4b86711c487ea74f886280aae93225afa103b9"}, + {file = "manimpango-0.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:75044532210a11c00cfd5a6adc5381fd9b848b4a4f444b5d872488d571c6ca2a"}, + {file = "manimpango-0.1.4-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:34867ab61eb691dae7291596eb09c12616ee054f9812e884a0391c83cf6b5f92"}, + {file = "manimpango-0.1.4-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:7ca4adcebe45b37e52edb7d5bdc50e0b53fc73eada17e6dfc83e237386df4e36"}, + {file = "manimpango-0.1.4-cp38-cp38-win32.whl", hash = "sha256:8543495da7b7fb5c35a33af710130b2c6950a1b931b5baf03c058573657b1197"}, + {file = "manimpango-0.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:a840b41243d30d8d19a4847c2213aa05158d3009dbc4289b914eac92719b4f24"}, + {file = "manimpango-0.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c17cb10e74f191df7a7848423c298e5a4004a13641088a6a31b4ae5296f00d82"}, + {file = "manimpango-0.1.4-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:5295d3a27d291ca0879b51cf1e398d129aa91db8c6b89c14417fa61cb1fa80e7"}, + {file = "manimpango-0.1.4-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6e0ed860825c4e57f16f06f1b14d9599217add991136edfb390f446c85fc4830"}, + {file = "manimpango-0.1.4-cp39-cp39-win32.whl", hash = "sha256:ec4497af4a23d6969dd045cc66695ae59d63157119908ce76bb5585450183b63"}, + {file = "manimpango-0.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:e165fd017864b7435da59f4a192f3f55354602e399e763ded20fbbd7fc5f9e42"}, + {file = "manimpango-0.1.4.tar.gz", hash = "sha256:693fbc52ea60c75acb9c98f23fc8e98a429b5ce02ab761ef9db24e9d61d62a49"}, ] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, @@ -1248,8 +1250,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"}, ] pytz = [ - {file = "pytz-2020.4-py2.py3-none-any.whl", hash = "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd"}, - {file = "pytz-2020.4.tar.gz", hash = "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268"}, + {file = "pytz-2020.5-py2.py3-none-any.whl", hash = "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4"}, + {file = "pytz-2020.5.tar.gz", hash = "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5"}, ] recommonmark = [ {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, @@ -1374,8 +1376,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tqdm = [ - {file = "tqdm-4.54.1-py2.py3-none-any.whl", hash = "sha256:d4f413aecb61c9779888c64ddf0c62910ad56dcbe857d8922bb505d4dbff0df1"}, - {file = "tqdm-4.54.1.tar.gz", hash = "sha256:38b658a3e4ecf9b4f6f8ff75ca16221ae3378b2e175d846b6b33ea3a20852cf5"}, + {file = "tqdm-4.55.0-py2.py3-none-any.whl", hash = "sha256:0cd81710de29754bf17b6fee07bdb86f956b4fa20d3078f02040f83e64309416"}, + {file = "tqdm-4.55.0.tar.gz", hash = "sha256:f4f80b96e2ceafea69add7bf971b8403b9cba8fb4451c1220f91c79be4ebd208"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, diff --git a/pyproject.toml b/pyproject.toml index 6b2382a551..cff99152d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ pydub = "*" pygments = "*" rich = "^6.0" pycairo = "^1.19" -manimpango = "^0" +manimpango = "^0.1.4" grpcio = { version = "1.33.*", optional = true } grpcio-tools = { version = "1.33.*", optional = true } watchdog = { version = "*", optional = true } From 015dccc6ff9b9488b194dbca8e8d81a0e00b298a Mon Sep 17 00:00:00 2001 From: Syrus Dark Date: Thu, 31 Dec 2020 13:03:44 +0530 Subject: [PATCH 14/16] Remove pango installation docs --- docs/source/installation/mac.rst | 10 ---------- docs/source/installation/win.rst | 26 -------------------------- 2 files changed, 36 deletions(-) diff --git a/docs/source/installation/mac.rst b/docs/source/installation/mac.rst index d39e633066..25064a4c19 100644 --- a/docs/source/installation/mac.rst +++ b/docs/source/installation/mac.rst @@ -15,16 +15,6 @@ To install cairo: brew install cairo -To install Pango and it dependencies: - -.. code-block:: bash - - brew install pkg-config - brew install libffi - brew install pango - brew install glib - - To install ffmpeg: .. code-block:: bash diff --git a/docs/source/installation/win.rst b/docs/source/installation/win.rst index f9d301d13b..30b8824d2f 100644 --- a/docs/source/installation/win.rst +++ b/docs/source/installation/win.rst @@ -18,32 +18,6 @@ You can install manim very easily using chocolatey, by typing the following comm And then you can skip all the other steps and move to installing :ref:`latex-installation`. Please see :doc:`troubleshooting` section for details about OSError. -Pango Installation -****************** - -These steps would get you `libpango-1.0-0.dll` to your ``PATH`` along -with other dependencies. You may probably have them before itself if -you have installed `GTK `_ or any ``GTK`` -based app like emacs. If you have it you can just add it to your -path and skip these steps. - -1. Go to `Release Page - `_ - and download the one according to your PC architechture. - - .. important:: Please download the ``zip`` file for architechture of python installed. - It is possible to have installed ``x86`` python installed on ``x64`` PC. - -2. Extract the zip file using File Explorer or 7z to the loaction you want to install. - - .. code-block:: bash - - 7z x pango-windows-binaires-x64.zip -oC:\Pango - -3. Finally, add it `PATH variable - `_. - - FFmpeg installation ******************* From ad9fa7e402804f1af1a9a33a94b45a9d6586ffe4 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 31 Dec 2020 11:12:15 +0100 Subject: [PATCH 15/16] remove ffi workaround from Dockerfile --- docker/Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index d7ce166776..0d9d81c1fb 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -26,9 +26,6 @@ COPY . /opt/manim WORKDIR /opt/manim RUN pip install --no-cache . -# ensure that ffi bindings are generated -RUN python -c "import pangocairocffi" - # create working directory for user to mount local directory into WORKDIR /manim RUN chmod 666 /manim From cdb917804c60dc656c8dc190702f42aed1948d41 Mon Sep 17 00:00:00 2001 From: Benjamin Hackl Date: Thu, 31 Dec 2020 12:08:27 +0100 Subject: [PATCH 16/16] troubleshooting: new entry for manimpango, hint for update for old pango problems --- docs/source/installation/troubleshooting.rst | 38 ++++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/docs/source/installation/troubleshooting.rst b/docs/source/installation/troubleshooting.rst index 21917fa23f..f679909dd6 100644 --- a/docs/source/installation/troubleshooting.rst +++ b/docs/source/installation/troubleshooting.rst @@ -3,30 +3,28 @@ Troubleshooting List of known installation problems. -(Windows) OSError: dlopen() failed to load a library: pango? ------------------------------------------------------------- - -If your manual installation of Manim (or even the installation using -Chocolatey) fails with the error +``pip install manim`` fails when installing manimpango? +------------------------------------------------------- +Most likely this means that pip was not able to use our pre-built wheels +of ``manimpango``. Let us know (via our `Discord `_ +or by opening a +`new issue on GitHub `_) +which architecture you would like to see supported, and we'll see what we +can do about it. + +To fix errors when installing ``manimpango``, you need to make sure you +have all the necessary build requirements. Check out the detailed +instructions given in +`the BUILDING section `_ +of the corresponding `GitHub repository `_. -.. code-block:: - OSError: dlopen() failed to load a library: pango / pango-1 / pango-1.0 / pango-1.0-0 - -possibly combined with alerts warning about procedure entry points -``"deflateSetHeader"`` and ``"inflateReset2"`` that could not be -located, you might run into an issue with a patched version of ``zlib1.dll`` -shipped by Intel, `as described here `_. +(Windows) OSError: dlopen() failed to load a library: pango? +------------------------------------------------------------ -To resolve this issue, you can copy ``zlib1.dll`` from the directory -provided for the Pango binaries to the directory Manim is installed to. +This should be fixed in Manim's latest version, update +using ``pip install --upgrade manim``. -For a more global solution (try at your own risk!), try renaming the -file ``zlib1.dll`` located at ``C:\Program Files\Intel\Wifi\bin`` to -something like ``zlib1.dll.bak`` -- and then try installing Manim again -(either using ``pip install manim`` or with Chocolatey). Ensure that -you are able to revert this name change in case you run into troubles -with your WiFi (we did not get any reports about such a problem, however). Some letters are missing from TextMobject/TexMobject output?