Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit437dfc0

Browse files
committed
ft2font: Convert flag properties to enums
1 parentb92a02f commit437dfc0

File tree

7 files changed

+186
-66
lines changed

7 files changed

+186
-66
lines changed

‎doc/api/next_api_changes/deprecations/28842-ES.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,22 @@ prefix):
3434
- ``LOAD_TARGET_MONO``
3535
- ``LOAD_TARGET_LCD``
3636
- ``LOAD_TARGET_LCD_V``
37+
38+
The following constants are now part of `.ft2font.FaceFlags`:
39+
40+
- ``EXTERNAL_STREAM``
41+
- ``FAST_GLYPHS``
42+
- ``FIXED_SIZES``
43+
- ``FIXED_WIDTH``
44+
- ``GLYPH_NAMES``
45+
- ``HORIZONTAL``
46+
- ``KERNING``
47+
- ``MULTIPLE_MASTERS``
48+
- ``SCALABLE``
49+
- ``SFNT``
50+
- ``VERTICAL``
51+
52+
The following constants are now part of `.ft2font.StyleFlags`:
53+
54+
- ``ITALIC``
55+
- ``BOLD``

‎galleries/examples/misc/ftface_props.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,10 @@
4646
# vertical thickness of the underline
4747
print('Underline thickness:',font.underline_thickness)
4848

49-
forstylein ('Italic',
50-
'Bold',
51-
'Scalable',
52-
'Fixed sizes',
53-
'Fixed width',
54-
'SFNT',
55-
'Horizontal',
56-
'Vertical',
57-
'Kerning',
58-
'Fast glyphs',
59-
'Multiple masters',
60-
'Glyph names',
61-
'External stream'):
62-
bitpos=getattr(ft,style.replace(' ','_').upper())-1
63-
print(f"{style+':':17}",bool(font.style_flags& (1<<bitpos)))
49+
forflaginft.StyleFlags:
50+
name=flag.name.replace('_',' ').title()+':'
51+
print(f"{name:17}",flaginfont.style_flags)
52+
53+
forflaginft.FaceFlags:
54+
name=flag.name.replace('_',' ').title()+':'
55+
print(f"{name:17}",flaginfont.face_flags)

‎lib/matplotlib/backends/backend_pdf.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
frommatplotlib.figureimportFigure
3636
frommatplotlib.font_managerimportget_font,fontManageras_fontManager
3737
frommatplotlib._afmimportAFM
38-
frommatplotlib.ft2fontimportFIXED_WIDTH,ITALIC,FT2Font,Kerning,LoadFlags
38+
frommatplotlib.ft2fontimportFT2Font,FaceFlags,Kerning,LoadFlags,StyleFlags
3939
frommatplotlib.transformsimportAffine2D,BboxBase
4040
frommatplotlib.pathimportPath
4141
frommatplotlib.datesimportUTC
@@ -1416,15 +1416,15 @@ def embedTTFType42(font, characters, descriptor):
14161416

14171417
flags=0
14181418
symbolic=False# ps_name.name in ('Cmsy10', 'Cmmi10', 'Cmex10')
1419-
ifff&FIXED_WIDTH:
1419+
ifFaceFlags.FIXED_WIDTHinff:
14201420
flags|=1<<0
14211421
if0:# TODO: serif
14221422
flags|=1<<1
14231423
ifsymbolic:
14241424
flags|=1<<2
14251425
else:
14261426
flags|=1<<5
1427-
ifsf&ITALIC:
1427+
ifStyleFlags.ITALICinsf:
14281428
flags|=1<<6
14291429
if0:# TODO: all caps
14301430
flags|=1<<16

‎lib/matplotlib/font_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ def ttfFontProperty(font):
381381
style='italic'
382382
elifsfnt2.find('regular')>=0:
383383
style='normal'
384-
eliffont.style_flags&ft2font.ITALIC:
384+
elifft2font.StyleFlags.ITALICinfont.style_flags:
385385
style='italic'
386386
else:
387387
style='normal'
@@ -430,7 +430,7 @@ def get_weight(): # From fontconfig's FcFreeTypeQueryFaceInternal.
430430
forregex,weightin_weight_regexes:
431431
ifre.search(regex,style,re.I):
432432
returnweight
433-
iffont.style_flags&ft2font.BOLD:
433+
ifft2font.StyleFlags.BOLDinfont.style_flags:
434434
return700# "bold"
435435
return500# "medium", not "regular"!
436436

