Skip to content

Commit dff23db

Browse files
committed
fix(text-shaping): avoid icu file warning on windows when using skia.TextBlob.MakeFromShapedText()
1 parent c7aef05 commit dff23db

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

src/pictex/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
pictex: A Python library for creating complex visual compositions and beautifully styled images.
33
"""
44

5+
from . import __skia_init
6+
__skia_init.prime_skia_icu_engine()
7+
58
from .builders import Canvas, Text, Row, Column, Image, Element
69
from .models.public import *
710
from .bitmap_image import BitmapImage
@@ -31,4 +34,4 @@
3134

3235
"BitmapImage",
3336
"VectorImage",
34-
]
37+
]

src/pictex/__skia_init.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
import sys
3+
import contextlib
4+
5+
_skia_icu_primed = False
6+
def prime_skia_icu_engine():
7+
global _skia_icu_primed
8+
if _skia_icu_primed:
9+
return
10+
11+
try:
12+
import skia
13+
14+
with _suppress_stderr():
15+
skia.Unicode.ICU_Make()
16+
17+
except Exception:
18+
pass
19+
finally:
20+
_skia_icu_primed = True
21+
22+
@contextlib.contextmanager
23+
def _suppress_stderr():
24+
original_stderr_fd = sys.stderr.fileno()
25+
saved_stderr_fd = os.dup(original_stderr_fd)
26+
try:
27+
devnull_fd = os.open(os.devnull, os.O_WRONLY)
28+
os.dup2(devnull_fd, original_stderr_fd)
29+
yield
30+
finally:
31+
os.dup2(saved_stderr_fd, original_stderr_fd)
32+
os.close(saved_stderr_fd)
33+
if 'devnull_fd' in locals():
34+
os.close(devnull_fd)

0 commit comments

Comments
 (0)