From d5a37ea0f5222d76643e93119e12beee4847867f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 11 Apr 2016 05:13:42 +0530 Subject: [PATCH] Font subsetting: Implement support for text-transform. See #1568555 (Subsets of fonts with CSS set to uppercase or small-caps variants) --- resources/compiled_coffeescript.zip | Bin 107465 -> 107364 bytes .../ebooks/oeb/polish/font_stats.coffee | 1 + src/calibre/ebooks/oeb/polish/stats.py | 14 +++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip index e1bd571cd8ec6f47fc4765296a15e7b91be94096..10e6f498b3d6ea63288ac4f08d7ccaa1c1666b03 100644 GIT binary patch delta 1028 zcma)*SxggQ5XTu%j%q0wpalgN5ecS9TcOxAARwB`+0>RQN1?P^sp$dTk_cErVxox} zB7QMr6rq$ykEl_LAySV-@!(Bge8Pjo#F+SE;uG=P9*Df?K5TZr-TBXN{xkdPW#X3? ziKF+SKqIsip4TJ{J+CuJ;^GV_)4*vmI-ebUtAPecuuGZXwt6T6yqXWfM4Q=ZcMOu- zq3t--0HWZz2IvN{RKSF}w;`yk1a)+S{* z@1TQ~GW>UH0XgN~iOwdd#XC*F@I}+e)Nl&<@j6Rr>9sqoOeLSyZYR0ELbAf8;DQP^ zV{3)~s)HPIHgrhDpT*KTX^Dwt35ImA5wEmB4&K#6CN8u4HnoGi2J&5qp5vUJG z`;3%;(L+92@(HoZNZ*Sb7*X;gb%y#9MYEx^8smTk^(js$X7`n5xxnUn|PKteF)WS8p7ojRJK^GaBOC<_6li1(nk#06U_`w9)nsxtB zg&$1uH@Xr0kb%`^5a0tpq$Sy|L)=RIFn$aGi{B?H;JpAGAbIo2cx?tsa6AB6#Az0w zb_Ud_4M0*PIWs`RsQ}%9&@?n6$KMvGXeghKy;$-?4WA*|Ete^+s&Yk7nN=yXDV54{ bGpnko*jui$sB8+WMb7q=n-vOHw!`-upx$5v delta 935 zcma)4Sx8i26!yazwaH~_EJxdJ78){|%jhVk<+LE~`(UHqxjOge#4Op2m8LBkXarGQ z@I2X!6A1NU55a^YB1BU9qAw*u3n)D$_26svk3$wM(97kVd%pjC-#O=7c@gn)F5<>h z94d`DVltjiPgwR&YQw@NDYF!V@`;hez(Og?q2z5kjt?Z2Ar-R292X%84x7D4zG+U0 zmbfA=l$!a#KshX+!<8_q+@2o0sN+216}i@zK({K<4ql$<+aqtxDk-fCxyp`Co82lS zQbXlcm{nZtwu|z;qFppOgzex-SB)fEzXa_jI-HeB7)Crz)gghN1&d`_h^6UzMA4^e zbZw>E$XSEJP`cKKILc^*hU}*hO%;vo1p~(hHfo@S#-ZabxW#U(OUDK2b)4JtpAyzd z+aF@D4@Ub)*MNicp${3<+klc^#4K*5e~Pgv*n)mi(n2HZX!Q=%^33=SDsE!q{@6f4 zxajn3ZtF=C^r8M=n~?w4IXg_?M$(|%f5zqX)O!SvJHshBM0Tsxtv{)SDjG21i^AP0 zitI>dRKhNZ6GRN9QXBG>Cm!-?SNRzM6N68jZ2|i$J zLrckTreE@+EnF>t7K@o*-ddod8Xwe{C&9vJZK`0+%+c!$@}=B@Tti-Vwly!;pf9jmg?zD{6>{{FWDs*Cy5?urUhtucuKG|* WYom 'font-weight':style.getPropertyValue('font-weight'), 'font-style':style.getPropertyValue('font-style'), 'font-stretch':style.getPropertyValue('font-stretch'), + 'text-transform':style.getPropertyValue('text-transform'), } font_usage = (node) -> diff --git a/src/calibre/ebooks/oeb/polish/stats.py b/src/calibre/ebooks/oeb/polish/stats.py index 4f9db22e83..023f1b2b44 100644 --- a/src/calibre/ebooks/oeb/polish/stats.py +++ b/src/calibre/ebooks/oeb/polish/stats.py @@ -191,6 +191,7 @@ class StatsCollector(object): must_use_qt() self.parser = CSSParser(loglevel=logging.CRITICAL, log=logging.getLogger('calibre.css')) self.first_letter_pat = regex.compile(r'^[\p{Ps}\p{Ps}\p{Pe}\p{Pi}\p{Pf}\p{Po}]+', regex.VERSION1 | regex.UNICODE) + self.capitalize_pat = regex.compile(r'[\p{L}\p{N}]', regex.VERSION1 | regex.UNICODE) self.loop = QEventLoop() self.view = QWebView() @@ -337,6 +338,16 @@ class StatsCollector(object): for font in font_usage: text = set() for t in font['text']: + tt = font['text-transform'] + if tt != 'none': + if tt == 'uppercase': + t = icu_upper(t) + elif tt == 'lowercase': + t = icu_lower(t) + elif tt == 'capitalize': + m = self.capitalize_pat.search(t) + if m is not None: + t += icu_upper(m.group()) text |= frozenset(t) text.difference_update(exclude) if not text: @@ -374,4 +385,5 @@ if __name__ == '__main__': from calibre.utils.logging import default_log default_log.filter_level = default_log.DEBUG ebook = get_container(sys.argv[-1], default_log) - print (StatsCollector(ebook, do_embed=True).font_stats) + from pprint import pprint + pprint(StatsCollector(ebook, do_embed=True).font_stats)