‎lib/matplotlib/ft2font.pyi

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,27 @@ from numpy.typing import NDArray
88

99
__freetype_build_type__:str
1010
__freetype_version__:str
11-
BOLD:int
12-
EXTERNAL_STREAM:int
13-
FAST_GLYPHS:int
14-
FIXED_SIZES:int
15-
FIXED_WIDTH:int
16-
GLYPH_NAMES:int
17-
HORIZONTAL:int
18-
ITALIC:int
19-
KERNING:int
20-
MULTIPLE_MASTERS:int
21-
SCALABLE:int
22-
SFNT:int
23-
VERTICAL:int
11+
12+
classFaceFlags(Flag):
13+
SCALABLE:int
14+
FIXED_SIZES:int
15+
FIXED_WIDTH:int
16+
SFNT:int
17+
HORIZONTAL:int
18+
VERTICAL:int
19+
KERNING:int
20+
FAST_GLYPHS:int
21+
MULTIPLE_MASTERS:int
22+
GLYPH_NAMES:int
23+
EXTERNAL_STREAM:int
24+
HINTER:int
25+
CID_KEYED:int
26+
TRICKY:int
27+
COLOR:int
28+
# VARIATION: int # FT 2.9
29+
# SVG: int # FT 2.12
30+
# SBIX: int # FT 2.12
31+
# SBIX_OVERLAY: int # FT 2.12
2432

2533
classKerning(Enum):
2634
DEFAULT:int
@@ -54,6 +62,11 @@ class LoadFlags(Flag):
5462
TARGET_LCD:int
5563
TARGET_LCD_V:int
5664

65+
classStyleFlags(Flag):
66+
NORMAL:int
67+
ITALIC:int
68+
BOLD:int
69+
5770
class_SfntHeadDict(TypedDict):
5871
version:tuple[int,int]
5972
fontRevision:tuple[int,int]
@@ -232,7 +245,7 @@ class FT2Font(Buffer):
232245
@property
233246
defdescender(self)->int: ...
234247
@property
235-
defface_flags(self)->int: ...
248+
defface_flags(self)->FaceFlags: ...
236249
@property
237250
deffamily_name(self)->str: ...
238251
@property
@@ -256,7 +269,7 @@ class FT2Font(Buffer):
256269
@property
257270
defscalable(self)->bool: ...
258271
@property
259-
defstyle_flags(self)->int: ...
272+
defstyle_flags(self)->StyleFlags: ...
260273
@property
261274
defstyle_name(self)->str: ...
262275
@property

‎lib/matplotlib/tests/test_ft2font.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,11 @@ def test_ft2font_dejavu_attrs():
4444
assertfont.num_fixed_sizes==0# All glyphs are scalable.
4545
assertfont.num_charmaps==5
4646
# Other internal flags are set, so only check the ones we're allowed to test.
47-
expected_flags= (ft2font.SCALABLE|ft2font.SFNT|ft2font.HORIZONTAL|
48-
ft2font.KERNING|ft2font.GLYPH_NAMES)
49-
assert (font.face_flags&expected_flags)==expected_flags
50-
assertfont.style_flags==0# Not italic or bold.
47+
expected_flags= (ft2font.FaceFlags.SCALABLE|ft2font.FaceFlags.SFNT|
48+
ft2font.FaceFlags.HORIZONTAL|ft2font.FaceFlags.KERNING|
49+
ft2font.FaceFlags.GLYPH_NAMES)
50+
assertexpected_flagsinfont.face_flags
51+
assertfont.style_flags==ft2font.StyleFlags.NORMAL
5152
assertfont.scalable
5253
# From FontForge: Font Information → General tab → entry name below.
5354
assertfont.units_per_EM==2048# Em Size.
@@ -76,10 +77,10 @@ def test_ft2font_cm_attrs():
7677
assertfont.num_fixed_sizes==0# All glyphs are scalable.
7778
assertfont.num_charmaps==2
7879
# Other internal flags are set, so only check the ones we're allowed to test.
79-
expected_flags= (ft2font.SCALABLE|ft2font.SFNT|ft2font.HORIZONTAL|
80-
ft2font.GLYPH_NAMES)
81-
assert(font.face_flags&expected_flags)==expected_flags,font.face_flags
82-
assertfont.style_flags==0# Not italic or bold.
80+
expected_flags= (ft2font.FaceFlags.SCALABLE|ft2font.FaceFlags.SFNT|
81+
ft2font.FaceFlags.HORIZONTAL|ft2font.FaceFlags.GLYPH_NAMES)
82+
assertexpected_flagsinfont.face_flags
83+
assertfont.style_flags==ft2font.StyleFlags.NORMAL
8384
assertfont.scalable
8485
# From FontForge: Font Information → General tab → entry name below.
8586
assertfont.units_per_EM==2048# Em Size.
@@ -108,10 +109,10 @@ def test_ft2font_stix_bold_attrs():
108109
assertfont.num_fixed_sizes==0# All glyphs are scalable.
109110
assertfont.num_charmaps==3
110111
# Other internal flags are set, so only check the ones we're allowed to test.
111-
expected_flags= (ft2font.SCALABLE|ft2font.SFNT|ft2font.HORIZONTAL|
112-
ft2font.GLYPH_NAMES)
113-
assert(font.face_flags&expected_flags)==expected_flags,font.face_flags
114-
assertfont.style_flags==ft2font.BOLD
112+
expected_flags= (ft2font.FaceFlags.SCALABLE|ft2font.FaceFlags.SFNT|
113+
ft2font.FaceFlags.HORIZONTAL|ft2font.FaceFlags.GLYPH_NAMES)
114+
assertexpected_flagsinfont.face_flags
115+
assertfont.style_flags==ft2font.StyleFlags.BOLD
115116
assertfont.scalable
116117
# From FontForge: Font Information → General tab → entry name below.
117118
assertfont.units_per_EM==1000# Em Size.

