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

Commit082b797

Browse files
committed
ft2font: Convert flag properties to enums
1 parent67a793b commit082b797

File tree

7 files changed

+179
-66
lines changed

7 files changed

+179
-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
@@ -32,3 +32,22 @@ The following constants are now part of `.ft2font.LoadFlags`:
3232
- ``LOAD_TARGET_MONO``
3333
- ``LOAD_TARGET_LCD``
3434
- ``LOAD_TARGET_LCD_V``
35+
36+
The following constants are now part of `.ft2font.FaceFlags`:
37+
38+
- ``EXTERNAL_STREAM``
39+
- ``FAST_GLYPHS``
40+
- ``FIXED_SIZES``
41+
- ``FIXED_WIDTH``
42+
- ``GLYPH_NAMES``
43+
- ``HORIZONTAL``
44+
- ``KERNING``
45+
- ``MULTIPLE_MASTERS``
46+
- ``SCALABLE``
47+
- ``SFNT``
48+
- ``VERTICAL``
49+
50+
The following constants are now part of `.ft2font.StyleFlags`:
51+
52+
- ``ITALIC``
53+
- ``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}",bool(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: 27 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,10 @@ class LoadFlags(Flag):
5462
TARGET_LCD:int
5563
TARGET_LCD_V:int
5664

65+
classStyleFlags(Flag):
66+
ITALIC:int
67+
BOLD:int
68+
5769
class_SfntHeadDict(TypedDict):
5870
version:tuple[int,int]
5971
fontRevision:tuple[int,int]
@@ -232,7 +244,7 @@ class FT2Font(Buffer):
232244
@property
233245
defdescender(self)->int: ...
234246
@property
235-
defface_flags(self)->int: ...
247+
defface_flags(self)->FaceFlags: ...
236248
@property
237249
deffamily_name(self)->str: ...
238250
@property
@@ -256,7 +268,7 @@ class FT2Font(Buffer):
256268
@property
257269
defscalable(self)->bool: ...
258270
@property
259-
defstyle_flags(self)->int: ...
271+
defstyle_flags(self)->StyleFlags: ...
260272
@property
261273
defstyle_name(self)->str: ...
262274
@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: 108 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,75 @@ P11X_DECLARE_ENUM(
3232
{"UNSCALED", FT_KERNING_UNSCALED},
3333
);
3434

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

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+
189+
enumclassStyleFlags : FT_Long {
190+
#defineDECLARE_FLAG(name) name = FT_STYLE_FLAG_##name
191+
DECLARE_FLAG(ITALIC),
192+
DECLARE_FLAG(BOLD),
193+
#undef DECLARE_FLAG
194+
};
195+
196+
P11X_DECLARE_ENUM("StyleFlags","enum.Flag",
197+
{"ITALIC", StyleFlags::ITALIC},
198+
{"BOLD", StyleFlags::BOLD},
199+
);
200+
113201
/**********************************************************************
114202
* FT2Image
115203
**/
@@ -1307,16 +1395,16 @@ PyFT2Font_style_name(PyFT2Font *self)
13071395
return name;
13081396
}
13091397

1310-
staticFT_Long
1398+
staticFaceFlags
13111399
PyFT2Font_face_flags(PyFT2Font *self)
13121400
{
1313-
return self->x->get_face()->face_flags;
1401+
returnstatic_cast<FaceFlags>(self->x->get_face()->face_flags);
13141402
}
13151403

1316-
staticFT_Long
1404+
staticStyleFlags
13171405
PyFT2Font_style_flags(PyFT2Font *self)
13181406
{
1319-
return self->x->get_face()->style_flags;
1407+
returnstatic_cast<StyleFlags>(self->x->get_face()->style_flags);
13201408
}
13211409

