summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/shortmathj/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/shortmathj/index.js')
-rw-r--r--macros/latex/contrib/shortmathj/index.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/macros/latex/contrib/shortmathj/index.js b/macros/latex/contrib/shortmathj/index.js
new file mode 100644
index 0000000000..6a477f363b
--- /dev/null
+++ b/macros/latex/contrib/shortmathj/index.js
@@ -0,0 +1,93 @@
+const csv = require('csv-parser')
+const fs = require('fs')
+const results = [];
+
+function readCSVsimple(filename, callback){
+
+ fs.createReadStream(filename)
+ .pipe(csv())
+ .on('data', (data) => results.push(data))
+ .on('end', () => {
+ callback();
+ });
+}
+
+readCSVsimple('annser.csv', ()=>{
+ readCSVsimple('custom.csv', ()=>{
+ writeSTY()
+ });
+});
+
+function createSynonyms(results){
+ for(let i = 0; i < results.length; i++) {
+ let res = results[i];
+ if(/^The\s+/.test(res['Full Title'])){
+ results.push({
+ 'Full Title' : res['Full Title'].replace(/^The\s+/,''),
+ 'Abbrev' : res['Abbrev']
+ });
+ }
+ if(/\s*\(*New\Series\.*\)*$/.test(res['Full Title'])){
+ results.push({
+ 'Full Title' : res['Full Title'].replace(/\s*\(*New\Series\.*\)*$/,''),
+ 'Abbrev' : res['Abbrev']
+ });
+ }
+ }
+
+}
+
+function resultsToReplacementMap(results){
+ const replacementMap = [];
+ createSynonyms(results);
+ results.map(res => {
+ if(res['Full Title'] === res['Abbrev']){
+ // Full and Abbreviated titles are equal, thus do nothing
+ return;
+ }
+ if(!res['Full Title'] || !res['Abbrev']){
+ // Nothing to replace!
+ return;
+ }
+ if(res['Full Title'].search(/\$/) !== -1 || res['Abbrev'].search(/\$/) !== -1){
+ // Just skip journals with formulas in titles
+ return;
+ }
+ res['Full Title'] = res['Full Title'].replace(/&/g,'\\&');
+ res['Abbrev'] = res['Abbrev'].replace(/&/g,'\\&');
+ replacementMap.push([res['Full Title'],res['Abbrev']]);
+ });
+ return replacementMap;
+}
+
+
+
+function writeSTY(){
+ styContent = fs.readFileSync('shortmathj.template.sty','utf8');
+
+ let alphabet = {};
+ let replacementMap = resultsToReplacementMap(results);
+ replacementMap.map(rule => {
+ alphabet[rule[0].substr(0,1)] = [];
+ });
+ replacementMap.map(rule => {
+ alphabet[rule[0].substr(0,1)].push(
+ "\\ifthenelse{\\equal{\\givenAMSjournalname}{\\detokenize{"+rule[0]+"}}}{\\def\\shortifiedAMSjournalname{"+rule[1]+"}}{}%\n"
+ );
+ });
+
+ let replacement="";
+
+ for(let letter in alphabet){
+ replacement +=
+ "\\ifthenelse{\\equal{\\firstletter}{\\detokenize{"+letter+"}}}{%\n" +
+ alphabet[letter].join('') +
+ "}{}%\n";
+ }
+
+
+
+ styContent = styContent.replace(/\%\%\%\{\{SHORTMAP[\s\S]*\%\%\%\}\}SHORTMAP/, replacement + "%");
+
+ fs.writeFileSync('shortmathj.sty', styContent);
+}