Usor:JimKillock/incunabula.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* <nowiki> global $, mw */
"use strict";
$(() => {
let indexes = [
"Foenix. Domini Petri Ravennatis memoriae magistri - (Petrus) (IA hin-wel-all-00002799-001).pdf",
"Nicolaus Machiavellus De Principe.pdf",
"Arra aeternae salutis (1495) by Lambsheim.pdf",
"Cartesius - Meditationes de prima philosophia.djvu",
"Historia Naturalis Brasiliae (1648).pdf",
"Ars Memorativa (Leporeus).djvu",
"Ars Oratoria. Ars Epistolandi. Ars Memorativa. (Publicio).djvu",
"Romani calendarii explicatio (IA CAS260ARomaniCalendarii processed).djvu",
"Sal Terrae, sive Apologia pro Ministerio Evangelico.pdf"
];
let replacements = [
"ſ", "{{s}}",
"", "{{que}}",
"ñ", "{{scr|ñ|incerta}}",
"ẽ", "{{eae}}",
"ť", "{{tur}}",
"t̉", "{{tur}}",
"qꝫ", "{{que}}",
"æ", "{{ae}}",
"œ", "{{oe}}",
"Æ", "{{AEC}}",
"ſ", "{{s}}",
"dñs", "{{dns}}",
"dño", "{{dno}}",
"dñi", "{{dni}}",
"dña", "{{dna}}",
"ę", "{{ę}}",
"ñ", "{{ñ|n}}<!--inspice-->",
"ꝑ", "{{per}}",
"ꝓ", "{{ꝓ}}",
"p̄", "{{p̄}}<!--inspice-->",
"ꝗ̈", "{{ꝗ̈|uam}}<!--inspice-->",
"ꝙ", "{{q}}",
"ꝗ", "{{qui}}<!--inspice-->",
"qd̓", "{{qd̓}}",
"q̄", "{{q̄}}<!--inspice-->",
"q̃", "{{q̄}}<!--inspice-->",
"r̄", "{{r̄}}<!--inspice-->",
"ꝶ", "{{rum|sc}}",
"ꝝ", "{{rum|s}}",
"⹌", "{{po|,}}",
"ť", "{{ť|ur}}",
"ꝰ", "{{us}}",
"t̃", "{{ttur}}",
"vl̓", "{{vl̓}}",
"&", "{{et}}",
"⁊", "{{-et}}",
"ꝭ", "{{ꝭ}}",
"ꝟ", "{{ꝟ}}",
"ꝫ", "{{ꝫ}}<!--inspice-->",
"ã ", "{{am}}",
"ꝯ", "{{con}}",
];
const applyAllPages = window.scribalApplyAllPages === true;
const isBookPage = (
mw.config.get("wgNamespaceNumber") === 104 &&
indexes.some(s => mw.config.get("wgTitle").match("^" + mw.util.escapeRegExp(s) + "\\/\\d+$"))
);
const isEditAction = mw.config.get("wgAction") === "edit";
const isNewPage = mw.config.get("wgArticleId") === 0;
const shouldRun = (
isEditAction &&
((isBookPage && isNewPage) || (applyAllPages && isBookPage))
);
function applyReplacements() {
let textbox = $("#wpTextbox1");
if (textbox.length === 0) return;
let s = textbox.val();
// Remove ¬ and following newline (no space)
s = s.replace(/¬\n?/g, "");
// Replace remaining newlines with space
s = s.replace(/\n+/g, " ");
// Context-sensitive nasal vowels
s = s.replace(/([ãẽõīũāēōū])(?=[^a-zA-Z])/g, match => {
switch (match) {
case "ã": case "ā": return "{{am}}";
case "ẽ": case "ē": return "{{em}}";
case "õ": case "ō": return "{{om}}";
case "ī": return "{{iim}}";
case "ũ": case "ū": return "{{um}}";
default: return match;
}
});
s = s.replace(/([ãẽõīũāēōū])/g, match => {
switch (match) {
case "ã": case "ā": return "{{an}}";
case "ẽ": case "ē": return "{{en}}";
case "õ": case "ō": return "{{on}}";
case "ī": return "{{in}}";
case "ũ": case "ū": return "{{un}}";
default: return match;
}
});
// Step 1: Protect existing replacements
for (let i = 1; i < replacements.length; i += 2) {
const replacement = replacements[i];
if (replacement.includes("{{")) {
let protectedRep = replacement.replace(/[$()*+.?[\\\]^{|}]/g, "\\$&");
let regex = new RegExp(protectedRep, "g");
s = s.replace(regex, `@@@PROTECTED@@@${replacement}@@@END@@@`);
}
}
// Step 2: Apply replacements
for (let i = 0; i < replacements.length; i += 2) {
s = s.replaceAll(replacements[i], replacements[i + 1]);
}
// Step 3: Restore protected templates
s = s.replace(/@@@PROTECTED@@@(.*?)@@@END@@@/g, "$1");
// Fix incorrect "n{{om}}" patterns that should be "n{{on}}"
s = s.replace(/n\{\{om\}\}(?=[\s.,;!?}])/g, "n{{on}}");
textbox.val(s).trigger("input");
}
if (shouldRun) {
applyReplacements();
$("#editform").on("submit", applyReplacements);
}
});
/* </nowiki> */