Cscott has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/99427


Change subject: Set language- and script-specific fonts.
......................................................................

Set language- and script-specific fonts.

Use Amiri for Arabic and Nafees for Urdu, and Linux Libertine for Latin.

Change-Id: Iad7a8228274a0c33094f66a76d8184ac3e97ee50
---
M .travis.yml
M README.md
M lib/index.js
M lib/polyglossia.js
4 files changed, 72 insertions(+), 18 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
 refs/changes/27/99427/1

diff --git a/.travis.yml b/.travis.yml
index a16fdc1..8202a58 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,4 +5,4 @@
 before_install:
  - sudo add-apt-repository -y ppa:texlive-backports/ppa
  - sudo apt-get update -qq
- - sudo apt-get install -qq texlive-xetex texlive-latex-recommended 
texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra 
texlive-lang-all latex-xcolor imagemagick librsvg2-bin unzip
+ - sudo apt-get install -qq texlive-xetex texlive-latex-recommended 
texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra fonts-nafees 
texlive-lang-all latex-xcolor imagemagick librsvg2-bin unzip
diff --git a/README.md b/README.md
index b31fe4b..a211ce8 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
 Install other system dependencies.
 ```
 apt-get install texlive-xetex texlive-latex-recommended texlive-latex-extra \
-                texlive-fonts-recommended texlive-fonts-extra \
+                texlive-fonts-recommended texlive-fonts-extra fonts-nafees \
                 texlive-lang-all latex-xcolor imagemagick librsvg2-bin unzip
 ```
 
diff --git a/lib/index.js b/lib/index.js
index 756db66..47adde8 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -25,6 +25,18 @@
 var Polyglossia = require('./polyglossia');
 var StatusReporter = require('./status');
 