13221410
static FT_Long
@@ -1463,6 +1551,20 @@ ft2font__getattr__(std::string name) {
14631551
DEPRECATE_ATTR_FROM_FLAG(LOAD_TARGET_LCD, LoadFlags, TARGET_LCD);
14641552
DEPRECATE_ATTR_FROM_FLAG(LOAD_TARGET_LCD_V, LoadFlags, TARGET_LCD_V);
14651553

1554+
DEPRECATE_ATTR_FROM_FLAG(SCALABLE, FaceFlags, SCALABLE);
1555+
DEPRECATE_ATTR_FROM_FLAG(FIXED_SIZES, FaceFlags, FIXED_SIZES);
1556+
DEPRECATE_ATTR_FROM_FLAG(FIXED_WIDTH, FaceFlags, FIXED_WIDTH);
1557+
DEPRECATE_ATTR_FROM_FLAG(SFNT, FaceFlags, SFNT);
1558+
DEPRECATE_ATTR_FROM_FLAG(HORIZONTAL, FaceFlags, HORIZONTAL);
1559+
DEPRECATE_ATTR_FROM_FLAG(VERTICAL, FaceFlags, VERTICAL);
1560+
DEPRECATE_ATTR_FROM_FLAG(KERNING, FaceFlags, KERNING);
1561+
DEPRECATE_ATTR_FROM_FLAG(FAST_GLYPHS, FaceFlags, FAST_GLYPHS);
1562+
DEPRECATE_ATTR_FROM_FLAG(MULTIPLE_MASTERS, FaceFlags, MULTIPLE_MASTERS);
1563+
DEPRECATE_ATTR_FROM_FLAG(GLYPH_NAMES, FaceFlags, GLYPH_NAMES);
1564+
DEPRECATE_ATTR_FROM_FLAG(EXTERNAL_STREAM, FaceFlags, EXTERNAL_STREAM);
1565+
1566+
DEPRECATE_ATTR_FROM_FLAG(ITALIC, StyleFlags, ITALIC);
1567+
DEPRECATE_ATTR_FROM_FLAG(BOLD, StyleFlags, BOLD);
14661568
#undef DEPRECATE_ATTR_FROM_FLAG
14671569

14681570
throwpy::attribute_error(
@@ -1587,9 +1689,9 @@ PYBIND11_MODULE(ft2font, m)
15871689
.def_property_readonly("style_name", &PyFT2Font_style_name,
15881690
"Style name.")
15891691
.def_property_readonly("face_flags", &PyFT2Font_face_flags,
1590-
"Face flags; seethe ft2font constants.")
1692+
"Face flags; see`.FaceFlags`.")
15911693
.def_property_readonly("style_flags", &PyFT2Font_style_flags,
1592-
"Style flags; seethe ft2font constants.")
1694+
"Style flags; see`.StyleFlags`.")
15931695
.def_property_readonly("num_glyphs", &PyFT2Font_num_glyphs,
15941696
"Number of glyphs in the face.")
15951697
.def_property_readonly("num_fixed_sizes", &PyFT2Font_num_fixed_sizes,
@@ -1631,17 +1733,4 @@ PYBIND11_MODULE(ft2font, m)
16311733
m.attr("__freetype_version__") = version_string;
16321734
m.attr("__freetype_build_type__") = FREETYPE_BUILD_TYPE;
16331735
m.def("__getattr__", ft2font__getattr__);
1634-
m.attr("SCALABLE") = FT_FACE_FLAG_SCALABLE;
1635-
m.attr("FIXED_SIZES") = FT_FACE_FLAG_FIXED_SIZES;
1636-
m.attr("FIXED_WIDTH") = FT_FACE_FLAG_FIXED_WIDTH;
1637-
m.attr("SFNT") = FT_FACE_FLAG_SFNT;
1638-
m.attr("HORIZONTAL") = FT_FACE_FLAG_HORIZONTAL;
1639-
m.attr("VERTICAL") = FT_FACE_FLAG_VERTICAL;
1640-
m.attr("KERNING") = FT_FACE_FLAG_KERNING;
1641-
m.attr("FAST_GLYPHS") = FT_FACE_FLAG_FAST_GLYPHS;
1642-
m.attr("MULTIPLE_MASTERS") = FT_FACE_FLAG_MULTIPLE_MASTERS;
1643-
m.attr("GLYPH_NAMES") = FT_FACE_FLAG_GLYPH_NAMES;
1644-
m.attr("EXTERNAL_STREAM") = FT_FACE_FLAG_EXTERNAL_STREAM;
1645-
m.attr("ITALIC") = FT_STYLE_FLAG_ITALIC;
1646-
m.attr("BOLD") = FT_STYLE_FLAG_BOLD;
16471736
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp