Permalink
Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"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-02-03 17:45:00" | |
} | |
/* | |
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) { | |
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; | |
} | |
} | |
} | |
} | |
//%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 null; | |
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 (var 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 (var 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; | |
var 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]) { | |
var 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; | |
} | |
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; | |
return attachment; | |
} | |
function getFieldValue(read) { | |
var value = ""; | |
// now, we have the first character of the field | |
if (read == "{") { | |
// character is a brace | |
var openBraces = 1, nextAsLiteral = false; | |
while (read = Zotero.read(1)) { | |
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 == '"') { | |
var openBraces = 0; | |
while (read = Zotero.read(1)) { | |
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 quoted = false; | |
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) { 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)) { | |
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) { | |
var record = records.shift(); | |
var keys = jabrefSplit(record, ';'); | |
if (keys.length < 2) { continue; } | |
var record = {id: keys.shift()}; | |
record.data = record.id.match(/^([0-9]) ([^:]*):(.*)/); | |
if (record.data == 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) { 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 = jabrefMap(collection.children, function(n) { 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))) { | |
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)) { | |
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) { | |
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; | |
} | |
); | |
} | |
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)) { | |
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 | |
var maybePromise = beginRecord(type, "}"); | |
if (maybePromise) { | |
maybePromise.then(next); | |
return; | |
} | |
} else if (read == "(") { // possible open character | |
var 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 = 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)) { | |
// 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 = 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 = basekey + value; | |
} | |
citeKeyFormatRemaining = citeKeyFormatRemaining.substr(m.index + m.length); | |
counter++; | |
} | |
if (citeKeyFormatRemaining.length > 0) { | |
basekey = 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 = new Object(); | |
var item; | |
while (item = Zotero.nextItem()) { | |
//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 (var 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 (var 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 (var 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 (var i in item.notes) { | |
var note = item.notes[i]; | |
writeField("annote", Zotero.Utilities.unescapeHTML(note["note"])); | |
} | |
} | |
if (item.attachments) { | |
var attachmentString = ""; | |
for (var 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}"); | |
} | |
} | |
var exports = { | |
"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 | |
"\u00AA":"{\\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 | |
"\u00B5":"{\\textmu}", // MICRO SIGN | |
"\u00B6":"{\\textparagraph}", // PILCROW SIGN | |
"\u00B7":"{\\textperiodcentered}", // MIDDLE DOT | |
"\u00B8":"{\\c\\ }", // CEDILLA | |
"\u00B9":"{\\textonesuperior}", // SUPERSCRIPT ONE | |
"\u00BA":"{\\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 | |
"\u00C6":"{\\AE}", // LATIN CAPITAL LETTER AE | |
"\u00D0":"{\\DH}", // LATIN CAPITAL LETTER ETH | |
"\u00D7":"{\\texttimes}", // MULTIPLICATION SIGN | |
"\u00D8":"{\\O}", // LATIN CAPITAL LETTER O WITH STROKE | |
"\u00DE":"{\\TH}", // LATIN CAPITAL LETTER THORN | |
"\u00DF":"{\\ss}", // LATIN SMALL LETTER SHARP S | |
"\u00E6":"{\\ae}", // LATIN SMALL LETTER AE | |
"\u00F0":"{\\dh}", // LATIN SMALL LETTER ETH | |
"\u00F7":"{\\textdiv}", // DIVISION SIGN | |
"\u00F8":"{\\o}", // LATIN SMALL LETTER O WITH STROKE | |
"\u00FE":"{\\th}", // LATIN SMALL LETTER THORN | |
"\u0131":"{\\i}", // LATIN SMALL LETTER DOTLESS I | |
"\u0132":"IJ", // LATIN CAPITAL LIGATURE IJ | |
"\u0133":"ij", // LATIN SMALL LIGATURE IJ | |
"\u0138":"k", // LATIN SMALL LETTER KRA | |
"\u0149":"'n", // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE | |
"\u014A":"{\\NG}", // LATIN CAPITAL LETTER ENG | |
"\u014B":"{\\ng}", // LATIN SMALL LETTER ENG | |
"\u0152":"{\\OE}", // LATIN CAPITAL LIGATURE OE | |
"\u0153":"{\\oe}", // LATIN SMALL LIGATURE OE | |
"\u017F":"s", // LATIN SMALL LETTER LONG S | |
"\u02B9":"'", // MODIFIER LETTER PRIME | |
"\u02BB":"'", // MODIFIER LETTER TURNED COMMA | |
"\u02BC":"'", // MODIFIER LETTER APOSTROPHE | |
"\u02BD":"'", // MODIFIER LETTER REVERSED COMMA | |
"\u02C6":"{\\textasciicircum}", // MODIFIER LETTER CIRCUMFLEX ACCENT | |
"\u02C8":"'", // MODIFIER LETTER VERTICAL LINE | |
"\u02C9":"-", // MODIFIER LETTER MACRON | |
"\u02CC":",", // MODIFIER LETTER LOW VERTICAL LINE | |
"\u02D0":":", // MODIFIER LETTER TRIANGULAR COLON | |
"\u02DA":"o", // RING ABOVE | |
"\u02DC":"\\~{}", // SMALL TILDE | |
"\u02DD":"{\\textacutedbl}", // DOUBLE ACUTE ACCENT | |
"\u0374":"'", // GREEK NUMERAL SIGN | |
"\u0375":",", // GREEK LOWER NUMERAL SIGN | |
"\u037E":";", // GREEK QUESTION MARK | |
//Greek letters courtesy of spartanroc | |
"\u0393":"$\\Gamma$", // GREEK Gamma | |
"\u0394":"$\\Delta$", // GREEK Delta | |
"\u0398":"$\\Theta$", // GREEK Theta | |
"\u039B":"$\\Lambda$", // GREEK Lambda | |
"\u039E":"$\\Xi$", // GREEK Xi | |
"\u03A0":"$\\Pi$", // GREEK Pi | |
"\u03A3":"$\\Sigma$", // GREEK Sigma | |
"\u03A6":"$\\Phi$", // GREEK Phi | |
"\u03A8":"$\\Psi$", // GREEK Psi | |
"\u03A9":"$\\Omega$", // GREEK Omega | |
"\u03B1":"$\\alpha$", // GREEK alpha | |
"\u03B2":"$\\beta$", // GREEK beta | |
"\u03B3":"$\\gamma$", // GREEK gamma | |
"\u03B4":"$\\delta$", // GREEK delta | |
"\u03B5":"$\\varepsilon$", // GREEK var-epsilon | |
"\u03B6":"$\\zeta$", // GREEK zeta | |
"\u03B7":"$\\eta$", // GREEK eta | |
"\u03B8":"$\\theta$", // GREEK theta | |
"\u03B9":"$\\iota$", // GREEK iota | |
"\u03BA":"$\\kappa$", // GREEK kappa | |
"\u03BB":"$\\lambda$", // GREEK lambda | |
"\u03BC":"$\\mu$", // GREEK mu | |
"\u03BD":"$\\nu$", // GREEK nu | |
"\u03BE":"$\\xi$", // GREEK xi | |
"\u03C0":"$\\pi$", // GREEK pi | |
"\u03C1":"$\\rho$", // GREEK rho | |
"\u03C2":"$\\varsigma$", // GREEK var-sigma | |
"\u03C3":"$\\sigma$", // GREEK sigma | |
"\u03C4":"$\\tau$", // GREEK tau | |
"\u03C5":"$\\upsilon$", // GREEK upsilon | |
"\u03C6":"$\\varphi$", // GREEK var-phi | |
"\u03C7":"$\\chi$", // GREEK chi | |
"\u03C8":"$\\psi$", // GREEK psi | |
"\u03C9":"$\\omega$", // GREEK omega | |
"\u03D1":"$\\vartheta$", // GREEK var-theta | |
"\u03D2":"$\\Upsilon$", // GREEK Upsilon | |
"\u03D5":"$\\phi$", // GREEK phi | |
"\u03D6":"$\\varpi$", // GREEK var-pi | |
"\u03F1":"$\\varrho$", // GREEK var-rho | |
"\u03F5":"$\\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 | |
"\u207F":"$^{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 | |
"\u2113":"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 | |
"\u2126":"{\\textohm}", // OHM SIGN | |
"\u212A":"K", // KELVIN SIGN | |
"\u212B":"A", // ANGSTROM SIGN | |
"\u212E":"{\\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 | |
"\u2160":"I", // ROMAN NUMERAL ONE | |
"\u2161":"II", // ROMAN NUMERAL TWO | |
"\u2162":"III", // ROMAN NUMERAL THREE | |
"\u2163":"IV", // ROMAN NUMERAL FOUR | |
"\u2164":"V", // ROMAN NUMERAL FIVE | |
"\u2165":"VI", // ROMAN NUMERAL SIX | |
"\u2166":"VII", // ROMAN NUMERAL SEVEN | |
"\u2167":"VIII", // ROMAN NUMERAL EIGHT | |
"\u2168":"IX", // ROMAN NUMERAL NINE | |
"\u2169":"X", // ROMAN NUMERAL TEN | |
"\u216A":"XI", // ROMAN NUMERAL ELEVEN | |
"\u216B":"XII", // ROMAN NUMERAL TWELVE | |
"\u216C":"L", // ROMAN NUMERAL FIFTY | |
"\u216D":"C", // ROMAN NUMERAL ONE HUNDRED | |
"\u216E":"D", // ROMAN NUMERAL FIVE HUNDRED | |
"\u216F":"M", // ROMAN NUMERAL ONE THOUSAND | |
"\u2170":"i", // SMALL ROMAN NUMERAL ONE | |
"\u2171":"ii", // SMALL ROMAN NUMERAL TWO | |
"\u2172":"iii", // SMALL ROMAN NUMERAL THREE | |
"\u2173":"iv", // SMALL ROMAN NUMERAL FOUR | |
"\u2174":"v", // SMALL ROMAN NUMERAL FIVE | |
"\u2175":"vi", // SMALL ROMAN NUMERAL SIX | |
"\u2176":"vii", // SMALL ROMAN NUMERAL SEVEN | |
"\u2177":"viii", // SMALL ROMAN NUMERAL EIGHT | |
"\u2178":"ix", // SMALL ROMAN NUMERAL NINE | |
"\u2179":"x", // SMALL ROMAN NUMERAL TEN | |
"\u217A":"xi", // SMALL ROMAN NUMERAL ELEVEN | |
"\u217B":"xii", // SMALL ROMAN NUMERAL TWELVE | |
"\u217C":"l", // SMALL ROMAN NUMERAL FIFTY | |
"\u217D":"c", // SMALL ROMAN NUMERAL ONE HUNDRED | |
"\u217E":"d", // SMALL ROMAN NUMERAL FIVE HUNDRED | |
"\u217F":"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 | |
"\uFB00":"ff", // LATIN SMALL LIGATURE FF | |
"\uFB01":"fi", // LATIN SMALL LIGATURE FI | |
"\uFB02":"fl", // LATIN SMALL LIGATURE FL | |
"\uFB03":"ffi", // LATIN SMALL LIGATURE FFI | |
"\uFB04":"ffl", // LATIN SMALL LIGATURE FFL | |
"\uFB05":"st", // LATIN SMALL LIGATURE LONG S T | |
"\uFB06":"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 | |
*/ | |
"\u00C0":"{\\`A}", // LATIN CAPITAL LETTER A WITH GRAVE | |
"\u00C1":"{\\'A}", // LATIN CAPITAL LETTER A WITH ACUTE | |
"\u00C2":"{\\^A}", // LATIN CAPITAL LETTER A WITH CIRCUMFLEX | |
"\u00C3":"{\\~A}", // LATIN CAPITAL LETTER A WITH TILDE | |
"\u00C4":"{\\\"A}", // LATIN CAPITAL LETTER A WITH DIAERESIS | |
"\u00C5":"{\\r A}", // LATIN CAPITAL LETTER A WITH RING ABOVE | |
"\u00C7":"{\\c C}", // LATIN CAPITAL LETTER C WITH CEDILLA | |
"\u00C8":"{\\`E}", // LATIN CAPITAL LETTER E WITH GRAVE | |
"\u00C9":"{\\'E}", // LATIN CAPITAL LETTER E WITH ACUTE | |
"\u00CA":"{\\^E}", // LATIN CAPITAL LETTER E WITH CIRCUMFLEX | |
"\u00CB":"{\\\"E}", // LATIN CAPITAL LETTER E WITH DIAERESIS | |
"\u00CC":"{\\`I}", // LATIN CAPITAL LETTER I WITH GRAVE | |
"\u00CD":"{\\'I}", // LATIN CAPITAL LETTER I WITH ACUTE | |
"\u00CE":"{\\^I}", // LATIN CAPITAL LETTER I WITH CIRCUMFLEX | |
"\u00CF":"{\\\"I}", // LATIN CAPITAL LETTER I WITH DIAERESIS | |
"\u00D1":"{\\~N}", // LATIN CAPITAL LETTER N WITH TILDE | |
"\u00D2":"{\\`O}", // LATIN CAPITAL LETTER O WITH GRAVE | |
"\u00D3":"{\\'O}", // LATIN CAPITAL LETTER O WITH ACUTE | |
"\u00D4":"{\\^O}", // LATIN CAPITAL LETTER O WITH CIRCUMFLEX | |
"\u00D5":"{\\~O}", // LATIN CAPITAL LETTER O WITH TILDE | |
"\u00D6":"{\\\"O}", // LATIN CAPITAL LETTER O WITH DIAERESIS | |
"\u00D9":"{\\`U}", // LATIN CAPITAL LETTER U WITH GRAVE | |
"\u00DA":"{\\'U}", // LATIN CAPITAL LETTER U WITH ACUTE | |
"\u00DB":"{\\^U}", // LATIN CAPITAL LETTER U WITH CIRCUMFLEX | |
"\u00DC":"{\\\"U}", // LATIN CAPITAL LETTER U WITH DIAERESIS | |
"\u00DD":"{\\'Y}", // LATIN CAPITAL LETTER Y WITH ACUTE | |
"\u00E0":"{\\`a}", // LATIN SMALL LETTER A WITH GRAVE | |
"\u00E1":"{\\'a}", // LATIN SMALL LETTER A WITH ACUTE | |
"\u00E2":"{\\^a}", // LATIN SMALL LETTER A WITH CIRCUMFLEX | |
"\u00E3":"{\\~a}", // LATIN SMALL LETTER A WITH TILDE | |
"\u00E4":"{\\\"a}", // LATIN SMALL LETTER A WITH DIAERESIS | |
"\u00E5":"{\\r a}", // LATIN SMALL LETTER A WITH RING ABOVE | |
"\u00E7":"{\\c c}", // LATIN SMALL LETTER C WITH CEDILLA | |
"\u00E8":"{\\`e}", // LATIN SMALL LETTER E WITH GRAVE | |
"\u00E9":"{\\'e}", // LATIN SMALL LETTER E WITH ACUTE | |
"\u00EA":"{\\^e}", // LATIN SMALL LETTER E WITH CIRCUMFLEX | |
"\u00EB":"{\\\"e}", // LATIN SMALL LETTER E WITH DIAERESIS | |
"\u00EC":"{\\`i}", // LATIN SMALL LETTER I WITH GRAVE | |
"\u00ED":"{\\'i}", // LATIN SMALL LETTER I WITH ACUTE | |
"\u00EE":"{\\^i}", // LATIN SMALL LETTER I WITH CIRCUMFLEX | |
"\u00EF":"{\\\"i}", // LATIN SMALL LETTER I WITH DIAERESIS | |
"\u00F1":"{\\~n}", // LATIN SMALL LETTER N WITH TILDE | |
"\u00F2":"{\\`o}", // LATIN SMALL LETTER O WITH GRAVE | |
"\u00F3":"{\\'o}", // LATIN SMALL LETTER O WITH ACUTE | |
"\u00F4":"{\\^o}", // LATIN SMALL LETTER O WITH CIRCUMFLEX | |
"\u00F5":"{\\~o}", // LATIN SMALL LETTER O WITH TILDE | |
"\u00F6":"{\\\"o}", // LATIN SMALL LETTER O WITH DIAERESIS | |
"\u00F9":"{\\`u}", // LATIN SMALL LETTER U WITH GRAVE | |
"\u00FA":"{\\'u}", // LATIN SMALL LETTER U WITH ACUTE | |
"\u00FB":"{\\^u}", // LATIN SMALL LETTER U WITH CIRCUMFLEX | |
"\u00FC":"{\\\"u}", // LATIN SMALL LETTER U WITH DIAERESIS | |
"\u00FD":"{\\'y}", // LATIN SMALL LETTER Y WITH ACUTE | |
"\u00FF":"{\\\"y}", // LATIN SMALL LETTER Y WITH DIAERESIS | |
"\u0100":"{\\=A}", // LATIN CAPITAL LETTER A WITH MACRON | |
"\u0101":"{\\=a}", // LATIN SMALL LETTER A WITH MACRON | |
"\u0102":"{\\u A}", // LATIN CAPITAL LETTER A WITH BREVE | |
"\u0103":"{\\u a}", // LATIN SMALL LETTER A WITH BREVE | |
"\u0104":"{\\k A}", // LATIN CAPITAL LETTER A WITH OGONEK | |
"\u0105":"{\\k a}", // LATIN SMALL LETTER A WITH OGONEK | |
"\u0106":"{\\'C}", // LATIN CAPITAL LETTER C WITH ACUTE | |
"\u0107":"{\\'c}", // LATIN SMALL LETTER C WITH ACUTE | |
"\u0108":"{\\^C}", // LATIN CAPITAL LETTER C WITH CIRCUMFLEX | |
"\u0109":"{\\^c}", // LATIN SMALL LETTER C WITH CIRCUMFLEX | |
"\u010A":"{\\.C}", // LATIN CAPITAL LETTER C WITH DOT ABOVE | |
"\u010B":"{\\.c}", // LATIN SMALL LETTER C WITH DOT ABOVE | |
"\u010C":"{\\v C}", // LATIN CAPITAL LETTER C WITH CARON | |
"\u010D":"{\\v c}", // LATIN SMALL LETTER C WITH CARON | |
"\u010E":"{\\v D}", // LATIN CAPITAL LETTER D WITH CARON | |
"\u010F":"{\\v d}", // LATIN SMALL LETTER D WITH CARON | |
"\u0112":"{\\=E}", // LATIN CAPITAL LETTER E WITH MACRON | |
"\u0113":"{\\=e}", // LATIN SMALL LETTER E WITH MACRON | |
"\u0114":"{\\u E}", // LATIN CAPITAL LETTER E WITH BREVE | |
"\u0115":"{\\u e}", // LATIN SMALL LETTER E WITH BREVE | |
"\u0116":"{\\.E}", // LATIN CAPITAL LETTER E WITH DOT ABOVE | |
"\u0117":"{\\.e}", // LATIN SMALL LETTER E WITH DOT ABOVE | |
"\u0118":"{\\k E}", // LATIN CAPITAL LETTER E WITH OGONEK | |
"\u0119":"{\\k e}", // LATIN SMALL LETTER E WITH OGONEK | |
"\u011A":"{\\v E}", // LATIN CAPITAL LETTER E WITH CARON | |
"\u011B":"{\\v e}", // LATIN SMALL LETTER E WITH CARON | |
"\u011C":"{\\^G}", // LATIN CAPITAL LETTER G WITH CIRCUMFLEX | |
"\u011D":"{\\^g}", // LATIN SMALL LETTER G WITH CIRCUMFLEX | |
"\u011E":"{\\u G}", // LATIN CAPITAL LETTER G WITH BREVE | |
"\u011F":"{\\u g}", // LATIN SMALL LETTER G WITH BREVE | |
"\u0120":"{\\.G}", // LATIN CAPITAL LETTER G WITH DOT ABOVE | |
"\u0121":"{\\.g}", // LATIN SMALL LETTER G WITH DOT ABOVE | |
"\u0122":"{\\c G}", // LATIN CAPITAL LETTER G WITH CEDILLA | |
"\u0123":"{\\c g}", // LATIN SMALL LETTER G WITH CEDILLA | |
"\u0124":"{\\^H}", // LATIN CAPITAL LETTER H WITH CIRCUMFLEX | |
"\u0125":"{\\^h}", // LATIN SMALL LETTER H WITH CIRCUMFLEX | |
"\u0128":"{\\~I}", // LATIN CAPITAL LETTER I WITH TILDE | |
"\u0129":"{\\~i}", // LATIN SMALL LETTER I WITH TILDE | |
"\u012A":"{\\=I}", // LATIN CAPITAL LETTER I WITH MACRON | |
"\u012B":"{\\=\\i}", // LATIN SMALL LETTER I WITH MACRON | |
"\u012C":"{\\u I}", // LATIN CAPITAL LETTER I WITH BREVE | |
"\u012D":"{\\u i}", // LATIN SMALL LETTER I WITH BREVE | |
"\u012E":"{\\k I}", // LATIN CAPITAL LETTER I WITH OGONEK | |
"\u012F":"{\\k i}", // LATIN SMALL LETTER I WITH OGONEK | |
"\u0130":"{\\.I}", // LATIN CAPITAL LETTER I WITH DOT ABOVE | |
"\u0134":"{\\^J}", // LATIN CAPITAL LETTER J WITH CIRCUMFLEX | |
"\u0135":"{\\^j}", // LATIN SMALL LETTER J WITH CIRCUMFLEX | |
"\u0136":"{\\c K}", // LATIN CAPITAL LETTER K WITH CEDILLA | |
"\u0137":"{\\c k}", // LATIN SMALL LETTER K WITH CEDILLA | |
"\u0139":"{\\'L}", // LATIN CAPITAL LETTER L WITH ACUTE | |
"\u013A":"{\\'l}", // LATIN SMALL LETTER L WITH ACUTE | |
"\u013B":"{\\c L}", // LATIN CAPITAL LETTER L WITH CEDILLA | |
"\u013C":"{\\c l}", // LATIN SMALL LETTER L WITH CEDILLA | |
"\u013D":"{\\v L}", // LATIN CAPITAL LETTER L WITH CARON | |
"\u013E":"{\\v l}", // LATIN SMALL LETTER L WITH CARON | |
"\u0141":"{\\L }", //LATIN CAPITAL LETTER L WITH STROKE | |
"\u0142":"{\\l }", //LATIN SMALL LETTER L WITH STROKE | |
"\u0143":"{\\'N}", // LATIN CAPITAL LETTER N WITH ACUTE | |
"\u0144":"{\\'n}", // LATIN SMALL LETTER N WITH ACUTE | |
"\u0145":"{\\c N}", // LATIN CAPITAL LETTER N WITH CEDILLA | |
"\u0146":"{\\c n}", // LATIN SMALL LETTER N WITH CEDILLA | |
"\u0147":"{\\v N}", // LATIN CAPITAL LETTER N WITH CARON | |
"\u0148":"{\\v n}", // LATIN SMALL LETTER N WITH CARON | |
"\u014C":"{\\=O}", // LATIN CAPITAL LETTER O WITH MACRON | |
"\u014D":"{\\=o}", // LATIN SMALL LETTER O WITH MACRON | |
"\u014E":"{\\u O}", // LATIN CAPITAL LETTER O WITH BREVE | |
"\u014F":"{\\u o}", // LATIN SMALL LETTER O WITH BREVE | |
"\u0150":"{\\H O}", // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE | |
"\u0151":"{\\H o}", // LATIN SMALL LETTER O WITH DOUBLE ACUTE | |
"\u0154":"{\\'R}", // LATIN CAPITAL LETTER R WITH ACUTE | |
"\u0155":"{\\'r}", // LATIN SMALL LETTER R WITH ACUTE | |
"\u0156":"{\\c R}", // LATIN CAPITAL LETTER R WITH CEDILLA | |
"\u0157":"{\\c r}", // LATIN SMALL LETTER R WITH CEDILLA | |
"\u0158":"{\\v R}", // LATIN CAPITAL LETTER R WITH CARON | |
"\u0159":"{\\v r}", // LATIN SMALL LETTER R WITH CARON | |
"\u015A":"{\\'S}", // LATIN CAPITAL LETTER S WITH ACUTE | |
"\u015B":"{\\'s}", // LATIN SMALL LETTER S WITH ACUTE | |
"\u015C":"{\\^S}", // LATIN CAPITAL LETTER S WITH CIRCUMFLEX | |
"\u015D":"{\\^s}", // LATIN SMALL LETTER S WITH CIRCUMFLEX | |
"\u015E":"{\\c S}", // LATIN CAPITAL LETTER S WITH CEDILLA | |
"\u015F":"{\\c s}", // LATIN SMALL LETTER S WITH CEDILLA | |
"\u0160":"{\\v S}", // LATIN CAPITAL LETTER S WITH CARON | |
"\u0161":"{\\v s}", // LATIN SMALL LETTER S WITH CARON | |
"\u0162":"{\\c T}", // LATIN CAPITAL LETTER T WITH CEDILLA | |
"\u0163":"{\\c t}", // LATIN SMALL LETTER T WITH CEDILLA | |
"\u0164":"{\\v T}", // LATIN CAPITAL LETTER T WITH CARON | |
"\u0165":"{\\v t}", // LATIN SMALL LETTER T WITH CARON | |
"\u0168":"{\\~U}", // LATIN CAPITAL LETTER U WITH TILDE | |
"\u0169":"{\\~u}", // LATIN SMALL LETTER U WITH TILDE | |
"\u016A":"{\\=U}", // LATIN CAPITAL LETTER U WITH MACRON | |
"\u016B":"{\\=u}", // LATIN SMALL LETTER U WITH MACRON | |
"\u016C":"{\\u U}", // LATIN CAPITAL LETTER U WITH BREVE | |
"\u016D":"{\\u u}", // LATIN SMALL LETTER U WITH BREVE | |
"\u016E":"{\\r U}", // LATIN CAPITAL U WITH A RING ABOVE | |
"\u016F":"{\\r u}", // LATIN SMALL U WITH A RING ABOVE | |
"\u0170":"{\\H U}", // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE | |
"\u0171":"{\\H u}", // LATIN SMALL LETTER U WITH DOUBLE ACUTE | |
"\u0172":"{\\k U}", // LATIN CAPITAL LETTER U WITH OGONEK | |
"\u0173":"{\\k u}", // LATIN SMALL LETTER U WITH OGONEK | |
"\u0174":"{\\^W}", // LATIN CAPITAL LETTER W WITH CIRCUMFLEX | |
"\u0175":"{\\^w}", // LATIN SMALL LETTER W WITH CIRCUMFLEX | |
"\u0176":"{\\^Y}", // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX | |
"\u0177":"{\\^y}", // LATIN SMALL LETTER Y WITH CIRCUMFLEX | |
"\u0178":"{\\\"Y}", // LATIN CAPITAL LETTER Y WITH DIAERESIS | |
"\u0179":"{\\'Z}", // LATIN CAPITAL LETTER Z WITH ACUTE | |
"\u017A":"{\\'z}", // LATIN SMALL LETTER Z WITH ACUTE | |
"\u017B":"{\\.Z}", // LATIN CAPITAL LETTER Z WITH DOT ABOVE | |
"\u017C":"{\\.z}", // LATIN SMALL LETTER Z WITH DOT ABOVE | |
"\u017D":"{\\v Z}", // LATIN CAPITAL LETTER Z WITH CARON | |
"\u017E":"{\\v z}", // LATIN SMALL LETTER Z WITH CARON | |
"\u01CD":"{\\v A}", // LATIN CAPITAL LETTER A WITH CARON | |
"\u01CE":"{\\v a}", // LATIN SMALL LETTER A WITH CARON | |
"\u01CF":"{\\v I}", // LATIN CAPITAL LETTER I WITH CARON | |
"\u01D0":"{\\v i}", // LATIN SMALL LETTER I WITH CARON | |
"\u01D1":"{\\v O}", // LATIN CAPITAL LETTER O WITH CARON | |
"\u01D2":"{\\v o}", // LATIN SMALL LETTER O WITH CARON | |
"\u01D3":"{\\v U}", // LATIN CAPITAL LETTER U WITH CARON | |
"\u01D4":"{\\v u}", // LATIN SMALL LETTER U WITH CARON | |
"\u01E6":"{\\v G}", // LATIN CAPITAL LETTER G WITH CARON | |
"\u01E7":"{\\v g}", // LATIN SMALL LETTER G WITH CARON | |
"\u01E8":"{\\v K}", // LATIN CAPITAL LETTER K WITH CARON | |
"\u01E9":"{\\v k}", // LATIN SMALL LETTER K WITH CARON | |
"\u01EA":"{\\k O}", // LATIN CAPITAL LETTER O WITH OGONEK | |
"\u01EB":"{\\k o}", // LATIN SMALL LETTER O WITH OGONEK | |
"\u01F0":"{\\v j}", // LATIN SMALL LETTER J WITH CARON | |
"\u01F4":"{\\'G}", // LATIN CAPITAL LETTER G WITH ACUTE | |
"\u01F5":"{\\'g}", // LATIN SMALL LETTER G WITH ACUTE | |
"\u1E02":"{\\.B}", // LATIN CAPITAL LETTER B WITH DOT ABOVE | |
"\u1E03":"{\\.b}", // LATIN SMALL LETTER B WITH DOT ABOVE | |
"\u1E04":"{\\d B}", // LATIN CAPITAL LETTER B WITH DOT BELOW | |
"\u1E05":"{\\d b}", // LATIN SMALL LETTER B WITH DOT BELOW | |
"\u1E06":"{\\b B}", // LATIN CAPITAL LETTER B WITH LINE BELOW | |
"\u1E07":"{\\b b}", // LATIN SMALL LETTER B WITH LINE BELOW | |
"\u1E0A":"{\\.D}", // LATIN CAPITAL LETTER D WITH DOT ABOVE | |
"\u1E0B":"{\\.d}", // LATIN SMALL LETTER D WITH DOT ABOVE | |
"\u1E0C":"{\\d D}", // LATIN CAPITAL LETTER D WITH DOT BELOW | |
"\u1E0D":"{\\d d}", // LATIN SMALL LETTER D WITH DOT BELOW | |
"\u1E0E":"{\\b D}", // LATIN CAPITAL LETTER D WITH LINE BELOW | |
"\u1E0F":"{\\b d}", // LATIN SMALL LETTER D WITH LINE BELOW | |
"\u1E10":"{\\c D}", // LATIN CAPITAL LETTER D WITH CEDILLA | |
"\u1E11":"{\\c d}", // LATIN SMALL LETTER D WITH CEDILLA | |
"\u1E1E":"{\\.F}", // LATIN CAPITAL LETTER F WITH DOT ABOVE | |
"\u1E1F":"{\\.f}", // LATIN SMALL LETTER F WITH DOT ABOVE | |
"\u1E20":"{\\=G}", // LATIN CAPITAL LETTER G WITH MACRON | |
"\u1E21":"{\\=g}", // LATIN SMALL LETTER G WITH MACRON | |
"\u1E22":"{\\.H}", // LATIN CAPITAL LETTER H WITH DOT ABOVE | |
"\u1E23":"{\\.h}", // LATIN SMALL LETTER H WITH DOT ABOVE | |
"\u1E24":"{\\d H}", // LATIN CAPITAL LETTER H WITH DOT BELOW | |
"\u1E25":"{\\d h}", // LATIN SMALL LETTER H WITH DOT BELOW | |
"\u1E26":"{\\\"H}", // LATIN CAPITAL LETTER H WITH DIAERESIS | |
"\u1E27":"{\\\"h}", // LATIN SMALL LETTER H WITH DIAERESIS | |
"\u1E28":"{\\c H}", // LATIN CAPITAL LETTER H WITH CEDILLA | |
"\u1E29":"{\\c h}", // LATIN SMALL LETTER H WITH CEDILLA | |
"\u1E30":"{\\'K}", // LATIN CAPITAL LETTER K WITH ACUTE | |
"\u1E31":"{\\'k}", // LATIN SMALL LETTER K WITH ACUTE | |
"\u1E32":"{\\d K}", // LATIN CAPITAL LETTER K WITH DOT BELOW | |
"\u1E33":"{\\d k}", // LATIN SMALL LETTER K WITH DOT BELOW | |
"\u1E34":"{\\b K}", // LATIN CAPITAL LETTER K WITH LINE BELOW | |
"\u1E35":"{\\b k}", // LATIN SMALL LETTER K WITH LINE BELOW | |
"\u1E36":"{\\d L}", // LATIN CAPITAL LETTER L WITH DOT BELOW | |
"\u1E37":"{\\d l}", // LATIN SMALL LETTER L WITH DOT BELOW | |
"\u1E3A":"{\\b L}", // LATIN CAPITAL LETTER L WITH LINE BELOW | |
"\u1E3B":"{\\b l}", // LATIN SMALL LETTER L WITH LINE BELOW | |
"\u1E3E":"{\\'M}", // LATIN CAPITAL LETTER M WITH ACUTE | |
"\u1E3F":"{\\'m}", // LATIN SMALL LETTER M WITH ACUTE | |
"\u1E40":"{\\.M}", // LATIN CAPITAL LETTER M WITH DOT ABOVE | |
"\u1E41":"{\\.m}", // LATIN SMALL LETTER M WITH DOT ABOVE | |
"\u1E42":"{\\d M}", // LATIN CAPITAL LETTER M WITH DOT BELOW | |
"\u1E43":"{\\d m}", // LATIN SMALL LETTER M WITH DOT BELOW | |
"\u1E44":"{\\.N}", // LATIN CAPITAL LETTER N WITH DOT ABOVE | |
"\u1E45":"{\\.n}", // LATIN SMALL LETTER N WITH DOT ABOVE | |
"\u1E46":"{\\d N}", // LATIN CAPITAL LETTER N WITH DOT BELOW | |
"\u1E47":"{\\d n}", // LATIN SMALL LETTER N WITH DOT BELOW | |
"\u1E48":"{\\b N}", // LATIN CAPITAL LETTER N WITH LINE BELOW | |
"\u1E49":"{\\b n}", // LATIN SMALL LETTER N WITH LINE BELOW | |
"\u1E54":"{\\'P}", // LATIN CAPITAL LETTER P WITH ACUTE | |
"\u1E55":"{\\'p}", // LATIN SMALL LETTER P WITH ACUTE | |
"\u1E56":"{\\.P}", // LATIN CAPITAL LETTER P WITH DOT ABOVE | |
"\u1E57":"{\\.p}", // LATIN SMALL LETTER P WITH DOT ABOVE | |
"\u1E58":"{\\.R}", // LATIN CAPITAL LETTER R WITH DOT ABOVE | |
"\u1E59":"{\\.r}", // LATIN SMALL LETTER R WITH DOT ABOVE | |
"\u1E5A":"{\\d R}", // LATIN CAPITAL LETTER R WITH DOT BELOW | |
"\u1E5B":"{\\d r}", // LATIN SMALL LETTER R WITH DOT BELOW | |
"\u1E5E":"{\\b R}", // LATIN CAPITAL LETTER R WITH LINE BELOW | |
"\u1E5F":"{\\b r}", // LATIN SMALL LETTER R WITH LINE BELOW | |
"\u1E60":"{\\.S}", // LATIN CAPITAL LETTER S WITH DOT ABOVE | |
"\u1E61":"{\\.s}", // LATIN SMALL LETTER S WITH DOT ABOVE | |
"\u1E62":"{\\d S}", // LATIN CAPITAL LETTER S WITH DOT BELOW | |
"\u1E63":"{\\d s}", // LATIN SMALL LETTER S WITH DOT BELOW | |
"\u1E6A":"{\\.T}", // LATIN CAPITAL LETTER T WITH DOT ABOVE | |
"\u1E6B":"{\\.t}", // LATIN SMALL LETTER T WITH DOT ABOVE | |
"\u1E6C":"{\\d T}", // LATIN CAPITAL LETTER T WITH DOT BELOW | |
"\u1E6D":"{\\d t}", // LATIN SMALL LETTER T WITH DOT BELOW | |
"\u1E6E":"{\\b T}", // LATIN CAPITAL LETTER T WITH LINE BELOW | |
"\u1E6F":"{\\b t}", // LATIN SMALL LETTER T WITH LINE BELOW | |
"\u1E7C":"{\\~V}", // LATIN CAPITAL LETTER V WITH TILDE | |
"\u1E7D":"{\\~v}", // LATIN SMALL LETTER V WITH TILDE | |
"\u1E7E":"{\\d V}", // LATIN CAPITAL LETTER V WITH DOT BELOW | |
"\u1E7F":"{\\d v}", // LATIN SMALL LETTER V WITH DOT BELOW | |
"\u1E80":"{\\`W}", // LATIN CAPITAL LETTER W WITH GRAVE | |
"\u1E81":"{\\`w}", // LATIN SMALL LETTER W WITH GRAVE | |
"\u1E82":"{\\'W}", // LATIN CAPITAL LETTER W WITH ACUTE | |
"\u1E83":"{\\'w}", // LATIN SMALL LETTER W WITH ACUTE | |
"\u1E84":"{\\\"W}", // LATIN CAPITAL LETTER W WITH DIAERESIS | |
"\u1E85":"{\\\"w}", // LATIN SMALL LETTER W WITH DIAERESIS | |
"\u1E86":"{\\.W}", // LATIN CAPITAL LETTER W WITH DOT ABOVE | |
"\u1E87":"{\\.w}", // LATIN SMALL LETTER W WITH DOT ABOVE | |
"\u1E88":"{\\d W}", // LATIN CAPITAL LETTER W WITH DOT BELOW | |
"\u1E89":"{\\d w}", // LATIN SMALL LETTER W WITH DOT BELOW | |
"\u1E8A":"{\\.X}", // LATIN CAPITAL LETTER X WITH DOT ABOVE | |
"\u1E8B":"{\\.x}", // LATIN SMALL LETTER X WITH DOT ABOVE | |
"\u1E8C":"{\\\"X}", // LATIN CAPITAL LETTER X WITH DIAERESIS | |
"\u1E8D":"{\\\"x}", // LATIN SMALL LETTER X WITH DIAERESIS | |
"\u1E8E":"{\\.Y}", // LATIN CAPITAL LETTER Y WITH DOT ABOVE | |
"\u1E8F":"{\\.y}", // LATIN SMALL LETTER Y WITH DOT ABOVE | |
"\u1E90":"{\\^Z}", // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX | |
"\u1E91":"{\\^z}", // LATIN SMALL LETTER Z WITH CIRCUMFLEX | |
"\u1E92":"{\\d Z}", // LATIN CAPITAL LETTER Z WITH DOT BELOW | |
"\u1E93":"{\\d z}", // LATIN SMALL LETTER Z WITH DOT BELOW | |
"\u1E94":"{\\b Z}", // LATIN CAPITAL LETTER Z WITH LINE BELOW | |
"\u1E95":"{\\b z}", // LATIN SMALL LETTER Z WITH LINE BELOW | |
"\u1E96":"{\\b h}", // LATIN SMALL LETTER H WITH LINE BELOW | |
"\u1E97":"{\\\"t}", // LATIN SMALL LETTER T WITH DIAERESIS | |
"\u1E98":"{\\r w}", // LATIN SMALL W WITH A RING ABOVE | |
"\u1E99":"{\\r y}", // LATIN SMALL Y WITH A RING ABOVE | |
"\u1EA0":"{\\d A}", // LATIN CAPITAL LETTER A WITH DOT BELOW | |
"\u1EA1":"{\\d a}", // LATIN SMALL LETTER A WITH DOT BELOW | |
"\u1EB8":"{\\d E}", // LATIN CAPITAL LETTER E WITH DOT BELOW | |
"\u1EB9":"{\\d e}", // LATIN SMALL LETTER E WITH DOT BELOW | |
"\u1EBC":"{\\~E}", // LATIN CAPITAL LETTER E WITH TILDE | |
"\u1EBD":"{\\~e}", // LATIN SMALL LETTER E WITH TILDE | |
"\u1ECA":"{\\d I}", // LATIN CAPITAL LETTER I WITH DOT BELOW | |
"\u1ECB":"{\\d i}", // LATIN SMALL LETTER I WITH DOT BELOW | |
"\u1ECC":"{\\d O}", // LATIN CAPITAL LETTER O WITH DOT BELOW | |
"\u1ECD":"{\\d o}", // LATIN SMALL LETTER O WITH DOT BELOW | |
"\u1EE4":"{\\d U}", // LATIN CAPITAL LETTER U WITH DOT BELOW | |
"\u1EE5":"{\\d u}", // LATIN SMALL LETTER U WITH DOT BELOW | |
"\u1EF2":"{\\`Y}", // LATIN CAPITAL LETTER Y WITH GRAVE | |
"\u1EF3":"{\\`y}", // LATIN SMALL LETTER Y WITH GRAVE | |
"\u1EF4":"{\\d Y}", // LATIN CAPITAL LETTER Y WITH DOT BELOW | |
"\u1EF5":"{\\d y}", // LATIN SMALL LETTER Y WITH DOT BELOW | |
"\u1EF8":"{\\~Y}", // LATIN CAPITAL LETTER Y WITH TILDE | |
"\u1EF9":"{\\~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 | |
"{\\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 | |
"{\\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 **/ |