+// fonts for specific scripts
+var SCRIPT_FONTS = {
+       'default': 'FreeSerif',
+       'Arabic': 'Amiri', // from fonts-hosny-amiri
+       'Latin': 'Linux Libertine O'
+};
+
+// fonts for specific languages
+var LANGUAGE_FONTS = {
+       'urdu': 'Nafees' // from fonts-nafees
+};
+
 var STD_HEADER = [
        "%!TEX TS-program = xelatex",
        "%!TEX encoding = UTF-8 Unicode",
@@ -52,7 +64,7 @@
        "\\makeatother%",
        "}",
 */
-       "\\setmainfont[]{FreeSerif}",
+       "\\setmainfont[]{" + SCRIPT_FONTS['default'] + "}",
 /*
        // Set up Charis font
        // XXX add non-latin (CJK, etc) fonts
@@ -891,11 +903,10 @@
        }
        // default language (for chapter headings, page numbers, etc)
        // CLI --lang option overrides
-       var lang = options.lang || metabook.lang || 'en';
-       var poly = Polyglossia.lookup(lang);
-       head += '\n\\setdefaultlanguage[' + poly.options + ']{' + poly.lang + 
'}';
-       var usedLanguages = new Set(); // usedLanguages doesn't include default 
lang
-       head += '\n\\input{'+path.join(builddir, 'languages.tex')+'}'; // we'll 
put used languages here
+       var collectionLanguage = options.lang || metabook.lang || 'en';
+       var usedLanguages = new Set();
+       usedLanguages.add(collectionLanguage);
+       head += '\n\\input{'+path.join(builddir, 'languages.tex')+'}';
        // emit title, subtitle, etc.
        var title = metabook.title;
        if (!title && metabook.items.length === 1) {
@@ -949,8 +960,8 @@
                                imagemap: imagemap,
                                singleItem: singleItem,
                                hasChapters: hasChapters,
-                               lang: lang,
-                               dir: poly.dir
+                               lang: collectionLanguage,
+                               dir: Polyglossia.lookup(collectionLanguage).dir
                        });
                        var h1 = document.createElement('h1');
                        h1.textContent = item.title;
@@ -977,14 +988,37 @@
        }).then(function() {
                return P.call(output.end, output, STD_FOOTER);
        }).then(function() {
-               // write languages file
+               // write languages file, w/ font information
                var s = '';
                usedLanguages.forEach(function(l) {
+                       if (l === collectionLanguage) { return; }
                        s += Polyglossia.lookup(l).lang + ',';
                });
                if (s) {
                        s = '\\setotherlanguages{'+s.replace(/,$/,'')+'}\n';
                }
+               var poly = Polyglossia.lookup(collectionLanguage);
+               s = '\\setdefaultlanguage[' + poly.options + ']{' + poly.lang + 
'}\n' +
+                       s;
+               // set language fonts
+               var scripts = new Set();
+               usedLanguages.forEach(function(l) {
+                       console.error('USED LANGUAGE', l);
+                       var p = Polyglossia.lookup(l);
+                       scripts.add(p.script);
+                       var font = LANGUAGE_FONTS[p.lang];
+                       if (!font) { return; }
+                       s += '\\newfontfamily\\' + p.lang + 'font' +
+                               '[Script=' + p.script + ']{' + font + '}\n';
+               });
+               // set script fonts.
+               scripts.forEach(function(script) {
+                       console.error('SCRIPT', script);
+                       var font = SCRIPT_FONTS[script];
+                       if (!font) { return; }
+                       s += '\\newfontfamily\\' + script.toLowerCase() + 
'font' +
+                               '[Script=' + script + ']{' + font + '}\n';
+               });
                var filename = path.join(builddir, 'languages.tex');
                return P.call(fs.writeFile, fs, filename, s, 'utf8');
        });
diff --git a/lib/polyglossia.js b/lib/polyglossia.js
index f95eba1..dd14b10 100644
--- a/lib/polyglossia.js
+++ b/lib/polyglossia.js
@@ -1,12 +1,31 @@
 /** Language and option mappings for the XeLaTeX polyglossia package. */
 var gloss_info = {
-       arabic: { dir: 'rtl', env: 'Arabic' },
-       divehi: { dir: 'rtl' },
-       farsi: { dir: 'rtl' },
-       hebrew: { dir: 'rtl' },
-       nko: { dir: 'rtl' },
-       syriac: { dir: 'rtl' },
-       urdu: { dir: 'rtl' }
+       amharic: { script: 'Ethiopic' },
+       arabic: { dir: 'rtl', script: 'Arabic', env: 'Arabic' },
+       armenian: { script: 'Armenian' },
+       bengali: { script: 'Bengali' },
+       bulgarian: { script: 'Cyrillic' },
+       coptic: { script: 'Coptic' },
+       divehi: { dir: 'rtl', script: 'Thaana' },
+       farsi: { dir: 'rtl', script: 'Arabic' },
+       greek: { script: 'Greek' },
+       hebrew: { dir: 'rtl', script: 'Hebrew' },
+       hindi: { script: 'Devanagari' },
+       kannada: { script: 'Kannada' },
+       lao: { script: 'Lao' },
+       malayalam: { script: 'Malayalam' },
+       marathi: { script: 'Devaganari' },
+       nko: { dir: 'rtl', script: "N'ko" },
+       russian: { script: 'Cyrillic' },
+       sanskrit: { script: 'Devanagari' },
+       serbian: { script: 'Cyrillic' },
+       syriac: { dir: 'rtl', script: 'Syriac' },
+       tamil: { script: 'Tamil' },
+       telugu: { script: 'Telugu' },
+       thai: { script: 'Thai' },
+       tibetan: { script: 'Tibetan' },
+       ukrainian: { script: 'Cyrillic' },
+       urdu: { dir: 'rtl', script: 'Arabic' }
 };
 var table = {
        sq: { lang: 'albanian' },
@@ -105,6 +124,7 @@
        var g = gloss_info[r.lang] || {};
        if (!r.env) { r.env = g.env || r.lang; }
        if (!r.dir) { r.dir = g.dir || 'ltr'; }
+       if (!r.script) { r.script = g.script || 'Latin'; }
        if (!r.options) { r.options = ''; }
        return r;
 };

-- 
To view, visit https://gerrit.wikimedia.org/r/99427
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iad7a8228274a0c33094f66a76d8184ac3e97ee50
Gerrit-PatchSet: 1
Gerrit-Project: 
mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
Gerrit-Branch: master
Gerrit-Owner: Cscott <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to