Skip to content

Instantly share code, notes, and snippets.

@retorquere
Created June 14, 2019 08:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save retorquere/66c60170af0824ece5448b2149a2922d to your computer and use it in GitHub Desktop.
Save retorquere/66c60170af0824ece5448b2149a2922d to your computer and use it in GitHub Desktop.
{
"translatorID": "9cb70025-a888-4a29-a210-93ec52da40d4",
"label": "BibTeX",
"creator": "Simon Kornblith, Richard Karnesky and Emiliano heyns",
"target": "bib",
"minVersion": "2.1.9",
"maxVersion": "",
"priority": 200,
"configOptions": {
"async": true,
"getCollections": true
},
"displayOptions": {
"exportCharset": "UTF-8",
"exportNotes": true,
"exportFileData": false,
"useJournalAbbreviation": false
},
"inRepository": true,
"translatorType": 3,
"browserSupport": "gcsv",
"lastUpdated": "2019-04-29 20:11:06"
}
/*
BibTeX Translator
Copyright (C) 2019 CHNM, Simon Kornblith, Richard Karnesky and Emiliano heyns
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
function detectImport() {
var maxChars = 1048576; // 1MB
var inComment = false;
var block = "";
var buffer = "";
var chr = "";
var charsRead = 0;
var re = /^\s*@[a-zA-Z]+[({]/;
while ((buffer = Zotero.read(4096)) && charsRead < maxChars) { // eslint-disable-line no-cond-assign
Zotero.debug("Scanning " + buffer.length + " characters for BibTeX");
charsRead += buffer.length;
for (var i = 0; i < buffer.length; i++) {
chr = buffer[i];
if (inComment && chr != "\r" && chr != "\n") {
continue;
}
inComment = false;
if (chr == "%") {
// read until next newline
block = "";
inComment = true;
}
else if ((chr == "\n" || chr == "\r"
// allow one-line entries
|| i == (buffer.length - 1))
&& block) {
// check if this is a BibTeX entry
if (re.test(block)) {
return true;
}
block = "";
}
else if (!" \n\r\t".includes(chr)) {
block += chr;
}
}
}
return false;
}
// %a = first listed creator surname
// %y = year
// %t = first word of title
var citeKeyFormat = "%a_%t_%y";
var fieldMap = {
address: "place",
chapter: "section",
edition: "edition",
type: "type",
series: "series",
title: "title",
volume: "volume",
copyright: "rights",
isbn: "ISBN",
issn: "ISSN",
shorttitle: "shortTitle",
url: "url",
doi: "DOI",
abstract: "abstractNote",
nationality: "country",
language: "language",
assignee: "assignee"
};
// Fields for which upper case letters will be protected on export
var caseProtectedFields = [
"title",
"type",
"shorttitle",
"booktitle",
"series"
];
// Import/export in BibTeX
var extraIdentifiers = {
lccn: 'LCCN',
mrnumber: 'MR',
zmnumber: 'Zbl',
pmid: 'PMID',
pmcid: 'PMCID'
// Mostly from Wikipedia citation templates
// asin - Amazon ID
// bibcode/refcode - used in astronomy, but haven't seen any Bib(La)TeX examples
// jfm - Jahrbuch ID, but it seems to be part of Zentralblatt MATH, so Zbl
// oclc
// ol - openlibrary.org ID
// osti
// rfc
// ssrn? http://cyber.law.harvard.edu/cybersecurity/Guidelines_for_adding_Bibliography_entries
};
// Make a reverse map for convenience with additional DOI handling
var revExtraIds = { DOI: 'doi' };
for (var field in extraIdentifiers) {
revExtraIds[extraIdentifiers[field]] = field;
}
// Import only. Exported by BibLaTeX
var eprintIds = {
// eprinttype: Zotero label
// From BibLaTeX manual
arxiv: 'arXiv', // Sorry, but no support for eprintclass yet
jstor: 'JSTOR',
pubmed: 'PMID',
hdl: 'HDL',
googlebooks: 'GoogleBooksID'
};
function parseExtraFields(extra) {
var lines = extra.split(/[\r\n]+/);
var fields = [];
for (var i = 0; i < lines.length; i++) {
var rec = { raw: lines[i] };
var line = lines[i].trim();
var splitAt = line.indexOf(':');
if (splitAt > 1) {
rec.field = line.substr(0, splitAt).trim();
rec.value = line.substr(splitAt + 1).trim();
}
fields.push(rec);
}
return fields;
}
function extraFieldsToString(extra) {
var str = '';
for (var i = 0; i < extra.length; i++) {
if (!extra[i].raw) {
str += '\n' + extra[i].field + ': ' + extra[i].value;
}
else {
str += '\n' + extra[i].raw;
}
}
return str.substr(1);
}
var inputFieldMap = {
booktitle: "publicationTitle",
school: "publisher",
publisher: "publisher",
issue: "issue",
// import also BibLaTeX fields:
journaltitle: "publicationTitle",
shortjournal: "journalAbbreviation",
eventtitle: "conferenceName",
pagetotal: "numPages",
version: "version"
};
var zotero2bibtexTypeMap = {
book: "book",
bookSection: "incollection",
journalArticle: "article",
magazineArticle: "article",
newspaperArticle: "article",
thesis: "phdthesis",
letter: "misc",
manuscript: "unpublished",
patent: "patent",
interview: "misc",
film: "misc",
artwork: "misc",
webpage: "misc",
conferencePaper: "inproceedings",
report: "techreport"
};
var bibtex2zoteroTypeMap = {
book: "book", // or booklet, proceedings
inbook: "bookSection",
incollection: "bookSection",
article: "journalArticle", // or magazineArticle or newspaperArticle
patent: "patent",
phdthesis: "thesis",
unpublished: "manuscript",
inproceedings: "conferencePaper", // check for conference also
conference: "conferencePaper",
techreport: "report",
booklet: "book",
manual: "book",
mastersthesis: "thesis",
misc: "book",
proceedings: "book",
online: "webpage",
// from BibLaTeX translator:
thesis: "thesis",
letter: "letter",
movie: "film",
artwork: "artwork",
report: "report",
legislation: "bill",
jurisdiction: "case",
audio: "audioRecording",
video: "videoRecording",
software: "computerProgram",
inreference: "encyclopediaArticle",
collection: "book",
mvbook: "book"
};
/*
* three-letter month abbreviations. i assume these are the same ones that the
* docs say are defined in some appendix of the LaTeX book. (i don't have the
* LaTeX book.)
*/
var months = ["jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec"];
var jabref = {
format: null,
root: {}
};
var alwaysMap = {
"|": "{\\textbar}",
"<": "{\\textless}",
">": "{\\textgreater}",
"~": "{\\textasciitilde}",
"^": "{\\textasciicircum}",
"\\": "{\\textbackslash}",
// See http://tex.stackexchange.com/questions/230750/open-brace-in-bibtex-fields/230754
"{": "\\{\\vphantom{\\}}",
"}": "\\vphantom{\\{}\\}"
};
var strings = {};
var keyRe = /[a-zA-Z0-9-]/;
// Split keywords on space by default when called from another translator
// This is purely for historical reasons. Otherwise we risk breaking tag import
// from some websites
var keywordSplitOnSpace = !!Zotero.parentTranslator;
var keywordDelimRe = /\s*[,;]\s*/;
function setKeywordSplitOnSpace(val) {
keywordSplitOnSpace = val;
}
function setKeywordDelimRe(val, flags) {
// expect string, but it could be RegExp
if (typeof (val) != 'string') {
val = val.toString();
flags = val.slice(val.lastIndexOf('/') + 1);
val = val.slice(1, val.lastIndexOf('/'));
}
keywordDelimRe = new RegExp(val, flags);
}
function processField(item, field, value, rawValue) {
if (Zotero.Utilities.trim(value) == '') return;
if (fieldMap[field]) {
// map DOIs + Label to Extra for unsupported item types
if (field == "doi" && !ZU.fieldIsValidForType("DOI", item.itemType) && ZU.cleanDOI(value)) {
item._extraFields.push({ field: "DOI", value: ZU.cleanDOI(value) });
}
else {
item[fieldMap[field]] = value;
}
}
else if (inputFieldMap[field]) {
item[inputFieldMap[field]] = value;
}
else if (field == "subtitle") {
if (!item.title) item.title = '';
item.title = item.title.trim();
value = value.trim();
if (!/[-–—:!?.;]$/.test(item.title)
&& !/^[-–—:.;¡¿]/.test(value)
) {
item.title += ': ';
}
else if (item.title.length) {
item.title += ' ';
}
item.title += value;
}
else if (field == "journal") {
if (item.publicationTitle) {
item.journalAbbreviation = value;
}
else {
item.publicationTitle = value;
}
}
else if (field == "fjournal") {
if (item.publicationTitle) {
// move publicationTitle to abbreviation, since it probably came from 'journal'
item.journalAbbreviation = item.publicationTitle;
}
item.publicationTitle = value;
}
else if (field == "author" || field == "editor" || field == "translator") {
// parse authors/editors/translators
var names = splitUnprotected(rawValue.trim(), /\s+and\s+/gi);
for (let i in names) {
var name = names[i];
// skip empty names
if (!name) continue;
// Names in BibTeX can have three commas
var pieces = splitUnprotected(name, /\s*,\s*/g);
var creator = {};
if (pieces.length > 1) {
creator.firstName = pieces.pop();
creator.lastName = unescapeBibTeX(pieces.shift());
if (pieces.length) {
// If anything is left, it should only be the 'Jr' part
creator.firstName += ', ' + pieces.join(', ');
}
creator.firstName = unescapeBibTeX(creator.firstName);
creator.creatorType = field;
}
else if (splitUnprotected(name, / +/g).length > 1) {
creator = Zotero.Utilities.cleanAuthor(unescapeBibTeX(name), field, false);
}
else {
creator = {
lastName: unescapeBibTeX(name),
creatorType: field,
fieldMode: 1
};
}
item.creators.push(creator);
}
}
else if (field == "institution" || field == "organization") {
item.backupPublisher = value;
}
else if (field == "location") {
item.backupLocation = value;
}
else if (field == "number") { // fix for techreport
if (item.itemType == "report") {
item.reportNumber = value;
}
else if (item.itemType == "book" || item.itemType == "bookSection") {
item.seriesNumber = value;
}
else if (item.itemType == "patent") {
item.patentNumber = value;
}
else {
item.issue = value;
}
}
else if (field == "month") {
var monthIndex = months.indexOf(value.toLowerCase());
if (monthIndex != -1) {
value = Zotero.Utilities.formatDate({ month: monthIndex });
}
else {
value += " ";
}
if (item.date) {
if (value.includes(item.date)) {
// value contains year and more
item.date = value;
}
else {
item.date = value + item.date;
}
}
else {
item.date = value;
}
}
else if (field == "year") {
if (item.date) {
if (!item.date.includes(value)) {
// date does not already contain year
item.date += value;
}
}
else {
item.date = value;
}
}
else if (field == "date") {
// We're going to assume that "date" and the date parts don't occur together. If they do, we pick date, which should hold all.
item.date = value;
}
else if (field == "pages") {
if (item.itemType == "book" || item.itemType == "thesis" || item.itemType == "manuscript") {
item.numPages = value;
}
else {
item.pages = value.replace(/--/g, "-");
}
}
else if (field == "note") {
var isExtraId = false;
for (var element in extraIdentifiers) {
if (value.trim().startsWith(extraIdentifiers[element])) {
isExtraId = true;
}
}
if (isExtraId) {
item._extraFields.push({ raw: value.trim() });
}
else {
item.notes.push({ note: Zotero.Utilities.text2html(value) });
}
}
else if (field == "howpublished") {
if (value.length >= 7) {
var str = value.substr(0, 7);
if (str == "http://" || str == "https:/" || str == "mailto:") {
item.url = value;
}
else {
item._extraFields.push({ field: 'Published', value: value });
}
}
}
// accept lastchecked or urldate for access date. These should never both occur.
// If they do we don't know which is better so we might as well just take the second one
else if (field == "lastchecked" || field == "urldate") {
item.accessDate = value;
}
else if (field == "keywords" || field == "keyword") {
item.tags = value.split(keywordDelimRe);
if (item.tags.length == 1 && keywordSplitOnSpace) {
item.tags = value.split(/\s+/);
}
}
else if (field == "comment" || field == "annote" || field == "review" || field == "notes") {
item.notes.push({ note: Zotero.Utilities.text2html(value) });
}
else if (field == "pdf" || field == "path" /* Papers2 compatibility*/) {
item.attachments.push({ path: value, mimeType: "application/pdf" });
}
else if (field == "sentelink") { // the reference manager 'Sente' has a unique file scheme in exported BibTeX; it can occur multiple times
item.attachments.push({ path: value.split(",")[0], mimeType: "application/pdf" });
}
else if (field == "file") {
var start = 0, attachment;
rawValue = rawValue.replace(/\$\\backslash\$/g, '\\') // Mendeley invention?
.replace(/([^\\](?:\\\\)*)\\(.){}/g, '$1$2'); // part of Mendeley's escaping (e.g. \~{} = ~)
for (let i = 0; i < rawValue.length; i++) {
if (rawValue[i] == '\\') {
i++; // skip next char
continue;
}
if (rawValue[i] == ';') {
attachment = parseFilePathRecord(rawValue.slice(start, i));
if (attachment) item.attachments.push(attachment);
start = i + 1;
}
}
attachment = parseFilePathRecord(rawValue.slice(start));
if (attachment) item.attachments.push(attachment);
}
else if (field == "eprint" || field == "eprinttype") {
// Support for IDs exported by BibLaTeX
if (field == 'eprint') item._eprint = value;
else item._eprinttype = value;
var eprint = item._eprint;
var eprinttype = item._eprinttype;
// If we don't have both yet, continue
if (!eprint || !eprinttype) return;
let label = eprintIds[eprinttype.trim().toLowerCase()];
if (!label) return;
item._extraFields.push({ field: label, value: eprint.trim() });
delete item._eprinttype;
delete item._eprint;
}
else if (extraIdentifiers[field]) {
let label = extraIdentifiers[field];
item._extraFields.push({ field: label, value: value.trim() });
}
}
/**
* Split a string on a provided delimiter, but not if delimiter appears inside { }
* @param {String} str String to split
* @param {RegExp} delim RegExp object for the split delimiter. Use g flag to split on each
* @return {String[]} Array of strings without delimiters
*/
function splitUnprotected(str, delim) {
delim.lastIndex = 0; // In case we're reusing a regexp
var nextPossibleSplit = delim.exec(str);
if (!nextPossibleSplit) return [str];
var parts = [], open = 0, nextPartStart = 0;
for (var i = 0; i < str.length; i++) {
if (i > nextPossibleSplit.index) {
// Must have been inside braces
nextPossibleSplit = delim.exec(str);
if (!nextPossibleSplit) {
parts.push(str.substr(nextPartStart));
return parts;
}
}
if (str[i] == '\\') {
// Skip next character
i++;
continue;
}
if (str[i] == '{') {
open++;
continue;
}
if (str[i] == '}') {
open--;
if (open < 0) open = 0; // Shouldn't happen, but...
continue;
}
if (open) continue;
if (i == nextPossibleSplit.index) {
parts.push(str.substring(nextPartStart, i));
i += nextPossibleSplit[0].length - 1; // We can jump past the split delim
nextPartStart = i + 1;
nextPossibleSplit = delim.exec(str);
if (!nextPossibleSplit) {
parts.push(str.substr(nextPartStart));
return parts;
}
}
}
// I don't think we should ever get here*, but just to be safe
// *we should always be returning from the for loop
var last = str.substr(nextPartStart).trim();
if (last) parts.push(last);
return parts;
}
function parseFilePathRecord(record) {
var start = 0, fields = [];
for (var i = 0; i < record.length; i++) {
if (record[i] == '\\') {
i++;
continue;
}
if (record[i] == ':') {
fields.push(decodeFilePathComponent(record.slice(start, i)));
start = i + 1;
}
}
fields.push(decodeFilePathComponent(record.slice(start)));
if (fields.length != 3 && fields.length != 1) {
Zotero.debug("Unknown file path record format: " + record);
return null;
}
var attachment = {};
if (fields.length == 3) {
attachment.title = fields[0].trim() || 'Attachment';
attachment.path = fields[1];
attachment.mimeType = fields[2];
if (attachment.mimeType.search(/pdf/i) != -1) {
attachment.mimeType = 'application/pdf';
}
}
else {
attachment.title = 'Attachment';
attachment.path = fields[0];
}
attachment.path = attachment.path.trim();
if (!attachment.path) return null;
return attachment;
}
function getFieldValue(read) {
var value = "";
// now, we have the first character of the field
if (read == "{") {
// character is a brace
let openBraces = 1, nextAsLiteral = false;
while (read = Zotero.read(1)) { // eslint-disable-line no-cond-assign
if (nextAsLiteral) { // Previous character was a backslash
value += read;
nextAsLiteral = false;
continue;
}
if (read == "\\") {
value += read;
nextAsLiteral = true;
continue;
}
if (read == "{") {
openBraces++;
value += "{";
}
else if (read == "}") {
openBraces--;
if (openBraces == 0) {
break;
}
else {
value += "}";
}
}
else {
value += read;
}
}
}
else if (read == '"') {
let openBraces = 0;
while (read = Zotero.read(1)) { // eslint-disable-line no-cond-assign
if (read == "{" && value[value.length - 1] != "\\") {
openBraces++;
value += "{";
}
else if (read == "}" && value[value.length - 1] != "\\") {
openBraces--;
value += "}";
}
else if (read == '"' && openBraces == 0) {
break;
}
else {
value += read;
}
}
}
return value;
}
function unescapeBibTeX(value) {
if (value.length < 2) return value;
// replace accented characters (yucky slow)
value = value.replace(/{?(\\[`"'^~=]){?\\?([A-Za-z])}/g, "{$1$2}");
// for special characters rendered by \[a-z] we need a space
value = value.replace(/{?(\\[a-z]){?\\?([A-Za-z])}/g, "{$1 $2}");
// convert tex markup into permitted HTML
value = mapTeXmarkup(value);
for (var mapped in reversemappingTable) { // really really slow!
var unicode = reversemappingTable[mapped];
while (value.includes(mapped)) {
Zotero.debug("Replace " + mapped + " in " + value + " with " + unicode);
value = value.replace(mapped, unicode);
}
mapped = mapped.replace(/[{}]/g, "");
while (value.includes(mapped)) {
// Z.debug(value)
Zotero.debug("Replace(2) " + mapped + " in " + value + " with " + unicode);
value = value.replace(mapped, unicode);
}
}
// kill braces
value = value.replace(/([^\\])[{}]+/g, "$1");
if (value[0] == "{") {
value = value.substr(1);
}
// chop off backslashes
value = value.replace(/([^\\])\\([#$%&~_^\\{}])/g, "$1$2");
value = value.replace(/([^\\])\\([#$%&~_^\\{}])/g, "$1$2");
if (value[0] == "\\" && "#$%&~_^\\{}".includes(value[1])) {
value = value.substr(1);
}
if (value[value.length - 1] == "\\" && "#$%&~_^\\{}".includes(value[value.length - 2])) {
value = value.substr(0, value.length - 1);
}
value = value.replace(/\\\\/g, "\\");
value = value.replace(/\s+/g, " ");
// Unescape HTML entities coming from web translators
if (Zotero.parentTranslator && value.includes('&')) {
value = value.replace(/&#?\w+;/g, function (entity) {
var char = ZU.unescapeHTML(entity);
if (char == entity) char = ZU.unescapeHTML(entity.toLowerCase()); // Sometimes case can be incorrect and entities are case-sensitive
return char;
});
}
return value;
}
function jabrefSplit(str, sep) {
var result = [];
str = str.split('');
while (str.length > 0) {
if (result.length == 0) {
result = [''];
}
if (str[0] == sep) {
str.shift();
result.push('');
}
else {
if (str[0] == '\\') {
str.shift();
}
result[result.length - 1] += str.shift();
}
}
return result;
}
function jabrefCollect(arr, func) {
if (arr == null) { // eslint-disable-line no-eq-null
return [];
}
var result = [];
for (var i = 0; i < arr.length; i++) {
if (func(arr[i])) {
result.push(arr[i]);
}
}
return result;
}
function processComment() {
var comment = "";
var read;
var collectionPath = [];
var parentCollection, collection;
while (read = Zotero.read(1)) { // eslint-disable-line no-cond-assign
if (read == "}") {
break;
} // JabRef ought to escape '}' but doesn't; embedded '}' chars will break the import just as it will on JabRef itself
comment += read;
}
if (comment == 'jabref-meta: groupsversion:3;') {
jabref.format = 3;
return;
}
if (comment.startsWith('jabref-meta: groupstree:')) {
if (jabref.format != 3) {
Zotero.debug("jabref: fatal: unsupported group format: " + jabref.format);
return;
}
comment = comment.replace(/^jabref-meta: groupstree:/, '').replace(/[\r\n]/gm, '');
var records = jabrefSplit(comment, ';');
while (records.length > 0) {
let record = records.shift();
var keys = jabrefSplit(record, ';');
if (keys.length < 2) {
continue;
}
record = { id: keys.shift() };
record.data = record.id.match(/^([0-9]) ([^:]*):(.*)/);
if (record.data == null) { // eslint-disable-line no-eq-null
Zotero.debug("jabref: fatal: unexpected non-match for group " + record.id);
return;
}
record.level = parseInt(record.data[1]);
record.type = record.data[2];
record.name = record.data[3];
record.intersection = keys.shift(); // 0 = independent, 1 = intersection, 2 = union
if (isNaN(record.level)) {
Zotero.debug("jabref: fatal: unexpected record level in " + record.id);
return;
}
if (record.level == 0) {
continue;
}
if (record.type != 'ExplicitGroup') {
Zotero.debug("jabref: fatal: group type " + record.type + " is not supported");
return;
}
collectionPath = collectionPath.slice(0, record.level - 1).concat([record.name]);
Zotero.debug("jabref: locating level " + record.level + ": " + collectionPath.join('/'));
if (jabref.root.hasOwnProperty(collectionPath[0])) {
collection = jabref.root[collectionPath[0]];
Zotero.debug("jabref: root " + collection.name + " found");
}
else {
collection = new Zotero.Collection();
collection.name = collectionPath[0];
collection.type = 'collection';
collection.children = [];
jabref.root[collectionPath[0]] = collection;
Zotero.debug("jabref: root " + collection.name + " created");
}
parentCollection = null;
for (var i = 1; i < collectionPath.length; i++) {
var path = collectionPath[i];
Zotero.debug("jabref: looking for child " + path + " under " + collection.name);
var child = jabrefCollect(collection.children, function (n) { // eslint-disable-line no-loop-func
return (n.name == path);
});
if (child.length != 0) {
child = child[0];
Zotero.debug("jabref: child " + child.name + " found under " + collection.name);
}
else {
child = new Zotero.Collection();
child.name = path;
child.type = 'collection';
child.children = [];
collection.children.push(child);
Zotero.debug("jabref: child " + child.name + " created under " + collection.name);
}
parentCollection = collection;
collection = child;
}
if (parentCollection) {
parentCollection = jabrefCollect(parentCollection.children, function (n) {
return (n.type == 'item');
});
}
if (record.intersection == '2' && parentCollection) { // union with parent
collection.children = parentCollection;
}
while (keys.length > 0) {
var key = keys.shift();
if (key != '') {
Zotero.debug('jabref: adding ' + key + ' to ' + collection.name);
collection.children.push({ type: 'item', id: key });
}
}
if (parentCollection && record.intersection == '1') { // intersection with parent
collection.children = jabrefCollect(collection.children, function (n) { // eslint-disable-line no-loop-func
parentCollection.includes(n);
});
}
}
}
}
function beginRecord(type, closeChar) {
type = Zotero.Utilities.trimInternal(type.toLowerCase());
if (type != "string") {
var zoteroType = bibtex2zoteroTypeMap[type];
if (!zoteroType) {
Zotero.debug("discarded item from BibTeX; type was " + type);
return;
}
var item = new Zotero.Item(zoteroType);
item._extraFields = [];
}
// For theses write the thesisType determined by the BibTeX type.
if (type == "mastersthesis" && item) item.type = "Master's Thesis";
if (type == "phdthesis" && item) item.type = "PhD Thesis";
var field = "";
// by setting dontRead to true, we can skip a read on the next iteration
// of this loop. this is useful after we read past the end of a string.
var dontRead = false;
var value, rawValue;
while (dontRead || (read = Zotero.read(1))) { // eslint-disable-line no-cond-assign
dontRead = false;
if (read == "=") { // equals begin a field
// read whitespace
var read = Zotero.read(1);
while (" \n\r\t".includes(read)) {
read = Zotero.read(1);
}
if (keyRe.test(read)) {
// read numeric data here, since we might get an end bracket
// that we should care about
value = "";
value += read;
// character is a number
while ((read = Zotero.read(1)) && keyRe.test(read)) { // eslint-disable-line no-cond-assign
value += read;
}
// don't read the next char; instead, process the character
// we already read past the end of the string
dontRead = true;
// see if there's a defined string
if (strings[value]) value = strings[value];
}
else {
rawValue = getFieldValue(read);
value = unescapeBibTeX(rawValue);
}
if (item) {
processField(item, field.toLowerCase(), value, rawValue);
}
else if (type == "string") {
strings[field] = value;
}
field = "";
}
else if (read == ",") { // commas reset
if (item.itemID == null) { // eslint-disable-line no-eq-null
item.itemID = field; // itemID = citekey
}
field = "";
}
else if (read == closeChar) {
if (item) {
if (item.backupLocation) {
if (item.itemType == "conferencePaper") {
item._extraFields.push({ field: "event-place", value: item.backupLocation });
}
else if (!item.place) {
item.place = item.backupLocation;
}
delete item.backupLocation;
}
item.extra = extraFieldsToString(item._extraFields);
delete item._extraFields;
if (!item.publisher && item.backupPublisher) {
item.publisher = item.backupPublisher;
delete item.backupPublisher;
}
return item.complete();
}
return;
}
else if (!" \n\r\t".includes(read)) { // skip whitespace
field += read;
}
}
}
function doImport() {
if (typeof Promise == 'undefined') {
readString(
function () {},
function (e) {
throw e;
}
);
return null;
}
else {
return new Promise(function (resolve, reject) {
readString(resolve, reject);
});
}
}
function readString(resolve, reject) {
var read = "";
var type = false;
var next = function () {
readString(resolve, reject);
};
try {
while (read = Zotero.read(1)) { // eslint-disable-line no-cond-assign
if (read == "@") {
type = "";
}
else if (type !== false) {
if (type == "comment") {
processComment();
type = false;
}
else if (read == "{") { // possible open character
// This might return a promise if an item was saved
// TODO: When 5.0-only, make sure this always returns a promise
let maybePromise = beginRecord(type, "}");
if (maybePromise) {
maybePromise.then(next);
return;
}
}
else if (read == "(") { // possible open character
let maybePromise = beginRecord(type, ")");
if (maybePromise) {
maybePromise.then(next);
return;
}
}
else if (/[a-zA-Z0-9-_]/.test(read)) {
type += read;
}
}
}
for (var key in jabref.root) {
// TODO: Handle promise?
if (jabref.root.hasOwnProperty(key)) {
jabref.root[key].complete();
}
}
}
catch (e) {
reject(e);
return;
}
resolve();
}
// some fields are, in fact, macros. If that is the case then we should not put the
// data in the braces as it will cause the macros to not expand properly
function writeField(field, value, isMacro) {
if (!value && typeof value != "number") return;
value += ""; // convert integers to strings
Zotero.write(",\n\t" + field + " = ");
if (!isMacro) Zotero.write("{");
// url field is preserved, for use with \href and \url
// Other fields (DOI?) may need similar treatment
if (!isMacro && !(field == "url" || field == "doi" || field == "file" || field == "lccn")) {
// I hope these are all the escape characters!
value = escapeSpecialCharacters(value);
if (caseProtectedFields.includes(field)) {
value = ZU.XRegExp.replace(value, protectCapsRE, "$1{$2$3}"); // only $2 or $3 will have a value, not both
}
}
if (Zotero.getOption("exportCharset") != "UTF-8") {
value = value.replace(/[\u0080-\uFFFF]/g, mapAccent);
}
// convert the HTML markup allowed in Zotero for rich text to TeX; excluding doi/url/file shouldn't be necessary, but better to be safe;
if (!((field == "url") || (field == "doi") || (field == "file"))) value = mapHTMLmarkup(value);
Zotero.write(value);
if (!isMacro) Zotero.write("}");
}
function mapHTMLmarkup(characters) {
// converts the HTML markup allowed in Zotero for rich text to TeX
// since < and > have already been escaped, we need this rather hideous code - I couldn't see a way around it though.
// italics and bold
characters = characters.replace(/\{\\textless\}i\{\\textgreater\}(.+?)\{\\textless\}\/i{\\textgreater\}/g, "\\textit{$1}")
.replace(/\{\\textless\}b\{\\textgreater\}(.+?)\{\\textless\}\/b{\\textgreater\}/g, "\\textbf{$1}");
// sub and superscript
characters = characters.replace(/\{\\textless\}sup\{\\textgreater\}(.+?)\{\\textless\}\/sup{\\textgreater\}/g, "$^{\\textrm{$1}}$")
.replace(/\{\\textless\}sub\{\\textgreater\}(.+?)\{\\textless\}\/sub\{\\textgreater\}/g, "$_{\\textrm{$1}}$");
// two variants of small caps
characters = characters.replace(/\{\\textless\}span\sstyle="small-caps"\{\\textgreater\}(.+?)\{\\textless\}\/span{\\textgreater\}/g, "\\textsc{$1}")
.replace(/\{\\textless\}sc\{\\textgreater\}(.+?)\{\\textless\}\/sc\{\\textgreater\}/g, "\\textsc{$1}");
return characters;
}
function mapTeXmarkup(tex) {
// reverse of the above - converts tex mark-up into html mark-up permitted by Zotero
// italics and bold
tex = tex.replace(/\\textit\{([^}]+\})/g, "<i>$1</i>").replace(/\\textbf\{([^}]+\})/g, "<b>$1</b>");
// two versions of subscript the .* after $ is necessary because people m
tex = tex.replace(/\$[^{$]*_\{([^}]+\})\$/g, "<sub>$1</sub>").replace(/\$[^{]*_\{\\textrm\{([^}]+\}\})/g, "<sub>$1</sub>");
// two version of superscript
tex = tex.replace(/\$[^{]*\^\{([^}]+\}\$)/g, "<sup>$1</sup>").replace(/\$[^{]*\^\{\\textrm\{([^}]+\}\})/g, "<sup>$1</sup>");
// small caps
tex = tex.replace(/\\textsc\{([^}]+)/g, "<span style=\"small-caps\">$1</span>");
return tex;
}
// Disable the isTitleCase function until we decide what to do with it.
/* const skipWords = ["but", "or", "yet", "so", "for", "and", "nor",
"a", "an", "the", "at", "by", "from", "in", "into", "of", "on",
"to", "with", "up", "down", "as", "while", "aboard", "about",
"above", "across", "after", "against", "along", "amid", "among",
"anti", "around", "as", "before", "behind", "below", "beneath",
"beside", "besides", "between", "beyond", "but", "despite",
"down", "during", "except", "for", "inside", "like", "near",
"off", "onto", "over", "past", "per", "plus", "round", "save",
"since", "than", "through", "toward", "towards", "under",
"underneath", "unlike", "until", "upon", "versus", "via",
"within", "without"];
function isTitleCase(string) {
const wordRE = /[\s[(]([^\s,\.:?!\])]+)/g;
var word;
while (word = wordRE.exec(string)) {
word = word[1];
if (word.search(/\d/) != -1 //ignore words with numbers (including just numbers)
|| skipWords.includes(word.toLowerCase())) {
continue;
}
if (word.toLowerCase() == word) return false;
}
return true;
}
*/
// See http://tex.stackexchange.com/questions/230750/open-brace-in-bibtex-fields/230754
var vphantomRe = /\\vphantom{\\}}((?:.(?!\\vphantom{\\}}))*)\\vphantom{\\{}/g;
function escapeSpecialCharacters(str) {
var newStr = str.replace(/[|<>~^\\{}]/g, function (c) {
return alwaysMap[c];
})
.replace(/([#$%&_])/g, "\\$1");
// We escape each brace in the text by making sure that it has a counterpart,
// but sometimes this is overkill if the brace already has a counterpart in
// the text.
if (newStr.includes('\\vphantom')) {
var m;
while (m = vphantomRe.exec(newStr)) { // eslint-disable-line no-cond-assign
// Can't use a simple replace, because we want to match up inner with inner
// and outer with outer
newStr = newStr.substr(0, m.index) + m[1] + newStr.substr(m.index + m[0].length);
vphantomRe.lastIndex = 0; // Start over, because the previous replacement could have created a new pair
}
}
return newStr;
}
function mapAccent(character) {
return (mappingTable[character] ? mappingTable[character] : "?");
}
var filePathSpecialChars = '\\\\:;$'; // $ for Mendeley (see cleanFilePath for {})
var encodeFilePathRE = new RegExp('[' + filePathSpecialChars + ']', 'g');
// We strip out {} in general, because \{ and \} still break BibTeX (0.99d)
function cleanFilePath(str) {
if (!str) return '';
return str.replace(/(?:\s*[{}]+)+\s*/g, ' ');
}
function encodeFilePathComponent(value) {
if (!value) return '';
return value.replace(encodeFilePathRE, "\\$&");
}
function decodeFilePathComponent(value) {
if (!value) return '';
return value.replace(/\\([^A-Za-z0-9.])/g, "$1");
}
// a little substitution function for BibTeX keys, where we don't want LaTeX
// escaping, but we do want to preserve the base characters
function tidyAccents(s) {
var r = s.toLowerCase();
// XXX Remove conditional when we drop Zotero 2.1.x support
// This is supported in Zotero 3.0 and higher
if (ZU.removeDiacritics !== undefined) r = ZU.removeDiacritics(r, true);
else {
// We fall back on the replacement list we used previously
r = r.replace(new RegExp("[ä]", 'g'), "ae");
r = r.replace(new RegExp("[ö]", 'g'), "oe");
r = r.replace(new RegExp("[ü]", 'g'), "ue");
r = r.replace(new RegExp("[àáâãå]", 'g'), "a");
r = r.replace(new RegExp("æ", 'g'), "ae");
r = r.replace(new RegExp("ç", 'g'), "c");
r = r.replace(new RegExp("[èéêë]", 'g'), "e");
r = r.replace(new RegExp("[ìíîï]", 'g'), "i");
r = r.replace(new RegExp("ñ", 'g'), "n");
r = r.replace(new RegExp("[òóôõ]", 'g'), "o");
r = r.replace(new RegExp("œ", 'g'), "oe");
r = r.replace(new RegExp("[ùúû]", 'g'), "u");
r = r.replace(new RegExp("[ýÿ]", 'g'), "y");
}
return r;
}
var numberRe = /^[0-9]+/;
// Below is a list of words that should not appear as part of the citation key
// it includes the indefinite articles of English, German, French and Spanish, as well as a small set of English prepositions whose
// force is more grammatical than lexical, i.e. which are likely to strike many as 'insignificant'.
// The assumption is that most who want a title word in their key would prefer the first word of significance.
// Also remove markup
var citeKeyTitleBannedRe = /\b(a|an|the|some|from|on|in|to|of|do|with|der|die|das|ein|eine|einer|eines|einem|einen|un|une|la|le|l'|el|las|los|al|uno|una|unos|unas|de|des|del|d')(\s+|\b)|(<\/?(i|b|sup|sub|sc|span style="small-caps"|span)>)/g;
var citeKeyConversionsRe = /%([a-zA-Z])/;
var citeKeyCleanRe = /[^a-z0-9!$&*+-./:;<>?[\]^_`|]+/g;
var citeKeyConversions = {
a: function (flags, item) {
if (item.creators && item.creators[0] && item.creators[0].lastName) {
return item.creators[0].lastName.toLowerCase().replace(/ /g, "_").replace(/,/g, "");
}
return "noauthor";
},
t: function (flags, item) {
if (item.title) {
return item.title.toLowerCase().replace(citeKeyTitleBannedRe, "").split(/\s+/g)[0];
}
return "notitle";
},
y: function (flags, item) {
if (item.date) {
var date = Zotero.Utilities.strToDate(item.date);
if (date.year && numberRe.test(date.year)) {
return date.year;
}
}
return "nodate";
}
};
function buildCiteKey(item, extraFields, citekeys) {
if (extraFields) {
const citationKey = extraFields.findIndex(field => field.field && field.value && field.field.toLowerCase() === 'citation key');
if (citationKey >= 0) return extraFields.splice(citationKey, 1)[0].value;
}
if (item.citationKey) return item.citationKey;
var basekey = "";
var counter = 0;
var citeKeyFormatRemaining = citeKeyFormat;
while (citeKeyConversionsRe.test(citeKeyFormatRemaining)) {
if (counter > 100) {
Zotero.debug("Pathological BibTeX format: " + citeKeyFormat);
break;
}
var m = citeKeyFormatRemaining.match(citeKeyConversionsRe);
if (m.index > 0) {
// add data before the conversion match to basekey
basekey += citeKeyFormatRemaining.substr(0, m.index);
}
var flags = ""; // for now
var f = citeKeyConversions[m[1]];
if (typeof (f) == "function") {
var value = f(flags, item);
Zotero.debug("Got value " + value + " for %" + m[1]);
// add conversion to basekey
basekey += value;
}
citeKeyFormatRemaining = citeKeyFormatRemaining.substr(m.index + m.length);
counter++;
}
if (citeKeyFormatRemaining.length > 0) {
basekey += citeKeyFormatRemaining;
}
// for now, remove any characters not explicitly known to be allowed;
// we might want to allow UTF-8 citation keys in the future, depending
// on implementation support.
//
// no matter what, we want to make sure we exclude
// " # % ' ( ) , = { } ~ and backslash
// however, we want to keep the base characters
basekey = tidyAccents(basekey);
basekey = basekey.replace(citeKeyCleanRe, "");
var citekey = basekey;
var i = 0;
while (citekeys[citekey]) {
i++;
citekey = basekey + "-" + i;
}
citekeys[citekey] = true;
return citekey;
}
var protectCapsRE;
function doExport() {
if (Zotero.getHiddenPref && Zotero.getHiddenPref('BibTeX.export.dontProtectInitialCase')) {
// Case of words with uppercase characters in non-initial positions is
// preserved with braces.
// Two extra captures because of the other regexp below
protectCapsRE = new ZU.XRegExp("()()\\b(\\p{Letter}+\\p{Uppercase_Letter}\\p{Letter}*)", 'g');
}
else {
// Protect all upper case letters, even if the uppercase letter is only in
// initial position of the word.
// Don't protect first word if only first letter is capitalized
protectCapsRE = new ZU.XRegExp(
"(.)\\b(\\p{Letter}*\\p{Uppercase_Letter}\\p{Letter}*)" // Non-initial words with capital letter anywhere
+ "|^(\\p{Letter}+\\p{Uppercase_Letter}\\p{Letter}*)" // Initial word with capital in non-initial position
, 'g');
}
// Zotero.write("% BibTeX export generated by Zotero "+Zotero.Utilities.getVersion());
// to make sure the BOM gets ignored
Zotero.write("\n");
var first = true;
var citekeys = {};
var item;
while (item = Zotero.nextItem()) { // eslint-disable-line no-cond-assign
// don't export standalone notes and attachments
if (item.itemType == "note" || item.itemType == "attachment") continue;
// determine type
var type = zotero2bibtexTypeMap[item.itemType];
if (typeof (type) == "function") {
type = type(item);
}
// For theses BibTeX distinguish between @mastersthesis and @phdthesis
// and the default mapping will map all Zotero thesis items to a
// BibTeX phdthesis item. Here we try to fix this by examining the
// Zotero thesisType field.
if (type == "phdthesis") {
// In practice, we just want to separate out masters theses,
// and will assume everything else maps to @phdthesis. Better to
// err on the side of caution.
var thesisType = item.type && item.type.toLowerCase().replace(/[\s.]+|thesis|unpublished/g, '');
if (thesisType && (thesisType == 'master' || thesisType == 'masters' || thesisType == "master's" || thesisType == 'ms' || thesisType == 'msc' || thesisType == 'ma')) {
type = "mastersthesis";
item.type = "";
}
}
if (!type) type = "misc";
// create a unique citation key
var extraFields = item.extra ? parseExtraFields(item.extra) : null;
var citekey = buildCiteKey(item, extraFields, citekeys);
// write citation key
Zotero.write((first ? "" : "\n\n") + "@" + type + "{" + citekey);
first = false;
for (var field in fieldMap) {
if (item[fieldMap[field]]) {
writeField(field, item[fieldMap[field]]);
}
}
if (item.reportNumber || item.issue || item.seriesNumber || item.patentNumber) {
writeField("number", item.reportNumber || item.issue || item.seriesNumber || item.patentNumber);
}
if (item.accessDate) {
var accessYMD = item.accessDate.replace(/\s*\d+:\d+:\d+/, "");
writeField("urldate", accessYMD);
}
if (item.publicationTitle) {
if (item.itemType == "bookSection" || item.itemType == "conferencePaper") {
writeField("booktitle", item.publicationTitle);
}
else if (Zotero.getOption("useJournalAbbreviation") && item.journalAbbreviation) {
writeField("journal", item.journalAbbreviation);
}
else {
writeField("journal", item.publicationTitle);
}
}
if (item.publisher) {
if (item.itemType == "thesis") {
writeField("school", item.publisher);
}
else if (item.itemType == "report") {
writeField("institution", item.publisher);
}
else {
writeField("publisher", item.publisher);
}
}
if (item.creators && item.creators.length) {
// split creators into subcategories
var author = "";
var editor = "";
var translator = "";
var collaborator = "";
var primaryCreatorType = Zotero.Utilities.getCreatorsForType(item.itemType)[0];
for (let i in item.creators) {
var creator = item.creators[i];
var creatorString;
if (creator.firstName) {
var fname = creator.firstName.split(/\s*,!?\s*/);
fname.push(fname.shift()); // If we have a Jr. part(s), it should precede first name
creatorString = creator.lastName + ", " + fname.join(', ');
}
else {
creatorString = creator.lastName;
}
creatorString = escapeSpecialCharacters(creatorString);
if (creator.fieldMode == true) { // fieldMode true, assume corporate author
creatorString = "{" + creatorString + "}";
}
else {
creatorString = creatorString.replace(/ (and) /gi, ' {$1} ');
}
if (creator.creatorType == "editor" || creator.creatorType == "seriesEditor") {
editor += " and " + creatorString;
}
else if (creator.creatorType == "translator") {
translator += " and " + creatorString;
}
else if (creator.creatorType == primaryCreatorType) {
author += " and " + creatorString;
}
else {
collaborator += " and " + creatorString;
}
}
if (author) {
writeField("author", "{" + author.substr(5) + "}", true);
}
if (editor) {
writeField("editor", "{" + editor.substr(5) + "}", true);
}
if (translator) {
writeField("translator", "{" + translator.substr(5) + "}", true);
}
if (collaborator) {
writeField("collaborator", "{" + collaborator.substr(5) + "}", true);
}
}
if (item.date) {
var date = Zotero.Utilities.strToDate(item.date);
// need to use non-localized abbreviation
if (typeof date.month == "number") {
writeField("month", months[date.month], true);
}
if (date.year) {
writeField("year", date.year);
}
}
if (extraFields) {
// Export identifiers
for (let i = 0; i < extraFields.length; i++) {
var rec = extraFields[i];
if (!rec.field || !revExtraIds[rec.field]) continue;
var value = rec.value.trim();
if (value) {
writeField(revExtraIds[rec.field], '{' + value + '}', true);
extraFields.splice(i, 1);
i--;
}
}
var extra = extraFieldsToString(extraFields); // Make sure we join exactly with what we split
if (extra) writeField("note", extra);
}
if (item.tags && item.tags.length) {
var tagString = "";
for (let i in item.tags) {
var tag = item.tags[i];
tagString += ", " + tag.tag;
}
writeField("keywords", tagString.substr(2));
}
if (item.pages) {
writeField("pages", item.pages.replace(/[-\u2012-\u2015\u2053]+/g, "--"));
}
// Commented out, because we don't want a books number of pages in the BibTeX "pages" field for books.
// if (item.numPages) {
// writeField("pages", item.numPages);
// }
/* We'll prefer url over howpublished see
https://forums.zotero.org/discussion/24554/bibtex-doubled-url/#Comment_157802
if (item.itemType == "webpage") {
writeField("howpublished", item.url);
}*/
if (item.notes && Zotero.getOption("exportNotes")) {
for (let i in item.notes) {
var note = item.notes[i];
writeField("annote", Zotero.Utilities.unescapeHTML(note.note));
}
}
if (item.attachments) {
var attachmentString = "";
for (let i in item.attachments) {
var attachment = item.attachments[i];
// Unfortunately, it looks like \{ in file field breaks BibTeX (0.99d)
// even if properly backslash escaped, so we have to make sure that
// it doesn't make it into this field at all
var title = cleanFilePath(attachment.title),
path = null;
if (Zotero.getOption("exportFileData") && attachment.saveFile) {
path = cleanFilePath(attachment.defaultPath);
attachment.saveFile(path, true);
}
else if (attachment.localPath) {
path = cleanFilePath(attachment.localPath);
}
if (path) {
attachmentString += ";" + encodeFilePathComponent(title)
+ ":" + encodeFilePathComponent(path)
+ ":" + encodeFilePathComponent(attachment.mimeType);
}
}
if (attachmentString) {
writeField("file", attachmentString.substr(1));
}
}
Zotero.write("\n}");
}
}
// TODO: not sure what purpose exports serves
var exports = { // eslint-disable-line no-unused-vars
doExport: doExport,
doImport: doImport,
setKeywordDelimRe: setKeywordDelimRe,
setKeywordSplitOnSpace: setKeywordSplitOnSpace
};
/*
* new mapping table based on that from Matthias Steffens,
* then enhanced with some fields generated from the unicode table.
*/
var mappingTable = {
"\u00A0": "~", // NO-BREAK SPACE
"\u00A1": "{\\textexclamdown}", // INVERTED EXCLAMATION MARK
"\u00A2": "{\\textcent}", // CENT SIGN
"\u00A3": "{\\textsterling}", // POUND SIGN
"\u00A5": "{\\textyen}", // YEN SIGN
"\u00A6": "{\\textbrokenbar}", // BROKEN BAR
"\u00A7": "{\\textsection}", // SECTION SIGN
"\u00A8": "{\\textasciidieresis}", // DIAERESIS
"\u00A9": "{\\textcopyright}", // COPYRIGHT SIGN
ª: "{\\textordfeminine}", // FEMININE ORDINAL INDICATOR
"\u00AB": "{\\guillemotleft}", // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
"\u00AC": "{\\textlnot}", // NOT SIGN
"\u00AD": "-", // SOFT HYPHEN
"\u00AE": "{\\textregistered}", // REGISTERED SIGN
"\u00AF": "{\\textasciimacron}", // MACRON
"\u00B0": "{\\textdegree}", // DEGREE SIGN
"\u00B1": "{\\textpm}", // PLUS-MINUS SIGN
"\u00B2": "{\\texttwosuperior}", // SUPERSCRIPT TWO
"\u00B3": "{\\textthreesuperior}", // SUPERSCRIPT THREE
"\u00B4": "{\\textasciiacute}", // ACUTE ACCENT
µ: "{\\textmu}", // MICRO SIGN
"\u00B6": "{\\textparagraph}", // PILCROW SIGN
"\u00B7": "{\\textperiodcentered}", // MIDDLE DOT
"\u00B8": "{\\c\\ }", // CEDILLA
"\u00B9": "{\\textonesuperior}", // SUPERSCRIPT ONE
º: "{\\textordmasculine}", // MASCULINE ORDINAL INDICATOR
"\u00BB": "{\\guillemotright}", // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
"\u00BC": "{\\textonequarter}", // VULGAR FRACTION ONE QUARTER
"\u00BD": "{\\textonehalf}", // VULGAR FRACTION ONE HALF
"\u00BE": "{\\textthreequarters}", // VULGAR FRACTION THREE QUARTERS
"\u00BF": "{\\textquestiondown}", // INVERTED QUESTION MARK
Æ: "{\\AE}", // LATIN CAPITAL LETTER AE
Ð: "{\\DH}", // LATIN CAPITAL LETTER ETH
"\u00D7": "{\\texttimes}", // MULTIPLICATION SIGN
Ø: "{\\O}", // LATIN CAPITAL LETTER O WITH STROKE
Þ: "{\\TH}", // LATIN CAPITAL LETTER THORN
ß: "{\\ss}", // LATIN SMALL LETTER SHARP S
æ: "{\\ae}", // LATIN SMALL LETTER AE
ð: "{\\dh}", // LATIN SMALL LETTER ETH
"\u00F7": "{\\textdiv}", // DIVISION SIGN
ø: "{\\o}", // LATIN SMALL LETTER O WITH STROKE
þ: "{\\th}", // LATIN SMALL LETTER THORN
ı: "{\\i}", // LATIN SMALL LETTER DOTLESS I
IJ: "IJ", // LATIN CAPITAL LIGATURE IJ
ij: "ij", // LATIN SMALL LIGATURE IJ
ĸ: "k", // LATIN SMALL LETTER KRA
ʼn: "'n", // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
Ŋ: "{\\NG}", // LATIN CAPITAL LETTER ENG
ŋ: "{\\ng}", // LATIN SMALL LETTER ENG
Œ: "{\\OE}", // LATIN CAPITAL LIGATURE OE
œ: "{\\oe}", // LATIN SMALL LIGATURE OE
ſ: "s", // LATIN SMALL LETTER LONG S
ʹ: "'", // MODIFIER LETTER PRIME
ʻ: "'", // MODIFIER LETTER TURNED COMMA
ʼ: "'", // MODIFIER LETTER APOSTROPHE
ʽ: "'", // MODIFIER LETTER REVERSED COMMA
ˆ: "{\\textasciicircum}", // MODIFIER LETTER CIRCUMFLEX ACCENT
ˈ: "'", // MODIFIER LETTER VERTICAL LINE
ˉ: "-", // MODIFIER LETTER MACRON
ˌ: ",", // MODIFIER LETTER LOW VERTICAL LINE
ː: ":", // MODIFIER LETTER TRIANGULAR COLON
"\u02DA": "o", // RING ABOVE
"\u02DC": "\\~{}", // SMALL TILDE
"\u02DD": "{\\textacutedbl}", // DOUBLE ACUTE ACCENT
ʹ: "'", // GREEK NUMERAL SIGN
"\u0375": ",", // GREEK LOWER NUMERAL SIGN
"\u037E": ";", // GREEK QUESTION MARK
// Greek letters courtesy of spartanroc
Γ: "$\\Gamma$", // GREEK Gamma
Δ: "$\\Delta$", // GREEK Delta
Θ: "$\\Theta$", // GREEK Theta
Λ: "$\\Lambda$", // GREEK Lambda
Ξ: "$\\Xi$", // GREEK Xi
Π: "$\\Pi$", // GREEK Pi
Σ: "$\\Sigma$", // GREEK Sigma
Φ: "$\\Phi$", // GREEK Phi
Ψ: "$\\Psi$", // GREEK Psi
Ω: "$\\Omega$", // GREEK Omega
α: "$\\alpha$", // GREEK alpha
β: "$\\beta$", // GREEK beta
γ: "$\\gamma$", // GREEK gamma
δ: "$\\delta$", // GREEK delta
ε: "$\\varepsilon$", // GREEK var-epsilon
ζ: "$\\zeta$", // GREEK zeta
η: "$\\eta$", // GREEK eta
θ: "$\\theta$", // GREEK theta
ι: "$\\iota$", // GREEK iota
κ: "$\\kappa$", // GREEK kappa
λ: "$\\lambda$", // GREEK lambda
μ: "$\\mu$", // GREEK mu
ν: "$\\nu$", // GREEK nu
ξ: "$\\xi$", // GREEK xi
π: "$\\pi$", // GREEK pi
ρ: "$\\rho$", // GREEK rho
ς: "$\\varsigma$", // GREEK var-sigma
σ: "$\\sigma$", // GREEK sigma
τ: "$\\tau$", // GREEK tau
υ: "$\\upsilon$", // GREEK upsilon
φ: "$\\varphi$", // GREEK var-phi
χ: "$\\chi$", // GREEK chi
ψ: "$\\psi$", // GREEK psi
ω: "$\\omega$", // GREEK omega
ϑ: "$\\vartheta$", // GREEK var-theta
ϒ: "$\\Upsilon$", // GREEK Upsilon
ϕ: "$\\phi$", // GREEK phi
ϖ: "$\\varpi$", // GREEK var-pi
ϱ: "$\\varrho$", // GREEK var-rho
ϵ: "$\\epsilon$", // GREEK epsilon
// Greek letters end
"\u2000": " ", // EN QUAD
"\u2001": " ", // EM QUAD
"\u2002": " ", // EN SPACE
"\u2003": " ", // EM SPACE
"\u2004": " ", // THREE-PER-EM SPACE
"\u2005": " ", // FOUR-PER-EM SPACE
"\u2006": " ", // SIX-PER-EM SPACE
"\u2007": " ", // FIGURE SPACE
"\u2008": " ", // PUNCTUATION SPACE
"\u2009": " ", // THIN SPACE
"\u2010": "-", // HYPHEN
"\u2011": "-", // NON-BREAKING HYPHEN
"\u2012": "-", // FIGURE DASH
"\u2013": "{\\textendash}", // EN DASH
"\u2014": "{\\textemdash}", // EM DASH
"\u2015": "{\\textemdash}", // HORIZONTAL BAR or QUOTATION DASH (not in LaTeX -- use EM DASH)
"\u2016": "{\\textbardbl}", // DOUBLE VERTICAL LINE
"\u2017": "{\\textunderscore}", // DOUBLE LOW LINE
"\u2018": "{\\textquoteleft}", // LEFT SINGLE QUOTATION MARK
"\u2019": "{\\textquoteright}", // RIGHT SINGLE QUOTATION MARK
"`": "\u2018", // LEFT SINGLE QUOTATION MARK
"'": "\u2019", // RIGHT SINGLE QUOTATION MARK
"\u201A": "{\\quotesinglbase}", // SINGLE LOW-9 QUOTATION MARK
"\u201B": "'", // SINGLE HIGH-REVERSED-9 QUOTATION MARK
"\u201C": "{\\textquotedblleft}", // LEFT DOUBLE QUOTATION MARK
"\u201D": "{\\textquotedblright}", // RIGHT DOUBLE QUOTATION MARK
"\u201E": "{\\quotedblbase}", // DOUBLE LOW-9 QUOTATION MARK
"\u201F": "{\\quotedblbase}", // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
"\u2020": "{\\textdagger}", // DAGGER
"\u2021": "{\\textdaggerdbl}", // DOUBLE DAGGER
"\u2022": "{\\textbullet}", // BULLET
"\u2023": ">", // TRIANGULAR BULLET
"\u2024": ".", // ONE DOT LEADER
"\u2025": "..", // TWO DOT LEADER
"\u2026": "{\\textellipsis}", // HORIZONTAL ELLIPSIS
"\u2027": "-", // HYPHENATION POINT
"\u202F": " ", // NARROW NO-BREAK SPACE
"\u2030": "{\\textperthousand}", // PER MILLE SIGN
"\u2032": "'", // PRIME
"\u2033": "'", // DOUBLE PRIME
"\u2034": "'''", // TRIPLE PRIME
"\u2035": "`", // REVERSED PRIME
"\u2036": "``", // REVERSED DOUBLE PRIME
"\u2037": "```", // REVERSED TRIPLE PRIME
"\u2039": "{\\guilsinglleft}", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
"\u203A": "{\\guilsinglright}", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
"\u203C": "!!", // DOUBLE EXCLAMATION MARK
"\u203E": "-", // OVERLINE
"\u2043": "-", // HYPHEN BULLET
"\u2044": "{\\textfractionsolidus}", // FRACTION SLASH
"\u2048": "?!", // QUESTION EXCLAMATION MARK
"\u2049": "!?", // EXCLAMATION QUESTION MARK
"\u204A": "7", // TIRONIAN SIGN ET
"\u2070": "$^{0}$", // SUPERSCRIPT ZERO
"\u2074": "$^{4}$", // SUPERSCRIPT FOUR
"\u2075": "$^{5}$", // SUPERSCRIPT FIVE
"\u2076": "$^{6}$", // SUPERSCRIPT SIX
"\u2077": "$^{7}$", // SUPERSCRIPT SEVEN
"\u2078": "$^{8}$", // SUPERSCRIPT EIGHT
"\u2079": "$^{9}$", // SUPERSCRIPT NINE
"\u207A": "$^{+}$", // SUPERSCRIPT PLUS SIGN
"\u207B": "$^{-}$", // SUPERSCRIPT MINUS
"\u207C": "$^{=}$", // SUPERSCRIPT EQUALS SIGN
"\u207D": "$^{(}$", // SUPERSCRIPT LEFT PARENTHESIS
"\u207E": "$^{)}$", // SUPERSCRIPT RIGHT PARENTHESIS
ⁿ: "$^{n}$", // SUPERSCRIPT LATIN SMALL LETTER N
"\u2080": "$_{0}$", // SUBSCRIPT ZERO
"\u2081": "$_{1}$", // SUBSCRIPT ONE
"\u2082": "$_{2}$", // SUBSCRIPT TWO
"\u2083": "$_{3}$", // SUBSCRIPT THREE
"\u2084": "$_{4}$", // SUBSCRIPT FOUR
"\u2085": "$_{5}$", // SUBSCRIPT FIVE
"\u2086": "$_{6}$", // SUBSCRIPT SIX
"\u2087": "$_{7}$", // SUBSCRIPT SEVEN
"\u2088": "$_{8}$", // SUBSCRIPT EIGHT
"\u2089": "$_{9}$", // SUBSCRIPT NINE
"\u208A": "$_{+}$", // SUBSCRIPT PLUS SIGN
"\u208B": "$_{-}$", // SUBSCRIPT MINUS
"\u208C": "$_{=}$", // SUBSCRIPT EQUALS SIGN
"\u208D": "$_{(}$", // SUBSCRIPT LEFT PARENTHESIS
"\u208E": "$_{)}$", // SUBSCRIPT RIGHT PARENTHESIS
"\u20AC": "{\\texteuro}", // EURO SIGN
"\u2100": "a/c", // ACCOUNT OF
"\u2101": "a/s", // ADDRESSED TO THE SUBJECT
"\u2103": "{\\textcelsius}", // DEGREE CELSIUS
"\u2105": "c/o", // CARE OF
"\u2106": "c/u", // CADA UNA
"\u2109": "F", // DEGREE FAHRENHEIT
ℓ: "l", // SCRIPT SMALL L
"\u2116": "{\\textnumero}", // NUMERO SIGN
"\u2117": "{\\textcircledP}", // SOUND RECORDING COPYRIGHT
"\u2120": "{\\textservicemark}", // SERVICE MARK
"\u2121": "TEL", // TELEPHONE SIGN
"\u2122": "{\\texttrademark}", // TRADE MARK SIGN
Ω: "{\\textohm}", // OHM SIGN
K: "K", // KELVIN SIGN
Å: "A", // ANGSTROM SIGN
℮: "{\\textestimated}", // ESTIMATED SYMBOL
"\u2153": " 1/3", // VULGAR FRACTION ONE THIRD
"\u2154": " 2/3", // VULGAR FRACTION TWO THIRDS
"\u2155": " 1/5", // VULGAR FRACTION ONE FIFTH
"\u2156": " 2/5", // VULGAR FRACTION TWO FIFTHS
"\u2157": " 3/5", // VULGAR FRACTION THREE FIFTHS
"\u2158": " 4/5", // VULGAR FRACTION FOUR FIFTHS
"\u2159": " 1/6", // VULGAR FRACTION ONE SIXTH
"\u215A": " 5/6", // VULGAR FRACTION FIVE SIXTHS
"\u215B": " 1/8", // VULGAR FRACTION ONE EIGHTH
"\u215C": " 3/8", // VULGAR FRACTION THREE EIGHTHS
"\u215D": " 5/8", // VULGAR FRACTION FIVE EIGHTHS
"\u215E": " 7/8", // VULGAR FRACTION SEVEN EIGHTHS
"\u215F": " 1/", // FRACTION NUMERATOR ONE
Ⅰ: "I", // ROMAN NUMERAL ONE
Ⅱ: "II", // ROMAN NUMERAL TWO
Ⅲ: "III", // ROMAN NUMERAL THREE
Ⅳ: "IV", // ROMAN NUMERAL FOUR
Ⅴ: "V", // ROMAN NUMERAL FIVE
Ⅵ: "VI", // ROMAN NUMERAL SIX
Ⅶ: "VII", // ROMAN NUMERAL SEVEN
Ⅷ: "VIII", // ROMAN NUMERAL EIGHT
Ⅸ: "IX", // ROMAN NUMERAL NINE
Ⅹ: "X", // ROMAN NUMERAL TEN
Ⅺ: "XI", // ROMAN NUMERAL ELEVEN
Ⅻ: "XII", // ROMAN NUMERAL TWELVE
Ⅼ: "L", // ROMAN NUMERAL FIFTY
Ⅽ: "C", // ROMAN NUMERAL ONE HUNDRED
Ⅾ: "D", // ROMAN NUMERAL FIVE HUNDRED
Ⅿ: "M", // ROMAN NUMERAL ONE THOUSAND
ⅰ: "i", // SMALL ROMAN NUMERAL ONE
ⅱ: "ii", // SMALL ROMAN NUMERAL TWO
ⅲ: "iii", // SMALL ROMAN NUMERAL THREE
ⅳ: "iv", // SMALL ROMAN NUMERAL FOUR
ⅴ: "v", // SMALL ROMAN NUMERAL FIVE
ⅵ: "vi", // SMALL ROMAN NUMERAL SIX
ⅶ: "vii", // SMALL ROMAN NUMERAL SEVEN
ⅷ: "viii", // SMALL ROMAN NUMERAL EIGHT
ⅸ: "ix", // SMALL ROMAN NUMERAL NINE
ⅹ: "x", // SMALL ROMAN NUMERAL TEN
ⅺ: "xi", // SMALL ROMAN NUMERAL ELEVEN
ⅻ: "xii", // SMALL ROMAN NUMERAL TWELVE
ⅼ: "l", // SMALL ROMAN NUMERAL FIFTY
ⅽ: "c", // SMALL ROMAN NUMERAL ONE HUNDRED
ⅾ: "d", // SMALL ROMAN NUMERAL FIVE HUNDRED
ⅿ: "m", // SMALL ROMAN NUMERAL ONE THOUSAND
"\u2190": "{\\textleftarrow}", // LEFTWARDS ARROW
"\u2191": "{\\textuparrow}", // UPWARDS ARROW
"\u2192": "{\\textrightarrow}", // RIGHTWARDS ARROW
"\u2193": "{\\textdownarrow}", // DOWNWARDS ARROW
"\u2194": "<->", // LEFT RIGHT ARROW
"\u21D0": "<=", // LEFTWARDS DOUBLE ARROW
"\u21D2": "=>", // RIGHTWARDS DOUBLE ARROW
"\u21D4": "<=>", // LEFT RIGHT DOUBLE ARROW
"\u2212": "-", // MINUS SIGN
"\u2215": "/", // DIVISION SLASH
"\u2216": "\\", // SET MINUS
"\u2217": "*", // ASTERISK OPERATOR
"\u2218": "o", // RING OPERATOR
"\u2219": ".", // BULLET OPERATOR
"\u221E": "$\\infty$", // INFINITY
"\u2223": "|", // DIVIDES
"\u2225": "||", // PARALLEL TO
"\u2236": ":", // RATIO
"\u223C": "\\~{}", // TILDE OPERATOR
"\u2260": "/=", // NOT EQUAL TO
"\u2261": "=", // IDENTICAL TO
"\u2264": "<=", // LESS-THAN OR EQUAL TO
"\u2265": ">=", // GREATER-THAN OR EQUAL TO
"\u226A": "<<", // MUCH LESS-THAN
"\u226B": ">>", // MUCH GREATER-THAN
"\u2295": "(+)", // CIRCLED PLUS
"\u2296": "(-)", // CIRCLED MINUS
"\u2297": "(x)", // CIRCLED TIMES
"\u2298": "(/)", // CIRCLED DIVISION SLASH
"\u22A2": "|-", // RIGHT TACK
"\u22A3": "-|", // LEFT TACK
"\u22A6": "|-", // ASSERTION
"\u22A7": "|=", // MODELS
"\u22A8": "|=", // TRUE
"\u22A9": "||-", // FORCES
"\u22C5": ".", // DOT OPERATOR
"\u22C6": "*", // STAR OPERATOR
"\u22D5": "$\\#$", // EQUAL AND PARALLEL TO
"\u22D8": "<<<", // VERY MUCH LESS-THAN
"\u22D9": ">>>", // VERY MUCH GREATER-THAN
"\u2329": "{\\textlangle}", // LEFT-POINTING ANGLE BRACKET
"\u232A": "{\\textrangle}", // RIGHT-POINTING ANGLE BRACKET
"\u2400": "NUL", // SYMBOL FOR NULL
"\u2401": "SOH", // SYMBOL FOR START OF HEADING
"\u2402": "STX", // SYMBOL FOR START OF TEXT
"\u2403": "ETX", // SYMBOL FOR END OF TEXT
"\u2404": "EOT", // SYMBOL FOR END OF TRANSMISSION
"\u2405": "ENQ", // SYMBOL FOR ENQUIRY
"\u2406": "ACK", // SYMBOL FOR ACKNOWLEDGE
"\u2407": "BEL", // SYMBOL FOR BELL
"\u2408": "BS", // SYMBOL FOR BACKSPACE
"\u2409": "HT", // SYMBOL FOR HORIZONTAL TABULATION
"\u240A": "LF", // SYMBOL FOR LINE FEED
"\u240B": "VT", // SYMBOL FOR VERTICAL TABULATION
"\u240C": "FF", // SYMBOL FOR FORM FEED
"\u240D": "CR", // SYMBOL FOR CARRIAGE RETURN
"\u240E": "SO", // SYMBOL FOR SHIFT OUT
"\u240F": "SI", // SYMBOL FOR SHIFT IN
"\u2410": "DLE", // SYMBOL FOR DATA LINK ESCAPE
"\u2411": "DC1", // SYMBOL FOR DEVICE CONTROL ONE
"\u2412": "DC2", // SYMBOL FOR DEVICE CONTROL TWO
"\u2413": "DC3", // SYMBOL FOR DEVICE CONTROL THREE
"\u2414": "DC4", // SYMBOL FOR DEVICE CONTROL FOUR
"\u2415": "NAK", // SYMBOL FOR NEGATIVE ACKNOWLEDGE
"\u2416": "SYN", // SYMBOL FOR SYNCHRONOUS IDLE
"\u2417": "ETB", // SYMBOL FOR END OF TRANSMISSION BLOCK
"\u2418": "CAN", // SYMBOL FOR CANCEL
"\u2419": "EM", // SYMBOL FOR END OF MEDIUM
"\u241A": "SUB", // SYMBOL FOR SUBSTITUTE
"\u241B": "ESC", // SYMBOL FOR ESCAPE
"\u241C": "FS", // SYMBOL FOR FILE SEPARATOR
"\u241D": "GS", // SYMBOL FOR GROUP SEPARATOR
"\u241E": "RS", // SYMBOL FOR RECORD SEPARATOR
"\u241F": "US", // SYMBOL FOR UNIT SEPARATOR
"\u2420": "SP", // SYMBOL FOR SPACE
"\u2421": "DEL", // SYMBOL FOR DELETE
"\u2423": "{\\textvisiblespace}", // OPEN BOX
"\u2424": "NL", // SYMBOL FOR NEWLINE
"\u2425": "///", // SYMBOL FOR DELETE FORM TWO
"\u2426": "?", // SYMBOL FOR SUBSTITUTE FORM TWO
"\u2460": "(1)", // CIRCLED DIGIT ONE
"\u2461": "(2)", // CIRCLED DIGIT TWO
"\u2462": "(3)", // CIRCLED DIGIT THREE
"\u2463": "(4)", // CIRCLED DIGIT FOUR
"\u2464": "(5)", // CIRCLED DIGIT FIVE
"\u2465": "(6)", // CIRCLED DIGIT SIX
"\u2466": "(7)", // CIRCLED DIGIT SEVEN
"\u2467": "(8)", // CIRCLED DIGIT EIGHT
"\u2468": "(9)", // CIRCLED DIGIT NINE
"\u2469": "(10)", // CIRCLED NUMBER TEN
"\u246A": "(11)", // CIRCLED NUMBER ELEVEN
"\u246B": "(12)", // CIRCLED NUMBER TWELVE
"\u246C": "(13)", // CIRCLED NUMBER THIRTEEN
"\u246D": "(14)", // CIRCLED NUMBER FOURTEEN
"\u246E": "(15)", // CIRCLED NUMBER FIFTEEN
"\u246F": "(16)", // CIRCLED NUMBER SIXTEEN
"\u2470": "(17)", // CIRCLED NUMBER SEVENTEEN
"\u2471": "(18)", // CIRCLED NUMBER EIGHTEEN
"\u2472": "(19)", // CIRCLED NUMBER NINETEEN
"\u2473": "(20)", // CIRCLED NUMBER TWENTY
"\u2474": "(1)", // PARENTHESIZED DIGIT ONE
"\u2475": "(2)", // PARENTHESIZED DIGIT TWO
"\u2476": "(3)", // PARENTHESIZED DIGIT THREE
"\u2477": "(4)", // PARENTHESIZED DIGIT FOUR
"\u2478": "(5)", // PARENTHESIZED DIGIT FIVE
"\u2479": "(6)", // PARENTHESIZED DIGIT SIX
"\u247A": "(7)", // PARENTHESIZED DIGIT SEVEN
"\u247B": "(8)", // PARENTHESIZED DIGIT EIGHT
"\u247C": "(9)", // PARENTHESIZED DIGIT NINE
"\u247D": "(10)", // PARENTHESIZED NUMBER TEN
"\u247E": "(11)", // PARENTHESIZED NUMBER ELEVEN
"\u247F": "(12)", // PARENTHESIZED NUMBER TWELVE
"\u2480": "(13)", // PARENTHESIZED NUMBER THIRTEEN
"\u2481": "(14)", // PARENTHESIZED NUMBER FOURTEEN
"\u2482": "(15)", // PARENTHESIZED NUMBER FIFTEEN
"\u2483": "(16)", // PARENTHESIZED NUMBER SIXTEEN
"\u2484": "(17)", // PARENTHESIZED NUMBER SEVENTEEN
"\u2485": "(18)", // PARENTHESIZED NUMBER EIGHTEEN
"\u2486": "(19)", // PARENTHESIZED NUMBER NINETEEN
"\u2487": "(20)", // PARENTHESIZED NUMBER TWENTY
"\u2488": "1.", // DIGIT ONE FULL STOP
"\u2489": "2.", // DIGIT TWO FULL STOP
"\u248A": "3.", // DIGIT THREE FULL STOP
"\u248B": "4.", // DIGIT FOUR FULL STOP
"\u248C": "5.", // DIGIT FIVE FULL STOP
"\u248D": "6.", // DIGIT SIX FULL STOP
"\u248E": "7.", // DIGIT SEVEN FULL STOP
"\u248F": "8.", // DIGIT EIGHT FULL STOP
"\u2490": "9.", // DIGIT NINE FULL STOP
"\u2491": "10.", // NUMBER TEN FULL STOP
"\u2492": "11.", // NUMBER ELEVEN FULL STOP
"\u2493": "12.", // NUMBER TWELVE FULL STOP
"\u2494": "13.", // NUMBER THIRTEEN FULL STOP
"\u2495": "14.", // NUMBER FOURTEEN FULL STOP
"\u2496": "15.", // NUMBER FIFTEEN FULL STOP
"\u2497": "16.", // NUMBER SIXTEEN FULL STOP
"\u2498": "17.", // NUMBER SEVENTEEN FULL STOP
"\u2499": "18.", // NUMBER EIGHTEEN FULL STOP
"\u249A": "19.", // NUMBER NINETEEN FULL STOP
"\u249B": "20.", // NUMBER TWENTY FULL STOP
"\u249C": "(a)", // PARENTHESIZED LATIN SMALL LETTER A
"\u249D": "(b)", // PARENTHESIZED LATIN SMALL LETTER B
"\u249E": "(c)", // PARENTHESIZED LATIN SMALL LETTER C
"\u249F": "(d)", // PARENTHESIZED LATIN SMALL LETTER D
"\u24A0": "(e)", // PARENTHESIZED LATIN SMALL LETTER E
"\u24A1": "(f)", // PARENTHESIZED LATIN SMALL LETTER F
"\u24A2": "(g)", // PARENTHESIZED LATIN SMALL LETTER G
"\u24A3": "(h)", // PARENTHESIZED LATIN SMALL LETTER H
"\u24A4": "(i)", // PARENTHESIZED LATIN SMALL LETTER I
"\u24A5": "(j)", // PARENTHESIZED LATIN SMALL LETTER J
"\u24A6": "(k)", // PARENTHESIZED LATIN SMALL LETTER K
"\u24A7": "(l)", // PARENTHESIZED LATIN SMALL LETTER L
"\u24A8": "(m)", // PARENTHESIZED LATIN SMALL LETTER M
"\u24A9": "(n)", // PARENTHESIZED LATIN SMALL LETTER N
"\u24AA": "(o)", // PARENTHESIZED LATIN SMALL LETTER O
"\u24AB": "(p)", // PARENTHESIZED LATIN SMALL LETTER P
"\u24AC": "(q)", // PARENTHESIZED LATIN SMALL LETTER Q
"\u24AD": "(r)", // PARENTHESIZED LATIN SMALL LETTER R
"\u24AE": "(s)", // PARENTHESIZED LATIN SMALL LETTER S
"\u24AF": "(t)", // PARENTHESIZED LATIN SMALL LETTER T
"\u24B0": "(u)", // PARENTHESIZED LATIN SMALL LETTER U
"\u24B1": "(v)", // PARENTHESIZED LATIN SMALL LETTER V
"\u24B2": "(w)", // PARENTHESIZED LATIN SMALL LETTER W
"\u24B3": "(x)", // PARENTHESIZED LATIN SMALL LETTER X
"\u24B4": "(y)", // PARENTHESIZED LATIN SMALL LETTER Y
"\u24B5": "(z)", // PARENTHESIZED LATIN SMALL LETTER Z
"\u24B6": "(A)", // CIRCLED LATIN CAPITAL LETTER A
"\u24B7": "(B)", // CIRCLED LATIN CAPITAL LETTER B
"\u24B8": "(C)", // CIRCLED LATIN CAPITAL LETTER C
"\u24B9": "(D)", // CIRCLED LATIN CAPITAL LETTER D
"\u24BA": "(E)", // CIRCLED LATIN CAPITAL LETTER E
"\u24BB": "(F)", // CIRCLED LATIN CAPITAL LETTER F
"\u24BC": "(G)", // CIRCLED LATIN CAPITAL LETTER G
"\u24BD": "(H)", // CIRCLED LATIN CAPITAL LETTER H
"\u24BE": "(I)", // CIRCLED LATIN CAPITAL LETTER I
"\u24BF": "(J)", // CIRCLED LATIN CAPITAL LETTER J
"\u24C0": "(K)", // CIRCLED LATIN CAPITAL LETTER K
"\u24C1": "(L)", // CIRCLED LATIN CAPITAL LETTER L
"\u24C2": "(M)", // CIRCLED LATIN CAPITAL LETTER M
"\u24C3": "(N)", // CIRCLED LATIN CAPITAL LETTER N
"\u24C4": "(O)", // CIRCLED LATIN CAPITAL LETTER O
"\u24C5": "(P)", // CIRCLED LATIN CAPITAL LETTER P
"\u24C6": "(Q)", // CIRCLED LATIN CAPITAL LETTER Q
"\u24C7": "(R)", // CIRCLED LATIN CAPITAL LETTER R
"\u24C8": "(S)", // CIRCLED LATIN CAPITAL LETTER S
"\u24C9": "(T)", // CIRCLED LATIN CAPITAL LETTER T
"\u24CA": "(U)", // CIRCLED LATIN CAPITAL LETTER U
"\u24CB": "(V)", // CIRCLED LATIN CAPITAL LETTER V
"\u24CC": "(W)", // CIRCLED LATIN CAPITAL LETTER W
"\u24CD": "(X)", // CIRCLED LATIN CAPITAL LETTER X
"\u24CE": "(Y)", // CIRCLED LATIN CAPITAL LETTER Y
"\u24CF": "(Z)", // CIRCLED LATIN CAPITAL LETTER Z
"\u24D0": "(a)", // CIRCLED LATIN SMALL LETTER A
"\u24D1": "(b)", // CIRCLED LATIN SMALL LETTER B
"\u24D2": "(c)", // CIRCLED LATIN SMALL LETTER C
"\u24D3": "(d)", // CIRCLED LATIN SMALL LETTER D
"\u24D4": "(e)", // CIRCLED LATIN SMALL LETTER E
"\u24D5": "(f)", // CIRCLED LATIN SMALL LETTER F
"\u24D6": "(g)", // CIRCLED LATIN SMALL LETTER G
"\u24D7": "(h)", // CIRCLED LATIN SMALL LETTER H
"\u24D8": "(i)", // CIRCLED LATIN SMALL LETTER I
"\u24D9": "(j)", // CIRCLED LATIN SMALL LETTER J
"\u24DA": "(k)", // CIRCLED LATIN SMALL LETTER K
"\u24DB": "(l)", // CIRCLED LATIN SMALL LETTER L
"\u24DC": "(m)", // CIRCLED LATIN SMALL LETTER M
"\u24DD": "(n)", // CIRCLED LATIN SMALL LETTER N
"\u24DE": "(o)", // CIRCLED LATIN SMALL LETTER O
"\u24DF": "(p)", // CIRCLED LATIN SMALL LETTER P
"\u24E0": "(q)", // CIRCLED LATIN SMALL LETTER Q
"\u24E1": "(r)", // CIRCLED LATIN SMALL LETTER R
"\u24E2": "(s)", // CIRCLED LATIN SMALL LETTER S
"\u24E3": "(t)", // CIRCLED LATIN SMALL LETTER T
"\u24E4": "(u)", // CIRCLED LATIN SMALL LETTER U
"\u24E5": "(v)", // CIRCLED LATIN SMALL LETTER V
"\u24E6": "(w)", // CIRCLED LATIN SMALL LETTER W
"\u24E7": "(x)", // CIRCLED LATIN SMALL LETTER X
"\u24E8": "(y)", // CIRCLED LATIN SMALL LETTER Y
"\u24E9": "(z)", // CIRCLED LATIN SMALL LETTER Z
"\u24EA": "(0)", // CIRCLED DIGIT ZERO
"\u2500": "-", // BOX DRAWINGS LIGHT HORIZONTAL
"\u2501": "=", // BOX DRAWINGS HEAVY HORIZONTAL
"\u2502": "|", // BOX DRAWINGS LIGHT VERTICAL
"\u2503": "|", // BOX DRAWINGS HEAVY VERTICAL
"\u2504": "-", // BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
"\u2505": "=", // BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
"\u2506": "|", // BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
"\u2507": "|", // BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
"\u2508": "-", // BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
"\u2509": "=", // BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
"\u250A": "|", // BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
"\u250B": "|", // BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
"\u250C": "+", // BOX DRAWINGS LIGHT DOWN AND RIGHT
"\u250D": "+", // BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
"\u250E": "+", // BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
"\u250F": "+", // BOX DRAWINGS HEAVY DOWN AND RIGHT
"\u2510": "+", // BOX DRAWINGS LIGHT DOWN AND LEFT
"\u2511": "+", // BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
"\u2512": "+", // BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
"\u2513": "+", // BOX DRAWINGS HEAVY DOWN AND LEFT
"\u2514": "+", // BOX DRAWINGS LIGHT UP AND RIGHT
"\u2515": "+", // BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
"\u2516": "+", // BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
"\u2517": "+", // BOX DRAWINGS HEAVY UP AND RIGHT
"\u2518": "+", // BOX DRAWINGS LIGHT UP AND LEFT
"\u2519": "+", // BOX DRAWINGS UP LIGHT AND LEFT HEAVY
"\u251A": "+", // BOX DRAWINGS UP HEAVY AND LEFT LIGHT
"\u251B": "+", // BOX DRAWINGS HEAVY UP AND LEFT
"\u251C": "+", // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
"\u251D": "+", // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
"\u251E": "+", // BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
"\u251F": "+", // BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
"\u2520": "+", // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
"\u2521": "+", // BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
"\u2522": "+", // BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
"\u2523": "+", // BOX DRAWINGS HEAVY VERTICAL AND RIGHT
"\u2524": "+", // BOX DRAWINGS LIGHT VERTICAL AND LEFT
"\u2525": "+", // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
"\u2526": "+", // BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
"\u2527": "+", // BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
"\u2528": "+", // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
"\u2529": "+", // BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
"\u252A": "+", // BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
"\u252B": "+", // BOX DRAWINGS HEAVY VERTICAL AND LEFT
"\u252C": "+", // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
"\u252D": "+", // BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
"\u252E": "+", // BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
"\u252F": "+", // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
"\u2530": "+", // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
"\u2531": "+", // BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
"\u2532": "+", // BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
"\u2533": "+", // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
"\u2534": "+", // BOX DRAWINGS LIGHT UP AND HORIZONTAL
"\u2535": "+", // BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
"\u2536": "+", // BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
"\u2537": "+", // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
"\u2538": "+", // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
"\u2539": "+", // BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
"\u253A": "+", // BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
"\u253B": "+", // BOX DRAWINGS HEAVY UP AND HORIZONTAL
"\u253C": "+", // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
"\u253D": "+", // BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
"\u253E": "+", // BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
"\u253F": "+", // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
"\u2540": "+", // BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
"\u2541": "+", // BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
"\u2542": "+", // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
"\u2543": "+", // BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
"\u2544": "+", // BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
"\u2545": "+", // BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
"\u2546": "+", // BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
"\u2547": "+", // BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
"\u2548": "+", // BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
"\u2549": "+", // BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
"\u254A": "+", // BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
"\u254B": "+", // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
"\u254C": "-", // BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
"\u254D": "=", // BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
"\u254E": "|", // BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
"\u254F": "|", // BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
"\u2550": "=", // BOX DRAWINGS DOUBLE HORIZONTAL
"\u2551": "|", // BOX DRAWINGS DOUBLE VERTICAL
"\u2552": "+", // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
"\u2553": "+", // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
"\u2554": "+", // BOX DRAWINGS DOUBLE DOWN AND RIGHT
"\u2555": "+", // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
"\u2556": "+", // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
"\u2557": "+", // BOX DRAWINGS DOUBLE DOWN AND LEFT
"\u2558": "+", // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
"\u2559": "+", // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
"\u255A": "+", // BOX DRAWINGS DOUBLE UP AND RIGHT
"\u255B": "+", // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
"\u255C": "+", // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
"\u255D": "+", // BOX DRAWINGS DOUBLE UP AND LEFT
"\u255E": "+", // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
"\u255F": "+", // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
"\u2560": "+", // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
"\u2561": "+", // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
"\u2562": "+", // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
"\u2563": "+", // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
"\u2564": "+", // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
"\u2565": "+", // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
"\u2566": "+", // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
"\u2567": "+", // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
"\u2568": "+", // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
"\u2569": "+", // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
"\u256A": "+", // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
"\u256B": "+", // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
"\u256C": "+", // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
"\u256D": "+", // BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
"\u256E": "+", // BOX DRAWINGS LIGHT ARC DOWN AND LEFT
"\u256F": "+", // BOX DRAWINGS LIGHT ARC UP AND LEFT
"\u2570": "+", // BOX DRAWINGS LIGHT ARC UP AND RIGHT
"\u2571": "/", // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
"\u2572": "\\", // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
"\u2573": "X", // BOX DRAWINGS LIGHT DIAGONAL CROSS
"\u257C": "-", // BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
"\u257D": "|", // BOX DRAWINGS LIGHT UP AND HEAVY DOWN
"\u257E": "-", // BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
"\u257F": "|", // BOX DRAWINGS HEAVY UP AND LIGHT DOWN
"\u25CB": "o", // WHITE CIRCLE
"\u25E6": "{\\textopenbullet}", // WHITE BULLET
"\u2605": "*", // BLACK STAR
"\u2606": "*", // WHITE STAR
"\u2612": "X", // BALLOT BOX WITH X
"\u2613": "X", // SALTIRE
"\u2639": ":-(", // WHITE FROWNING FACE
"\u263A": ":-)", // WHITE SMILING FACE
"\u263B": "(-:", // BLACK SMILING FACE
"\u266D": "b", // MUSIC FLAT SIGN
"\u266F": "$\\#$", // MUSIC SHARP SIGN
"\u2701": "$\\%<$", // UPPER BLADE SCISSORS
"\u2702": "$\\%<$", // BLACK SCISSORS
"\u2703": "$\\%<$", // LOWER BLADE SCISSORS
"\u2704": "$\\%<$", // WHITE SCISSORS
"\u270C": "V", // VICTORY HAND
"\u2713": "v", // CHECK MARK
"\u2714": "V", // HEAVY CHECK MARK
"\u2715": "x", // MULTIPLICATION X
"\u2716": "x", // HEAVY MULTIPLICATION X
"\u2717": "X", // BALLOT X
"\u2718": "X", // HEAVY BALLOT X
"\u2719": "+", // OUTLINED GREEK CROSS
"\u271A": "+", // HEAVY GREEK CROSS
"\u271B": "+", // OPEN CENTRE CROSS
"\u271C": "+", // HEAVY OPEN CENTRE CROSS
"\u271D": "+", // LATIN CROSS
"\u271E": "+", // SHADOWED WHITE LATIN CROSS
"\u271F": "+", // OUTLINED LATIN CROSS
"\u2720": "+", // MALTESE CROSS
"\u2721": "*", // STAR OF DAVID
"\u2722": "+", // FOUR TEARDROP-SPOKED ASTERISK
"\u2723": "+", // FOUR BALLOON-SPOKED ASTERISK
"\u2724": "+", // HEAVY FOUR BALLOON-SPOKED ASTERISK
"\u2725": "+", // FOUR CLUB-SPOKED ASTERISK
"\u2726": "+", // BLACK FOUR POINTED STAR
"\u2727": "+", // WHITE FOUR POINTED STAR
"\u2729": "*", // STRESS OUTLINED WHITE STAR
"\u272A": "*", // CIRCLED WHITE STAR
"\u272B": "*", // OPEN CENTRE BLACK STAR
"\u272C": "*", // BLACK CENTRE WHITE STAR
"\u272D": "*", // OUTLINED BLACK STAR
"\u272E": "*", // HEAVY OUTLINED BLACK STAR
"\u272F": "*", // PINWHEEL STAR
"\u2730": "*", // SHADOWED WHITE STAR
"\u2731": "*", // HEAVY ASTERISK
"\u2732": "*", // OPEN CENTRE ASTERISK
"\u2733": "*", // EIGHT SPOKED ASTERISK
"\u2734": "*", // EIGHT POINTED BLACK STAR
"\u2735": "*", // EIGHT POINTED PINWHEEL STAR
"\u2736": "*", // SIX POINTED BLACK STAR
"\u2737": "*", // EIGHT POINTED RECTILINEAR BLACK STAR
"\u2738": "*", // HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
"\u2739": "*", // TWELVE POINTED BLACK STAR
"\u273A": "*", // SIXTEEN POINTED ASTERISK
"\u273B": "*", // TEARDROP-SPOKED ASTERISK
"\u273C": "*", // OPEN CENTRE TEARDROP-SPOKED ASTERISK
"\u273D": "*", // HEAVY TEARDROP-SPOKED ASTERISK
"\u273E": "*", // SIX PETALLED BLACK AND WHITE FLORETTE
"\u273F": "*", // BLACK FLORETTE
"\u2740": "*", // WHITE FLORETTE
"\u2741": "*", // EIGHT PETALLED OUTLINED BLACK FLORETTE
"\u2742": "*", // CIRCLED OPEN CENTRE EIGHT POINTED STAR
"\u2743": "*", // HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
"\u2744": "*", // SNOWFLAKE
"\u2745": "*", // TIGHT TRIFOLIATE SNOWFLAKE
"\u2746": "*", // HEAVY CHEVRON SNOWFLAKE
"\u2747": "*", // SPARKLE
"\u2748": "*", // HEAVY SPARKLE
"\u2749": "*", // BALLOON-SPOKED ASTERISK
"\u274A": "*", // EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
"\u274B": "*", // HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
ff: "ff", // LATIN SMALL LIGATURE FF
fi: "fi", // LATIN SMALL LIGATURE FI
fl: "fl", // LATIN SMALL LIGATURE FL
ffi: "ffi", // LATIN SMALL LIGATURE FFI
ffl: "ffl", // LATIN SMALL LIGATURE FFL
ſt: "st", // LATIN SMALL LIGATURE LONG S T
st: "st", // LATIN SMALL LIGATURE ST
/* Derived accented characters */
/* These two require the "semtrans" package to work; uncomment to enable */
/* "\u02BF":"\{\\Ayn}", // MGR Ayn
"\u02BE":"\{\\Alif}", // MGR Alif/Hamza
*/
À: "{\\`A}", // LATIN CAPITAL LETTER A WITH GRAVE
Á: "{\\'A}", // LATIN CAPITAL LETTER A WITH ACUTE
Â: "{\\^A}", // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
Ã: "{\\~A}", // LATIN CAPITAL LETTER A WITH TILDE
Ä: "{\\\"A}", // LATIN CAPITAL LETTER A WITH DIAERESIS
Å: "{\\r A}", // LATIN CAPITAL LETTER A WITH RING ABOVE
Ç: "{\\c C}", // LATIN CAPITAL LETTER C WITH CEDILLA
È: "{\\`E}", // LATIN CAPITAL LETTER E WITH GRAVE
É: "{\\'E}", // LATIN CAPITAL LETTER E WITH ACUTE
Ê: "{\\^E}", // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
Ë: "{\\\"E}", // LATIN CAPITAL LETTER E WITH DIAERESIS
Ì: "{\\`I}", // LATIN CAPITAL LETTER I WITH GRAVE
Í: "{\\'I}", // LATIN CAPITAL LETTER I WITH ACUTE
Î: "{\\^I}", // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
Ï: "{\\\"I}", // LATIN CAPITAL LETTER I WITH DIAERESIS
Ñ: "{\\~N}", // LATIN CAPITAL LETTER N WITH TILDE
Ò: "{\\`O}", // LATIN CAPITAL LETTER O WITH GRAVE
Ó: "{\\'O}", // LATIN CAPITAL LETTER O WITH ACUTE
Ô: "{\\^O}", // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
Õ: "{\\~O}", // LATIN CAPITAL LETTER O WITH TILDE
Ö: "{\\\"O}", // LATIN CAPITAL LETTER O WITH DIAERESIS
Ù: "{\\`U}", // LATIN CAPITAL LETTER U WITH GRAVE
Ú: "{\\'U}", // LATIN CAPITAL LETTER U WITH ACUTE
Û: "{\\^U}", // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
Ü: "{\\\"U}", // LATIN CAPITAL LETTER U WITH DIAERESIS
Ý: "{\\'Y}", // LATIN CAPITAL LETTER Y WITH ACUTE
à: "{\\`a}", // LATIN SMALL LETTER A WITH GRAVE
á: "{\\'a}", // LATIN SMALL LETTER A WITH ACUTE
â: "{\\^a}", // LATIN SMALL LETTER A WITH CIRCUMFLEX
ã: "{\\~a}", // LATIN SMALL LETTER A WITH TILDE
ä: "{\\\"a}", // LATIN SMALL LETTER A WITH DIAERESIS
å: "{\\r a}", // LATIN SMALL LETTER A WITH RING ABOVE
ç: "{\\c c}", // LATIN SMALL LETTER C WITH CEDILLA
è: "{\\`e}", // LATIN SMALL LETTER E WITH GRAVE
é: "{\\'e}", // LATIN SMALL LETTER E WITH ACUTE
ê: "{\\^e}", // LATIN SMALL LETTER E WITH CIRCUMFLEX
ë: "{\\\"e}", // LATIN SMALL LETTER E WITH DIAERESIS
ì: "{\\`i}", // LATIN SMALL LETTER I WITH GRAVE
í: "{\\'i}", // LATIN SMALL LETTER I WITH ACUTE
î: "{\\^i}", // LATIN SMALL LETTER I WITH CIRCUMFLEX
ï: "{\\\"i}", // LATIN SMALL LETTER I WITH DIAERESIS
ñ: "{\\~n}", // LATIN SMALL LETTER N WITH TILDE
ò: "{\\`o}", // LATIN SMALL LETTER O WITH GRAVE
ó: "{\\'o}", // LATIN SMALL LETTER O WITH ACUTE
ô: "{\\^o}", // LATIN SMALL LETTER O WITH CIRCUMFLEX
õ: "{\\~o}", // LATIN SMALL LETTER O WITH TILDE
ö: "{\\\"o}", // LATIN SMALL LETTER O WITH DIAERESIS
ù: "{\\`u}", // LATIN SMALL LETTER U WITH GRAVE
ú: "{\\'u}", // LATIN SMALL LETTER U WITH ACUTE
û: "{\\^u}", // LATIN SMALL LETTER U WITH CIRCUMFLEX
ü: "{\\\"u}", // LATIN SMALL LETTER U WITH DIAERESIS
ý: "{\\'y}", // LATIN SMALL LETTER Y WITH ACUTE
ÿ: "{\\\"y}", // LATIN SMALL LETTER Y WITH DIAERESIS
Ā: "{\\=A}", // LATIN CAPITAL LETTER A WITH MACRON
ā: "{\\=a}", // LATIN SMALL LETTER A WITH MACRON
Ă: "{\\u A}", // LATIN CAPITAL LETTER A WITH BREVE
ă: "{\\u a}", // LATIN SMALL LETTER A WITH BREVE
Ą: "{\\k A}", // LATIN CAPITAL LETTER A WITH OGONEK
ą: "{\\k a}", // LATIN SMALL LETTER A WITH OGONEK
Ć: "{\\'C}", // LATIN CAPITAL LETTER C WITH ACUTE
ć: "{\\'c}", // LATIN SMALL LETTER C WITH ACUTE
Ĉ: "{\\^C}", // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
ĉ: "{\\^c}", // LATIN SMALL LETTER C WITH CIRCUMFLEX
Ċ: "{\\.C}", // LATIN CAPITAL LETTER C WITH DOT ABOVE
ċ: "{\\.c}", // LATIN SMALL LETTER C WITH DOT ABOVE
Č: "{\\v C}", // LATIN CAPITAL LETTER C WITH CARON
č: "{\\v c}", // LATIN SMALL LETTER C WITH CARON
Ď: "{\\v D}", // LATIN CAPITAL LETTER D WITH CARON
ď: "{\\v d}", // LATIN SMALL LETTER D WITH CARON
Ē: "{\\=E}", // LATIN CAPITAL LETTER E WITH MACRON
ē: "{\\=e}", // LATIN SMALL LETTER E WITH MACRON
Ĕ: "{\\u E}", // LATIN CAPITAL LETTER E WITH BREVE
ĕ: "{\\u e}", // LATIN SMALL LETTER E WITH BREVE
Ė: "{\\.E}", // LATIN CAPITAL LETTER E WITH DOT ABOVE
ė: "{\\.e}", // LATIN SMALL LETTER E WITH DOT ABOVE
Ę: "{\\k E}", // LATIN CAPITAL LETTER E WITH OGONEK
ę: "{\\k e}", // LATIN SMALL LETTER E WITH OGONEK
Ě: "{\\v E}", // LATIN CAPITAL LETTER E WITH CARON
ě: "{\\v e}", // LATIN SMALL LETTER E WITH CARON
Ĝ: "{\\^G}", // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
ĝ: "{\\^g}", // LATIN SMALL LETTER G WITH CIRCUMFLEX
Ğ: "{\\u G}", // LATIN CAPITAL LETTER G WITH BREVE
ğ: "{\\u g}", // LATIN SMALL LETTER G WITH BREVE
Ġ: "{\\.G}", // LATIN CAPITAL LETTER G WITH DOT ABOVE
ġ: "{\\.g}", // LATIN SMALL LETTER G WITH DOT ABOVE
Ģ: "{\\c G}", // LATIN CAPITAL LETTER G WITH CEDILLA
ģ: "{\\c g}", // LATIN SMALL LETTER G WITH CEDILLA
Ĥ: "{\\^H}", // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
ĥ: "{\\^h}", // LATIN SMALL LETTER H WITH CIRCUMFLEX
Ĩ: "{\\~I}", // LATIN CAPITAL LETTER I WITH TILDE
ĩ: "{\\~i}", // LATIN SMALL LETTER I WITH TILDE
Ī: "{\\=I}", // LATIN CAPITAL LETTER I WITH MACRON
ī: "{\\=\\i}", // LATIN SMALL LETTER I WITH MACRON
Ĭ: "{\\u I}", // LATIN CAPITAL LETTER I WITH BREVE
ĭ: "{\\u i}", // LATIN SMALL LETTER I WITH BREVE
Į: "{\\k I}", // LATIN CAPITAL LETTER I WITH OGONEK
į: "{\\k i}", // LATIN SMALL LETTER I WITH OGONEK
İ: "{\\.I}", // LATIN CAPITAL LETTER I WITH DOT ABOVE
Ĵ: "{\\^J}", // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
ĵ: "{\\^j}", // LATIN SMALL LETTER J WITH CIRCUMFLEX
Ķ: "{\\c K}", // LATIN CAPITAL LETTER K WITH CEDILLA
ķ: "{\\c k}", // LATIN SMALL LETTER K WITH CEDILLA
Ĺ: "{\\'L}", // LATIN CAPITAL LETTER L WITH ACUTE
ĺ: "{\\'l}", // LATIN SMALL LETTER L WITH ACUTE
Ļ: "{\\c L}", // LATIN CAPITAL LETTER L WITH CEDILLA
ļ: "{\\c l}", // LATIN SMALL LETTER L WITH CEDILLA
Ľ: "{\\v L}", // LATIN CAPITAL LETTER L WITH CARON
ľ: "{\\v l}", // LATIN SMALL LETTER L WITH CARON
Ł: "{\\L }", // LATIN CAPITAL LETTER L WITH STROKE
ł: "{\\l }", // LATIN SMALL LETTER L WITH STROKE
Ń: "{\\'N}", // LATIN CAPITAL LETTER N WITH ACUTE
ń: "{\\'n}", // LATIN SMALL LETTER N WITH ACUTE
Ņ: "{\\c N}", // LATIN CAPITAL LETTER N WITH CEDILLA
ņ: "{\\c n}", // LATIN SMALL LETTER N WITH CEDILLA
Ň: "{\\v N}", // LATIN CAPITAL LETTER N WITH CARON
ň: "{\\v n}", // LATIN SMALL LETTER N WITH CARON
Ō: "{\\=O}", // LATIN CAPITAL LETTER O WITH MACRON
ō: "{\\=o}", // LATIN SMALL LETTER O WITH MACRON
Ŏ: "{\\u O}", // LATIN CAPITAL LETTER O WITH BREVE
ŏ: "{\\u o}", // LATIN SMALL LETTER O WITH BREVE
Ő: "{\\H O}", // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
ő: "{\\H o}", // LATIN SMALL LETTER O WITH DOUBLE ACUTE
Ŕ: "{\\'R}", // LATIN CAPITAL LETTER R WITH ACUTE
ŕ: "{\\'r}", // LATIN SMALL LETTER R WITH ACUTE
Ŗ: "{\\c R}", // LATIN CAPITAL LETTER R WITH CEDILLA
ŗ: "{\\c r}", // LATIN SMALL LETTER R WITH CEDILLA
Ř: "{\\v R}", // LATIN CAPITAL LETTER R WITH CARON
ř: "{\\v r}", // LATIN SMALL LETTER R WITH CARON
Ś: "{\\'S}", // LATIN CAPITAL LETTER S WITH ACUTE
ś: "{\\'s}", // LATIN SMALL LETTER S WITH ACUTE
Ŝ: "{\\^S}", // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
ŝ: "{\\^s}", // LATIN SMALL LETTER S WITH CIRCUMFLEX
Ş: "{\\c S}", // LATIN CAPITAL LETTER S WITH CEDILLA
ş: "{\\c s}", // LATIN SMALL LETTER S WITH CEDILLA
Š: "{\\v S}", // LATIN CAPITAL LETTER S WITH CARON
š: "{\\v s}", // LATIN SMALL LETTER S WITH CARON
Ţ: "{\\c T}", // LATIN CAPITAL LETTER T WITH CEDILLA
ţ: "{\\c t}", // LATIN SMALL LETTER T WITH CEDILLA
Ť: "{\\v T}", // LATIN CAPITAL LETTER T WITH CARON
ť: "{\\v t}", // LATIN SMALL LETTER T WITH CARON
Ũ: "{\\~U}", // LATIN CAPITAL LETTER U WITH TILDE
ũ: "{\\~u}", // LATIN SMALL LETTER U WITH TILDE
Ū: "{\\=U}", // LATIN CAPITAL LETTER U WITH MACRON
ū: "{\\=u}", // LATIN SMALL LETTER U WITH MACRON
Ŭ: "{\\u U}", // LATIN CAPITAL LETTER U WITH BREVE
ŭ: "{\\u u}", // LATIN SMALL LETTER U WITH BREVE
Ů: "{\\r U}", // LATIN CAPITAL U WITH A RING ABOVE
ů: "{\\r u}", // LATIN SMALL U WITH A RING ABOVE
Ű: "{\\H U}", // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
ű: "{\\H u}", // LATIN SMALL LETTER U WITH DOUBLE ACUTE
Ų: "{\\k U}", // LATIN CAPITAL LETTER U WITH OGONEK
ų: "{\\k u}", // LATIN SMALL LETTER U WITH OGONEK
Ŵ: "{\\^W}", // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
ŵ: "{\\^w}", // LATIN SMALL LETTER W WITH CIRCUMFLEX
Ŷ: "{\\^Y}", // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
ŷ: "{\\^y}", // LATIN SMALL LETTER Y WITH CIRCUMFLEX
Ÿ: "{\\\"Y}", // LATIN CAPITAL LETTER Y WITH DIAERESIS
Ź: "{\\'Z}", // LATIN CAPITAL LETTER Z WITH ACUTE
ź: "{\\'z}", // LATIN SMALL LETTER Z WITH ACUTE
Ż: "{\\.Z}", // LATIN CAPITAL LETTER Z WITH DOT ABOVE
ż: "{\\.z}", // LATIN SMALL LETTER Z WITH DOT ABOVE
Ž: "{\\v Z}", // LATIN CAPITAL LETTER Z WITH CARON
ž: "{\\v z}", // LATIN SMALL LETTER Z WITH CARON
Ǎ: "{\\v A}", // LATIN CAPITAL LETTER A WITH CARON
ǎ: "{\\v a}", // LATIN SMALL LETTER A WITH CARON
Ǐ: "{\\v I}", // LATIN CAPITAL LETTER I WITH CARON
ǐ: "{\\v i}", // LATIN SMALL LETTER I WITH CARON
Ǒ: "{\\v O}", // LATIN CAPITAL LETTER O WITH CARON
ǒ: "{\\v o}", // LATIN SMALL LETTER O WITH CARON
Ǔ: "{\\v U}", // LATIN CAPITAL LETTER U WITH CARON
ǔ: "{\\v u}", // LATIN SMALL LETTER U WITH CARON
Ǧ: "{\\v G}", // LATIN CAPITAL LETTER G WITH CARON
ǧ: "{\\v g}", // LATIN SMALL LETTER G WITH CARON
Ǩ: "{\\v K}", // LATIN CAPITAL LETTER K WITH CARON
ǩ: "{\\v k}", // LATIN SMALL LETTER K WITH CARON
Ǫ: "{\\k O}", // LATIN CAPITAL LETTER O WITH OGONEK
ǫ: "{\\k o}", // LATIN SMALL LETTER O WITH OGONEK
ǰ: "{\\v j}", // LATIN SMALL LETTER J WITH CARON
Ǵ: "{\\'G}", // LATIN CAPITAL LETTER G WITH ACUTE
ǵ: "{\\'g}", // LATIN SMALL LETTER G WITH ACUTE
Ḃ: "{\\.B}", // LATIN CAPITAL LETTER B WITH DOT ABOVE
ḃ: "{\\.b}", // LATIN SMALL LETTER B WITH DOT ABOVE
Ḅ: "{\\d B}", // LATIN CAPITAL LETTER B WITH DOT BELOW
ḅ: "{\\d b}", // LATIN SMALL LETTER B WITH DOT BELOW
Ḇ: "{\\b B}", // LATIN CAPITAL LETTER B WITH LINE BELOW
ḇ: "{\\b b}", // LATIN SMALL LETTER B WITH LINE BELOW
Ḋ: "{\\.D}", // LATIN CAPITAL LETTER D WITH DOT ABOVE
ḋ: "{\\.d}", // LATIN SMALL LETTER D WITH DOT ABOVE
Ḍ: "{\\d D}", // LATIN CAPITAL LETTER D WITH DOT BELOW
ḍ: "{\\d d}", // LATIN SMALL LETTER D WITH DOT BELOW
Ḏ: "{\\b D}", // LATIN CAPITAL LETTER D WITH LINE BELOW
ḏ: "{\\b d}", // LATIN SMALL LETTER D WITH LINE BELOW
Ḑ: "{\\c D}", // LATIN CAPITAL LETTER D WITH CEDILLA
ḑ: "{\\c d}", // LATIN SMALL LETTER D WITH CEDILLA
Ḟ: "{\\.F}", // LATIN CAPITAL LETTER F WITH DOT ABOVE
ḟ: "{\\.f}", // LATIN SMALL LETTER F WITH DOT ABOVE
Ḡ: "{\\=G}", // LATIN CAPITAL LETTER G WITH MACRON
ḡ: "{\\=g}", // LATIN SMALL LETTER G WITH MACRON
Ḣ: "{\\.H}", // LATIN CAPITAL LETTER H WITH DOT ABOVE
ḣ: "{\\.h}", // LATIN SMALL LETTER H WITH DOT ABOVE
Ḥ: "{\\d H}", // LATIN CAPITAL LETTER H WITH DOT BELOW
ḥ: "{\\d h}", // LATIN SMALL LETTER H WITH DOT BELOW
Ḧ: "{\\\"H}", // LATIN CAPITAL LETTER H WITH DIAERESIS
ḧ: "{\\\"h}", // LATIN SMALL LETTER H WITH DIAERESIS
Ḩ: "{\\c H}", // LATIN CAPITAL LETTER H WITH CEDILLA
ḩ: "{\\c h}", // LATIN SMALL LETTER H WITH CEDILLA
Ḱ: "{\\'K}", // LATIN CAPITAL LETTER K WITH ACUTE
ḱ: "{\\'k}", // LATIN SMALL LETTER K WITH ACUTE
Ḳ: "{\\d K}", // LATIN CAPITAL LETTER K WITH DOT BELOW
ḳ: "{\\d k}", // LATIN SMALL LETTER K WITH DOT BELOW
Ḵ: "{\\b K}", // LATIN CAPITAL LETTER K WITH LINE BELOW
ḵ: "{\\b k}", // LATIN SMALL LETTER K WITH LINE BELOW
Ḷ: "{\\d L}", // LATIN CAPITAL LETTER L WITH DOT BELOW
ḷ: "{\\d l}", // LATIN SMALL LETTER L WITH DOT BELOW
Ḻ: "{\\b L}", // LATIN CAPITAL LETTER L WITH LINE BELOW
ḻ: "{\\b l}", // LATIN SMALL LETTER L WITH LINE BELOW
Ḿ: "{\\'M}", // LATIN CAPITAL LETTER M WITH ACUTE
ḿ: "{\\'m}", // LATIN SMALL LETTER M WITH ACUTE
Ṁ: "{\\.M}", // LATIN CAPITAL LETTER M WITH DOT ABOVE
ṁ: "{\\.m}", // LATIN SMALL LETTER M WITH DOT ABOVE
Ṃ: "{\\d M}", // LATIN CAPITAL LETTER M WITH DOT BELOW
ṃ: "{\\d m}", // LATIN SMALL LETTER M WITH DOT BELOW
Ṅ: "{\\.N}", // LATIN CAPITAL LETTER N WITH DOT ABOVE
ṅ: "{\\.n}", // LATIN SMALL LETTER N WITH DOT ABOVE
Ṇ: "{\\d N}", // LATIN CAPITAL LETTER N WITH DOT BELOW
ṇ: "{\\d n}", // LATIN SMALL LETTER N WITH DOT BELOW
Ṉ: "{\\b N}", // LATIN CAPITAL LETTER N WITH LINE BELOW
ṉ: "{\\b n}", // LATIN SMALL LETTER N WITH LINE BELOW
Ṕ: "{\\'P}", // LATIN CAPITAL LETTER P WITH ACUTE
ṕ: "{\\'p}", // LATIN SMALL LETTER P WITH ACUTE
Ṗ: "{\\.P}", // LATIN CAPITAL LETTER P WITH DOT ABOVE
ṗ: "{\\.p}", // LATIN SMALL LETTER P WITH DOT ABOVE
Ṙ: "{\\.R}", // LATIN CAPITAL LETTER R WITH DOT ABOVE
ṙ: "{\\.r}", // LATIN SMALL LETTER R WITH DOT ABOVE
Ṛ: "{\\d R}", // LATIN CAPITAL LETTER R WITH DOT BELOW
ṛ: "{\\d r}", // LATIN SMALL LETTER R WITH DOT BELOW
Ṟ: "{\\b R}", // LATIN CAPITAL LETTER R WITH LINE BELOW
ṟ: "{\\b r}", // LATIN SMALL LETTER R WITH LINE BELOW
Ṡ: "{\\.S}", // LATIN CAPITAL LETTER S WITH DOT ABOVE
ṡ: "{\\.s}", // LATIN SMALL LETTER S WITH DOT ABOVE
Ṣ: "{\\d S}", // LATIN CAPITAL LETTER S WITH DOT BELOW
ṣ: "{\\d s}", // LATIN SMALL LETTER S WITH DOT BELOW
Ṫ: "{\\.T}", // LATIN CAPITAL LETTER T WITH DOT ABOVE
ṫ: "{\\.t}", // LATIN SMALL LETTER T WITH DOT ABOVE
Ṭ: "{\\d T}", // LATIN CAPITAL LETTER T WITH DOT BELOW
ṭ: "{\\d t}", // LATIN SMALL LETTER T WITH DOT BELOW
Ṯ: "{\\b T}", // LATIN CAPITAL LETTER T WITH LINE BELOW
ṯ: "{\\b t}", // LATIN SMALL LETTER T WITH LINE BELOW
Ṽ: "{\\~V}", // LATIN CAPITAL LETTER V WITH TILDE
ṽ: "{\\~v}", // LATIN SMALL LETTER V WITH TILDE
Ṿ: "{\\d V}", // LATIN CAPITAL LETTER V WITH DOT BELOW
ṿ: "{\\d v}", // LATIN SMALL LETTER V WITH DOT BELOW
Ẁ: "{\\`W}", // LATIN CAPITAL LETTER W WITH GRAVE
ẁ: "{\\`w}", // LATIN SMALL LETTER W WITH GRAVE
Ẃ: "{\\'W}", // LATIN CAPITAL LETTER W WITH ACUTE
ẃ: "{\\'w}", // LATIN SMALL LETTER W WITH ACUTE
Ẅ: "{\\\"W}", // LATIN CAPITAL LETTER W WITH DIAERESIS
ẅ: "{\\\"w}", // LATIN SMALL LETTER W WITH DIAERESIS
Ẇ: "{\\.W}", // LATIN CAPITAL LETTER W WITH DOT ABOVE
ẇ: "{\\.w}", // LATIN SMALL LETTER W WITH DOT ABOVE
Ẉ: "{\\d W}", // LATIN CAPITAL LETTER W WITH DOT BELOW
ẉ: "{\\d w}", // LATIN SMALL LETTER W WITH DOT BELOW
Ẋ: "{\\.X}", // LATIN CAPITAL LETTER X WITH DOT ABOVE
ẋ: "{\\.x}", // LATIN SMALL LETTER X WITH DOT ABOVE
Ẍ: "{\\\"X}", // LATIN CAPITAL LETTER X WITH DIAERESIS
ẍ: "{\\\"x}", // LATIN SMALL LETTER X WITH DIAERESIS
Ẏ: "{\\.Y}", // LATIN CAPITAL LETTER Y WITH DOT ABOVE
ẏ: "{\\.y}", // LATIN SMALL LETTER Y WITH DOT ABOVE
Ẑ: "{\\^Z}", // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
ẑ: "{\\^z}", // LATIN SMALL LETTER Z WITH CIRCUMFLEX
Ẓ: "{\\d Z}", // LATIN CAPITAL LETTER Z WITH DOT BELOW
ẓ: "{\\d z}", // LATIN SMALL LETTER Z WITH DOT BELOW
Ẕ: "{\\b Z}", // LATIN CAPITAL LETTER Z WITH LINE BELOW
ẕ: "{\\b z}", // LATIN SMALL LETTER Z WITH LINE BELOW
ẖ: "{\\b h}", // LATIN SMALL LETTER H WITH LINE BELOW
ẗ: "{\\\"t}", // LATIN SMALL LETTER T WITH DIAERESIS
ẘ: "{\\r w}", // LATIN SMALL W WITH A RING ABOVE
ẙ: "{\\r y}", // LATIN SMALL Y WITH A RING ABOVE
Ạ: "{\\d A}", // LATIN CAPITAL LETTER A WITH DOT BELOW
ạ: "{\\d a}", // LATIN SMALL LETTER A WITH DOT BELOW
Ẹ: "{\\d E}", // LATIN CAPITAL LETTER E WITH DOT BELOW
ẹ: "{\\d e}", // LATIN SMALL LETTER E WITH DOT BELOW
Ẽ: "{\\~E}", // LATIN CAPITAL LETTER E WITH TILDE
ẽ: "{\\~e}", // LATIN SMALL LETTER E WITH TILDE
Ị: "{\\d I}", // LATIN CAPITAL LETTER I WITH DOT BELOW
ị: "{\\d i}", // LATIN SMALL LETTER I WITH DOT BELOW
Ọ: "{\\d O}", // LATIN CAPITAL LETTER O WITH DOT BELOW
ọ: "{\\d o}", // LATIN SMALL LETTER O WITH DOT BELOW
Ụ: "{\\d U}", // LATIN CAPITAL LETTER U WITH DOT BELOW
ụ: "{\\d u}", // LATIN SMALL LETTER U WITH DOT BELOW
Ỳ: "{\\`Y}", // LATIN CAPITAL LETTER Y WITH GRAVE
ỳ: "{\\`y}", // LATIN SMALL LETTER Y WITH GRAVE
Ỵ: "{\\d Y}", // LATIN CAPITAL LETTER Y WITH DOT BELOW
ỵ: "{\\d y}", // LATIN SMALL LETTER Y WITH DOT BELOW
Ỹ: "{\\~Y}", // LATIN CAPITAL LETTER Y WITH TILDE
ỹ: "{\\~y}" // LATIN SMALL LETTER Y WITH TILDE
};
/* unfortunately the mapping isn't reversible - hence this second table - sigh! */
var reversemappingTable = {
"\\url": "", // strip 'url'
"\\href": "", // strip 'href'
"{\\textexclamdown}": "\u00A1", // INVERTED EXCLAMATION MARK
"{\\textcent}": "\u00A2", // CENT SIGN
"{\\textsterling}": "\u00A3", // POUND SIGN
"{\\textyen}": "\u00A5", // YEN SIGN
"{\\textbrokenbar}": "\u00A6", // BROKEN BAR
"{\\textsection}": "\u00A7", // SECTION SIGN
"{\\textasciidieresis}": "\u00A8", // DIAERESIS
"{\\textcopyright}": "\u00A9", // COPYRIGHT SIGN
"{\\textordfeminine}": "\u00AA", // FEMININE ORDINAL INDICATOR
"{\\guillemotleft}": "\u00AB", // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
"{\\textlnot}": "\u00AC", // NOT SIGN
"{\\textregistered}": "\u00AE", // REGISTERED SIGN
"{\\textasciimacron}": "\u00AF", // MACRON
"{\\textdegree}": "\u00B0", // DEGREE SIGN
"{\\textpm}": "\u00B1", // PLUS-MINUS SIGN
"{\\texttwosuperior}": "\u00B2", // SUPERSCRIPT TWO
"{\\textthreesuperior}": "\u00B3", // SUPERSCRIPT THREE
"{\\textasciiacute}": "\u00B4", // ACUTE ACCENT
"{\\textmu}": "\u00B5", // MICRO SIGN
"{\\textparagraph}": "\u00B6", // PILCROW SIGN
"{\\textperiodcentered}": "\u00B7", // MIDDLE DOT
"{\\c\\ }": "\u00B8", // CEDILLA
"{\\textonesuperior}": "\u00B9", // SUPERSCRIPT ONE
"{\\textordmasculine}": "\u00BA", // MASCULINE ORDINAL INDICATOR
"{\\guillemotright}": "\u00BB", // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
"{\\textonequarter}": "\u00BC", // VULGAR FRACTION ONE QUARTER
"{\\textonehalf}": "\u00BD", // VULGAR FRACTION ONE HALF
"{\\textthreequarters}": "\u00BE", // VULGAR FRACTION THREE QUARTERS
"{\\textquestiondown}": "\u00BF", // INVERTED QUESTION MARK
"{\\AE}": "\u00C6", // LATIN CAPITAL LETTER AE
"{\\DH}": "\u00D0", // LATIN CAPITAL LETTER ETH
"{\\texttimes}": "\u00D7", // MULTIPLICATION SIGN
"{\\O}": "\u00D8", // LATIN SMALL LETTER O WITH STROKE
"{\\TH}": "\u00DE", // LATIN CAPITAL LETTER THORN
"{\\ss}": "\u00DF", // LATIN SMALL LETTER SHARP S
"{\\ae}": "\u00E6", // LATIN SMALL LETTER AE
"{\\dh}": "\u00F0", // LATIN SMALL LETTER ETH
"{\\textdiv}": "\u00F7", // DIVISION SIGN
"{\\o}": "\u00F8", // LATIN SMALL LETTER O WITH STROKE
"{\\th}": "\u00FE", // LATIN SMALL LETTER THORN
"{\\i}": "\u0131", // LATIN SMALL LETTER DOTLESS I
// "'n" : "\u0149", // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
"{\\NG}": "\u014A", // LATIN CAPITAL LETTER ENG
"{\\ng}": "\u014B", // LATIN SMALL LETTER ENG
"{\\OE}": "\u0152", // LATIN CAPITAL LIGATURE OE
"{\\oe}": "\u0153", // LATIN SMALL LIGATURE OE
"{\\textasciicircum}": "\u02C6", // MODIFIER LETTER CIRCUMFLEX ACCENT
// "\\~{}" : "\u02DC", // SMALL TILDE
"{\\textacutedbl}": "\u02DD", // DOUBLE ACUTE ACCENT
// Greek Letters Courtesy of Spartanroc
"$\\Gamma$": "\u0393", // GREEK Gamma
"$\\Delta$": "\u0394", // GREEK Delta
"$\\Theta$": "\u0398", // GREEK Theta
"$\\Lambda$": "\u039B", // GREEK Lambda
"$\\Xi$": "\u039E", // GREEK Xi
"$\\Pi$": "\u03A0", // GREEK Pi
"$\\Sigma$": "\u03A3", // GREEK Sigma
"$\\Phi$": "\u03A6", // GREEK Phi
"$\\Psi$": "\u03A8", // GREEK Psi
"$\\Omega$": "\u03A9", // GREEK Omega
"$\\alpha$": "\u03B1", // GREEK alpha
"$\\beta$": "\u03B2", // GREEK beta
"$\\gamma$": "\u03B3", // GREEK gamma
"$\\delta$": "\u03B4", // GREEK delta
"$\\varepsilon$": "\u03B5", // GREEK var-epsilon
"$\\zeta$": "\u03B6", // GREEK zeta
"$\\eta$": "\u03B7", // GREEK eta
"$\\theta$": "\u03B8", // GREEK theta
"$\\iota$": "\u03B9", // GREEK iota
"$\\kappa$": "\u03BA", // GREEK kappa
"$\\lambda$": "\u03BB", // GREEK lambda
"$\\mu$": "\u03BC", // GREEK mu
"$\\nu$": "\u03BD", // GREEK nu
"$\\xi$": "\u03BE", // GREEK xi
"$\\pi$": "\u03C0", // GREEK pi
"$\\rho$": "\u03C1", // GREEK rho
"$\\varsigma$": "\u03C2", // GREEK var-sigma
"$\\sigma$": "\u03C3", // GREEK sigma
"$\\tau$": "\u03C4", // GREEK tau
"$\\upsilon$": "\u03C5", // GREEK upsilon
"$\\varphi$": "\u03C6", // GREEK var-phi
"$\\chi$": "\u03C7", // GREEK chi
"$\\psi$": "\u03C8", // GREEK psi
"$\\omega$": "\u03C9", // GREEK omega
"$\\vartheta$": "\u03D1", // GREEK var-theta
"$\\Upsilon$": "\u03D2", // GREEK Upsilon
"$\\phi$": "\u03D5", // GREEK phi
"$\\varpi$": "\u03D6", // GREEK var-pi
"$\\varrho$": "\u03F1", // GREEK var-rho
"$\\epsilon$": "\u03F5", // GREEK epsilon
// Greek letters end
"{\\textendash}": "\u2013", // EN DASH
"{\\textemdash}": "\u2014", // EM DASH
"---": "\u2014", // EM DASH
"--": "\u2013", // EN DASH
"{\\textbardbl}": "\u2016", // DOUBLE VERTICAL LINE
"{\\textunderscore}": "\u2017", // DOUBLE LOW LINE
"{\\textquoteleft}": "\u2018", // LEFT SINGLE QUOTATION MARK
"{\\textquoteright}": "\u2019", // RIGHT SINGLE QUOTATION MARK
"{\\quotesinglbase}": "\u201A", // SINGLE LOW-9 QUOTATION MARK
"{\\textquotedblleft}": "\u201C", // LEFT DOUBLE QUOTATION MARK
"{\\textquotedblright}": "\u201D", // RIGHT DOUBLE QUOTATION MARK
"{\\quotedblbase}": "\u201E", // DOUBLE LOW-9 QUOTATION MARK
// "{\\quotedblbase}" : "\u201F", // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
"{\\textdagger}": "\u2020", // DAGGER
"{\\textdaggerdbl}": "\u2021", // DOUBLE DAGGER
"{\\textbullet}": "\u2022", // BULLET
"{\\textellipsis}": "\u2026", // HORIZONTAL ELLIPSIS
"{\\textperthousand}": "\u2030", // PER MILLE SIGN
"'''": "\u2034", // TRIPLE PRIME
"''": "\u201D", // RIGHT DOUBLE QUOTATION MARK (could be a double prime)
"``": "\u201C", // LEFT DOUBLE QUOTATION MARK (could be a reversed double prime)
"```": "\u2037", // REVERSED TRIPLE PRIME
"{\\guilsinglleft}": "\u2039", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
"{\\guilsinglright}": "\u203A", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
"!!": "\u203C", // DOUBLE EXCLAMATION MARK
"{\\textfractionsolidus}": "\u2044", // FRACTION SLASH
"?!": "\u2048", // QUESTION EXCLAMATION MARK
"!?": "\u2049", // EXCLAMATION QUESTION MARK
"$^{0}$": "\u2070", // SUPERSCRIPT ZERO
"$^{4}$": "\u2074", // SUPERSCRIPT FOUR
"$^{5}$": "\u2075", // SUPERSCRIPT FIVE
"$^{6}$": "\u2076", // SUPERSCRIPT SIX
"$^{7}$": "\u2077", // SUPERSCRIPT SEVEN
"$^{8}$": "\u2078", // SUPERSCRIPT EIGHT
"$^{9}$": "\u2079", // SUPERSCRIPT NINE
"$^{+}$": "\u207A", // SUPERSCRIPT PLUS SIGN
"$^{-}$": "\u207B", // SUPERSCRIPT MINUS
"$^{=}$": "\u207C", // SUPERSCRIPT EQUALS SIGN
"$^{(}$": "\u207D", // SUPERSCRIPT LEFT PARENTHESIS
"$^{)}$": "\u207E", // SUPERSCRIPT RIGHT PARENTHESIS
"$^{n}$": "\u207F", // SUPERSCRIPT LATIN SMALL LETTER N
"$_{0}$": "\u2080", // SUBSCRIPT ZERO
"$_{1}$": "\u2081", // SUBSCRIPT ONE
"$_{2}$": "\u2082", // SUBSCRIPT TWO
"$_{3}$": "\u2083", // SUBSCRIPT THREE
"$_{4}$": "\u2084", // SUBSCRIPT FOUR
"$_{5}$": "\u2085", // SUBSCRIPT FIVE
"$_{6}$": "\u2086", // SUBSCRIPT SIX
"$_{7}$": "\u2087", // SUBSCRIPT SEVEN
"$_{8}$": "\u2088", // SUBSCRIPT EIGHT
"$_{9}$": "\u2089", // SUBSCRIPT NINE
"$_{+}$": "\u208A", // SUBSCRIPT PLUS SIGN
"$_{-}$": "\u208B", // SUBSCRIPT MINUS
"$_{=}$": "\u208C", // SUBSCRIPT EQUALS SIGN
"$_{(}$": "\u208D", // SUBSCRIPT LEFT PARENTHESIS
"$_{)}$": "\u208E", // SUBSCRIPT RIGHT PARENTHESIS
"{\\texteuro}": "\u20AC", // EURO SIGN
// "a/c" : "\u2100", // ACCOUNT OF
// "a/s" : "\u2101", // ADDRESSED TO THE SUBJECT
"{\\textcelsius}": "\u2103", // DEGREE CELSIUS
// "c/o" : "\u2105", // CARE OF
// "c/u" : "\u2106", // CADA UNA
"{\\textnumero}": "\u2116", // NUMERO SIGN
"{\\textcircledP}": "\u2117", // SOUND RECORDING COPYRIGHT
"{\\textservicemark}": "\u2120", // SERVICE MARK
"{TEL}": "\u2121", // TELEPHONE SIGN
"{\\texttrademark}": "\u2122", // TRADE MARK SIGN
"{\\textohm}": "\u2126", // OHM SIGN
"{\\textestimated}": "\u212E", // ESTIMATED SYMBOL
/* " 1/3" : "\u2153", // VULGAR FRACTION ONE THIRD
" 2/3" : "\u2154", // VULGAR FRACTION TWO THIRDS
" 1/5" : "\u2155", // VULGAR FRACTION ONE FIFTH
" 2/5" : "\u2156", // VULGAR FRACTION TWO FIFTHS
" 3/5" : "\u2157", // VULGAR FRACTION THREE FIFTHS
" 4/5" : "\u2158", // VULGAR FRACTION FOUR FIFTHS
" 1/6" : "\u2159", // VULGAR FRACTION ONE SIXTH
" 5/6" : "\u215A", // VULGAR FRACTION FIVE SIXTHS
" 1/8" : "\u215B", // VULGAR FRACTION ONE EIGHTH
" 3/8" : "\u215C", // VULGAR FRACTION THREE EIGHTHS
" 5/8" : "\u215D", // VULGAR FRACTION FIVE EIGHTHS
" 7/8" : "\u215E", // VULGAR FRACTION SEVEN EIGHTHS
" 1/" : "\u215F", // FRACTION NUMERATOR ONE */
"{\\textleftarrow}": "\u2190", // LEFTWARDS ARROW
"{\\textuparrow}": "\u2191", // UPWARDS ARROW
"{\\textrightarrow}": "\u2192", // RIGHTWARDS ARROW
"{\\textdownarrow}": "\u2193", // DOWNWARDS ARROW
/* "<->" : "\u2194", // LEFT RIGHT ARROW
"<=" : "\u21D0", // LEFTWARDS DOUBLE ARROW
"=>" : "\u21D2", // RIGHTWARDS DOUBLE ARROW
"<=>" : "\u21D4", // LEFT RIGHT DOUBLE ARROW */
"$\\infty$": "\u221E", // INFINITY
/* "||" : "\u2225", // PARALLEL TO
"/=" : "\u2260", // NOT EQUAL TO
"<=" : "\u2264", // LESS-THAN OR EQUAL TO
">=" : "\u2265", // GREATER-THAN OR EQUAL TO
"<<" : "\u226A", // MUCH LESS-THAN
">>" : "\u226B", // MUCH GREATER-THAN
"(+)" : "\u2295", // CIRCLED PLUS
"(-)" : "\u2296", // CIRCLED MINUS
"(x)" : "\u2297", // CIRCLED TIMES
"(/)" : "\u2298", // CIRCLED DIVISION SLASH
"|-" : "\u22A2", // RIGHT TACK
"-|" : "\u22A3", // LEFT TACK
"|-" : "\u22A6", // ASSERTION
"|=" : "\u22A7", // MODELS
"|=" : "\u22A8", // TRUE
"||-" : "\u22A9", // FORCES */
"$\\#$": "\u22D5", // EQUAL AND PARALLEL TO
// "<<<" : "\u22D8", // VERY MUCH LESS-THAN
// ">>>" : "\u22D9", // VERY MUCH GREATER-THAN
"{\\textlangle}": "\u2329", // LEFT-POINTING ANGLE BRACKET
"{\\textrangle}": "\u232A", // RIGHT-POINTING ANGLE BRACKET
"{\\textvisiblespace}": "\u2423", // OPEN BOX
// "///" : "\u2425", // SYMBOL FOR DELETE FORM TWO
"{\\textopenbullet}": "\u25E6", // WHITE BULLET
// ":-(" : "\u2639", // WHITE FROWNING FACE
// ":-)" : "\u263A", // WHITE SMILING FACE
// "(-: " : "\u263B", // BLACK SMILING FACE
// "$\\#$" : "\u266F", // MUSIC SHARP SIGN
"$\\%<$": "\u2701", // UPPER BLADE SCISSORS
/* "$\\%<$" : "\u2702", // BLACK SCISSORS
"$\\%<$" : "\u2703", // LOWER BLADE SCISSORS
"$\\%<$" : "\u2704", // WHITE SCISSORS */
/* Derived accented characters */
"{\\`A}": "\u00C0", // LATIN CAPITAL LETTER A WITH GRAVE
"{\\'A}": "\u00C1", // LATIN CAPITAL LETTER A WITH ACUTE
"{\\^A}": "\u00C2", // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
"{\\~A}": "\u00C3", // LATIN CAPITAL LETTER A WITH TILDE
"{\\\"A}": "\u00C4", // LATIN CAPITAL LETTER A WITH DIAERESIS
"{\\r A}": "\u00C5", // LATIN CAPITAL LETTER A WITH RING ABOVE
"{\\AA}": "\u00C5", // LATIN CAPITAL LETTER A WITH RING ABOVE
"{\\c C}": "\u00C7", // LATIN CAPITAL LETTER C WITH CEDILLA
"{\\`E}": "\u00C8", // LATIN CAPITAL LETTER E WITH GRAVE
"{\\'E}": "\u00C9", // LATIN CAPITAL LETTER E WITH ACUTE
"{\\^E}": "\u00CA", // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
"{\\\"E}": "\u00CB", // LATIN CAPITAL LETTER E WITH DIAERESIS
"{\\`I}": "\u00CC", // LATIN CAPITAL LETTER I WITH GRAVE
"{\\'I}": "\u00CD", // LATIN CAPITAL LETTER I WITH ACUTE
"{\\^I}": "\u00CE", // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
"{\\\"I}": "\u00CF", // LATIN CAPITAL LETTER I WITH DIAERESIS
"{\\~N}": "\u00D1", // LATIN CAPITAL LETTER N WITH TILDE
"{\\`O}": "\u00D2", // LATIN CAPITAL LETTER O WITH GRAVE
"{\\'O}": "\u00D3", // LATIN CAPITAL LETTER O WITH ACUTE
"{\\^O}": "\u00D4", // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
"{\\~O}": "\u00D5", // LATIN CAPITAL LETTER O WITH TILDE
"{\\\"O}": "\u00D6", // LATIN CAPITAL LETTER O WITH DIAERESIS
"{\\`U}": "\u00D9", // LATIN CAPITAL LETTER U WITH GRAVE
"{\\'U}": "\u00DA", // LATIN CAPITAL LETTER U WITH ACUTE
"{\\^U}": "\u00DB", // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
"{\\\"U}": "\u00DC", // LATIN CAPITAL LETTER U WITH DIAERESIS
"{\\'Y}": "\u00DD", // LATIN CAPITAL LETTER Y WITH ACUTE
"{\\`a}": "\u00E0", // LATIN SMALL LETTER A WITH GRAVE
"{\\'a}": "\u00E1", // LATIN SMALL LETTER A WITH ACUTE
"{\\^a}": "\u00E2", // LATIN SMALL LETTER A WITH CIRCUMFLEX
"{\\~a}": "\u00E3", // LATIN SMALL LETTER A WITH TILDE
"{\\\"a}": "\u00E4", // LATIN SMALL LETTER A WITH DIAERESIS
"{\\r a}": "\u00E5", // LATIN SMALL LETTER A WITH RING ABOVE
"{\\aa}": "\u00E5", // LATIN SMALL LETTER A WITH RING ABOVE
"{\\c c}": "\u00E7", // LATIN SMALL LETTER C WITH CEDILLA
"{\\`e}": "\u00E8", // LATIN SMALL LETTER E WITH GRAVE
"{\\'e}": "\u00E9", // LATIN SMALL LETTER E WITH ACUTE
"{\\^e}": "\u00EA", // LATIN SMALL LETTER E WITH CIRCUMFLEX
"{\\\"e}": "\u00EB", // LATIN SMALL LETTER E WITH DIAERESIS
"{\\`i}": "\u00EC", // LATIN SMALL LETTER I WITH GRAVE
"{\\'i}": "\u00ED", // LATIN SMALL LETTER I WITH ACUTE
"{\\^i}": "\u00EE", // LATIN SMALL LETTER I WITH CIRCUMFLEX
"{\\\"i}": "\u00EF", // LATIN SMALL LETTER I WITH DIAERESIS
"{\\~n}": "\u00F1", // LATIN SMALL LETTER N WITH TILDE
"{\\`o}": "\u00F2", // LATIN SMALL LETTER O WITH GRAVE
"{\\'o}": "\u00F3", // LATIN SMALL LETTER O WITH ACUTE
"{\\^o}": "\u00F4", // LATIN SMALL LETTER O WITH CIRCUMFLEX
"{\\~o}": "\u00F5", // LATIN SMALL LETTER O WITH TILDE
"{\\\"o}": "\u00F6", // LATIN SMALL LETTER O WITH DIAERESIS
"{\\`u}": "\u00F9", // LATIN SMALL LETTER U WITH GRAVE
"{\\'u}": "\u00FA", // LATIN SMALL LETTER U WITH ACUTE
"{\\^u}": "\u00FB", // LATIN SMALL LETTER U WITH CIRCUMFLEX
"{\\\"u}": "\u00FC", // LATIN SMALL LETTER U WITH DIAERESIS
"{\\'y}": "\u00FD", // LATIN SMALL LETTER Y WITH ACUTE
"{\\\"y}": "\u00FF", // LATIN SMALL LETTER Y WITH DIAERESIS
"{\\=A}": "\u0100", // LATIN CAPITAL LETTER A WITH MACRON
"{\\=a}": "\u0101", // LATIN SMALL LETTER A WITH MACRON
"{\\u A}": "\u0102", // LATIN CAPITAL LETTER A WITH BREVE
"{\\u a}": "\u0103", // LATIN SMALL LETTER A WITH BREVE
"{\\k A}": "\u0104", // LATIN CAPITAL LETTER A WITH OGONEK
"{\\k a}": "\u0105", // LATIN SMALL LETTER A WITH OGONEK
"{\\'C}": "\u0106", // LATIN CAPITAL LETTER C WITH ACUTE
"{\\'c}": "\u0107", // LATIN SMALL LETTER C WITH ACUTE
"{\\^C}": "\u0108", // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
"{\\^c}": "\u0109", // LATIN SMALL LETTER C WITH CIRCUMFLEX
"{\\.C}": "\u010A", // LATIN CAPITAL LETTER C WITH DOT ABOVE
"{\\.c}": "\u010B", // LATIN SMALL LETTER C WITH DOT ABOVE
"{\\v C}": "\u010C", // LATIN CAPITAL LETTER C WITH CARON
"{\\v c}": "\u010D", // LATIN SMALL LETTER C WITH CARON
"{\\v D}": "\u010E", // LATIN CAPITAL LETTER D WITH CARON
"{\\v d}": "\u010F", // LATIN SMALL LETTER D WITH CARON
"{\\=E}": "\u0112", // LATIN CAPITAL LETTER E WITH MACRON
"{\\=e}": "\u0113", // LATIN SMALL LETTER E WITH MACRON
"{\\u E}": "\u0114", // LATIN CAPITAL LETTER E WITH BREVE
"{\\u e}": "\u0115", // LATIN SMALL LETTER E WITH BREVE
"{\\.E}": "\u0116", // LATIN CAPITAL LETTER E WITH DOT ABOVE
"{\\.e}": "\u0117", // LATIN SMALL LETTER E WITH DOT ABOVE
"{\\k E}": "\u0118", // LATIN CAPITAL LETTER E WITH OGONEK
"{\\k e}": "\u0119", // LATIN SMALL LETTER E WITH OGONEK
"{\\v E}": "\u011A", // LATIN CAPITAL LETTER E WITH CARON
"{\\v e}": "\u011B", // LATIN SMALL LETTER E WITH CARON
"{\\^G}": "\u011C", // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
"{\\^g}": "\u011D", // LATIN SMALL LETTER G WITH CIRCUMFLEX
"{\\u G}": "\u011E", // LATIN CAPITAL LETTER G WITH BREVE
"{\\u g}": "\u011F", // LATIN SMALL LETTER G WITH BREVE
"{\\.G}": "\u0120", // LATIN CAPITAL LETTER G WITH DOT ABOVE
"{\\.g}": "\u0121", // LATIN SMALL LETTER G WITH DOT ABOVE
"{\\c G}": "\u0122", // LATIN CAPITAL LETTER G WITH CEDILLA
"{\\c g}": "\u0123", // LATIN SMALL LETTER G WITH CEDILLA
"{\\^H}": "\u0124", // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
"{\\^h}": "\u0125", // LATIN SMALL LETTER H WITH CIRCUMFLEX
"{\\~I}": "\u0128", // LATIN CAPITAL LETTER I WITH TILDE
"{\\~i}": "\u0129", // LATIN SMALL LETTER I WITH TILDE
"{\\=I}": "\u012A", // LATIN CAPITAL LETTER I WITH MACRON
"{\\=i}": "\u012B", // LATIN SMALL LETTER I WITH MACRON
"{\\=\\i}": "\u012B", // LATIN SMALL LETTER I WITH MACRON
"{\\u I}": "\u012C", // LATIN CAPITAL LETTER I WITH BREVE
"{\\u i}": "\u012D", // LATIN SMALL LETTER I WITH BREVE
"{\\k I}": "\u012E", // LATIN CAPITAL LETTER I WITH OGONEK
"{\\k i}": "\u012F", // LATIN SMALL LETTER I WITH OGONEK
"{\\.I}": "\u0130", // LATIN CAPITAL LETTER I WITH DOT ABOVE
"{\\^J}": "\u0134", // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
"{\\^j}": "\u0135", // LATIN SMALL LETTER J WITH CIRCUMFLEX
"{\\c K}": "\u0136", // LATIN CAPITAL LETTER K WITH CEDILLA
"{\\c k}": "\u0137", // LATIN SMALL LETTER K WITH CEDILLA
"{\\'L}": "\u0139", // LATIN CAPITAL LETTER L WITH ACUTE
"{\\'l}": "\u013A", // LATIN SMALL LETTER L WITH ACUTE
"{\\c L}": "\u013B", // LATIN CAPITAL LETTER L WITH CEDILLA
"{\\c l}": "\u013C", // LATIN SMALL LETTER L WITH CEDILLA
"{\\v L}": "\u013D", // LATIN CAPITAL LETTER L WITH CARON
"{\\v l}": "\u013E", // LATIN SMALL LETTER L WITH CARON
"{\\L }": "\u0141", // LATIN CAPITAL LETTER L WITH STROKE
"{\\l }": "\u0142", // LATIN SMALL LETTER L WITH STROKE
"{\\'N}": "\u0143", // LATIN CAPITAL LETTER N WITH ACUTE
"{\\'n}": "\u0144", // LATIN SMALL LETTER N WITH ACUTE
"{\\c N}": "\u0145", // LATIN CAPITAL LETTER N WITH CEDILLA
"{\\c n}": "\u0146", // LATIN SMALL LETTER N WITH CEDILLA
"{\\v N}": "\u0147", // LATIN CAPITAL LETTER N WITH CARON
"{\\v n}": "\u0148", // LATIN SMALL LETTER N WITH CARON
"{\\=O}": "\u014C", // LATIN CAPITAL LETTER O WITH MACRON
"{\\=o}": "\u014D", // LATIN SMALL LETTER O WITH MACRON
"{\\u O}": "\u014E", // LATIN CAPITAL LETTER O WITH BREVE
"{\\u o}": "\u014F", // LATIN SMALL LETTER O WITH BREVE
"{\\H O}": "\u0150", // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
"{\\H o}": "\u0151", // LATIN SMALL LETTER O WITH DOUBLE ACUTE
"{\\'R}": "\u0154", // LATIN CAPITAL LETTER R WITH ACUTE
"{\\'r}": "\u0155", // LATIN SMALL LETTER R WITH ACUTE
"{\\c R}": "\u0156", // LATIN CAPITAL LETTER R WITH CEDILLA
"{\\c r}": "\u0157", // LATIN SMALL LETTER R WITH CEDILLA
"{\\v R}": "\u0158", // LATIN CAPITAL LETTER R WITH CARON
"{\\v r}": "\u0159", // LATIN SMALL LETTER R WITH CARON
"{\\'S}": "\u015A", // LATIN CAPITAL LETTER S WITH ACUTE
"{\\'s}": "\u015B", // LATIN SMALL LETTER S WITH ACUTE
"{\\^S}": "\u015C", // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
"{\\^s}": "\u015D", // LATIN SMALL LETTER S WITH CIRCUMFLEX
"{\\c S}": "\u015E", // LATIN CAPITAL LETTER S WITH CEDILLA
"{\\c s}": "\u015F", // LATIN SMALL LETTER S WITH CEDILLA
"{\\v S}": "\u0160", // LATIN CAPITAL LETTER S WITH CARON
"{\\v s}": "\u0161", // LATIN SMALL LETTER S WITH CARON
"{\\c T}": "\u0162", // LATIN CAPITAL LETTER T WITH CEDILLA
"{\\c t}": "\u0163", // LATIN SMALL LETTER T WITH CEDILLA
"{\\v T}": "\u0164", // LATIN CAPITAL LETTER T WITH CARON
"{\\v t}": "\u0165", // LATIN SMALL LETTER T WITH CARON
"{\\~U}": "\u0168", // LATIN CAPITAL LETTER U WITH TILDE
"{\\~u}": "\u0169", // LATIN SMALL LETTER U WITH TILDE
"{\\=U}": "\u016A", // LATIN CAPITAL LETTER U WITH MACRON
"{\\=u}": "\u016B", // LATIN SMALL LETTER U WITH MACRON
"{\\u U}": "\u016C", // LATIN CAPITAL LETTER U WITH BREVE
"{\\u u}": "\u016D", // LATIN SMALL LETTER U WITH BREVE
"{\\r U}": "\u016E", // LATIN CAPITAL LETTER U WITH RING ABOVE
"{\\r u}": "\u016F", // LATIN SMALL LETTER U WITH RING ABOVE
"{\\H U}": "\u0170", // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
"{\\H u}": "\u0171", // LATIN SMALL LETTER U WITH DOUBLE ACUTE
"{\\k U}": "\u0172", // LATIN CAPITAL LETTER U WITH OGONEK
"{\\k u}": "\u0173", // LATIN SMALL LETTER U WITH OGONEK
"{\\^W}": "\u0174", // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
"{\\^w}": "\u0175", // LATIN SMALL LETTER W WITH CIRCUMFLEX
"{\\^Y}": "\u0176", // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
"{\\^y}": "\u0177", // LATIN SMALL LETTER Y WITH CIRCUMFLEX
"{\\\"Y}": "\u0178", // LATIN CAPITAL LETTER Y WITH DIAERESIS
"{\\'Z}": "\u0179", // LATIN CAPITAL LETTER Z WITH ACUTE
"{\\'z}": "\u017A", // LATIN SMALL LETTER Z WITH ACUTE
"{\\.Z}": "\u017B", // LATIN CAPITAL LETTER Z WITH DOT ABOVE
"{\\.z}": "\u017C", // LATIN SMALL LETTER Z WITH DOT ABOVE
"{\\v Z}": "\u017D", // LATIN CAPITAL LETTER Z WITH CARON
"{\\v z}": "\u017E", // LATIN SMALL LETTER Z WITH CARON
"{\\v A}": "\u01CD", // LATIN CAPITAL LETTER A WITH CARON
"{\\v a}": "\u01CE", // LATIN SMALL LETTER A WITH CARON
"{\\v I}": "\u01CF", // LATIN CAPITAL LETTER I WITH CARON
"{\\v i}": "\u01D0", // LATIN SMALL LETTER I WITH CARON
"{\\v O}": "\u01D1", // LATIN CAPITAL LETTER O WITH CARON
"{\\v o}": "\u01D2", // LATIN SMALL LETTER O WITH CARON
"{\\v U}": "\u01D3", // LATIN CAPITAL LETTER U WITH CARON
"{\\v u}": "\u01D4", // LATIN SMALL LETTER U WITH CARON
"{\\v G}": "\u01E6", // LATIN CAPITAL LETTER G WITH CARON
"{\\v g}": "\u01E7", // LATIN SMALL LETTER G WITH CARON
"{\\v K}": "\u01E8", // LATIN CAPITAL LETTER K WITH CARON
"{\\v k}": "\u01E9", // LATIN SMALL LETTER K WITH CARON
"{\\k O}": "\u01EA", // LATIN CAPITAL LETTER O WITH OGONEK
"{\\k o}": "\u01EB", // LATIN SMALL LETTER O WITH OGONEK
"{\\v j}": "\u01F0", // LATIN SMALL LETTER J WITH CARON
"{\\'G}": "\u01F4", // LATIN CAPITAL LETTER G WITH ACUTE
"{\\'g}": "\u01F5", // LATIN SMALL LETTER G WITH ACUTE
"{\\.B}": "\u1E02", // LATIN CAPITAL LETTER B WITH DOT ABOVE
"{\\.b}": "\u1E03", // LATIN SMALL LETTER B WITH DOT ABOVE
"{\\d B}": "\u1E04", // LATIN CAPITAL LETTER B WITH DOT BELOW
"{\\d b}": "\u1E05", // LATIN SMALL LETTER B WITH DOT BELOW
"{\\b B}": "\u1E06", // LATIN CAPITAL LETTER B WITH LINE BELOW
"{\\b b}": "\u1E07", // LATIN SMALL LETTER B WITH LINE BELOW
"{\\.D}": "\u1E0A", // LATIN CAPITAL LETTER D WITH DOT ABOVE
"{\\.d}": "\u1E0B", // LATIN SMALL LETTER D WITH DOT ABOVE
"{\\d D}": "\u1E0C", // LATIN CAPITAL LETTER D WITH DOT BELOW
"{\\d d}": "\u1E0D", // LATIN SMALL LETTER D WITH DOT BELOW
"{\\b D}": "\u1E0E", // LATIN CAPITAL LETTER D WITH LINE BELOW
"{\\b d}": "\u1E0F", // LATIN SMALL LETTER D WITH LINE BELOW
"{\\c D}": "\u1E10", // LATIN CAPITAL LETTER D WITH CEDILLA
"{\\c d}": "\u1E11", // LATIN SMALL LETTER D WITH CEDILLA
"{\\.F}": "\u1E1E", // LATIN CAPITAL LETTER F WITH DOT ABOVE
"{\\.f}": "\u1E1F", // LATIN SMALL LETTER F WITH DOT ABOVE
"{\\=G}": "\u1E20", // LATIN CAPITAL LETTER G WITH MACRON
"{\\=g}": "\u1E21", // LATIN SMALL LETTER G WITH MACRON
"{\\.H}": "\u1E22", // LATIN CAPITAL LETTER H WITH DOT ABOVE
"{\\.h}": "\u1E23", // LATIN SMALL LETTER H WITH DOT ABOVE
"{\\d H}": "\u1E24", // LATIN CAPITAL LETTER H WITH DOT BELOW
"{\\d h}": "\u1E25", // LATIN SMALL LETTER H WITH DOT BELOW
"{\\\"H}": "\u1E26", // LATIN CAPITAL LETTER H WITH DIAERESIS
"{\\\"h}": "\u1E27", // LATIN SMALL LETTER H WITH DIAERESIS
"{\\c H}": "\u1E28", // LATIN CAPITAL LETTER H WITH CEDILLA
"{\\c h}": "\u1E29", // LATIN SMALL LETTER H WITH CEDILLA
"{\\'K}": "\u1E30", // LATIN CAPITAL LETTER K WITH ACUTE
"{\\'k}": "\u1E31", // LATIN SMALL LETTER K WITH ACUTE
"{\\d K}": "\u1E32", // LATIN CAPITAL LETTER K WITH DOT BELOW
"{\\d k}": "\u1E33", // LATIN SMALL LETTER K WITH DOT BELOW
"{\\b K}": "\u1E34", // LATIN CAPITAL LETTER K WITH LINE BELOW
"{\\b k}": "\u1E35", // LATIN SMALL LETTER K WITH LINE BELOW
"{\\d L}": "\u1E36", // LATIN CAPITAL LETTER L WITH DOT BELOW
"{\\d l}": "\u1E37", // LATIN SMALL LETTER L WITH DOT BELOW
"{\\b L}": "\u1E3A", // LATIN CAPITAL LETTER L WITH LINE BELOW
"{\\b l}": "\u1E3B", // LATIN SMALL LETTER L WITH LINE BELOW
"{\\'M}": "\u1E3E", // LATIN CAPITAL LETTER M WITH ACUTE
"{\\'m}": "\u1E3F", // LATIN SMALL LETTER M WITH ACUTE
"{\\.M}": "\u1E40", // LATIN CAPITAL LETTER M WITH DOT ABOVE
"{\\.m}": "\u1E41", // LATIN SMALL LETTER M WITH DOT ABOVE
"{\\d M}": "\u1E42", // LATIN CAPITAL LETTER M WITH DOT BELOW
"{\\d m}": "\u1E43", // LATIN SMALL LETTER M WITH DOT BELOW
"{\\.N}": "\u1E44", // LATIN CAPITAL LETTER N WITH DOT ABOVE
"{\\.n}": "\u1E45", // LATIN SMALL LETTER N WITH DOT ABOVE
"{\\d N}": "\u1E46", // LATIN CAPITAL LETTER N WITH DOT BELOW
"{\\d n}": "\u1E47", // LATIN SMALL LETTER N WITH DOT BELOW
"{\\b N}": "\u1E48", // LATIN CAPITAL LETTER N WITH LINE BELOW
"{\\b n}": "\u1E49", // LATIN SMALL LETTER N WITH LINE BELOW
"{\\'P}": "\u1E54", // LATIN CAPITAL LETTER P WITH ACUTE
"{\\'p}": "\u1E55", // LATIN SMALL LETTER P WITH ACUTE
"{\\.P}": "\u1E56", // LATIN CAPITAL LETTER P WITH DOT ABOVE
"{\\.p}": "\u1E57", // LATIN SMALL LETTER P WITH DOT ABOVE
"{\\.R}": "\u1E58", // LATIN CAPITAL LETTER R WITH DOT ABOVE
"{\\.r}": "\u1E59", // LATIN SMALL LETTER R WITH DOT ABOVE
"{\\d R}": "\u1E5A", // LATIN CAPITAL LETTER R WITH DOT BELOW
"{\\d r}": "\u1E5B", // LATIN SMALL LETTER R WITH DOT BELOW
"{\\b R}": "\u1E5E", // LATIN CAPITAL LETTER R WITH LINE BELOW
"{\\b r}": "\u1E5F", // LATIN SMALL LETTER R WITH LINE BELOW
"{\\.S}": "\u1E60", // LATIN CAPITAL LETTER S WITH DOT ABOVE
"{\\.s}": "\u1E61", // LATIN SMALL LETTER S WITH DOT ABOVE
"{\\d S}": "\u1E62", // LATIN CAPITAL LETTER S WITH DOT BELOW
"{\\d s}": "\u1E63", // LATIN SMALL LETTER S WITH DOT BELOW
"{\\.T}": "\u1E6A", // LATIN CAPITAL LETTER T WITH DOT ABOVE
"{\\.t}": "\u1E6B", // LATIN SMALL LETTER T WITH DOT ABOVE
"{\\d T}": "\u1E6C", // LATIN CAPITAL LETTER T WITH DOT BELOW
"{\\d t}": "\u1E6D", // LATIN SMALL LETTER T WITH DOT BELOW
"{\\b T}": "\u1E6E", // LATIN CAPITAL LETTER T WITH LINE BELOW
"{\\b t}": "\u1E6F", // LATIN SMALL LETTER T WITH LINE BELOW
"{\\~V}": "\u1E7C", // LATIN CAPITAL LETTER V WITH TILDE
"{\\~v}": "\u1E7D", // LATIN SMALL LETTER V WITH TILDE
"{\\d V}": "\u1E7E", // LATIN CAPITAL LETTER V WITH DOT BELOW
"{\\d v}": "\u1E7F", // LATIN SMALL LETTER V WITH DOT BELOW
"{\\`W}": "\u1E80", // LATIN CAPITAL LETTER W WITH GRAVE
"{\\`w}": "\u1E81", // LATIN SMALL LETTER W WITH GRAVE
"{\\'W}": "\u1E82", // LATIN CAPITAL LETTER W WITH ACUTE
"{\\'w}": "\u1E83", // LATIN SMALL LETTER W WITH ACUTE
"{\\\"W}": "\u1E84", // LATIN CAPITAL LETTER W WITH DIAERESIS
"{\\\"w}": "\u1E85", // LATIN SMALL LETTER W WITH DIAERESIS
"{\\.W}": "\u1E86", // LATIN CAPITAL LETTER W WITH DOT ABOVE
"{\\.w}": "\u1E87", // LATIN SMALL LETTER W WITH DOT ABOVE
"{\\d W}": "\u1E88", // LATIN CAPITAL LETTER W WITH DOT BELOW
"{\\d w}": "\u1E89", // LATIN SMALL LETTER W WITH DOT BELOW
"{\\.X}": "\u1E8A", // LATIN CAPITAL LETTER X WITH DOT ABOVE
"{\\.x}": "\u1E8B", // LATIN SMALL LETTER X WITH DOT ABOVE
"{\\\"X}": "\u1E8C", // LATIN CAPITAL LETTER X WITH DIAERESIS
"{\\\"x}": "\u1E8D", // LATIN SMALL LETTER X WITH DIAERESIS
"{\\.Y}": "\u1E8E", // LATIN CAPITAL LETTER Y WITH DOT ABOVE
"{\\.y}": "\u1E8F", // LATIN SMALL LETTER Y WITH DOT ABOVE
"{\\^Z}": "\u1E90", // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
"{\\^z}": "\u1E91", // LATIN SMALL LETTER Z WITH CIRCUMFLEX
"{\\d Z}": "\u1E92", // LATIN CAPITAL LETTER Z WITH DOT BELOW
"{\\d z}": "\u1E93", // LATIN SMALL LETTER Z WITH DOT BELOW
"{\\b Z}": "\u1E94", // LATIN CAPITAL LETTER Z WITH LINE BELOW
"{\\b z}": "\u1E95", // LATIN SMALL LETTER Z WITH LINE BELOW
"{\\b h}": "\u1E96", // LATIN SMALL LETTER H WITH LINE BELOW
"{\\\"t}": "\u1E97", // LATIN SMALL LETTER T WITH DIAERESIS
"{\\r w}": "\u1E98", // LATIN SMALL LETTER W WITH RING ABOVE
"{\\r y}": "\u1e99", // LATIN SMALL LETTER Y WITH RING ABOVE
"{\\d A}": "\u1EA0", // LATIN CAPITAL LETTER A WITH DOT BELOW
"{\\d a}": "\u1EA1", // LATIN SMALL LETTER A WITH DOT BELOW
"{\\d E}": "\u1EB8", // LATIN CAPITAL LETTER E WITH DOT BELOW
"{\\d e}": "\u1EB9", // LATIN SMALL LETTER E WITH DOT BELOW
"{\\~E}": "\u1EBC", // LATIN CAPITAL LETTER E WITH TILDE
"{\\~e}": "\u1EBD", // LATIN SMALL LETTER E WITH TILDE
"{\\d I}": "\u1ECA", // LATIN CAPITAL LETTER I WITH DOT BELOW
"{\\d i}": "\u1ECB", // LATIN SMALL LETTER I WITH DOT BELOW
"{\\d O}": "\u1ECC", // LATIN CAPITAL LETTER O WITH DOT BELOW
"{\\d o}": "\u1ECD", // LATIN SMALL LETTER O WITH DOT BELOW
"{\\d U}": "\u1EE4", // LATIN CAPITAL LETTER U WITH DOT BELOW
"{\\d u}": "\u1EE5", // LATIN SMALL LETTER U WITH DOT BELOW
"{\\`Y}": "\u1EF2", // LATIN CAPITAL LETTER Y WITH GRAVE
"{\\`y}": "\u1EF3", // LATIN SMALL LETTER Y WITH GRAVE
"{\\d Y}": "\u1EF4", // LATIN CAPITAL LETTER Y WITH DOT BELOW
"{\\d y}": "\u1EF5", // LATIN SMALL LETTER Y WITH DOT BELOW
"{\\~Y}": "\u1EF8", // LATIN CAPITAL LETTER Y WITH TILDE
"{\\~y}": "\u1EF9", // LATIN SMALL LETTER Y WITH TILDE
"{\\~}": "\u223C", // TILDE OPERATOR
"~": "\u00A0" // NO-BREAK SPACE
};/** BEGIN TEST CASES **/
var testCases = [
{
"type": "import",
"input": "@article{Adams2001,\nauthor = {Adams, Nancy K and DeSilva, Shanaka L and Self, Steven and Salas, Guido and Schubring, Steven and Permenter, Jason L and Arbesman, Kendra},\nfile = {:Users/heatherwright/Documents/Scientific Papers/Adams\\_Huaynaputina.pdf:pdf;::},\njournal = {Bulletin of Volcanology},\nkeywords = {Vulcanian eruptions,breadcrust,plinian},\npages = {493--518},\ntitle = {{The physical volcanology of the 1600 eruption of Huaynaputina, southern Peru}},\nvolume = {62},\nyear = {2001}\n}",
"items": [
{
"itemType": "journalArticle",
"title": "The physical volcanology of the 1600 eruption of Huaynaputina, southern Peru",
"creators": [
{
"firstName": "Nancy K",
"lastName": "Adams",
"creatorType": "author"
},
{
"firstName": "Shanaka L",
"lastName": "DeSilva",
"creatorType": "author"
},
{
"firstName": "Steven",
"lastName": "Self",
"creatorType": "author"
},
{
"firstName": "Guido",
"lastName": "Salas",
"creatorType": "author"
},
{
"firstName": "Steven",
"lastName": "Schubring",
"creatorType": "author"
},
{
"firstName": "Jason L",
"lastName": "Permenter",
"creatorType": "author"
},
{
"firstName": "Kendra",
"lastName": "Arbesman",
"creatorType": "author"
}
],
"date": "2001",
"itemID": "Adams2001",
"pages": "493–518",
"publicationTitle": "Bulletin of Volcanology",
"volume": "62",
"attachments": [
{
"path": "Users/heatherwright/Documents/Scientific Papers/Adams_Huaynaputina.pdf",
"mimeType": "application/pdf",
"title": "Attachment"
}
],
"tags": [
"Vulcanian eruptions",
"breadcrust",
"plinian"
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@Book{abramowitz+stegun,\n author = \"Milton {Abramowitz} and Irene A. {Stegun}\",\n title = \"Handbook of Mathematical Functions with\n Formulas, Graphs, and Mathematical Tables\",\n publisher = \"Dover\",\n year = 1964,\n address = \"New York\",\n edition = \"ninth Dover printing, tenth GPO printing\"\n}\n\n@Book{Torre2008,\n author = \"Joe Torre and Tom Verducci\",\n publisher = \"Doubleday\",\n title = \"The Yankee Years\",\n year = 2008,\n isbn = \"0385527403\"\n}\n",
"items": [
{
"itemType": "book",
"title": "Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables",
"creators": [
{
"firstName": "Milton",
"lastName": "Abramowitz",
"creatorType": "author"
},
{
"firstName": "Irene A.",
"lastName": "Stegun",
"creatorType": "author"
}
],
"date": "1964",
"edition": "ninth Dover printing, tenth GPO printing",
"itemID": "abramowitz+stegun",
"place": "New York",
"publisher": "Dover",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "book",
"title": "The Yankee Years",
"creators": [
{
"firstName": "Joe",
"lastName": "Torre",
"creatorType": "author"
},
{
"firstName": "Tom",
"lastName": "Verducci",
"creatorType": "author"
}
],
"date": "2008",
"ISBN": "0385527403",
"itemID": "Torre2008",
"publisher": "Doubleday",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@INPROCEEDINGS {author:06,\n title = {Some publication title},\n author = {First Author and Second Author},\n crossref = {conference:06},\n pages = {330—331},\n}\n@PROCEEDINGS {conference:06,\n editor = {First Editor and Second Editor},\n title = {Proceedings of the Xth Conference on XYZ},\n booktitle = {Proceedings of the Xth Conference on XYZ},\n year = {2006},\n month = oct,\n}",
"items": [
{
"itemType": "conferencePaper",
"title": "Some publication title",
"creators": [
{
"firstName": "First",
"lastName": "Author",
"creatorType": "author"
},
{
"firstName": "Second",
"lastName": "Author",
"creatorType": "author"
}
],
"itemID": "author:06",
"pages": "330—331",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "book",
"title": "Proceedings of the Xth Conference on XYZ",
"creators": [
{
"firstName": "First",
"lastName": "Editor",
"creatorType": "editor"
},
{
"firstName": "Second",
"lastName": "Editor",
"creatorType": "editor"
}
],
"date": "October 2006",
"itemID": "conference:06",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@Book{hicks2001,\n author = \"von Hicks, III, Michael\",\n title = \"Design of a Carbon Fiber Composite Grid Structure for the GLAST\n Spacecraft Using a Novel Manufacturing Technique\",\n publisher = \"Stanford Press\",\n year = 2001,\n address = \"Palo Alto\",\n edition = \"1st,\",\n isbn = \"0-69-697269-4\"\n}",
"items": [
{
"itemType": "book",
"title": "Design of a Carbon Fiber Composite Grid Structure for the GLAST Spacecraft Using a Novel Manufacturing Technique",
"creators": [
{
"firstName": "Michael, III",
"lastName": "von Hicks",
"creatorType": "author"
}
],
"date": "2001",
"ISBN": "0-69-697269-4",
"edition": "1st,",
"itemID": "hicks2001",
"place": "Palo Alto",
"publisher": "Stanford Press",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{Oliveira_2009, title={USGS monitoring ecological impacts}, volume={107}, number={29}, journal={Oil & Gas Journal}, author={Oliveira, A}, year={2009}, pages={29}}",
"items": [
{
"itemType": "journalArticle",
"title": "USGS monitoring ecological impacts",
"creators": [
{
"firstName": "A",
"lastName": "Oliveira",
"creatorType": "author"
}
],
"date": "2009",
"issue": "29",
"itemID": "Oliveira_2009",
"pages": "29",
"publicationTitle": "Oil & Gas Journal",
"volume": "107",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{test-ticket1661,\ntitle={non-braking space: ~; accented characters: {\\~n} and \\~{n}; tilde operator: \\~},\n} ",
"items": [
{
"itemType": "journalArticle",
"title": "non-braking space: ; accented characters: ñ and ñ; tilde operator: ∼",
"creators": [],
"itemID": "test-ticket1661",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@ARTICLE{Frit2,\n author = {Fritz, U. and Corti, C. and P\\\"{a}ckert, M.},\n title = {Test of markupconversion: Italics, bold, superscript, subscript, and small caps: Mitochondrial DNA$_{\\textrm{2}}$ sequences suggest unexpected phylogenetic position\n of Corso-Sardinian grass snakes (\\textit{Natrix cetti}) and \\textbf{do not}\n support their \\textsc{species status}, with notes on phylogeography and subspecies\n delineation of grass snakes.},\n journal = {Actes du $4^{\\textrm{ème}}$ Congrès Français d'Acoustique},\n year = {2012},\n volume = {12},\n pages = {71-80},\n doi = {10.1007/s13127-011-0069-8}\n}\n",
"items": [
{
"itemType": "journalArticle",
"title": "Test of markupconversion: Italics, bold, superscript, subscript, and small caps: Mitochondrial DNA<sub>2</sub>$ sequences suggest unexpected phylogenetic position of Corso-Sardinian grass snakes (<i>Natrix cetti</i>) and <b>do not</b> support their <span style=\"small-caps\">species status</span>, with notes on phylogeography and subspecies delineation of grass snakes.",
"creators": [
{
"firstName": "U.",
"lastName": "Fritz",
"creatorType": "author"
},
{
"firstName": "C.",
"lastName": "Corti",
"creatorType": "author"
},
{
"firstName": "M.",
"lastName": "Päckert",
"creatorType": "author"
}
],
"date": "2012",
"DOI": "10.1007/s13127-011-0069-8",
"itemID": "Frit2",
"pages": "71-80",
"publicationTitle": "Actes du <sup>ème</sup>$ Congrès Français d'Acoustique",
"volume": "12",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@misc{american_rights_at_work_public_2012,\n title = {Public Service Research Foundation},\n\turl = {http://www.americanrightsatwork.org/blogcategory-275/},\n\turldate = {2012-07-27},\n\tauthor = {American Rights at Work},\n\tyear = {2012},\n\thowpublished = {http://www.americanrightsatwork.org/blogcategory-275/},\n}",
"items": [
{
"itemType": "book",
"title": "Public Service Research Foundation",
"creators": [
{
"firstName": "American Rights at",
"lastName": "Work",
"creatorType": "author"
}
],
"date": "2012",
"itemID": "american_rights_at_work_public_2012",
"url": "http://www.americanrightsatwork.org/blogcategory-275/",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{zoteroFilePath1,\n title = {Zotero: single attachment},\n file = {Test:files/47/test2.pdf:application/pdf}\n}\n\n@article{zoteroFilePaths2,\n title = {Zotero: multiple attachments},\n file = {Test1:files/47/test2.pdf:application/pdf;Test2:files/46/test2-min.pdf:application/pdf}\n}\n\n@article{zoteroFilePaths3,\n title = {Zotero: linked attachments (old)},\n file = {Test:E:\\some\\random\\folder\\test2.pdf:application/pdf}\n}\n\n@article{zoteroFilePaths4,\n title = {Zotero: linked attachments},\n file = {Test:E\\:\\\\some\\\\random\\\\folder\\\\test2.pdf:application/pdf}\n}\n\n@article{mendeleyFilePaths1,\n title = {Mendeley: single attachment},\n url = {https://forums.zotero.org/discussion/28347/unable-to-get-pdfs-stored-on-computer-into-zotero-standalone/},\n file = {:C$\\backslash$:/Users/somewhere/AppData/Local/Mendeley Ltd./Mendeley Desktop/Downloaded/test.pdf:pdf}\n}\n\n@article{mendeleyFilePaths2,\ntitle = {Mendeley: escaped characters}\nfile = {:C$\\backslash$:/some/path/,.$\\backslash$;'[]\\{\\}`-=\\~{}!@\\#\\$\\%\\^{}\\&()\\_+.pdf:pdf},\n}\n\n@article{citaviFilePaths1,\n title = {Citavi: single attachment},\n url = {https://forums.zotero.org/discussion/35909/bibtex-import-from-citavi-including-pdf-attachments/},\n file = {Test:Q\\:\\\\some\\\\random\\\\folder\\\\test.pdf:pdf}\n}",
"items": [
{
"itemType": "journalArticle",
"title": "Zotero: single attachment",
"creators": [],
"itemID": "zoteroFilePath1",
"attachments": [
{
"title": "Test",
"path": "files/47/test2.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Zotero: multiple attachments",
"creators": [],
"itemID": "zoteroFilePaths2",
"attachments": [
{
"title": "Test1",
"path": "files/47/test2.pdf",
"mimeType": "application/pdf"
},
{
"title": "Test2",
"path": "files/46/test2-min.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Zotero: linked attachments (old)",
"creators": [],
"itemID": "zoteroFilePaths3",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Zotero: linked attachments",
"creators": [],
"itemID": "zoteroFilePaths4",
"attachments": [
{
"title": "Test",
"path": "E:\\some\\random\\folder\\test2.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Mendeley: single attachment",
"creators": [],
"itemID": "mendeleyFilePaths1",
"url": "https://forums.zotero.org/discussion/28347/unable-to-get-pdfs-stored-on-computer-into-zotero-standalone/",
"attachments": [
{
"title": "Attachment",
"path": "C:/Users/somewhere/AppData/Local/Mendeley Ltd./Mendeley Desktop/Downloaded/test.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Mendeley: escaped characters",
"creators": [],
"itemID": "mendeleyFilePaths2",
"attachments": [
{
"title": "Attachment",
"path": "C:/some/path/,.;'[]{}`-=~!@#$%^&()_+.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "journalArticle",
"title": "Citavi: single attachment",
"creators": [],
"itemID": "citaviFilePaths1",
"url": "https://forums.zotero.org/discussion/35909/bibtex-import-from-citavi-including-pdf-attachments/",
"attachments": [
{
"title": "Test",
"path": "Q:\\some\\random\\folder\\test.pdf",
"mimeType": "application/pdf"
}
],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{BibTeXEscapeTest1,\n title = {\textbackslash\textbackslash\\{\\}: \\\\{}}\n}",
"items": [
{
"itemType": "journalArticle",
"title": "extbackslash extbackslash{}: {",
"creators": [],
"itemID": "BibTeXEscapeTest1",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{sasson_increasing_2013,\n title = {Increasing cardiopulmonary resuscitation provision in communities with low bystander cardiopulmonary resuscitation rates: a science advisory from the American Heart Association for healthcare providers, policymakers, public health departments, and community leaders},\n\tvolume = {127},\n\tissn = {1524-4539},\n\tshorttitle = {Increasing cardiopulmonary resuscitation provision in communities with low bystander cardiopulmonary resuscitation rates},\n\tdoi = {10.1161/CIR.0b013e318288b4dd},\n\tlanguage = {eng},\n\tnumber = {12},\n\tjournal = {Circulation},\n\tauthor = {Sasson, Comilla and Meischke, Hendrika and Abella, Benjamin S and Berg, Robert A and Bobrow, Bentley J and Chan, Paul S and Root, Elisabeth Dowling and Heisler, Michele and Levy, Jerrold H and Link, Mark and Masoudi, Frederick and Ong, Marcus and Sayre, Michael R and Rumsfeld, John S and Rea, Thomas D and {American Heart Association Council on Quality of Care and Outcomes Research} and {Emergency Cardiovascular Care Committee} and {Council on Cardiopulmonary, Critical Care, Perioperative and Resuscitation} and {Council on Clinical Cardiology} and {Council on Cardiovascular Surgery and Anesthesia}},\n\tmonth = mar,\n\tyear = {2013},\n\tnote = {{PMID:} 23439512},\n\tkeywords = {Administrative Personnel, American Heart Association, Cardiopulmonary Resuscitation, Community Health Services, Health Personnel, Heart Arrest, Humans, Leadership, Public Health, United States},\n\tpages = {1342--1350}\n}",
"items": [
{
"itemType": "journalArticle",
"title": "Increasing cardiopulmonary resuscitation provision in communities with low bystander cardiopulmonary resuscitation rates: a science advisory from the American Heart Association for healthcare providers, policymakers, public health departments, and community leaders",
"creators": [
{
"firstName": "Comilla",
"lastName": "Sasson",
"creatorType": "author"
},
{
"firstName": "Hendrika",
"lastName": "Meischke",
"creatorType": "author"
},
{
"firstName": "Benjamin S",
"lastName": "Abella",
"creatorType": "author"
},
{
"firstName": "Robert A",
"lastName": "Berg",
"creatorType": "author"
},
{
"firstName": "Bentley J",
"lastName": "Bobrow",
"creatorType": "author"
},
{
"firstName": "Paul S",
"lastName": "Chan",
"creatorType": "author"
},
{
"firstName": "Elisabeth Dowling",
"lastName": "Root",
"creatorType": "author"
},
{
"firstName": "Michele",
"lastName": "Heisler",
"creatorType": "author"
},
{
"firstName": "Jerrold H",
"lastName": "Levy",
"creatorType": "author"
},
{
"firstName": "Mark",
"lastName": "Link",
"creatorType": "author"
},
{
"firstName": "Frederick",
"lastName": "Masoudi",
"creatorType": "author"
},
{
"firstName": "Marcus",
"lastName": "Ong",
"creatorType": "author"
},
{
"firstName": "Michael R",
"lastName": "Sayre",
"creatorType": "author"
},
{
"firstName": "John S",
"lastName": "Rumsfeld",
"creatorType": "author"
},
{
"firstName": "Thomas D",
"lastName": "Rea",
"creatorType": "author"
},
{
"lastName": "American Heart Association Council on Quality of Care and Outcomes Research",
"creatorType": "author",
"fieldMode": 1
},
{
"lastName": "Emergency Cardiovascular Care Committee",
"creatorType": "author",
"fieldMode": 1
},
{
"lastName": "Council on Cardiopulmonary, Critical Care, Perioperative and Resuscitation",
"creatorType": "author",
"fieldMode": 1
},
{
"lastName": "Council on Clinical Cardiology",
"creatorType": "author",
"fieldMode": 1
},
{
"lastName": "Council on Cardiovascular Surgery and Anesthesia",
"creatorType": "author",
"fieldMode": 1
}
],
"date": "March 2013",
"DOI": "10.1161/CIR.0b013e318288b4dd",
"ISSN": "1524-4539",
"extra": "PMID: 23439512",
"issue": "12",
"itemID": "sasson_increasing_2013",
"language": "eng",
"pages": "1342–1350",
"publicationTitle": "Circulation",
"shortTitle": "Increasing cardiopulmonary resuscitation provision in communities with low bystander cardiopulmonary resuscitation rates",
"volume": "127",
"attachments": [],
"tags": [
"Administrative Personnel",
"American Heart Association",
"Cardiopulmonary Resuscitation",
"Community Health Services",
"Health Personnel",
"Heart Arrest",
"Humans",
"Leadership",
"Public Health",
"United States"
],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@article{smith_testing_????,\n title = {Testing identifier import},\n\tauthor = {Smith, John},\n\tdoi = {10.12345/123456},\n\tlccn = {L123456},\n\tmrnumber = {MR123456},\n\tzmnumber = {ZM123456},\n\tpmid = {P123456},\n\tpmcid = {PMC123456},\n\teprinttype = {arxiv},\n\teprint = {AX123456}\n}",
"items": [
{
"itemType": "journalArticle",
"title": "Testing identifier import",
"creators": [
{
"firstName": "John",
"lastName": "Smith",
"creatorType": "author"
}
],
"DOI": "10.12345/123456",
"extra": "LCCN: L123456\nMR: MR123456\nZbl: ZM123456\nPMID: P123456\nPMCID: PMC123456\narXiv: AX123456",
"itemID": "smith_testing_????",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@inbook{smith_testing_????,\n title = {Testing identifier import chapter},\n\tauthor = {Smith, John},\n\tdoi = {10.12345/123456},\n\tlccn = {L123456},\n\tmrnumber = {MR123456},\n\tzmnumber = {ZM123456},\n\tpmid = {P123456},\n\tpmcid = {PMC123456},\n\teprinttype = {arxiv},\n\teprint = {AX123456}\n}",
"items": [
{
"itemType": "bookSection",
"title": "Testing identifier import chapter",
"creators": [
{
"firstName": "John",
"lastName": "Smith",
"creatorType": "author"
}
],
"extra": "DOI: 10.12345/123456\nLCCN: L123456\nMR: MR123456\nZbl: ZM123456\nPMID: P123456\nPMCID: PMC123456\narXiv: AX123456",
"itemID": "smith_testing_????",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@mastersthesis{DBLP:ms/Hoffmann2008,\n author = {Oliver Hoffmann},\n title = {Regelbasierte Extraktion und asymmetrische Fusion bibliographischer\n Informationen},\n school = {Diplomarbeit, Universit{\\\"{a}}t Trier, {FB} IV, {DBIS/DBLP}},\n year = {2009},\n url = {http://dblp.uni-trier.de/papers/DiplomarbeitOliverHoffmann.pdf},\n timestamp = {Wed, 03 Aug 2011 15:40:21 +0200},\n biburl = {http://dblp.org/rec/bib/ms/Hoffmann2008},\n bibsource = {dblp computer science bibliography, http://dblp.org}\n}\n\n@phdthesis{DBLP:phd/Ackermann2009,\n author = {Marcel R. Ackermann},\n title = {Algorithms for the Bregman k-Median problem},\n school = {University of Paderborn},\n year = {2009},\n url = {http://digital.ub.uni-paderborn.de/hs/content/titleinfo/1561},\n urn = {urn:nbn:de:hbz:466-20100407029},\n timestamp = {Thu, 01 Dec 2016 16:33:49 +0100},\n biburl = {http://dblp.org/rec/bib/phd/Ackermann2009},\n bibsource = {dblp computer science bibliography, http://dblp.org}\n}",
"items": [
{
"itemType": "thesis",
"title": "Regelbasierte Extraktion und asymmetrische Fusion bibliographischer Informationen",
"creators": [
{
"firstName": "Oliver",
"lastName": "Hoffmann",
"creatorType": "author"
}
],
"date": "2009",
"itemID": "DBLP:ms/Hoffmann2008",
"thesisType": "Master's Thesis",
"university": "Diplomarbeit, Universität Trier, FB IV, DBIS/DBLP",
"url": "http://dblp.uni-trier.de/papers/DiplomarbeitOliverHoffmann.pdf",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
},
{
"itemType": "thesis",
"title": "Algorithms for the Bregman k-Median problem",
"creators": [
{
"firstName": "Marcel R.",
"lastName": "Ackermann",
"creatorType": "author"
}
],
"date": "2009",
"itemID": "DBLP:phd/Ackermann2009",
"thesisType": "PhD Thesis",
"university": "University of Paderborn",
"url": "http://digital.ub.uni-paderborn.de/hs/content/titleinfo/1561",
"attachments": [],
"tags": [],
"notes": [],
"seeAlso": []
}
]
},
{
"type": "import",
"input": "@inproceedings{Giannotti:2007:TPM:1281192.1281230,\n author = {Giannotti, Fosca and Nanni, Mirco and Pinelli, Fabio and Pedreschi, Dino},\n title = {Trajectory Pattern Mining},\n booktitle = {Proceedings of the 13th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining},\n series = {KDD '07},\n year = {2007},\n isbn = {978-1-59593-609-7},\n location = {San Jose, California, USA},\n pages = {330--339},\n numpages = {10},\n url = {http://doi.acm.org/10.1145/1281192.1281230},\n doi = {10.1145/1281192.1281230},\n acmid = {1281230},\n publisher = {ACM},\n address = {New York, NY, USA},\n keywords = {spatio-temporal data mining, trajectory patterns},\n }",
"items": [
{
"itemType": "conferencePaper",
"title": "Trajectory Pattern Mining",
"creators": [
{
"firstName": "Fosca",
"lastName": "Giannotti",
"creatorType": "author"
},
{
"firstName": "Mirco",
"lastName": "Nanni",
"creatorType": "author"
},
{
"firstName": "Fabio",
"lastName": "Pinelli",
"creatorType": "author"
},
{
"firstName": "Dino",
"lastName": "Pedreschi",
"creatorType": "author"
}
],
"date": "2007",
"DOI": "10.1145/1281192.1281230",
"ISBN": "978-1-59593-609-7",
"extra": "event-place: San Jose, California, USA",
"itemID": "Giannotti:2007:TPM:1281192.1281230",
"pages": "330–339",
"place": "New York, NY, USA",
"proceedingsTitle": "Proceedings of the 13th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining",
"publisher": "ACM",
"series": "KDD '07",
"url": "http://doi.acm.org/10.1145/1281192.1281230",
"attachments": [],
"tags": [
{
"tag": "spatio-temporal data mining"
},
{
"tag": "trajectory patterns"
}
],
"notes": [],
"seeAlso": []
}
]
}
];
/** END TEST CASES **/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment