Note: After saving, changes may not occur immediately. Click here to learn how to bypass your browser's cache.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Cmd-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (Cmd-Shift-R on a Mac)
- Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Clear the cache in Tools → Preferences
For details and instructions about other browsers, see Wikipedia:Bypass your cache.
Code that you insert on this page could contain malicious content capable of compromising your account. If you are unsure whether code you are adding to this page is safe, you can ask at the central discussion page, Scriptorium. The code will be executed when previewing this page under some skins, including Monobook. You can in the interim if you wish to refresh the content sooner under another skin. |
Documentation for this script can be added at User:Ostrea/typography. |
/*
This page defines a TemplateScript library. It's not meant to be referenced
directly. See [[Wikisource:TemplateScript]] for usage.
*/
/* global $, pathoschild */
/**
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @see https://meta.wikimedia.org/wiki/TemplateScript
* @update-token [[File:Pathoschild/templatescript.js]]
*/
// <nowiki>
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
/*********
** Define library
*********/
pathoschild.TemplateScript.library.define({
key: 'wikisource.typography',
name: 'Typography tools',
url: '//en.wikisource.org/wiki/Wikisource:TemplateScript#Typography',
description: 'A set of scripts for editing typography: add diacritics (like àéîö) or manipulate text case.',
categories: [
{
name: 'Typography tools',
scripts: [
// { key: 'title-link', name: 'Make title link', script: maketitle, accessKey: 't' },
// { key: 'author-link', name: 'Make author link', script: author, accessKey: 'a' },
{ key: 'small-caps', name: 'Convert to Sᴍᴀʟʟ Cᴀᴘs', script: smallcaps, accessKey: 'c' },
{ key: 'upper', name: 'Convert to UPPER', script: upper, accessKey: 'u' },
// { key: 'diaresis', name: 'Add diaeresis (ä)', script: diaeresis, accessKey: ':' },
// { key: 'acute', name: 'Add acute (á)', script: acute, accessKey: '\'' },
// { key: 'grave', name: 'Add grave (à)', script: grave, accessKey: '`' },
// { key: 'circumflex', name: 'Add circumflex (â)', script: circumflex, accessKey: '^' },
// { key: 'macro', name: 'Add macron (ā)', script: macron, accessKey: '_' },
// { key: 'misc', name: 'Add ligature or hook', script: catchall, accessKey: '-' }
]
}
]
});
/*********
** Private methods
*********/
/**
* Convert the text to title case based on English rules.
* @param {string} text The text to convert.
*/
var _titlecase = function(text) {
// split text into individual words and examine them one by one
var words = text.toLowerCase().split(' ');
for (var i in words) {
switch(words[i]) {
case "a":
case "an":
case "and":
case "as":
case "at":
case "but":
case "by":
case "etcetera":
case "etc.":
case "for":
case "from":
case "in":
case "nor":
case "of":
case "o'":
case "on":
case "or":
case "the":
case "to":
case "with":
case "versus":
case "vs.":
case "v.":
case "yet":
break; // don't capitalise articles, "to" as part of an infinitive, prepositions or short conjunctions
default: // capitalise everything else
words[i] = words[i].substring(0, 1).toUpperCase() + words[i].substring(1, words[i].length);
break;
}
}
// capitalise first word regardless
words[0] = words[0].substring(0, 1).toUpperCase() + words[0].substring(1, words[0].length);
// capitalise last word regardless
var last = words.length - 1;
words[last] = words[last].substring(0,1).toUpperCase() + words[last].substring(1, words[last].length);
// reconstruct title
var titleCase = "";
for (i in words) {
titleCase += words[i];
if (i < last)
titleCase += " ";
}
return titleCase;
};
/*********
** Script methods
*********/
/**
* Convert the selected text into an appropriately-capitalised title link.
* For example, this replaces "THE MAN FROM SNOWY RIVER" with
* "[[The Man from Snowy River|THE MAN FROM SNOWY RIVER]]".
* @param {object} editor The script helpers for the page.
*/
function maketitle(editor) {
editor.replaceSelection(function(text) {
var target = _titlecase(text);
return target == text
? '[[' + text + ']]'
: '[[' + target + '|' + text + ']]';
});
}
/**
* Convert the selected text into an author link (with support for common
* cases like "Smith, John" → [[Author:John Smith|Smith, John]]).
* @param {object} editor The script helpers for the page.
*/
function author(editor) {
editor.replaceSelection(function(name) {
// if name contains a comma, switch around when linking
var commaPos = name.indexOf(',');
var target = commaPos === -1
? name
: name.substr(commaPos+1).replace(/^\s+|\s+$/g, '') + ' ' + name.substr(0, commaPos).replace(/^\s+|\s+$/g, '');
// if name is all in capitals, convert target to title case
if (target == target.toUpperCase())
target = _titlecase(target);
return '[[Author:' + target + '|' + name + ']]';
});
}
/**
* Convert the selected text to Sᴍᴀʟʟ Cᴀᴘs using {{small-caps}}.
* @param {object} editor The script helpers for the page.
*/
//Mark selected text up with small-caps
function smallcaps(editor) {
editor.replaceSelection(function(selected) {
// Applying small-caps to all-caps text is pointless...
// ... unless the all-caps is OCR of text that is actually small-caps.
// Check if text is all-caps, and if it is, convert it to title case before applying small-caps.
if (selected == selected.toUpperCase())
selected = _titlecase(selected);
return '{{small-caps|' + selected + '}}';
});
}
/**
* Convert the selected text to UPPERCASE.
* @param {object} editor The script helpers for the page.
*/
function upper(editor) {
editor.replaceSelection(function(selected) {
return selected.toUpperCase();
});
}
/**
* Add miscellaneous diacritics to the selected character or pair.
* @param {object} editor The script helpers for the page.
*/
function catchall(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
// fixes that are one character long
case 'c':
return 'ç';
case 'C':
return 'Ç';
case 'ç':
return 'c—'; // so that if I wanted an mdash I can simply invoke it again
case 'Ç':
return 'C—'; // so that if I wanted an mdash I can simply invoke it again
// fixes that are two characters long
case 'ae':
return 'æ';
case 'AE':
return 'Æ';
case 'oe':
return 'œ';
case 'OE':
return 'Œ';
// final catchall: insert em dash
default:
return selected + '—';
}
});
}
/**
* Modify a selected character (like 'a') with a diaeresis (like 'ä').
* @param {object} editor The script helpers for the page.
*/
function diaeresis(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
case 'a':
return 'ä';
case 'A':
return 'Ä';
case 'e':
return 'ë';
case 'E':
return 'Ë';
case 'i':
return 'ï';
case 'I':
return 'Ï';
case 'o':
return 'ö';
case 'O':
return 'Ö';
case 'u':
return 'ü';
case 'U':
return 'Ü';
case 'y':
return 'ÿ';
default:
return selected;
}
});
}
/**
* Modify a selected character (like 'a') with an acute accent (like 'á').
* @param {object} editor The script helpers for the page.
*/
function acute(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
case 'a':
return 'á';
case 'A':
return 'Á';
case 'c':
return 'ć';
case 'C':
return 'Ć';
case 'e':
return 'é';
case 'E':
return 'É';
case 'g':
return 'ģ';
case 'i':
return 'í';
case 'I':
return 'Í';
case 'o':
return 'ó';
case 'O':
return 'Ó';
case 'l':
return 'ĺ';
case 'L':
return 'Ĺ';
case 'n':
return 'ń';
case 'N':
return 'Ń';
case 'r':
return 'ŕ';
case 'R':
return 'Ŕ';
case 's':
return 'ś';
case 'S':
return 'Ś';
case 'u':
return 'ú';
case 'U':
return 'Ú';
case 'y':
return 'ý';
case 'Y':
return 'Ý';
case 'z':
return 'ź';
case 'Z':
return 'Ź';
default:
return selected;
}
});
}
/**
* Modify a selected character (like 'a') with a grave accent (like 'à').
* @param {object} editor The script helpers for the page.
*/
function grave(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
case 'a':
return 'à';
case 'A':
return 'À';
case 'e':
return 'è';
case 'E':
return 'È';
case 'i':
return 'ì';
case 'I':
return 'Ì';
case 'o':
return 'ò';
case 'O':
return 'Ò';
case 'u':
return 'ù';
case 'U':
return 'Ù';
default:
return selected;
}
});
}
/**
* Modify a selected character (like 'a') with a macron (like 'ā').
* @param {object} editor The script helpers for the page.
*/
function macron(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
case 'a':
return 'ā';
case 'A':
return 'Ā';
case 'e':
return 'ē';
case 'E':
return 'Ē';
case 'i':
return 'ī';
case 'I':
return 'Ī';
case 'o':
return 'ō';
case 'O':
return 'Ō';
case 'u':
return 'ū';
case 'U':
return 'Ū';
default:
return selected;
}
});
}
/**
* Modify a selected character (like 'a') with a circumflex (like 'â').
* @param {object} editor The script helpers for the page.
*/
function circumflex(editor) {
editor.replaceSelection(function(selected) {
switch(selected) {
case 'a':
return 'â';
case 'A':
return 'Â';
case 'c':
return 'ĉ';
case 'C':
return 'Ĉ';
case 'e':
return 'ê';
case 'E':
return 'Ê';
case 'g':
return 'ĝ';
case 'G':
return 'Ĝ';
case 'h':
return 'ĥ';
case 'H':
return 'Ĥ';
case 'i':
return 'î';
case 'I':
return 'Î';
case 'j':
return 'ĵ';
case 'J':
return 'Ĵ';
case 'o':
return 'ô';
case 'O':
return 'Ô';
case 's':
return 'ŝ';
case 'S':
return 'Ŝ';
case 'u':
return 'û';
case 'U':
return 'Û';
case 'w':
return 'ŵ';
case 'W':
return 'Ŵ';
case 'y':
return 'ŷ';
case 'Y':
return 'Ŷ';
default:
return selected;
}
});
}
});
// </nowiki>