@@ -705,7 +705,8 @@ const char *PyFT2Font_set_text__doc__ = R"""(
705
705
706
706
static py::array_t <double >
707
707
PyFT2Font_set_text (PyFT2Font *self, std::u32string_view text, double angle = 0.0 ,
708
- std::variant<LoadFlags, FT_Int32> flags_or_int = LoadFlags::FORCE_AUTOHINT)
708
+ std::variant<LoadFlags, FT_Int32> flags_or_int = LoadFlags::FORCE_AUTOHINT,
709
+ py::object language_obj = py::none())
709
710
{
710
711
std::vector<double > xys;
711
712
LoadFlags flags;
@@ -725,7 +726,29 @@ PyFT2Font_set_text(PyFT2Font *self, std::u32string_view text, double angle = 0.0
725
726
throw py::type_error (" flags must be LoadFlags or int" );
726
727
}
727
728
728
- self->x ->set_text (text, angle, static_cast <FT_Int32>(flags), xys);
729
+ FT2Font::LanguageType languages;
730
+ if (py::isinstance<std::string>(language_obj)) {
731
+ languages = std::vector<FT2Font::LanguageRange>{
732
+ FT2Font::LanguageRange{language_obj.cast <std::string>(), 0 , text.size ()}
733
+ };
734
+ } else if (py::isinstance<py::list>(language_obj)) {
735
+ languages = std::vector<FT2Font::LanguageRange>{};
736
+
737
+ for (py::handle lang_range_obj : language_obj.cast <py::list>()) {
738
+ if (!py::isinstance<py::tuple>(lang_range_obj)) {
739
+ throw py::type_error (" languages must be str or list of tuple" );
740
+ }
741
+
742
+ auto lang_range = lang_range_obj.cast <py::tuple>();
743
+ auto lang_str = lang_range[0 ].cast <std::string>();
744
+ auto start = lang_range[1 ].cast <size_t >();
745
+ auto end = lang_range[2 ].cast <size_t >();
746
+
747
+ languages->emplace_back (lang_str, start, end);
748
+ }
749
+ }
750
+
751
+ self->x ->set_text (text, angle, static_cast <FT_Int32>(flags), languages, xys);
729
752
730
753
py::ssize_t dims[] = { static_cast <py::ssize_t >(xys.size ()) / 2 , 2 };
731
754
py::array_t <double > result (dims);
@@ -1752,6 +1775,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
1752
1775
PyFT2Font_get_kerning__doc__)
1753
1776
.def (" set_text" , &PyFT2Font_set_text,
1754
1777
" string" _a, " angle" _a=0.0 , " flags" _a=LoadFlags::FORCE_AUTOHINT,
1778
+ " language" _a=py::none (),
1755
1779
PyFT2Font_set_text__doc__)
1756
1780
.def (" _get_fontmap" , &PyFT2Font_get_fontmap, " string" _a,
1757
1781
PyFT2Font_get_fontmap__doc__)
0 commit comments