Skip to content

Commit 1ceba97

Browse files
committed
Merge branch 'pango-text' of https://github.com/naveen521kk/manim into pango-text
2 parents 886ac8c + 45fcf23 commit 1ceba97

File tree

3 files changed

+128
-2
lines changed

3 files changed

+128
-2
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ eggs/
1616
.eggs/
1717
lib/
1818
lib64/
19-
windows/
2019
parts/
2120
sdist/
2221
var/

manim/mobject/svg/text_mobject.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ def text2svg(self):
867867
fontdesc = pangocffi.FontDescription()
868868
fontdesc.set_size(pangocffi.units_from_double(size))
869869
if family:
870-
fontdesc.set_family("sans-serif")
870+
fontdesc.set_family(family)
871871
fontdesc.set_style(style)
872872
fontdesc.set_weight(weight)
873873
layout.set_font_description(fontdesc)

tests/test_pango.py

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
from manim import PangoText, START_X, START_Y, SVGMobject
2+
import os
3+
import cairocffi
4+
import pangocairocffi
5+
import pangocffi
6+
7+
rtl_text = """صباح الخير
8+
مرحبا جميعا"""
9+
10+
width = 600
11+
height = 400
12+
13+
14+
def test_general_text_svgobject():
15+
"""Checks number of submobjects generated when directly called using ``SVGMobject``"""
16+
text = "hello"
17+
size = 1
18+
folder = os.path.abspath(os.path.join("media", "texts"))
19+
if not os.path.exists(folder):
20+
os.makedirs(folder)
21+
filename = os.path.join(folder, "hello.svg")
22+
a = PangoText(text, size=10)
23+
pangoManim = os.path.join(folder, a.text2hash() + ".svg")
24+
surface = cairocffi.SVGSurface(filename, width, height)
25+
context = cairocffi.Context(surface)
26+
context.move_to(START_X, START_Y)
27+
layout = pangocairocffi.create_layout(context)
28+
layout.set_width(pangocffi.units_from_double(width))
29+
fontdesc = pangocffi.FontDescription()
30+
fontdesc.set_size(pangocffi.units_from_double(size * 10))
31+
layout.set_font_description(fontdesc)
32+
layout.set_text(text)
33+
pangocairocffi.show_layout(context, layout)
34+
surface.finish()
35+
b = SVGMobject(filename)
36+
assert len(a.submobjects) == len(b.submobjects)
37+
38+
39+
def test_rtl_text_text_svgobject():
40+
"""Checks number of submobjects generated when directly called using ``SVGMobject``"""
41+
size = 1
42+
text = rtl_text
43+
folder = os.path.abspath(os.path.join("media", "texts"))
44+
if not os.path.exists(folder):
45+
os.makedirs(folder)
46+
filename = os.path.join(folder, "hello.svg")
47+
a = PangoText(text, size=1)
48+
pangoManim = os.path.join(folder, a.text2hash() + ".svg")
49+
surface = cairocffi.SVGSurface(filename, width, height)
50+
context = cairocffi.Context(surface)
51+
context.move_to(START_X, START_Y)
52+
layout = pangocairocffi.create_layout(context)
53+
layout.set_width(pangocffi.units_from_double(width))
54+
fontdesc = pangocffi.FontDescription()
55+
fontdesc.set_size(pangocffi.units_from_double(size * 10))
56+
layout.set_font_description(fontdesc)
57+
layout.set_text(text)
58+
pangocairocffi.show_layout(context, layout)
59+
surface.finish()
60+
b = SVGMobject(filename)
61+
assert len(a.submobjects) == len(b.submobjects)
62+
63+
64+
def test_font_face():
65+
"""Checks font face using submobject len"""
66+
size = 1
67+
text = rtl_text
68+
font_face = "sans"
69+
folder = os.path.abspath(os.path.join("media", "texts"))
70+
if not os.path.exists(folder):
71+
os.makedirs(folder)
72+
filename = os.path.join(folder, "hello.svg")
73+
a = PangoText(text, size=1, font=font_face)
74+
pangoManim = os.path.join(folder, a.text2hash() + ".svg")
75+
surface = cairocffi.SVGSurface(filename, width, height)
76+
context = cairocffi.Context(surface)
77+
context.move_to(START_X, START_Y)
78+
layout = pangocairocffi.create_layout(context)
79+
layout.set_width(pangocffi.units_from_double(width))
80+
fontdesc = pangocffi.FontDescription()
81+
fontdesc.set_family(font_face)
82+
fontdesc.set_size(pangocffi.units_from_double(size * 10))
83+
layout.set_font_description(fontdesc)
84+
layout.set_text(text)
85+
pangocairocffi.show_layout(context, layout)
86+
surface.finish()
87+
b = SVGMobject(filename)
88+
assert len(a.submobjects) == len(b.submobjects)
89+
90+
91+
def test_whether_svg_file_created():
92+
"""Checks Whether SVG file is created in desired location"""
93+
a = PangoText("hello", size=1)
94+
folder = os.path.abspath(os.path.join("media", "texts"))
95+
if not os.path.exists(folder):
96+
os.makedirs(folder)
97+
theoPath = os.path.abspath(os.path.join(folder, a.text2hash() + ".svg"))
98+
actualPath = os.path.abspath(a.text2svg())
99+
assert theoPath == actualPath
100+
101+
102+
def test_tabs_replace():
103+
"""Checks whether are there in end svg image. Pango should handle tabs and line breaks."""
104+
size = 1
105+
folder = os.path.abspath(os.path.join("media", "texts"))
106+
if not os.path.exists(folder):
107+
os.makedirs(folder)
108+
a = PangoText("hello\thi\nf")
109+
assert a.text == "hellohif"
110+
pangoManim = os.path.join(folder, a.text2hash() + ".svg")
111+
filename = os.path.join(folder, "hello.svg")
112+
surface = cairocffi.SVGSurface(filename, width, height)
113+
context = cairocffi.Context(surface)
114+
context.move_to(START_X, START_Y)
115+
layout = pangocairocffi.create_layout(context)
116+
layout.set_width(pangocffi.units_from_double(width))
117+
fontdesc = pangocffi.FontDescription()
118+
fontdesc.set_size(pangocffi.units_from_double(size * 10))
119+
layout.set_font_description(fontdesc)
120+
layout.set_text("hello\thi\nf")
121+
pangocairocffi.show_layout(context, layout)
122+
surface.finish()
123+
b = SVGMobject(filename)
124+
assert len(a.submobjects) == len(b.submobjects)
125+
126+
127+
test_tabs_replace()

0 commit comments

Comments
 (0)