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