‎src/ft2font_wrapper.cpp

Lines changed: 114 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,74 @@ P11X_DECLARE_ENUM(
3434
{"UNSCALED", FT_KERNING_UNSCALED},
3535
);
3636

37+
constchar *FaceFlags__doc__ =R"""(
38+
Flags returned by `FT2Font.face_flags`.
39+
40+
For more information, see `the FreeType documentation
41+
<https://freetype.org/freetype2/docs/reference/ft2-face_creation.html#ft_face_flag_xxx>`_.
42+
43+
.. versionadded:: 3.10
44+
)""";
45+
46+
enumclassFaceFlags : FT_Long {
47+
#defineDECLARE_FLAG(name) name = FT_FACE_FLAG_##name
48+
DECLARE_FLAG(SCALABLE),
49+
DECLARE_FLAG(FIXED_SIZES),
50+
DECLARE_FLAG(FIXED_WIDTH),
51+
DECLARE_FLAG(SFNT),
52+
DECLARE_FLAG(HORIZONTAL),
53+
DECLARE_FLAG(VERTICAL),
54+
DECLARE_FLAG(KERNING),
55+
DECLARE_FLAG(FAST_GLYPHS),
56+
DECLARE_FLAG(MULTIPLE_MASTERS),
57+
DECLARE_FLAG(GLYPH_NAMES),
58+
DECLARE_FLAG(EXTERNAL_STREAM),
59+
DECLARE_FLAG(HINTER),
60+
DECLARE_FLAG(CID_KEYED),
61+
DECLARE_FLAG(TRICKY),
62+
DECLARE_FLAG(COLOR),
63+
#ifdef FT_FACE_FLAG_VARIATION// backcompat: ft 2.9.0.
64+
DECLARE_FLAG(VARIATION),
65+
#endif
66+
#ifdef FT_FACE_FLAG_SVG// backcompat: ft 2.12.0.
67+
DECLARE_FLAG(SVG),
68+
#endif
69+
#ifdef FT_FACE_FLAG_SBIX// backcompat: ft 2.12.0.
70+
DECLARE_FLAG(SBIX),
71+
#endif
72+
#ifdef FT_FACE_FLAG_SBIX_OVERLAY// backcompat: ft 2.12.0.
73+
DECLARE_FLAG(SBIX_OVERLAY),
74+
#endif
75+
#undef DECLARE_FLAG
76+
};
77+
78+
P11X_DECLARE_ENUM(
79+
"FaceFlags","Flag",
80+
{"SCALABLE", FaceFlags::SCALABLE},
81+
{"FIXED_SIZES", FaceFlags::FIXED_SIZES},
82+
{"FIXED_WIDTH", FaceFlags::FIXED_WIDTH},
83+
{"SFNT", FaceFlags::SFNT},
84+
{"HORIZONTAL", FaceFlags::HORIZONTAL},
85+
{"VERTICAL", FaceFlags::VERTICAL},
86+
{"KERNING", FaceFlags::KERNING},
87+
{"FAST_GLYPHS", FaceFlags::FAST_GLYPHS},
88+
{"MULTIPLE_MASTERS", FaceFlags::MULTIPLE_MASTERS},
89+
{"GLYPH_NAMES", FaceFlags::GLYPH_NAMES},
90+
{"EXTERNAL_STREAM", FaceFlags::EXTERNAL_STREAM},
91+
{"HINTER", FaceFlags::HINTER},
92+
{"CID_KEYED", FaceFlags::CID_KEYED},
93+
{"TRICKY", FaceFlags::TRICKY},
94+
{"COLOR", FaceFlags::COLOR},
95+
// backcompat: ft 2.9.0.
96+
// {"VARIATION", FaceFlags::VARIATION},
97+
// backcompat: ft 2.12.0.
98+
// {"SVG", FaceFlags::SVG},
99+
// backcompat: ft 2.12.0.
100+
// {"SBIX", FaceFlags::SBIX},
101+
// backcompat: ft 2.12.0.
102+
// {"SBIX_OVERLAY", FaceFlags::SBIX_OVERLAY},
103+
);
104+
37105
constchar *LoadFlags__doc__ =R"""(
38106
Flags for `FT2Font.load_char`, `FT2Font.load_glyph`, and `FT2Font.set_text`.
39107
@@ -111,6 +179,30 @@ P11X_DECLARE_ENUM(
111179
{"TARGET_LCD_V", LoadFlags::TARGET_LCD_V},
112180
);
113181

182+
constchar *StyleFlags__doc__ =R"""(
183+
Flags returned by `FT2Font.style_flags`.
184+
185+
For more information, see `the FreeType documentation
186+
<https://freetype.org/freetype2/docs/reference/ft2-face_creation.html#ft_style_flag_xxx>`_.
187+
188+
.. versionadded:: 3.10
189+
)""";
190+
191+
enumclassStyleFlags : FT_Long {
192+
#defineDECLARE_FLAG(name) name = FT_STYLE_FLAG_##name
193+
NORMAL =0,
194+
DECLARE_FLAG(ITALIC),
195+
DECLARE_FLAG(BOLD),
196+
#undef DECLARE_FLAG
197+
};
198+
199+
P11X_DECLARE_ENUM(
200+
"StyleFlags","Flag",
201+
{"NORMAL", StyleFlags::NORMAL},
202+
{"ITALIC", StyleFlags::ITALIC},
203+
{"BOLD", StyleFlags::BOLD},
204+
);
205+
114206
/**********************************************************************
115207
* FT2Image
116208
**/
@@ -1340,16 +1432,16 @@ PyFT2Font_style_name(PyFT2Font *self)
13401432
return name;
13411433
}
13421434

1343-
staticFT_Long
1435+
staticFaceFlags
13441436
PyFT2Font_face_flags(PyFT2Font *self)
13451437
{
1346-
return self->x->get_face()->face_flags;
1438+
returnstatic_cast<FaceFlags>(self->x->get_face()->face_flags);
13471439
}
13481440

1349-
staticFT_Long
1441+
staticStyleFlags
13501442
PyFT2Font_style_flags(PyFT2Font *self)
13511443
{
1352-
return self->x->get_face()->style_flags;
1444+
returnstatic_cast<StyleFlags>(self->x->get_face()->style_flags);
13531445
}
13541446

13551447
static FT_Long
@@ -1496,6 +1588,20 @@ ft2font__getattr__(std::string name) {
14961588
DEPRECATE_ATTR_FROM_FLAG(LOAD_TARGET_LCD, LoadFlags, TARGET_LCD);
14971589
DEPRECATE_ATTR_FROM_FLAG(LOAD_TARGET_LCD_V, LoadFlags, TARGET_LCD_V);
14981590

1591+
DEPRECATE_ATTR_FROM_FLAG(SCALABLE, FaceFlags, SCALABLE);
1592+
DEPRECATE_ATTR_FROM_FLAG(FIXED_SIZES, FaceFlags, FIXED_SIZES);
1593+
DEPRECATE_ATTR_FROM_FLAG(FIXED_WIDTH, FaceFlags, FIXED_WIDTH);
1594+
DEPRECATE_ATTR_FROM_FLAG(SFNT, FaceFlags, SFNT);
1595+
DEPRECATE_ATTR_FROM_FLAG(HORIZONTAL, FaceFlags, HORIZONTAL);
1596+
DEPRECATE_ATTR_FROM_FLAG(VERTICAL, FaceFlags, VERTICAL);
1597+
DEPRECATE_ATTR_FROM_FLAG(KERNING, FaceFlags, KERNING);
1598+
DEPRECATE_ATTR_FROM_FLAG(FAST_GLYPHS, FaceFlags, FAST_GLYPHS);
1599+
DEPRECATE_ATTR_FROM_FLAG(MULTIPLE_MASTERS, FaceFlags, MULTIPLE_MASTERS);
1600+
DEPRECATE_ATTR_FROM_FLAG(GLYPH_NAMES, FaceFlags, GLYPH_NAMES);
1601+
DEPRECATE_ATTR_FROM_FLAG(EXTERNAL_STREAM, FaceFlags, EXTERNAL_STREAM);
1602+
1603+
DEPRECATE_ATTR_FROM_FLAG(ITALIC, StyleFlags, ITALIC);
1604+
DEPRECATE_ATTR_FROM_FLAG(BOLD, StyleFlags, BOLD);
14991605
#undef DEPRECATE_ATTR_FROM_FLAG
15001606

15011607
throwpy::attribute_error(
@@ -1523,6 +1629,8 @@ PYBIND11_MODULE(ft2font, m)
15231629
p11x::bind_enums(m);
15241630
p11x::enums["Kerning"].attr("__doc__") = Kerning__doc__;
15251631
p11x::enums["LoadFlags"].attr("__doc__") = LoadFlags__doc__;
1632+
p11x::enums["FaceFlags"].attr("__doc__") = FaceFlags__doc__;
1633+
p11x::enums["StyleFlags"].attr("__doc__") = StyleFlags__doc__;
15261634

15271635
py::class_<FT2Image>(m,"FT2Image",py::is_final(),py::buffer_protocol(),
15281636
PyFT2Image__doc__)
@@ -1622,9 +1730,9 @@ PYBIND11_MODULE(ft2font, m)
16221730
.def_property_readonly("style_name", &PyFT2Font_style_name,
16231731
"Style name.")
16241732
.def_property_readonly("face_flags", &PyFT2Font_face_flags,
1625-
"Face flags; seethe ft2font constants.")
1733+
"Face flags; see`.FaceFlags`.")
16261734
.def_property_readonly("style_flags", &PyFT2Font_style_flags,
1627-
"Style flags; seethe ft2font constants.")
1735+
"Style flags; see`.StyleFlags`.")
16281736
.def_property_readonly("num_glyphs", &PyFT2Font_num_glyphs,
16291737
"Number of glyphs in the face.")
16301738
.def_property_readonly("num_fixed_sizes", &PyFT2Font_num_fixed_sizes,
@@ -1666,17 +1774,4 @@ PYBIND11_MODULE(ft2font, m)
16661774
m.attr("__freetype_version__") = version_string;
16671775
m.attr("__freetype_build_type__") = FREETYPE_BUILD_TYPE;
16681776
m.def("__getattr__", ft2font__getattr__);
1669-
m.attr("SCALABLE") = FT_FACE_FLAG_SCALABLE;
1670-
m.attr("FIXED_SIZES") = FT_FACE_FLAG_FIXED_SIZES;
1671-
m.attr("FIXED_WIDTH") = FT_FACE_FLAG_FIXED_WIDTH;
1672-
m.attr("SFNT") = FT_FACE_FLAG_SFNT;
1673-
m.attr("HORIZONTAL") = FT_FACE_FLAG_HORIZONTAL;
1674-
m.attr("VERTICAL") = FT_FACE_FLAG_VERTICAL;
1675-
m.attr("KERNING") = FT_FACE_FLAG_KERNING;
1676-
m.attr("FAST_GLYPHS") = FT_FACE_FLAG_FAST_GLYPHS;
1677-
m.attr("MULTIPLE_MASTERS") = FT_FACE_FLAG_MULTIPLE_MASTERS;
1678-
m.attr("GLYPH_NAMES") = FT_FACE_FLAG_GLYPH_NAMES;
1679-
m.attr("EXTERNAL_STREAM") = FT_FACE_FLAG_EXTERNAL_STREAM;
1680-
m.attr("ITALIC") = FT_STYLE_FLAG_ITALIC;
1681-
m.attr("BOLD") = FT_STYLE_FLAG_BOLD;
16821777
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp