ManimCommunity / ManimPango

Binding for Pango, to use with Manim.
https://manimpango.manim.community
MIT License
41 stars 13 forks source link

Implemented a refactored version #77

Closed YishiMichael closed 2 years ago

YishiMichael commented 2 years ago

I've just forked and modified ManimPango (See code here). Here's the main course:

def markup_to_svg(
    markup_str: str,
    file_name: str,
    width: int = 1920,
    height: int = 1080,
    *, # keyword only arguments below
    justify: bool = False,
    indent: int = 0,
    alignment: int = 0,
    line_width: int = -1,
) -> str

I think such a function is enough to handle all the requirements, as partial configurations applied on the text string can be handled by adding <span> tags. This function simutaneously deals with Text and MarkupText class.

I'm hesitating whether to go on to make a new repository ManimGLPango, or create another branch inside ManimPango. Now I'm trying making a release on PyPI, but am facing some problems. Considered that I'm not familiar with this kind of work, if someone of ManimCommunity could help me create a separate branch and release this special version, many thanks!

This is what I'm faced with. When I run py -m build, a quite long error is raised:

Error message ``` $ py -m build * Creating venv isolated environment... * Installing packages in isolated environment... (Cython>=0.27, setuptools, wheel) * Getting dependencies for sdist... running egg_info writing ManimGLPango.egg-info\PKG-INFO writing dependency_links to ManimGLPango.egg-info\dependency_links.txt writing top-level names to ManimGLPango.egg-info\top_level.txt reading manifest file 'ManimGLPango.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'docs\_build' adding license file 'LICENSE' writing manifest file 'ManimGLPango.egg-info\SOURCES.txt' * Building sdist... running sdist running egg_info writing ManimGLPango.egg-info\PKG-INFO writing dependency_links to ManimGLPango.egg-info\dependency_links.txt writing top-level names to ManimGLPango.egg-info\top_level.txt reading manifest file 'ManimGLPango.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'docs\_build' adding license file 'LICENSE' writing manifest file 'ManimGLPango.egg-info\SOURCES.txt' running check creating ManimGLPango-0.1.0 creating ManimGLPango-0.1.0\ManimGLPango.egg-info creating ManimGLPango-0.1.0\docs creating ManimGLPango-0.1.0\docs\_static creating ManimGLPango-0.1.0\docs\_templates creating ManimGLPango-0.1.0\docs\_templates\autosummary creating ManimGLPango-0.1.0\manimglpango creating ManimGLPango-0.1.0\tests creating ManimGLPango-0.1.0\tests\fonts copying files to ManimGLPango-0.1.0... copying .coveragerc -> ManimGLPango-0.1.0 copying CODE_OF_CONDUCT.md -> ManimGLPango-0.1.0 copying LICENSE -> ManimGLPango-0.1.0 copying MANIFEST.in -> ManimGLPango-0.1.0 copying README.md -> ManimGLPango-0.1.0 copying pyproject.toml -> ManimGLPango-0.1.0 copying requirements-dev.txt -> ManimGLPango-0.1.0 copying setup.cfg -> ManimGLPango-0.1.0 copying setup.py -> ManimGLPango-0.1.0 copying ManimGLPango.egg-info\PKG-INFO -> ManimGLPango-0.1.0\ManimGLPango.egg-info copying ManimGLPango.egg-info\SOURCES.txt -> ManimGLPango-0.1.0\ManimGLPango.egg-info copying ManimGLPango.egg-info\dependency_links.txt -> ManimGLPango-0.1.0\ManimGLPango.egg-info copying ManimGLPango.egg-info\not-zip-safe -> ManimGLPango-0.1.0\ManimGLPango.egg-info copying ManimGLPango.egg-info\top_level.txt -> ManimGLPango-0.1.0\ManimGLPango.egg-info copying docs\Makefile -> ManimGLPango-0.1.0\docs copying docs\RELEASE.rst -> ManimGLPango-0.1.0\docs copying docs\conf.py -> ManimGLPango-0.1.0\docs copying docs\index.rst -> ManimGLPango-0.1.0\docs copying docs\make.bat -> ManimGLPango-0.1.0\docs copying docs\reference.rst -> ManimGLPango-0.1.0\docs copying docs\_static\favicon.ico -> ManimGLPango-0.1.0\docs\_static copying docs\_templates\autosummary\class.rst -> ManimGLPango-0.1.0\docs\_templates\autosummary copying docs\_templates\autosummary\module.rst -> ManimGLPango-0.1.0\docs\_templates\autosummary copying manimglpango\__init__.py -> ManimGLPango-0.1.0\manimglpango copying manimglpango\_version.py -> ManimGLPango-0.1.0\manimglpango copying manimglpango\cairo.pxd -> ManimGLPango-0.1.0\manimglpango copying manimglpango\cmanimpango.c -> ManimGLPango-0.1.0\manimglpango copying manimglpango\cmanimpango.pxd -> ManimGLPango-0.1.0\manimglpango copying manimglpango\cmanimpango.pyx -> ManimGLPango-0.1.0\manimglpango copying manimglpango\glib.pxd -> ManimGLPango-0.1.0\manimglpango copying manimglpango\pango.pxd -> ManimGLPango-0.1.0\manimglpango copying manimglpango\register_font.c -> ManimGLPango-0.1.0\manimglpango copying manimglpango\register_font.pxd -> ManimGLPango-0.1.0\manimglpango copying manimglpango\register_font.pyx -> ManimGLPango-0.1.0\manimglpango copying tests\__init__.py -> ManimGLPango-0.1.0\tests copying tests\_manim.py -> ManimGLPango-0.1.0\tests copying tests\conftest.py -> ManimGLPango-0.1.0\tests copying tests\svg_tester.py -> ManimGLPango-0.1.0\tests copying tests\test_colors.py -> ManimGLPango-0.1.0\tests copying tests\test_fonts.py -> ManimGLPango-0.1.0\tests copying tests\test_list_fonts.py -> ManimGLPango-0.1.0\tests copying tests\test_markup.py -> ManimGLPango-0.1.0\tests copying tests\test_version.py -> ManimGLPango-0.1.0\tests copying tests\fonts\AdobeVFPrototype.ttf -> ManimGLPango-0.1.0\tests\fonts copying tests\fonts\BungeeColor-Regular_colr_Windows.ttf -> ManimGLPango-0.1.0\tests\fonts copying tests\fonts\BungeeOutline-Regular.ttf -> ManimGLPango-0.1.0\tests\fonts copying tests\fonts\LICENSE.txt -> ManimGLPango-0.1.0\tests\fonts copying tests\fonts\MaShanZheng-Regular.ttf -> ManimGLPango-0.1.0\tests\fonts Writing ManimGLPango-0.1.0\setup.cfg Creating tar archive removing 'ManimGLPango-0.1.0' (and everything under it) * Building wheel from sdist * Creating venv isolated environment... * Installing packages in isolated environment... (Cython>=0.27, setuptools, wheel) * Getting dependencies for wheel... running egg_info writing ManimGLPango.egg-info\PKG-INFO writing dependency_links to ManimGLPango.egg-info\dependency_links.txt writing top-level names to ManimGLPango.egg-info\top_level.txt reading manifest file 'ManimGLPango.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'docs\_build' adding license file 'LICENSE' writing manifest file 'ManimGLPango.egg-info\SOURCES.txt' * Installing packages in isolated environment... (wheel) * Building wheel... running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-3.9 creating build\lib.win-amd64-3.9\manimglpango copying manimglpango\_version.py -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\__init__.py -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\cairo.pxd -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\cmanimpango.pxd -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\glib.pxd -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\pango.pxd -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\register_font.pxd -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\cmanimpango.pyx -> build\lib.win-amd64-3.9\manimglpango copying manimglpango\register_font.pyx -> build\lib.win-amd64-3.9\manimglpango running build_ext building 'manimglpango.cmanimpango' extension creating build\temp.win-amd64-3.9 creating build\temp.win-amd64-3.9\Release creating build\temp.win-amd64-3.9\Release\manimglpango "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30037\bin\HostX86\x64\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD -DUNICODE=1 -ID:/msys64/mingw64/include/pango-1.0 -ID:/msys64/mingw64/include -ID:/msys64/mingw64/include/glib-2.0 -ID:/msys64/mingw64/lib/glib-2.0/include -ID:/msys64/mingw64/include/harfbuzz -ID:/msys64/mingw64/include/freetype2 -ID:/msys64/mingw64/include/libpng16 -ID:/msys64/mingw64/include/fribidi -ID:/msys64/mingw64/include/cairo -ID:/msys64/mingw64/include/lzo -ID:/msys64/mingw64/include/pixman-1 -ID:/msys64/mingw64/include/pango-1.0 -ID:/msys64/mingw64/include -ID:/msys64/mingw64/include/glib-2.0 -ID:/msys64/mingw64/lib/glib-2.0/include -ID:/msys64/mingw64/include/harfbuzz -ID:/msys64/mingw64/include/freetype2 -ID:/msys64/mingw64/include/libpng16 -ID:/msys64/mingw64/include/fribidi -ID:/msys64/mingw64/include/cairo -ID:/msys64/mingw64/include/lzo -ID:/msys64/mingw64/include/pixman-1 -IC:\Users\Michael\AppData\Local\Temp\build-env-otdpedt6\include -ID:\python\include -ID:\python\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30037\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" /Tcmanimglpango\cmanimpango.c /Fobuild\temp.win-amd64-3.9\Release\manimglpango\cmanimpango.obj -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -mms-bitfields -pthread -mms-bitfields -mms-bitfields -mms-bitfields -pthread -mms-bitfields -mms-bitfields cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-pthread” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-pthread” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cl: 命令行 warning D9002 :忽略未知选项“-mms-bitfields” cmanimpango.c D:/msys64/mingw64/include\stdio.h(577): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(584): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(590): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(844): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(870): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(1224): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(1231): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(1237): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(1353): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdio.h(1363): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\swprintf.inl(27): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\swprintf.inl(34): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdlib.h(389): error C2085: “_exit”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(389): error C2143: 语法错误: 缺少“;”(在“类型”的前面) D:/msys64/mingw64/include\stdlib.h(396): error C2085: “_Exit”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(396): error C2143: 语法错误: 缺少“;”(在“类型”的前面) D:/msys64/mingw64/include\stdlib.h(399): error C2085: “_Exit”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(399): error C2143: 语法错误: 缺少“;”(在“{”的前面) D:/msys64/mingw64/include\stdlib.h(399): warning C4013: “_exit”未定义;假设外部返回 int D:/msys64/mingw64/include\stdlib.h(399): error C2065: “status”: 未声明的标识符 D:/msys64/mingw64/include\stdlib.h(405): error C2059: 语法错误:“类型” D:/msys64/mingw64/include\stdlib.h(681): error C2491: “_beep”: 不允许 dllimport 函数 的定义 D:/msys64/mingw64/include\stdlib.h(683): error C2085: “_seterrormode”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(683): error C2143: 语法错误: 缺少“;”(在“类型”的前面) D:/msys64/mingw64/include\stdlib.h(684): error C2085: “_sleep”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(684): error C2143: 语法错误: 缺少“;”(在“类型”的前面) D:/msys64/mingw64/include\stdlib.h(705): error C2085: “ecvt”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(706): error C2085: “fcvt”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(707): error C2085: “gcvt”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(708): error C2085: “itoa”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(709): error C2085: “ltoa”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(710): error C2085: “putenv”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(714): error C2085: “swab”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(717): error C2085: “ultoa”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(718): error C2085: “onexit”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(724): error C2085: “lldiv_t”: 不在形参表中 D:/msys64/mingw64/include\stdlib.h(726): error C2061: 语法错误: 标识符“lldiv_t” D:/msys64/mingw64/include\stdlib.h(730): error C2169: “llabs”: 内部函数,不能定义 D:/msys64/mingw64/include\malloc.h(80): fatal error C1083: 无法打开包括文件: “mm_malloc.h”: No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.29.30037\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2 ERROR Backend subproccess exited when trying to invoke build_wheel ```
Darylgolden commented 2 years ago

I'm not very familiar with ManimPango or how Manim uses Text, but I do have a comment about this:

I'm hesitating whether to go on to make a new repository ManimGLPango, or create another branch inside ManimPango.

I think it's best that you make a PR to the main branch of ManimPango, so that we can discuss look at and discuss your changes more easily. If a change in the API will be helpful for ManimGL, it will likely be helpful for ManimCE too. Having a separate branch just for ManimGL fragments developmental efforts and I don't see much reason for doing it.

YishiMichael commented 2 years ago

All right, I'll open a PR for discussion

naveen521kk commented 2 years ago

I think it's best to go the way https://github.com/ManimCommunity/manim/issues/2355 has proposed (as well as discussing a corresponding API for this project too). Introducing another new API for just previous Text implementation is useless, IMHO. Probably, if there's any problem with the previous API you can make issues/pull requests to fix them. If you really want a new API you should convince me first :wink:.

Also, maintaining a new project; especially one with c-extension is difficult and I feel having another version of ManimPango for manimgl is useless.

While making a PR can you explain about the motivation for making this new API and how it's different from previous one like MarkupUtils.text2svg. It would be great if you could accompany it with some tests.

YishiMichael commented 2 years ago

PR opened in #78