From 200cca74a64061f0ba5364877d3a5d585eba54e6 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Wed, 30 Jan 2008 09:53:19 +0000 Subject: [PATCH] Merged revisions 1986,1988-1990,1996,1998,2000-2004,2006,2008-2010,2013,2020-2028,2032-2034,2037,2039,2044-2049,2052-2056,2059,2065-2066,2068-2072,2075,2077-2079,2081,2083-2084,2086,2088-2094,2096,2099,2101,2103-2104,2107-2110,2115,2118,2120-2122,2126-2128,2131,2140,2142-2145,2149-2153,2155-2159,2165,2167-2168,2170-2171,2173-2176,2179-2183,2185-2186 via svnmerge from https://www.zotero.org/svn/extension/branches/1.0 --- chrome.manifest | 3 +- chrome/content/zotero/addCitationDialog.js | 5 + chrome/content/zotero/bibliography.js | 35 +- .../content/zotero/bindings/zoterosearch.xml | 11 +- chrome/content/zotero/exportOptions.js | 9 +- chrome/content/zotero/fileInterface.js | 14 +- chrome/content/zotero/integrationDocPrefs.xul | 2 +- chrome/content/zotero/note.js | 20 +- chrome/content/zotero/overlay.js | 15 +- .../content/zotero/preferences/preferences.js | 55 +- .../zotero/preferences/preferences.xul | 46 +- .../preferences/quickCopySiteEditor.xul | 21 +- chrome/content/zotero/selectItemsDialog.js | 23 +- chrome/content/zotero/tools/csledit.xul | 2 +- chrome/content/zotero/tools/cslpreview.xul | 2 +- chrome/content/zotero/xpcom/annotate.js | 4 +- chrome/content/zotero/xpcom/attachments.js | 24 +- chrome/content/zotero/xpcom/cite.js | 639 +- chrome/content/zotero/xpcom/data_access.js | 50 +- chrome/content/zotero/xpcom/db.js | 9 + chrome/content/zotero/xpcom/ingester.js | 4 +- chrome/content/zotero/xpcom/integration.js | 131 +- chrome/content/zotero/xpcom/itemTreeView.js | 13 +- chrome/content/zotero/xpcom/quickCopy.js | 28 +- chrome/content/zotero/xpcom/schema.js | 16 + chrome/content/zotero/xpcom/search.js | 54 +- chrome/content/zotero/xpcom/translate.js | 113 +- chrome/content/zotero/xpcom/utilities.js | 24 +- chrome/content/zotero/xpcom/zotero.js | 13 +- chrome/locale/af-ZA/zotero/preferences.dtd | 9 + chrome/locale/af-ZA/zotero/zotero.properties | 12 + chrome/locale/ar/zotero/preferences.dtd | 9 + chrome/locale/ar/zotero/zotero.properties | 12 + chrome/locale/bg-BG/zotero/preferences.dtd | 9 + chrome/locale/bg-BG/zotero/zotero.properties | 12 + chrome/locale/ca-AD/zotero/preferences.dtd | 9 + chrome/locale/ca-AD/zotero/zotero.properties | 12 + chrome/locale/cs-CZ/zotero/preferences.dtd | 9 + chrome/locale/cs-CZ/zotero/zotero.properties | 12 + chrome/locale/da-DK/zotero/preferences.dtd | 9 + chrome/locale/da-DK/zotero/zotero.properties | 12 + chrome/locale/de-AT/zotero/preferences.dtd | 9 + chrome/locale/de-AT/zotero/zotero.properties | 12 + chrome/locale/de-CH/zotero/preferences.dtd | 9 + chrome/locale/de-CH/zotero/zotero.properties | 12 + chrome/locale/de/zotero/preferences.dtd | 9 + chrome/locale/de/zotero/zotero.properties | 12 + chrome/locale/el-GR/zotero/preferences.dtd | 9 + chrome/locale/el-GR/zotero/zotero.properties | 12 + chrome/locale/en-US/zotero/preferences.dtd | 7 +- chrome/locale/en-US/zotero/zotero.properties | 3 +- chrome/locale/es-ES/zotero/preferences.dtd | 9 + chrome/locale/es-ES/zotero/zotero.properties | 12 + chrome/locale/et-EE/zotero/preferences.dtd | 9 + chrome/locale/et-EE/zotero/zotero.properties | 12 + chrome/locale/fr-FR/zotero/preferences.dtd | 9 + chrome/locale/fr-FR/zotero/zotero.properties | 12 + chrome/locale/he-IL/zotero/preferences.dtd | 9 + chrome/locale/he-IL/zotero/zotero.properties | 12 + chrome/locale/hu-HU/zotero/preferences.dtd | 9 + chrome/locale/hu-HU/zotero/zotero.properties | 12 + chrome/locale/is-IS/zotero/preferences.dtd | 9 + chrome/locale/is-IS/zotero/zotero.properties | 12 + chrome/locale/it-IT/zotero/preferences.dtd | 9 + chrome/locale/it-IT/zotero/zotero.properties | 12 + chrome/locale/ja-JP/zotero/preferences.dtd | 9 + chrome/locale/ja-JP/zotero/zotero.properties | 12 + chrome/locale/ko-KR/zotero/preferences.dtd | 9 + chrome/locale/ko-KR/zotero/zotero.properties | 12 + chrome/locale/mn-MN/zotero/preferences.dtd | 9 + chrome/locale/mn-MN/zotero/zotero.properties | 12 + chrome/locale/nb-NO/zotero/preferences.dtd | 9 + chrome/locale/nb-NO/zotero/zotero.properties | 12 + chrome/locale/nl-NL/zotero/preferences.dtd | 9 + chrome/locale/nl-NL/zotero/zotero.properties | 12 + chrome/locale/pl-PL/zotero/preferences.dtd | 9 + chrome/locale/pl-PL/zotero/zotero.properties | 12 + chrome/locale/pt-BR/zotero/preferences.dtd | 9 + chrome/locale/pt-BR/zotero/zotero.properties | 12 + chrome/locale/pt-PT/zotero/preferences.dtd | 9 + chrome/locale/pt-PT/zotero/zotero.properties | 12 + chrome/locale/ro-RO/zotero/preferences.dtd | 9 + chrome/locale/ro-RO/zotero/zotero.properties | 12 + chrome/locale/ru-RU/zotero/preferences.dtd | 9 + chrome/locale/ru-RU/zotero/zotero.properties | 12 + chrome/locale/sr-YU/zotero/preferences.dtd | 9 + chrome/locale/sr-YU/zotero/zotero.properties | 12 + chrome/locale/sv-SE/zotero/preferences.dtd | 9 + chrome/locale/sv-SE/zotero/zotero.properties | 12 + chrome/locale/tr-TR/zotero/preferences.dtd | 9 + chrome/locale/tr-TR/zotero/zotero.properties | 12 + chrome/locale/vi-VN/zotero/preferences.dtd | 9 + chrome/locale/vi-VN/zotero/zotero.properties | 12 + chrome/locale/zh-CN/zotero/preferences.dtd | 9 + chrome/locale/zh-CN/zotero/zotero.properties | 12 + chrome/locale/zh-TW/zotero/preferences.dtd | 9 + chrome/locale/zh-TW/zotero/zotero.properties | 12 + chrome/skin/default/zotero/preferences.css | 8 + components/zotero-protocol-handler.js | 51 +- defaults/preferences/zotero.js | 9 +- scrapers.sql | 6830 +++++++++++++---- 101 files changed, 7001 insertions(+), 1985 deletions(-) diff --git a/chrome.manifest b/chrome.manifest index 5063f2d5fa..fdee75ac8f 100644 --- a/chrome.manifest +++ b/chrome.manifest @@ -1,4 +1,5 @@ content zotero chrome/content/zotero/ +content zotero-platform chrome/content/zotero-platform/ platform locale zotero en-US chrome/locale/en-US/zotero/ locale zotero af-ZA chrome/locale/af-ZA/zotero/ @@ -42,5 +43,3 @@ overlay chrome://browser/content/browser.xul chrome://zotero/content/itemPane.xu style chrome://browser/content/browser.xul chrome://zotero/skin/zotero.css style chrome://global/content/customizeToolbar.xul chrome://zotero/skin/zotero.css - -content zotero-platform chrome/content/zotero-platform/ platform diff --git a/chrome/content/zotero/addCitationDialog.js b/chrome/content/zotero/addCitationDialog.js index b9abc2e6e1..a15586ec51 100644 --- a/chrome/content/zotero/addCitationDialog.js +++ b/chrome/content/zotero/addCitationDialog.js @@ -459,6 +459,11 @@ var Zotero_Citation_Dialog = new function () { citationItem[property] = document.getElementById(property)[_preserveData[property]]; } } + + if(citationItem["locator"] == "") { + citationItem["locator"] = citationItem["locatorType"] = undefined; + } + io.citation.citationItems = [citationItem]; } } diff --git a/chrome/content/zotero/bibliography.js b/chrome/content/zotero/bibliography.js index 5878f1152f..a8180e7bda 100644 --- a/chrome/content/zotero/bibliography.js +++ b/chrome/content/zotero/bibliography.js @@ -60,22 +60,29 @@ var Zotero_File_Interface_Bibliography = new function() { } // add styles to list - for(var i in styles) { + var index = 0; + for (var i in styles) { var itemNode = document.createElement("listitem"); itemNode.setAttribute("value", i); itemNode.setAttribute("label", styles[i]); listbox.appendChild(itemNode); if(i == _io.style) { - listbox.selectedItem = itemNode; + var selectIndex = index; } + index++; } - // select first item by default - if(listbox.selectedIndex == -1) { - listbox.selectedIndex = 0; + if (selectIndex < 1) { + selectIndex = 0; } + // Can't select below-the-fold listitems inline in Firefox 2, because that would be too easy + setTimeout(function () { + listbox.ensureIndexIsVisible(selectIndex); + listbox.selectedIndex = selectIndex; + }, 1); + // ONLY FOR bibliography.xul: export options if(document.getElementById("save-as-rtf")) { // restore saved bibliographic settings @@ -92,7 +99,7 @@ var Zotero_File_Interface_Bibliography = new function() { // bookmarks text if(document.getElementById("displayAs")) { if(_io.useEndnotes && _io.useEndnotes == 1) document.getElementById("displayAs").selectedIndex = 1; - styleChanged(); + styleChanged(selectIndex); if(_io.useBookmarks && _io.useBookmarks == 1) document.getElementById("formatUsing").selectedIndex = 1; if(_io.openOffice) { @@ -105,7 +112,7 @@ var Zotero_File_Interface_Bibliography = new function() { // add border on Windows if(Zotero.isWin) { - document.getElementById("zotero-bibliography-container").style.border = "1px solid black"; + document.getElementById("doc-prefs-dialog").style.border = "1px solid black"; } } window.sizeToContent(); @@ -115,9 +122,19 @@ var Zotero_File_Interface_Bibliography = new function() { /* * ONLY FOR integrationDocPrefs.xul: called when style is changed */ - function styleChanged() { + function styleChanged(index) { + // When called from init(), selectedItem isn't yet set + if (index != undefined) { + var selectedItem = document.getElementById("style-listbox").getItemAtIndex(index); + } + else { + var selectedItem = document.getElementById("style-listbox").selectedItem; + } + + var selectedStyle = selectedItem.getAttribute('value'); + // update status of displayAs box based - var selectedStyle = document.getElementById("style-listbox").selectedItem.getAttribute('value'); + var styleClass = Zotero.Cite.getStyleClass(selectedStyle); document.getElementById("displayAs").disabled = styleClass != "note"; } diff --git a/chrome/content/zotero/bindings/zoterosearch.xml b/chrome/content/zotero/bindings/zoterosearch.xml index 31adfe758e..dea7fc4f11 100644 --- a/chrome/content/zotero/bindings/zoterosearch.xml +++ b/chrome/content/zotero/bindings/zoterosearch.xml @@ -101,6 +101,7 @@ @@ -200,11 +201,11 @@ - + - + @@ -215,8 +216,8 @@ - - + + diff --git a/chrome/content/zotero/exportOptions.js b/chrome/content/zotero/exportOptions.js index ba126c0177..3ba676735b 100644 --- a/chrome/content/zotero/exportOptions.js +++ b/chrome/content/zotero/exportOptions.js @@ -109,6 +109,8 @@ var Zotero_File_Interface_Export = new function() { } var optionsBox = document.getElementById("translator-options"); + optionsBox.hidden = true; + var haveOption = false; for(var i=0; i -1 && index < treechildren.childNodes.length) { var treerow = treechildren.childNodes[index].firstChild; - var domain = treerow.childNodes[0].getAttribute('label') - var format = treerow.childNodes[1].getAttribute('label') + var domain = treerow.childNodes[0].getAttribute('label'); + var format = treerow.childNodes[1].getAttribute('label'); + var asHTML = treerow.childNodes[2].getAttribute('label') != ''; } var format = Zotero.QuickCopy.getSettingFromFormattedName(format); + if (asHTML) { + format = format.replace('bibliography=', 'bibliography/html='); + } var io = {domain: domain, format: format, ok: false}; window.openDialog('chrome://zotero/content/preferences/quickCopySiteEditor.xul', "zotero-preferences-quickCopySiteEditor", "chrome, modal", io); @@ -254,14 +289,18 @@ function refreshQuickCopySiteList() { var treerow = document.createElement('treerow'); var domainCell = document.createElement('treecell'); var formatCell = document.createElement('treecell'); + var HTMLCell = document.createElement('treecell'); domainCell.setAttribute('label', siteData[i].domainPath); var formatted = Zotero.QuickCopy.getFormattedNameFromSetting(siteData[i].format); formatCell.setAttribute('label', formatted); + var copyAsHTML = Zotero.QuickCopy.getContentType(siteData[i].format) == 'html'; + HTMLCell.setAttribute('label', copyAsHTML ? ' ✓ ' : ''); treerow.appendChild(domainCell); treerow.appendChild(formatCell); + treerow.appendChild(HTMLCell); treeitem.appendChild(treerow); treechildren.appendChild(treeitem); } diff --git a/chrome/content/zotero/preferences/preferences.xul b/chrome/content/zotero/preferences/preferences.xul index 5aef1d7b17..ef4c81f016 100644 --- a/chrome/content/zotero/preferences/preferences.xul +++ b/chrome/content/zotero/preferences/preferences.xul @@ -262,34 +262,38 @@ To add a new preference: - - + diff --git a/chrome/content/zotero/selectItemsDialog.js b/chrome/content/zotero/selectItemsDialog.js index 4ff61b93c1..2774457036 100644 --- a/chrome/content/zotero/selectItemsDialog.js +++ b/chrome/content/zotero/selectItemsDialog.js @@ -61,11 +61,26 @@ function onCollectionSelected() { var collection = collectionsView._getItemAtRow(collectionsView.selection.currentIndex); collection.setSearch(''); - - itemsView = new Zotero.ItemTreeView(collection, (window.arguments[1] ? true : false)); - document.getElementById('zotero-items-tree').view = itemsView; + + try { + Zotero.UnresponsiveScriptIndicator.disable(); + itemsView = new Zotero.ItemTreeView(collection, (window.arguments[1] ? true : false)); + document.getElementById('zotero-items-tree').view = itemsView; + } + finally { + Zotero.UnresponsiveScriptIndicator.enable(); + } + + if (collection.isLibrary()) { + Zotero.Prefs.set('lastViewedFolder', 'L'); + } + if (collection.isCollection()) { + Zotero.Prefs.set('lastViewedFolder', 'C' + collection.ref.getID()); + } + else if (collection.isSearch()) { + Zotero.Prefs.set('lastViewedFolder', 'S' + collection.ref.id); + } } - } function onSearch() diff --git a/chrome/content/zotero/tools/csledit.xul b/chrome/content/zotero/tools/csledit.xul index 50ef28076e..02e56bdd44 100644 --- a/chrome/content/zotero/tools/csledit.xul +++ b/chrome/content/zotero/tools/csledit.xul @@ -99,7 +99,7 @@ iframe.contentDocument.documentElement.innerHTML = '

No references selected in Zotero.

'; return; } - + var csl; if (str.indexOf("\r\n'; + } else { + preamble += '
\r\n'; } } - } else if(format == "RTF" || format == "Integration") { - if(format == "RTF") { - preamble = "{\\rtf\\ansi{\\fonttbl\\f0\\froman Times New Roman;}{\\colortbl;\\red255\\green255\\blue255;}\\pard\\f0"; + } else { + if(format == "RTF" || format == "Integration") { + if(format == "RTF") { + preamble = "{\\rtf\\ansi{\\fonttbl\\f0\\froman Times New Roman;}{\\colortbl;\\red255\\green255\\blue255;}\\pard\\f0"; + } + + var tabStop = null; + if(hangingIndent) { + var indent = 720; // 720 twips = 0.5 in + var firstLineIndent = -720; // -720 twips = -0.5 in + } else { + var indent = 0; + var firstLineIndent = 0; + } } - var tabStop = null; - if(hangingIndent) { - var indent = 720; // 720 twips = 0.5 in - var firstLineIndent = -720; // -720 twips = -0.5 in - } else { - var indent = 0; - var firstLineIndent = 0; + var returnChars = ""; + for(j=0; j<=entrySpacing; j++) { + if(format == "RTF") { + returnChars += "\\\r\n"; + } else if(Zotero.isWin) { + returnChars += "\r\n"; + } else { + returnChars += "\n"; + } } } @@ -597,7 +626,7 @@ Zotero.CSL.prototype.formatBibliography = function(itemSet, format) { string = string.get(); } - + if(secondFieldAlign && (format == "RTF" || format == "Integration")) { if(format == "RTF") { var tab = string.indexOf("\\tab "); @@ -618,38 +647,40 @@ Zotero.CSL.prototype.formatBibliography = function(itemSet, format) { if(this.class == "note" && isCitation) { output += "
  • "+string+span+"
  • \r\n"; } else if(secondFieldAlign) { - output += ''+string+span+"\r\n" - +' \r\n'; + output += ''+string+span+"\r\n"; + for(var j=0; j\r\n"; + if(i == 0) { + // first p has no margins + var margin = "0"; + } else { + var margin = (entrySpacing*lineSpacing).toString()+"em 0 0 0"; + } + output += '

    '+string+span+"

    \r\n"; } - } else if(format == "RTF") { + } else { if(this.class == "note" && isCitation) { - index++; - output += index+". "; + if(format == "RTF") { + index++; + output += index+". "; + } else if(format == "Text") { + index++; + output += index+". "; + } } - output += string+"\\\r\n\\\r\n"; - } else { - if(format == "Text" && this.class == "note" && isCitation) { - index++; - output += index+". "; - } - // attach \n on mac (since both \r and \n count as newlines for - // clipboard purposes) - output += string+(Zotero.isWin ? "\r\n\r\n" : "\n\n"); + output += string+returnChars; } } if(format == "HTML") { if(this.class == "note" && isCitation) { output += ''; + } else if(secondFieldAlign) { + output += ''; } else { - if(secondFieldAlign) { - output += ''; - } - if(hangingIndent) { - output += '
    '; - } + output += ''; } } else if(format == "RTF" || format == "Integration") { if(secondFieldAlign) { @@ -669,18 +700,22 @@ Zotero.CSL.prototype.formatBibliography = function(itemSet, format) { } preamble += "\\li"+indent+" \\fi"+firstLineIndent+" "; + if(format == "Integration") { + preamble += "\\sl"+lineSpacing+" "; + } else if(format == "RTF" && lineSpacing != 1) { + preamble += "\\sl"+(240*lineSpacing)+" \\slmult1 "; + } + if(tabStop !== null) { preamble += "\\tx"+tabStop+" "; } - - if(format == "RTF") { - // drop last 6 characters of output (last two returns) - output = output.substr(0, output.length-6)+"}"; - } else { - // drop last 4 characters (last two returns) - output = output.substr(0, (Zotero.isWin ? output.length-4 : output.length-2)); - } preamble += "\r\n"; + + // drop last returns + output = output.substr(0, output.length-returnChars.length); + + // add bracket for RTF + if(format == "RTF") output += "}"; } return preamble+output; @@ -802,6 +837,21 @@ Zotero.CSL.prototype._processNames = function(item, element, formattedString, co if(formattedString.format == "Sort") { // for sort, we use the plain names var name = creators[i].getNameVariable("lastName"); + + // cut off lowercase parts of otherwise capitalized names (e.g., "de") + var lastNameParts = name.split(" "); + if(lastNameParts.length > 1 && lastNameParts[0] !== "" && lastNameParts[0].length <= 4 + && lastNameParts[0][0].toLowerCase() == lastNameParts[0][0] + && lastNameParts[lastNameParts.length-1][0].toUpperCase() == lastNameParts[lastNameParts.length-1][0]) { + name = ""; + for(var k=1; k 0 + exists = citationItem && citationItem.locator && citationItem.locator.length > 0 } else if(Zotero.CSL._dateVariables[variables[j]]) { // getDate not false/undefined - var exists = !!item.getDate(variables[j]); + exists = !!item.getDate(variables[j]); } else if(Zotero.CSL._namesVariables[variables[j]]) { // getNames not false/undefined, not empty - var exists = item.getNames(variables[j]); + exists = item.getNames(variables[j]); if(exists) exists = !!exists.length; } else { - var exists = item.getVariable(variables[j]) !== ""; + exists = item.getVariable(variables[j]); + if (exists) exists = !!exists.length; + } + } else if (attribute == "is-numeric") { + exists = item.getNumericVariable(variables[j]); + } else if (attribute == "is-date") { // XXX - this needs improving + if (Zotero.CSL._dateVariables[variables[j]]) { + exists = !!item.getDate(variables[j]); + } + } else if(attribute == "is-plural") { + if(Zotero.CSL._namesVariables[variables[j]]) { + exists = item.getNames(variables[j]); + if(exists) exists = exists.length > 1; + } else if(variables[j] == "page" || variables[j] == "locator") { + if(variables[j] == "page") { + var value = item.getVariable("page"); + } else { + var value = citationItem && citationItem.locator ? citationItem.locator : ""; + } + exists = value.indexOf("-") != -1 || value.indexOf(",") != -1 || value.indexOf("\u2013") != -1; } } else if(attribute == "type") { - var exists = item.isType(variables[j]); + exists = item.isType(variables[j]); } else if(attribute == "disambiguate") { - var exists = (variables[j] == "true" && item.getProperty("disambiguate-condition")) + exists = (variables[j] == "true" && item.getProperty("disambiguate-condition")) || (variables[j] == "false" && !item.getProperty("disambiguate-condition")); } else if(attribute == "locator") { - var exists = citationItem && citationItem.locator && + exists = citationItem && citationItem.locator && (citationItem.locatorType == variables[j] || (!citation.locatorType && variables[j] == "page")); } else { // attribute == "position" if(variables[j] == "first") { - var exists = !citationItem + exists = !citationItem || !citationItem.position || citationItem.position == Zotero.CSL.POSITION_FIRST; } else if(variables[j] == "subsequent") { - var exists = citationItem && citationItem.position >= Zotero.CSL.POSITION_SUBSEQUENT; + exists = citationItem && citationItem.position >= Zotero.CSL.POSITION_SUBSEQUENT; } else if(variables[j] == "ibid") { - var exists = citationItem && citationItem.position >= Zotero.CSL.POSITION_IBID; + exists = citationItem && citationItem.position >= Zotero.CSL.POSITION_IBID; } else if(variables[j] == "ibid-with-locator") { - var exists = citationItem && citationItem.position == Zotero.CSL.POSITION_IBID_WITH_LOCATOR; + exists = citationItem && citationItem.position == Zotero.CSL.POSITION_IBID_WITH_LOCATOR; } } @@ -1258,9 +1349,8 @@ Zotero.CSL.prototype._processElements = function(item, element, formattedString, var newString = formattedString.clone(newChild.@delimiter.toString()); var success = this._processElements(item, newChild, newString, context, citationItem, ignore); - + if(success) dataAppended = true; formattedString.concat(newString, child); - dataAppended = true; // then break break; @@ -1282,13 +1372,16 @@ Zotero.CSL.prototype._compareItem = function(a, b, context) { var sortA = []; var sortB = []; + Zotero.debug("CompareItem"); // author if(context.sort.key.length()) { + Zotero.debug("Context Sort by " + context.sort.key.length + " keys"); for each(var key in context.sort.key) { var keyA = new Zotero.CSL.SortString(); var keyB = new Zotero.CSL.SortString(); if(key.@macro.length()) { + Zotero.debug("Context macro "); this._processElements(a, this._csl.macro.(@name == key.@macro), keyA); this._processElements(b, this._csl.macro.(@name == key.@macro), keyB); } else if(key.@variable.length()) { @@ -1306,6 +1399,8 @@ Zotero.CSL.prototype._compareItem = function(a, b, context) { this._processNames(a, element, keyA, context, null, [variable]); this._processNames(b, element, keyB, context, null, [variable]); } else { // text + Zotero.debug("Context key " + variable); + if(variable == "citation-number") { keyA.append(a.getProperty(variable)); keyB.append(b.getProperty(variable)); @@ -1326,6 +1421,16 @@ Zotero.CSL.prototype._compareItem = function(a, b, context) { } } } + + // sort by index + var aIndex = a.getProperty("index"); + var bIndex = b.getProperty("index"); + if(aIndex !== "" && (bIndex === "" || aIndex < bIndex)) { + return -1; + } else if(aIndex != bIndex) { + return 1; + } + return 0; } @@ -1604,6 +1709,8 @@ Zotero.CSL.Global = new function() { * locatorType * locator * suppressAuthor + * item + * itemID */ Zotero.CSL.CitationItem = function(item) { if(item) { @@ -1715,8 +1822,9 @@ Zotero.CSL.Item = function(item) { // don't return URL or accessed information for journal articles if a // pages field exists + var itemType = Zotero.ItemTypes.getName(this.zoteroItem.getType()); if(!Zotero.Prefs.get("export.citePaperJournalArticleURL") - && Zotero.ItemTypes.getName(this.zoteroItem.getType()) == "journalArticle" + && ["journalArticle", "newspaperArticle", "magazineArticle"].indexOf(itemType) !== -1 && this.zoteroItem.getField("pages")) { this._ignoreURL = true; } @@ -1790,31 +1898,35 @@ Zotero.CSL.Item.prototype.getDate = function(variable) { Zotero.CSL.Item._zoteroFieldMap = { "long":{ "title":"title", - "container-title":"publicationTitle", + "container-title":["publicationTitle", "reporter", "code"], /* reporter and code should move to SQL mapping tables */ "collection-title":["seriesTitle", "series"], - "publisher":["publisher", "distributor"], + "collection-number":"seriesNumber", + "publisher":["publisher", "distributor"], /* distributor should move to SQL mapping tables */ "publisher-place":"place", "page":"pages", "volume":"volume", "issue":"issue", "number-of-volumes":"numberOfVolumes", "edition":"edition", - "genre":"type", + "section":"section", + "genre":["type", "artworkSize"], /* artworkSize should move to SQL mapping tables, or added as a CSL variable */ "medium":"medium", "archive":"repository", "archive_location":"archiveLocation", - "event":["meetingName", "conferenceName"], + "event":["meetingName", "conferenceName"], /* these should be mapped to the same base field in SQL mapping tables */ "event-place":"place", "abstract":"abstractNote", "URL":"url", "DOI":"DOI", + "ISBN" : "ISBN", "note":"extra", - "number":["number", "documentNumber", "patentNumber", "billNumber", - "codeNumber", "episodeNumber"] + "number":"number", + "references":"history" }, "short":{ "title":["shortTitle", "title"], - "container-title":"journalAbbreviation" + "container-title":"journalAbbreviation", + "genre":["shortTitle", "type"] /* needed for subsequent citations of items with no title */ } } @@ -1854,6 +1966,96 @@ Zotero.CSL.Item.prototype.getVariable = function(variable, form) { return ""; } +/* + * convert a number into a ordinal number 1st, 2nd, 3rd etc. + */ +Zotero.CSL.Item.prototype.makeOrdinal = function(value) { + var ind = parseInt(value); + var daySuffixes = Zotero.getString("date.daySuffixes").replace(/, ?/g, "|").split("|"); + value += (parseInt(ind/10)%10) == 1 ? daySuffixes[3] : (ind % 10 == 1) ? daySuffixes[0] : (ind % 10 == 2) ? daySuffixes[1] : (ind % 10 == 3) ? daySuffixes[2] : daySuffixes[3]; + return value; +} + + +Zotero.CSL.Item._zoteroRomanNumerals = { + "0" : [ "", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix" ], + "1" : [ "", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc" ], + "2" : [ "", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm" ], + "3" : [ "", "m", "mm", "mmm", "mmmm", "mmmmm"], + } + +/* + * Convert a number into a roman numeral. + */ +Zotero.CSL.Item.prototype.makeRoman = function(value) { + + var number = parseInt(value); + var result = ""; + if (number > 5000) return ""; + var thousands = parseInt(number/1000); + if (thousands > 0) { + result += Zotero.CSL.Item._zoteroRomanNumerals[3][thousands]; + } + number = number % 1000; + var hundreds = parseInt(number/100); + if (hundreds > 0) { + result += Zotero.CSL.Item._zoteroRomanNumerals[2][hundreds]; + } + number = number % 100; + var tens = parseInt(number/10); + if (tens > 0) { + result += Zotero.CSL.Item._zoteroRomanNumerals[1][tens]; + } + number = number % 10; + if (number > 0) { + result += Zotero.CSL.Item._zoteroRomanNumerals[0][number]; + } + return result; +} + +Zotero.CSL.Item._zoteroNumberFieldMap = { + "volume":"volume", + "issue":"issue", + "number-of-volumes":"numberOfVolumes", + "edition":"edition", + "number":"number" +} +/* + * Gets a numeric object for a specific type. + */ +Zotero.CSL.Item.prototype.getNumericVariable = function(variable, form) { + + if(!Zotero.CSL.Item._zoteroNumberFieldMap[variable]) return ""; + + var zoteroFields = []; + var field; + + field = Zotero.CSL.Item._zoteroNumberFieldMap[variable]; + if(typeof field == "string") { + zoteroFields.push(field); + } else { + zoteroFields = zoteroFields.concat(field); + } + + var matches; + for each(var zoteroField in zoteroFields) { + var value = this.zoteroItem.getField(zoteroField, false, true); + var matches; + if(value != "" && (matches = value.toString().match(Zotero.CSL._numberRegexp)) ) { + value = matches[0]; + if (form == "ordinal") { + return this.makeOrdinal(value); + } + else if (form == "roman") { + return this.makeRoman(value); + } + else + return value; + } + } + return ""; +} + /* * Sets an item-specific property to a given value. */ @@ -1865,7 +2067,7 @@ Zotero.CSL.Item.prototype.setProperty = function(property, value) { * Sets an item-specific property to a given value. */ Zotero.CSL.Item.prototype.getProperty = function(property, value) { - return (this._properties[property] ? this._properties[property] : ""); + return (this._properties[property] !== undefined ? this._properties[property] : ""); } Zotero.CSL.Item._optionalTypeMap = { @@ -1907,6 +2109,7 @@ Zotero.CSL.Item._fallbackTypeMap = { magazineArticle:"article", newspaperArticle:"article", thesis:"article", + conferencePaper:"chapter", letter:"article", manuscript:"article", interview:"article", @@ -1917,7 +2120,7 @@ Zotero.CSL.Item._fallbackTypeMap = { bill:"book", case:"book", hearing:"book", - patent:"book", + patent:"article", statute:"book", email:"article", map:"article", @@ -2137,6 +2340,8 @@ Zotero.CSL.ItemSet.prototype.add = function(items) { var newItem = new Zotero.CSL.Item(items[i]); } + newItem.setProperty("index", this.items.length); + this.itemsById[newItem.getID()] = newItem; this.items.push(newItem); newItems.push(newItem); @@ -2167,26 +2372,21 @@ Zotero.CSL.ItemSet.prototype.remove = function(items) { * citations have changed */ Zotero.CSL.ItemSet.prototype.resort = function() { - // sort, if necessary - if(this.sortable) { - var me = this; - - this.items = this.items.sort(function(a, b) { - return me.csl._compareItem(a, b, me.bibliography); - }); - } + // sort + var me = this; + this.items = this.items.sort(function(a, b) { + return me.csl._compareItem(a, b, me.bibliography); + }); // first loop through to collect disambiguation data by item, so we can // see if any items have changed; also collect last names - if(this._citationChangingOptions.length) { - var oldOptions = new Array(); - for(var i in this._citationChangingOptions) { - oldOptions[i] = new Array(); - for(var j in this.items) { - if(this.items[j] == undefined) continue; - oldOptions[i][j] = this.items[j].getProperty(this._citationChangingOptions[i]); - this.items[j].setProperty(this._citationChangingOptions[i], ""); - } + var oldOptions = new Array(); + for(var i in this._citationChangingOptions) { + oldOptions[i] = new Array(); + for(var j in this.items) { + if(this.items[j] == undefined) continue; + oldOptions[i][j] = this.items[j].getProperty(this._citationChangingOptions[i]); + this.items[j].setProperty(this._citationChangingOptions[i], ""); } } @@ -2398,7 +2598,7 @@ Zotero.CSL.ItemSet.prototype.resort = function() { } item.setProperty("citation-number", citationNumber++); - + lastItem = item; lastNames = names; lastYear = year; @@ -2406,13 +2606,11 @@ Zotero.CSL.ItemSet.prototype.resort = function() { // find changed citations var changedCitations = new Array(); - if(this._citationChangingOptions.length) { - for(var j in this.items) { - if(this.items[j] == undefined) continue; - for(var i in this._citationChangingOptions) { - if(this.items[j].getProperty(this._citationChangingOptions[i]) != oldOptions[i][j]) { - changedCitations.push(this.items[j]); - } + for(var j in this.items) { + if(this.items[j] == undefined) continue; + for(var i in this._citationChangingOptions) { + if(this.items[j].getProperty(this._citationChangingOptions[i]) != oldOptions[i][j]) { + changedCitations.push(this.items[j]); } } } @@ -2441,6 +2639,7 @@ Zotero.CSL.FormattedString = function(context, format, delimiter, subsequent) { this.delimiter = delimiter; this.string = ""; this.closePunctuation = false; + this.closeFormatting = ""; this.useBritishStyleQuotes = false; // insert tab iff second-field-align is on @@ -2459,7 +2658,7 @@ Zotero.CSL.FormattedString = function(context, format, delimiter, subsequent) { } } -Zotero.CSL.FormattedString._punctuation = "!.,?"; +Zotero.CSL.FormattedString._punctuation = "!.,?:"; /* * attaches another formatted string to the end of the current one @@ -2473,25 +2672,32 @@ Zotero.CSL.FormattedString.prototype.concat = function(formattedString, element) throw "CSL: cannot concatenate formatted strings: formats do not match"; } - if(formattedString.string) { - // first, append the actual string - var haveAppended = this.append(formattedString.string, element, false, true); - - // if there's close punctuation to append, that also counts - if(formattedString.closePunctuation) { - haveAppended = true; - if(this.closePunctuation) { - // if there's existing close punctuation and punctuation to - // append, we need to append that - this.string += this.closePunctuation; - } - // add the new close punctuation - this.closePunctuation = formattedString.closePunctuation; + var haveAppended = false; + var suffix = false; + if(formattedString.string !== "") { + // first, append the actual string without its suffix + if(element && element.@suffix.length()) { + // don't edit original element + element = element.copy(); + // let us decide to add the suffix + suffix = element.@suffix.toString(); + element.@suffix = []; } - - return haveAppended; + haveAppended = this.append(formattedString.string, element, false, true); } - return false; + + // if there's close punctuation to append, that also counts + if(formattedString.closePunctuation || formattedString.closeFormatting) { + haveAppended = true; + // add the new close punctuation + this.closeFormatting = formattedString.closeFormatting; + this.closePunctuation = formattedString.closePunctuation; + } + + // append suffix, if we didn't before + if(haveAppended && suffix !== false) this.append(suffix, null, true); + + return haveAppended; } Zotero.CSL.FormattedString._rtfEscapeFunction = function(aChar) { @@ -2502,7 +2708,8 @@ Zotero.CSL.FormattedString._rtfEscapeFunction = function(aChar) { * appends a string (with format parameters) to the current one */ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDelimit, dontEscape) { - if(!string) return false; + if(!string && string !== 0) return false; + if(typeof(string) != "string") { string = string.toString(); } @@ -2524,44 +2731,39 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli } } + if(prefix) { + this.append(prefix, null, true); + } + + var addBefore = ""; + var addAfter = ""; + // append line before if display="block" - var closeDiv = false; if(element && (element["@display"] == "block" || this.appendLine)) { if(this.format == "HTML") { if(this.option.(@name == "hanging-indent").@value == "true") { - this.string += '
    ' + addBefore += '
    ' } else { - this.string += '
    '; + addBefore += '
    '; } - var closeDiv; + addAfter = '
    '; } else { if(this.format == "RTF") { - this.string += "\r\n\\line "; + addBefore += "\r\n\\line "; } else if(this.format == "Integration") { - this.string += "\x0B"; + addBefore += "\x0B"; } else { - this.string += (Zotero.isWin ? "\r\n" : "\n"); + addBefore += (Zotero.isWin ? "\r\n" : "\n"); } this.appendLine = element["@display"] == "block"; } } - if(prefix) { - this.append(prefix, null, true); - } - if(this.suppressLeadingWhitespace) { string = string.replace(/^\s+/, ""); this.suppressLeadingWhitespace = false; } - if(string.length && string[0] == "." && - Zotero.CSL.FormattedString._punctuation.indexOf(this.string[this.string.length-1]) != -1) { - // if string already ends in punctuation, preserve the existing stuff - // and don't add a period - string = string.substr(1); - } - // close quotes, etc. using punctuation if(this.closePunctuation) { if(Zotero.CSL.FormattedString._punctuation.indexOf(string[0]) != -1) { @@ -2572,59 +2774,56 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli this.closePunctuation = false; } + // clean up + if(string.length && string[0] == "." && + Zotero.CSL.FormattedString._punctuation.indexOf(this.string[this.string.length-1]) != -1) { + // if string already ends in punctuation, preserve the existing stuff + // and don't add a period + string = string.substr(1); + } else if(this.string[this.string.length-1] == "(" && string[0] == " ") { + string = string.substr(1); + } else if(this.string[this.string.length-1] == " " && string[0] == ")") { + this.string = this.string.substr(0, this.string.length-1); + } + + // close previous formatting + this.string += this.closeFormatting; + this.closeFormatting = ""; + // handling of "text-transform" attribute (now obsolete) if(element && element["@text-transform"].length() && !element["@text-case"].length()) { var mapping = {"lowercase":"lowercase", "uppercase":"uppercase", "capitalize":"capitalize-first"}; element["@text-case"] = mapping[element["@text-transform"].toString()]; } + // handle text case - if(element && element["@text-case"].length()) { - if(element["@text-case"] == "lowercase") { - // all lowercase - string = string.toLowerCase(); - } else if(element["@text-case"] == "uppercase") { - // all uppercase - string = string.toUpperCase(); - } else if(element["@text-case"] == "capitalize-first") { - // capitalize first - string = string[0].toUpperCase()+string.substr(1).toLowerCase(); - } else if(element["@text-case"] == "capitalize-all") { - // capitalize first - var strings = string.split(" "); - for(var i=0; i 1) { - strings[i] = strings[i][0].toUpperCase()+strings[i].substr(1).toLowerCase(); - } else if(strings[i].length == 1) { - strings[i] = strings[i].toUpperCase(); - } - } - string = strings.join(" "); - } else if(element["@text-case"] == "title") { - string = Zotero.Text.titleCase(string); - } - } - - if(!dontEscape) { - if(this.format == "HTML") { - string = string.replace("&", "&", "g") - .replace("<", "<", "g") - .replace(">", ">", "g") - .replace(/(\r\n|\r|\n)/g, "
    ") - .replace(/[\x00-\x1F]/g, ""); - } else if(this.format == "RTF") { - string = string.replace("\\", "\\\\", "g") - .replace(/[\x7F-\uFFFF]/g, Zotero.CSL.FormattedString._rtfEscapeFunction) - .replace("\t", "\\tab ", "g") - .replace(/(\r\n|\r|\n)/g, "\\line "); - } else if(this.format == "Integration") { - string = string.replace(/\\/g, "\\\\") - .replace(/(\r\n|\r|\n)/g, "\\line "); - } else { - string = string.replace(/(\r\n|\r|\n)/g, (Zotero.isWin ? "\r\n" : "\n")); - } - } - if(element) { + if(element["@text-case"].length()) { + if(element["@text-case"] == "lowercase") { + // all lowercase + string = string.toLowerCase(); + } else if(element["@text-case"] == "uppercase") { + // all uppercase + string = string.toUpperCase(); + } else if(element["@text-case"] == "capitalize-first") { + // capitalize first + string = string[0].toUpperCase()+string.substr(1).toLowerCase(); + } else if(element["@text-case"] == "capitalize-all") { + // capitalize first + var strings = string.split(" "); + for(var i=0; i 1) { + strings[i] = strings[i][0].toUpperCase()+strings[i].substr(1).toLowerCase(); + } else if(strings[i].length == 1) { + strings[i] = strings[i].toUpperCase(); + } + } + string = strings.join(" "); + } else if(element["@text-case"] == "title") { + string = Zotero.Text.titleCase(string); + } + } + // style attributes if(this.format == "HTML") { var style = ""; @@ -2640,30 +2839,26 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli } if(style) { - string = ''+string+''; + addBefore += ''; + addAfter = ''+addAfter; } } else { if(this.format == "RTF" || this.format == "Integration") { - if(element["@font-style"] == "oblique" || element["@font-style"] == "italic") { - string = "\\i "+string+"\\i0 "; + var rtfAttributes = { + "font-style":{"oblique":"i", "italic":"i"}, + "font-variant":{"small-caps":"scaps"}, + "font-weight":{"bold":"b"}, + "text-decoration":{"underline":"ul"}, + "vertical-align":{"sup":"super", "sub":"sub"} } - if(element["@font-variant"] == "small-caps") { - string = "\\scaps "+string+"\\scaps0 "; - } - - if(element["@font-weight"] == "bold") { - string = "\\b "+string+"\\b0 "; - } - - if(element["@text-decoration"] == "underline") { - string = "\\ul "+string+"\\ul0 "; - } - - if(element["@vertical-align"] == "sup") { - string = "\\super "+string+"\\super0 "; - } else if(element["@vertical-align"] == "sub") { - string = "\\sub "+string+"\\sub0 "; + for(var j in rtfAttributes) { + for(var k in rtfAttributes[j]) { + if(element["@"+j] == k) { + addBefore += "\\"+rtfAttributes[j][k]+" "; + addAfter = "\\"+rtfAttributes[j][k]+"0 "+addAfter; + } + } } } } @@ -2680,7 +2875,36 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli } } - this.string += string; + if(!dontEscape) { + if(this.format == "HTML") { + string = string.replace("&", "&", "g") + .replace("<", "<", "g") + .replace(">", ">", "g") + .replace(/(\r\n|\r|\n)/g, "
    ") + .replace(/[\x00-\x1F]/g, ""); + } else if(this.format == "RTF" || this.format == "Integration") { + string = string.replace("\\", "\\\\", "g") + .replace(/(\r\n|\r|\n)/g, "\\line "); + if(string.substr(string.length-6) == "\\line ") { + string = string.substr(0, string.length-6); + addAfter = "\\line "+addAfter; + } + + if(this.format == "RTF") { + string = string.replace(/[\x7F-\uFFFF]/g, Zotero.CSL.FormattedString._rtfEscapeFunction) + .replace("\t", "\\tab ", "g"); + + if(string.substr(string.length-5) == "\\tab ") { + string = string.substr(0, string.length-5); + addAfter = "\\tab "+addAfter; + } + } + } else { + string = string.replace(/(\r\n|\r|\n)/g, (Zotero.isWin ? "\r\n" : "\n")); + } + } + + this.string += addBefore+string; var suffix; if(element && element.@suffix.length()) { @@ -2688,9 +2912,6 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli } // close div for display=block in HTML - if(closeDiv) { - this.string += "
    "; - } // save for second-field-align if(!dontDelimit && this.insertTabAfterField) { @@ -2698,19 +2919,21 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli this.string = this.string.replace(/\s+$/, ""); if(this.format == "HTML") { - this.string += ''; + addAfter += ''; } else if(this.format == "RTF") { - this.string += "\\tab "; + addAfter += "\\tab "; } else if(this.format == "Integration") { - this.string += "\t"; + addAfter += "\t"; } else { - this.string += " "; + addAfter += " "; } this.insertTabAfterField = false; this.suppressLeadingWhitespace = true; } + this.closeFormatting = addAfter; + return true; } @@ -2718,7 +2941,7 @@ Zotero.CSL.FormattedString.prototype.append = function(string, element, dontDeli * gets the formatted string */ Zotero.CSL.FormattedString.prototype.get = function() { - return this.string+(this.closePunctuation ? this.closePunctuation : ""); + return this.string+(this.closeFormatting ? this.closeFormatting : "")+(this.closePunctuation ? this.closePunctuation : ""); } /* diff --git a/chrome/content/zotero/xpcom/data_access.js b/chrome/content/zotero/xpcom/data_access.js index 83d9d8d357..0bd7cd3c43 100644 --- a/chrome/content/zotero/xpcom/data_access.js +++ b/chrome/content/zotero/xpcom/data_access.js @@ -110,7 +110,7 @@ Zotero.Item.prototype.loadFromID = function(id) { break; case 'firstCreator': - colSQL = Zotero.Items.getfirstCreatorSQL(); + colSQL = Zotero.Items.getFirstCreatorSQL(); break; case 'numNotes': @@ -1789,9 +1789,34 @@ Zotero.Item.prototype.getAttachments = function(){ return []; } - var sql = "SELECT itemID FROM itemAttachments NATURAL JOIN items " - + "WHERE sourceItemID=" + this.getID() + " ORDER BY dateAdded"; - return Zotero.DB.columnQuery(sql); + var sql = "SELECT A.itemID, value AS title FROM itemAttachments A " + + "NATURAL JOIN items I LEFT JOIN itemData ID USING (itemID) " + + "LEFT JOIN itemDataValues IDV " + + "ON (fieldID=110 AND ID.valueID=IDV.valueID) " + + "WHERE sourceItemID=?"; + + if (Zotero.Prefs.get('sortAttachmentsChronologically')) { + sql += " ORDER BY dateAdded"; + return Zotero.DB.columnQuery(sql, this.getID()); + } + + var attachments = Zotero.DB.query(sql, this.getID()); + if (!attachments) { + return false; + } + + // Sort by title + var collation = Zotero.getLocaleCollation(); + var f = function (a, b) { + return collation.compareString(1, a.title, b.title); + } + + var attachmentIDs = []; + attachments.sort(f); + for each(var attachment in attachments) { + attachmentIDs.push(attachment.itemID); + } + return attachmentIDs; } @@ -1876,6 +1901,21 @@ Zotero.Item.prototype.addTag = function(tag, type){ } +Zotero.Item.prototype.addTags = function (tags, type) { + Zotero.DB.beginTransaction(); + try { + for each(var tag in tags) { + this.addTag(tag, type); + } + Zotero.DB.commitTransaction(); + } + catch (e) { + Zotero.DB.rollbackTransaction(); + throw (e); + } +} + + Zotero.Item.prototype.addTagByID = function(tagID) { if (!this.getID()) { throw ('Cannot add tag to unsaved item in Item.addTagByID()'); @@ -3153,7 +3193,7 @@ Zotero.Notes = new function(){ /* * Constructor for Collection object * - * Generally should be called from Zotero.Collection rather than directly + * Generally should be called from Zotero.Collections rather than directly */ Zotero.Collection = function(){ this._init(); diff --git a/chrome/content/zotero/xpcom/db.js b/chrome/content/zotero/xpcom/db.js index a83bd4227d..16df7bde85 100644 --- a/chrome/content/zotero/xpcom/db.js +++ b/chrome/content/zotero/xpcom/db.js @@ -44,6 +44,15 @@ Zotero.DBConnection = function(dbName) { // ///////////////////////////////////////////////////////////////// +/** + * Test a connection to the database, throwing any errors that occur + * + * @return void + */ +Zotero.DBConnection.prototype.test = function () { + this._getDBConnection(); +} + /* * Run an SQL query * diff --git a/chrome/content/zotero/xpcom/ingester.js b/chrome/content/zotero/xpcom/ingester.js index c39f112acd..897dc12a93 100644 --- a/chrome/content/zotero/xpcom/ingester.js +++ b/chrome/content/zotero/xpcom/ingester.js @@ -288,11 +288,11 @@ Zotero.OpenURL = new function() { if(item.journalAbbreviation) co += _mapTag(item.journalAbbreviation, "stitle", version); if(item.volume) co += _mapTag(item.volume, "volume", version); if(item.issue) co += _mapTag(item.issue, "issue", version); - } else if(item.itemType == "book" || item.itemType == "bookitem") { + } else if(item.itemType == "book" || item.itemType == "bookSection") { if(version == "0.1") { co += "&genre=book"; } else { - co += "&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book"; + co += "&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook"; } if(item.itemType == "book") { diff --git a/chrome/content/zotero/xpcom/integration.js b/chrome/content/zotero/xpcom/integration.js index fa63ed38da..83c9768e00 100644 --- a/chrome/content/zotero/xpcom/integration.js +++ b/chrome/content/zotero/xpcom/integration.js @@ -20,7 +20,7 @@ ***** END LICENSE BLOCK ***** */ -const API_VERSION = 3; +const API_VERSION = 4; Zotero.Integration = new function() { var _contentLengthRe = /[\r\n]Content-Length: *([0-9]+)/i; @@ -393,7 +393,7 @@ Zotero.Integration.SOAP = new function() { } } else if(editCitationIndex !== false && vars[i] == editCitationIndex) { // save citation data - editCitation = session.unserializeCitation(vars[i+1]); + editCitation = session.unserializeCitation(vars[i+1], vars[i]); } else { session.addCitation(vars[i], vars[i+1]); } @@ -422,7 +422,7 @@ Zotero.Integration.SOAP = new function() { // update var output = new Array(); if((bibliographyMode == "updated" // if we want updated bib - && session.itemSetHasChanged) // and bibliography changed + && session.bibliographyHasChanged) // and bibliography changed || bibliographyMode == "true") { // or if we should generate regardless of changes var bibliography = session.getBibliography(); if(!bibliography) bibliography = "!"; @@ -454,11 +454,16 @@ Zotero.Integration.SOAP = new function() { */ function restoreSession(vars) { if(!vars || !_checkVersion(vars[0])) { - return "ERROR:"+Zotero.getString("integration.incompatibleVersion"); + return "ERROR:"+Zotero.getString("integration.incompatibleVersion", Zotero.version); + } + + try { + Zotero.Cite.getStyle(vars[2]); + } catch(e) { + return "ERROR:prefsNeedReset"; } var sessionID = Zotero.randomString(); - var session = _sessions[sessionID] = new Zotero.Integration.Session(); session.setStyle(vars[2], vars[3], vars[4]); @@ -472,6 +477,7 @@ Zotero.Integration.SOAP = new function() { session.updateItemSet(session.citationsByItemID); if(vars[1] != "!") session.loadDocumentData(vars[1]); + session.sortItemSet(); session.resetRequest(); return [sessionID]; @@ -484,7 +490,7 @@ Zotero.Integration.SOAP = new function() { */ function setDocPrefs(vars) { if(!vars || !vars.length || !_checkVersion(vars[1])) { - return "ERROR:"+Zotero.getString("integration.incompatibleVersion"); + return "ERROR:"+Zotero.getString("integration.incompatibleVersion", Zotero.version); } var io = new function() { @@ -496,6 +502,7 @@ Zotero.Integration.SOAP = new function() { io.openOffice = true; } + var oldStyle = false; if(vars[0] == "!") { // no session ID; generate a new one var sessionID = Zotero.randomString(); @@ -506,7 +513,7 @@ Zotero.Integration.SOAP = new function() { var session = _sessions[sessionID]; if(!session) return "ERROR:sessionExpired"; - io.style = session.styleID; + oldStyle = io.style = session.styleID; io.useEndnotes = session.useEndnotes; io.useBookmarks = session.useBookmarks; } @@ -514,6 +521,9 @@ Zotero.Integration.SOAP = new function() { watcher.openWindow(null, 'chrome://zotero/content/integrationDocPrefs.xul', '', 'chrome,modal'+(Zotero.isWin ? ',popup' : ''), io, true); session.setStyle(io.style, io.useEndnotes, io.useBookmarks); + if(!oldStyle || oldStyle == io.style) { + session.regenerateAll = session.bibliographyHasChanged = true; + } return [sessionID, io.style, session.style.class, session.style.hasBibliography ? "1" : "0", io.useEndnotes, io.useBookmarks]; } @@ -548,10 +558,8 @@ Zotero.Integration.Session.prototype.setStyle = function(styleID, useEndnotes, u this.style = Zotero.Cite.getStyle(styleID); this.useEndnotes = useEndnotes; this.useBookmarks = useBookmarks; - this.itemSet = this.style.createItemSet(); this.dateModified = new Object(); - this.itemSetIsSorted = true; this.loadUncitedItems(); } @@ -563,7 +571,8 @@ Zotero.Integration.Session.prototype.resetRequest = function() { this.citationsByItemID = new Object(); this.citationsByIndex = new Array(); - this.itemSetHasChanged = false; + this.regenerateAll = false; + this.bibliographyHasChanged = false; this.documentDataHasChanged = false; this.updateItemIDs = new Object(); this.updateIndices = new Object() @@ -613,15 +622,12 @@ Zotero.Integration._oldCitationLocatorMap = { * gets a Zotero.CSL.Citation object given a field name */ Zotero.Integration.Session.prototype.addCitation = function(index, arg) { + var index = parseInt(index, 10); + if(typeof(arg) == "string") { // text field if(arg == "!" || arg == "X") return; - var citation = this.unserializeCitation(arg); - if(arg[0] == "{") { // JSON - citation.properties.field = arg; - } else { - this.updateIndices[citation.properties.index]; - } + var citation = this.unserializeCitation(arg, index); } else { // a citation already var citation = arg; } @@ -673,7 +679,7 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { this.dateModified[citationItem.itemID] = item.zoteroItem.getField("dateModified", true, true); this.updateItemIDs[citationItem.itemID] = true; - this.itemSetChanged(); + this.bibliographyHasChanged = true; } citationItem.item = item; @@ -684,11 +690,20 @@ Zotero.Integration.Session.prototype.completeCitation = function(object) { /* * unserializes a JSON citation into a citation object (sans items) */ -Zotero.Integration.Session.prototype.unserializeCitation = function(arg) { +Zotero.Integration.Session.prototype.unserializeCitation = function(arg, index) { if(arg[0] == "{") { // JSON field // create citation var citation = this.style.createCitation(); + // fix for corrupted fields + var lastBracket = arg.lastIndexOf("}"); + if(lastBracket+1 != arg.length) { + arg = arg.substr(0, lastBracket+1); + this.updateIndices[index] = true; + } else { + citation.properties.field = arg; + } + // get JSON var object = Zotero.JSON.unserialize(arg); @@ -721,6 +736,7 @@ Zotero.Integration.Session.prototype.unserializeCitation = function(arg) { } var citation = this.style.createCitation(citationItems); + this.updateIndices[index] = true; } return citation; @@ -758,7 +774,6 @@ Zotero.Integration.Session.prototype.previewCitation = function(citation) { // delete from item set if(deleteItems.length) { this.itemSet.remove(deleteItems); - this.itemSetIsSorted = false; } return text; @@ -774,7 +789,7 @@ Zotero.Integration.Session.prototype.editCitation = function(index, citation) { // create object to hold citation io.citation = (citation ? citation.clone() : this.style.createCitation()); - io.citation.properties.index = index; + io.citation.properties.index = parseInt(index, 10); // assign preview function io.previewFunction = function() { return me.previewCitation(io.citation); @@ -881,7 +896,6 @@ Zotero.Integration.Session.prototype.updateItemSet = function() { citation.properties.delete = true; } } - this.itemSetChanged(); } } @@ -892,7 +906,6 @@ Zotero.Integration.Session.prototype.updateItemSet = function() { // see if items were removed if(!this.citationsByItemID[itemID] && !this.uncitedItems[itemID]) { deleteItems.push(itemID); - this.itemSetChanged(); continue; } @@ -901,13 +914,12 @@ Zotero.Integration.Session.prototype.updateItemSet = function() { this.dateModified[itemID] = item.zoteroItem.getField("dateModified", true, true); // add to list of updated item IDs this.updateItemIDs[itemID] = true; - // need to resort now - this.itemSetChanged(); } } if(deleteItems.length) { this.itemSet.remove(deleteItems); + this.bibliographyHasChanged = true; } this.sortItemSet(); @@ -917,55 +929,21 @@ Zotero.Integration.Session.prototype.updateItemSet = function() { * sorts the ItemSet (what did you think it did?) */ Zotero.Integration.Session.prototype.sortItemSet = function() { - if(!this.itemSetIsSorted) { - if(!this.itemSet.sortable) { - // sort by order in document. we need a stable sort, so first we - // collect old indices. - var oldItemIndices = new Object(); - for(var i=0; i + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/af-ZA/zotero/zotero.properties b/chrome/locale/af-ZA/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/af-ZA/zotero/zotero.properties +++ b/chrome/locale/af-ZA/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ar/zotero/preferences.dtd b/chrome/locale/ar/zotero/preferences.dtd index 70addaac92..1fe73817de 100644 --- a/chrome/locale/ar/zotero/preferences.dtd +++ b/chrome/locale/ar/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ar/zotero/zotero.properties b/chrome/locale/ar/zotero/zotero.properties index 7af9f408d8..6aa4975091 100644 --- a/chrome/locale/ar/zotero/zotero.properties +++ b/chrome/locale/ar/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=اسلوب توثيق المراج zotero.preferences.export.quickCopy.exportFormats=صيغ التصدير zotero.preferences.export.quickCopy.instructions=َتسمح لك خاصية النسخ السريع بنسخ المرجع الذي اخترته إلى الحافظة بالضغط على زر (%S) أو سحب الموضوع إلى أي مربع نص في صفحة الويب. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=الملفات التالية موجودة مسبقاً في الوجهة التي تريدها ، لذا لم يتم نسخها: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=جزئي exportOptions.exportNotes=تصدير الملاحظات exportOptions.exportFileData=تصدير الملفات +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=,,, date.abbreviation.year=سنة @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/bg-BG/zotero/preferences.dtd b/chrome/locale/bg-BG/zotero/preferences.dtd index e66b6e1b0c..8d7fdde864 100644 --- a/chrome/locale/bg-BG/zotero/preferences.dtd +++ b/chrome/locale/bg-BG/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/bg-BG/zotero/zotero.properties b/chrome/locale/bg-BG/zotero/zotero.properties index 0014adfd31..43b0d81359 100644 --- a/chrome/locale/bg-BG/zotero/zotero.properties +++ b/chrome/locale/bg-BG/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Стил на библиограф zotero.preferences.export.quickCopy.exportFormats=Формати за експорт zotero.preferences.export.quickCopy.instructions=Бързо копиране ви позволява да копирате избраните отпратки в клипборда с клавишната комбинация (%S) или да ги издърпате в текстова кутия от интернет страница. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Папката вече съдържа следните файлове и те не бяха копирани. dragAndDrop.filesNotFound=Следните файлове не бяха намерени и не могат да бъдат копирани: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Частичен exportOptions.exportNotes=Експорт на бележки exportOptions.exportFileData=Експорт на Файлове +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=ви, ри, ти, ти date.abbreviation.year=г @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Винаги следвай този изб integration.deleteCitedItem.title=Сигурни ли сте, че искате да премахните тази отпратка? integration.deleteCitedItem.body=Тази отпратка е цитирана в текста на вашият документ. Изтриването и ще премахне всички цитати. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ca-AD/zotero/preferences.dtd b/chrome/locale/ca-AD/zotero/preferences.dtd index 909e3e9fc6..0117cd8aec 100644 --- a/chrome/locale/ca-AD/zotero/preferences.dtd +++ b/chrome/locale/ca-AD/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ca-AD/zotero/zotero.properties b/chrome/locale/ca-AD/zotero/zotero.properties index 75621fad86..4c9b007c50 100644 --- a/chrome/locale/ca-AD/zotero/zotero.properties +++ b/chrome/locale/ca-AD/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Estils bibliogràfics zotero.preferences.export.quickCopy.exportFormats=Formats d'exportació zotero.preferences.export.quickCopy.instructions=Copia ràpida permet copiar les referències seleccionades al portaretalls prement una drecera de teclat o arrossegant els elements a un quadre de text en una pàgina web. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Els següents arxiu ja existeixen al directori de destí i no poden ser copiats: dragAndDrop.filesNotFound=Els següents arxius no s'han trobat i no s'han pogut copiar: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Parcial exportOptions.exportNotes=Exportar les notes exportOptions.exportFileData=Exportar els arxius adjunts +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=r, n, r, rt, é date.abbreviation.year=a @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Segueix sempre aquesta selecció. integration.deleteCitedItem.title=Estàs segur que vols eliminar aquesta referència? integration.deleteCitedItem.body=Aquesta referència està citada en el text del teu document. Eliminant-la s'eliminaran també totes les cites. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/cs-CZ/zotero/preferences.dtd b/chrome/locale/cs-CZ/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/cs-CZ/zotero/preferences.dtd +++ b/chrome/locale/cs-CZ/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/cs-CZ/zotero/zotero.properties b/chrome/locale/cs-CZ/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/cs-CZ/zotero/zotero.properties +++ b/chrome/locale/cs-CZ/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/da-DK/zotero/preferences.dtd b/chrome/locale/da-DK/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/da-DK/zotero/preferences.dtd +++ b/chrome/locale/da-DK/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/da-DK/zotero/zotero.properties b/chrome/locale/da-DK/zotero/zotero.properties index 59de3a605d..0bd81aba94 100644 --- a/chrome/locale/da-DK/zotero/zotero.properties +++ b/chrome/locale/da-DK/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Eksporter Notater exportOptions.exportFileData=Eksporter filer +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/de-AT/zotero/preferences.dtd b/chrome/locale/de-AT/zotero/preferences.dtd index 88f5a9f36a..50587f581d 100644 --- a/chrome/locale/de-AT/zotero/preferences.dtd +++ b/chrome/locale/de-AT/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/de-AT/zotero/zotero.properties b/chrome/locale/de-AT/zotero/zotero.properties index fafc79734a..ca913537d2 100644 --- a/chrome/locale/de-AT/zotero/zotero.properties +++ b/chrome/locale/de-AT/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Notizen exportieren exportOptions.exportFileData=Dateien exportieren +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=. date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/de-CH/zotero/preferences.dtd b/chrome/locale/de-CH/zotero/preferences.dtd index 88f5a9f36a..50587f581d 100644 --- a/chrome/locale/de-CH/zotero/preferences.dtd +++ b/chrome/locale/de-CH/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/de-CH/zotero/zotero.properties b/chrome/locale/de-CH/zotero/zotero.properties index ebba8bb3b7..a51032af52 100644 --- a/chrome/locale/de-CH/zotero/zotero.properties +++ b/chrome/locale/de-CH/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Notizen exportieren exportOptions.exportFileData=Dateien exportieren +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=. date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/de/zotero/preferences.dtd b/chrome/locale/de/zotero/preferences.dtd index 7adc4e74d2..2d694ea74f 100644 --- a/chrome/locale/de/zotero/preferences.dtd +++ b/chrome/locale/de/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/de/zotero/zotero.properties b/chrome/locale/de/zotero/zotero.properties index f4c4c34993..8d0fe7bc52 100644 --- a/chrome/locale/de/zotero/zotero.properties +++ b/chrome/locale/de/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Zitierstile zotero.preferences.export.quickCopy.exportFormats=Export-Formate zotero.preferences.export.quickCopy.instructions=Quick Copy erlaubt Ihnen, ausgewählte Literaturangaben durch Drücken einer Tastenkombination (%S) in die Zwischenablage zu kopieren oder Einträge in ein Textfeld auf einer Webseite zu ziehen. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Die folgenden Datein waren im Zielordner bereits vorhanden und wurden nicht kopiert: dragAndDrop.filesNotFound=Die folgenden Datei wurden nicht gefunden und konnten nicht kopiert werden. @@ -445,6 +451,7 @@ fulltext.indexState.partial=Unvollständig exportOptions.exportNotes=Notizen exportieren exportOptions.exportFileData=Dateien exportieren +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=. date.abbreviation.year=J @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Diese Auswahl dauerhaft übernehmen. integration.deleteCitedItem.title=Sind Sie sicher, dass Sie diese Literaturangabe löschen wollen? integration.deleteCitedItem.body=Diese Literaturangabe wird im Text Ihres Dokuments zitiert. Sie zu löschen, wird alle Zitationen entfernen. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/el-GR/zotero/preferences.dtd b/chrome/locale/el-GR/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/el-GR/zotero/preferences.dtd +++ b/chrome/locale/el-GR/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/el-GR/zotero/zotero.properties b/chrome/locale/el-GR/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/el-GR/zotero/zotero.properties +++ b/chrome/locale/el-GR/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/en-US/zotero/preferences.dtd b/chrome/locale/en-US/zotero/preferences.dtd index c456c94bca..6b5899c88c 100644 --- a/chrome/locale/en-US/zotero/preferences.dtd +++ b/chrome/locale/en-US/zotero/preferences.dtd @@ -48,17 +48,20 @@ - - + + + + + diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties index 0417ba93d2..ea9fa4f94d 100644 --- a/chrome/locale/en-US/zotero/zotero.properties +++ b/chrome/locale/en-US/zotero/zotero.properties @@ -451,6 +451,7 @@ fulltext.indexState.partial = Partial exportOptions.exportNotes = Export Notes exportOptions.exportFileData = Export Files +exportOptions.UTF8 = Export as UTF-8 date.daySuffixes = st, nd, rd, th date.abbreviation.year = y @@ -475,7 +476,7 @@ annotations.collapse.tooltip = Collapse Annotation annotations.expand.tooltip = Expand Annotation annotations.oneWindowWarning = Annotations for a snapshot may only be opened in one browser window simultaneously. This snapshot will be opened without annotations. -integration.incompatibleVersion = This version of the Zotero Word plug-in is incompatible with the currently installed version of the Zotero Firefox extension. Please ensure you are using the latest versions of both components. +integration.incompatibleVersion = This version of the Zotero Word plug-in ($INTEGRATION_VERSION) is incompatible with the currently installed version of the Zotero Firefox extension (%1$S). Please ensure you are using the latest versions of both components. integration.fields.label = Fields integration.referenceMarks.label = ReferenceMarks integration.fields.caption = Microsoft Word Fields are less likely to be accidentally modified, but cannot be shared with OpenOffice.org. diff --git a/chrome/locale/es-ES/zotero/preferences.dtd b/chrome/locale/es-ES/zotero/preferences.dtd index a1183e9536..4cec2bd6cd 100644 --- a/chrome/locale/es-ES/zotero/preferences.dtd +++ b/chrome/locale/es-ES/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/es-ES/zotero/zotero.properties b/chrome/locale/es-ES/zotero/zotero.properties index ac901f588a..19736acca6 100644 --- a/chrome/locale/es-ES/zotero/zotero.properties +++ b/chrome/locale/es-ES/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Exportar notas exportOptions.exportFileData=Exportar archivos +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=º, º, º, º date.abbreviation.year=a @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/et-EE/zotero/preferences.dtd b/chrome/locale/et-EE/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/et-EE/zotero/preferences.dtd +++ b/chrome/locale/et-EE/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/et-EE/zotero/zotero.properties b/chrome/locale/et-EE/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/et-EE/zotero/zotero.properties +++ b/chrome/locale/et-EE/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/fr-FR/zotero/preferences.dtd b/chrome/locale/fr-FR/zotero/preferences.dtd index dcfdfaa060..b7c3d8303a 100644 --- a/chrome/locale/fr-FR/zotero/preferences.dtd +++ b/chrome/locale/fr-FR/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/fr-FR/zotero/zotero.properties b/chrome/locale/fr-FR/zotero/zotero.properties index 6bf47a1b58..3060c4a572 100644 --- a/chrome/locale/fr-FR/zotero/zotero.properties +++ b/chrome/locale/fr-FR/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Styles bibliographiques zotero.preferences.export.quickCopy.exportFormats=Formats d'exportation zotero.preferences.export.quickCopy.instructions=La copie rapide vous permet de copier les références sélectionnées dans le presse-papiers par un raccourci clavier (%S) ou en glissant les objets dans une zone de texte d'une page Web. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Les fichiers suivants existent déjà dans le répertoire de destination et n'ont pas été copiés : dragAndDrop.filesNotFound=Les fichiers suivants n'ont pu être trouvés et donc copiés : @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partiel exportOptions.exportNotes=Exporter les notes exportOptions.exportFileData=Exporter les fichiers +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=er, , , date.abbreviation.year=a @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Toujours faire ainsi. integration.deleteCitedItem.title=Voulez-vous vraiment supprimer cette référence ? integration.deleteCitedItem.body=Cette référence est citée dans le texte de votre document. La supprimer supprimera toutes les citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/he-IL/zotero/preferences.dtd b/chrome/locale/he-IL/zotero/preferences.dtd index 9aa78ba055..a08324a2e3 100644 --- a/chrome/locale/he-IL/zotero/preferences.dtd +++ b/chrome/locale/he-IL/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/he-IL/zotero/zotero.properties b/chrome/locale/he-IL/zotero/zotero.properties index 6c26d9c7c5..42d19053b8 100644 --- a/chrome/locale/he-IL/zotero/zotero.properties +++ b/chrome/locale/he-IL/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=יצוא קבצים +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=ש @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/hu-HU/zotero/preferences.dtd b/chrome/locale/hu-HU/zotero/preferences.dtd index fa780b608d..cafa0d3736 100644 --- a/chrome/locale/hu-HU/zotero/preferences.dtd +++ b/chrome/locale/hu-HU/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/hu-HU/zotero/zotero.properties b/chrome/locale/hu-HU/zotero/zotero.properties index 8165870eb9..a9f4f7800e 100644 --- a/chrome/locale/hu-HU/zotero/zotero.properties +++ b/chrome/locale/hu-HU/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliográfiai stíélusok zotero.preferences.export.quickCopy.exportFormats=Exportálási formátumok zotero.preferences.export.quickCopy.instructions=A Gyorsmásolás segítségével a kiválasztott hivatkozásokat a vágólapra lehet másolni a %S gyorsbillentyű lenyomásával. A hivatkozást egy tetszőleges weboldal szövegmezőjébe is be lehet másolni, ha a kijelölt hivatkozást a szövegmezőbe húzzuk. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Az alábbi fájlok már léteznek a célmappában, ezért nem kerültek bemásolásra. dragAndDrop.filesNotFound=Az alábbi fájlok nem találhatóak, ezért nem lehet őket másolni: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Részleges exportOptions.exportNotes=Jegyzetek exportálása exportOptions.exportFileData=Fájlok exportálása +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=. date.abbreviation.year=év @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Beállítás megőrzése. integration.deleteCitedItem.title=A hivatkozás törlésének megerősítése? integration.deleteCitedItem.body=A hivatkozás említve van a dokumentum szövegében. Törlés után az összes hivatkozás törlésre kerül. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/is-IS/zotero/preferences.dtd b/chrome/locale/is-IS/zotero/preferences.dtd index b11f6d1fb5..ca717729a9 100644 --- a/chrome/locale/is-IS/zotero/preferences.dtd +++ b/chrome/locale/is-IS/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/is-IS/zotero/zotero.properties b/chrome/locale/is-IS/zotero/zotero.properties index db9354849e..08ebd200b6 100644 --- a/chrome/locale/is-IS/zotero/zotero.properties +++ b/chrome/locale/is-IS/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Flytja út athugasemdir exportOptions.exportFileData=Flytja út skrár +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/it-IT/zotero/preferences.dtd b/chrome/locale/it-IT/zotero/preferences.dtd index a7aa2a0e58..c6597d77c4 100644 --- a/chrome/locale/it-IT/zotero/preferences.dtd +++ b/chrome/locale/it-IT/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/it-IT/zotero/zotero.properties b/chrome/locale/it-IT/zotero/zotero.properties index d1066377b0..9ae06cc0c5 100644 --- a/chrome/locale/it-IT/zotero/zotero.properties +++ b/chrome/locale/it-IT/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Stili bibliografici zotero.preferences.export.quickCopy.exportFormats=Formati di esportazione zotero.preferences.export.quickCopy.instructions=Copia veloce permette di copiare le citazioni bibliografiche selezionate negli Appunti utilizzando la scorciatoia da tastiera (%S) o trascinando l'elemento in un campo di testo di una pagina web. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=I seguenti file sono già presenti nella cartella di destinazione e non verranno copiati: dragAndDrop.filesNotFound=I seguenti file non sono stati trovati e non saranno copiati: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Parzialmente indicizzato exportOptions.exportNotes=Esporta note exportOptions.exportFileData=Esporta file +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=°, °, °, ° date.abbreviation.year=a @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Imposta come comportamento predefinito. integration.deleteCitedItem.title=Eliminare questa citazione? integration.deleteCitedItem.body=Questa citazione è contenuta nel testo del documento, la sua eliminazione causerà l'eliminazione di tutte le citazioni. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ja-JP/zotero/preferences.dtd b/chrome/locale/ja-JP/zotero/preferences.dtd index 53e91cff07..65629cd640 100644 --- a/chrome/locale/ja-JP/zotero/preferences.dtd +++ b/chrome/locale/ja-JP/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ja-JP/zotero/zotero.properties b/chrome/locale/ja-JP/zotero/zotero.properties index 92f76a01a2..5dee616ebb 100644 --- a/chrome/locale/ja-JP/zotero/zotero.properties +++ b/chrome/locale/ja-JP/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=参考文献のスタイル zotero.preferences.export.quickCopy.exportFormats=エクスポートフォーマット zotero.preferences.export.quickCopy.instructions=クイックコピー機能で、ショートカットキーを押してクリップボードに選択された参照文献のコピー、またはウェブページのテキストボックスにアイテムをドラッグすることができます。 +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=次のファイルは宛先フォルダにすでに存在しており、コピーされませんでした: dragAndDrop.filesNotFound=次のファイルは見つからず、コピーできませんでした。 @@ -445,6 +451,7 @@ fulltext.indexState.partial=部分作成 exportOptions.exportNotes=メモをエクスポート exportOptions.exportFileData=ファイルをエクスポート +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=日, 日, 日, 日 date.abbreviation.year=年 @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=常にこの設定を使用する。 integration.deleteCitedItem.title=この参照事項を削除してよろしいですか? integration.deleteCitedItem.body=この参照事項はあなたのドキュメントの文章の中に引用されています。削除するときに全ての引用はなくなります。 + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ko-KR/zotero/preferences.dtd b/chrome/locale/ko-KR/zotero/preferences.dtd index 1bbff8227e..9daf69458c 100644 --- a/chrome/locale/ko-KR/zotero/preferences.dtd +++ b/chrome/locale/ko-KR/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ko-KR/zotero/zotero.properties b/chrome/locale/ko-KR/zotero/zotero.properties index c60ae517ed..7cbe1e7b13 100644 --- a/chrome/locale/ko-KR/zotero/zotero.properties +++ b/chrome/locale/ko-KR/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=도서목록 형식 zotero.preferences.export.quickCopy.exportFormats=내보내기 형식 zotero.preferences.export.quickCopy.instructions=빠른 복사는 단축 키 (%S)를 누르거나 웹 페이지내 텍스트 박스 안으로 항목을 끌어 오면 클립보드에 선택한 참고를 복사하는 것을 허용시킵니다. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=다음 파일은 목적 디렉토리내 이미 존재하며 복사하지는 않았습니다: dragAndDrop.filesNotFound=다음 파일을 찾을수 없어 복사를 할 수 없습니다. @@ -445,6 +451,7 @@ fulltext.indexState.partial=부분적 exportOptions.exportNotes=노트 내보내기 exportOptions.exportFileData=파일 내보내기 +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=일, 일, 일, 일 date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=언제나 이 선택을 따릅니다. integration.deleteCitedItem.title=이 참조를 삭제하길 원하는 것이 맞습니까? integration.deleteCitedItem.body=이 참조는 문서의 문장 내에 인용되고 있습니다. 삭제할 경우에 모든 인용은 없어집니다. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/mn-MN/zotero/preferences.dtd b/chrome/locale/mn-MN/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/mn-MN/zotero/preferences.dtd +++ b/chrome/locale/mn-MN/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/mn-MN/zotero/zotero.properties b/chrome/locale/mn-MN/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/mn-MN/zotero/zotero.properties +++ b/chrome/locale/mn-MN/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/nb-NO/zotero/preferences.dtd b/chrome/locale/nb-NO/zotero/preferences.dtd index 8143c74693..fa1a220531 100644 --- a/chrome/locale/nb-NO/zotero/preferences.dtd +++ b/chrome/locale/nb-NO/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/nb-NO/zotero/zotero.properties b/chrome/locale/nb-NO/zotero/zotero.properties index 3612999b7c..d1eb8094e0 100644 --- a/chrome/locale/nb-NO/zotero/zotero.properties +++ b/chrome/locale/nb-NO/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Eksporter notater exportOptions.exportFileData=Eksporter filer +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=ste, ndre, dje, de, te date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/nl-NL/zotero/preferences.dtd b/chrome/locale/nl-NL/zotero/preferences.dtd index 24ad05b727..1dacd22713 100644 --- a/chrome/locale/nl-NL/zotero/preferences.dtd +++ b/chrome/locale/nl-NL/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/nl-NL/zotero/zotero.properties b/chrome/locale/nl-NL/zotero/zotero.properties index b0a9a20b8a..620806e8b7 100644 --- a/chrome/locale/nl-NL/zotero/zotero.properties +++ b/chrome/locale/nl-NL/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliografie-stijlen zotero.preferences.export.quickCopy.exportFormats=Exportformaten zotero.preferences.export.quickCopy.instructions=Met Snelle Kopie kunt u geselecteerde verwijzingen naar het klembord kopiëren met behulp van een sneltoets (%S) of door de items naar een tekstvak te slepen. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=De volgende bestanden waren al aanwezig in de bestemmingsmap en zijn niet gekopieerd: dragAndDrop.filesNotFound=De volgende bestanden konden niet gevonden en gekopieerd worden: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Gedeeltelijk exportOptions.exportNotes=Exporteer Aantekeningen exportOptions.exportFileData=Exporteer Bestanden +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=e, e, e, e date.abbreviation.year=j @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Altijd deze selectie volgen. integration.deleteCitedItem.title=Wilt u deze verwijzing verwijderen? integration.deleteCitedItem.body=Deze verwijzing is geciteerd in de tekst van uw document. Als u de verwijzing wist worden de citaties verwijderd. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/pl-PL/zotero/preferences.dtd b/chrome/locale/pl-PL/zotero/preferences.dtd index f71ae4b813..5a2db35c36 100644 --- a/chrome/locale/pl-PL/zotero/preferences.dtd +++ b/chrome/locale/pl-PL/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/pl-PL/zotero/zotero.properties b/chrome/locale/pl-PL/zotero/zotero.properties index 85b260572b..e190a37824 100644 --- a/chrome/locale/pl-PL/zotero/zotero.properties +++ b/chrome/locale/pl-PL/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Style bibliograficzne zotero.preferences.export.quickCopy.exportFormats=Eksportuj formaty zotero.preferences.export.quickCopy.instructions=Szybka kopia pozwala na skopiowanie wybranych pozycji bibliograficznych do schowka poprzez użycie skrótu klawiaturowego (%S) lub poprzez przeciągnięcie elementu w obszar pola tekstowego na stronie internetowej. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Następujące pliki istnieją już w katalogu docelowym i nie zostały skopiowane: dragAndDrop.filesNotFound=Następujących plików nie znaleziono i nie mogą zostać skopiowane: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Częściowy exportOptions.exportNotes=Eksportuj notatki exportOptions.exportFileData=Eksportuj pliki +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=-szy, -gi, -ci, -ty date.abbreviation.year=r. @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Zawsze korzystaj z tej sekcji. integration.deleteCitedItem.title=Czy chcesz usunąć tę pozycję bibliograficzną? integration.deleteCitedItem.body=W tekście dokumentu znajdują się odwołania do tej pozycji bibliograficznej. Usunięcie jej spowoduje usunięcie wszystkich odwołań. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/pt-BR/zotero/preferences.dtd b/chrome/locale/pt-BR/zotero/preferences.dtd index 501525f402..384ff8d883 100644 --- a/chrome/locale/pt-BR/zotero/preferences.dtd +++ b/chrome/locale/pt-BR/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/pt-BR/zotero/zotero.properties b/chrome/locale/pt-BR/zotero/zotero.properties index 81771ca7c5..7a0b0c2b84 100644 --- a/chrome/locale/pt-BR/zotero/zotero.properties +++ b/chrome/locale/pt-BR/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Exportar notas exportOptions.exportFileData=Exportar arquivos +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/pt-PT/zotero/preferences.dtd b/chrome/locale/pt-PT/zotero/preferences.dtd index 74e4b4d4e2..ef69bdafe5 100644 --- a/chrome/locale/pt-PT/zotero/preferences.dtd +++ b/chrome/locale/pt-PT/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/pt-PT/zotero/zotero.properties b/chrome/locale/pt-PT/zotero/zotero.properties index 2c5247ca73..c0035f43b8 100644 --- a/chrome/locale/pt-PT/zotero/zotero.properties +++ b/chrome/locale/pt-PT/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Export Notes exportOptions.exportFileData=Export Files +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ro-RO/zotero/preferences.dtd b/chrome/locale/ro-RO/zotero/preferences.dtd index 70a404f8d2..46efcd3e1f 100644 --- a/chrome/locale/ro-RO/zotero/preferences.dtd +++ b/chrome/locale/ro-RO/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ro-RO/zotero/zotero.properties b/chrome/locale/ro-RO/zotero/zotero.properties index eafed58035..17f508525a 100644 --- a/chrome/locale/ro-RO/zotero/zotero.properties +++ b/chrome/locale/ro-RO/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Stiluri bibliografice zotero.preferences.export.quickCopy.exportFormats=Exportă formate zotero.preferences.export.quickCopy.instructions=Copierea rapidă îţi permite să selectezi referinţele în memoria clipboard apăsând scurtătura de la tastatură (%S) sau trăgând înregistrările pe o pagină web, într-o casetă de text. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Fişierele următoare există deja în dosarul de destinaţie şi nu au fost copiate: dragAndDrop.filesNotFound=Următoarele fişiere nu au fost găsite şi nu pot fi copiate: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Parţial exportOptions.exportNotes=Export note exportOptions.exportFileData=Export fişiere +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=, , , date.abbreviation.year=a @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Întotdeauna urmează această selecţie. integration.deleteCitedItem.title=Eşti sigur că vrei să ştergi această referinţă? integration.deleteCitedItem.body=Referinţa este citată în textul documentului tău. Dacă o ştergi, toate citările vor fi şterse. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/ru-RU/zotero/preferences.dtd b/chrome/locale/ru-RU/zotero/preferences.dtd index 630fdec76c..1cf0cad445 100644 --- a/chrome/locale/ru-RU/zotero/preferences.dtd +++ b/chrome/locale/ru-RU/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/ru-RU/zotero/zotero.properties b/chrome/locale/ru-RU/zotero/zotero.properties index 871aabc6ed..27e0b7dd30 100644 --- a/chrome/locale/ru-RU/zotero/zotero.properties +++ b/chrome/locale/ru-RU/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Библиографические zotero.preferences.export.quickCopy.exportFormats=Форматы экспорта zotero.preferences.export.quickCopy.instructions=Быстрое копирование позволяет Вам копировать выбранные ссылки в буфер обмена, нажав горячую клавишу (%S) или перетащить документы в текстовое поле веб-страницы +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Следующие файлы уже существуют в конечной директории и они не скопированы: dragAndDrop.filesNotFound=Файлы не были найдены и не могут быть скопированы: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Частичное exportOptions.exportNotes=Экспорт Заметок exportOptions.exportFileData=Экспорт Файлов +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=ый,ой, ий, ый date.abbreviation.year=г @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Всегда следовать этому integration.deleteCitedItem.title=Вы уверены, что хотите удалить эту ссылку? integration.deleteCitedItem.body=Эта ссылка цитируется в тексте вашего документа. Удалив ее, вы удалите все цитаты + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/sr-YU/zotero/preferences.dtd b/chrome/locale/sr-YU/zotero/preferences.dtd index a616e21ec3..f541ff8502 100644 --- a/chrome/locale/sr-YU/zotero/preferences.dtd +++ b/chrome/locale/sr-YU/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/sr-YU/zotero/zotero.properties b/chrome/locale/sr-YU/zotero/zotero.properties index 53415525ad..2ba62d0951 100644 --- a/chrome/locale/sr-YU/zotero/zotero.properties +++ b/chrome/locale/sr-YU/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Библиографски сти zotero.preferences.export.quickCopy.exportFormats=Извозни формат zotero.preferences.export.quickCopy.instructions=Брзо умножавање вам дозвољава да умножите изабране референце у списак исечака (clipboard) притискајући дугме за пречицу (%S) или превлачењем ставки у поље за текст на веб страници. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Следеће датотеке већ постоје у одредишном директоријуму и нису умножене: dragAndDrop.filesNotFound=Следеће датотеке нису нађене и због тога нису умножене: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Делимично exportOptions.exportNotes=Извези белешке exportOptions.exportFileData=Извези датотеке +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=-ог, -ог, -ег, -ог date.abbreviation.year=г @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Увек прати овај избор. integration.deleteCitedItem.title=Да ли сте сигурни да желите избацити ову референцу? integration.deleteCitedItem.body=Ова референца је цитирана у тексту вашег документа. Брисање ње ће избацити све цитације. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/sv-SE/zotero/preferences.dtd b/chrome/locale/sv-SE/zotero/preferences.dtd index ebfdc1e260..c688e37dd7 100644 --- a/chrome/locale/sv-SE/zotero/preferences.dtd +++ b/chrome/locale/sv-SE/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/sv-SE/zotero/zotero.properties b/chrome/locale/sv-SE/zotero/zotero.properties index 91d4346b60..27f15316d0 100644 --- a/chrome/locale/sv-SE/zotero/zotero.properties +++ b/chrome/locale/sv-SE/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliographic Styles zotero.preferences.export.quickCopy.exportFormats=Export Formats zotero.preferences.export.quickCopy.instructions=Quick Copy allows you to copy selected references to the clipboard by pressing a shortcut key (%S) or dragging items into a text box on a web page. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=The following files already existed in the destination directory and were not copied: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Partial exportOptions.exportNotes=Exportera anteckningar exportOptions.exportFileData=Exporter filer +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=å @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/tr-TR/zotero/preferences.dtd b/chrome/locale/tr-TR/zotero/preferences.dtd index a508289180..2880b041ac 100644 --- a/chrome/locale/tr-TR/zotero/preferences.dtd +++ b/chrome/locale/tr-TR/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/tr-TR/zotero/zotero.properties b/chrome/locale/tr-TR/zotero/zotero.properties index cff73becb0..32060850e2 100644 --- a/chrome/locale/tr-TR/zotero/zotero.properties +++ b/chrome/locale/tr-TR/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Bibliyografik Sitiller zotero.preferences.export.quickCopy.exportFormats=Dışarı Aktarım Biçimleri zotero.preferences.export.quickCopy.instructions=Çabuk Kopya bir kısayol tuşuna (%S) basarak seçilen referansların pano'ya kopyalanmasını sağlar. Veya eserleri bir web sayfasındaki text box'a sürükleyebilirsiniz. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Aşağıdaki dosyalar hedef dizinde zaten varlar ve kopyalanmadılar: dragAndDrop.filesNotFound=The following files were not found and could not be copied: @@ -445,6 +451,7 @@ fulltext.indexState.partial=bölümsel exportOptions.exportNotes=Notları Dışarı Aktar exportOptions.exportFileData=Dosyaları Dışarı Aktar +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=Are you sure you want to remove this reference? integration.deleteCitedItem.body=This reference is cited in the text of your document. Deleting it will remove all citations. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/vi-VN/zotero/preferences.dtd b/chrome/locale/vi-VN/zotero/preferences.dtd index 667cf096ce..586df1c9be 100644 --- a/chrome/locale/vi-VN/zotero/preferences.dtd +++ b/chrome/locale/vi-VN/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/vi-VN/zotero/zotero.properties b/chrome/locale/vi-VN/zotero/zotero.properties index accd6626b9..d46f3fbfe6 100644 --- a/chrome/locale/vi-VN/zotero/zotero.properties +++ b/chrome/locale/vi-VN/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=Các Văn phong Thư tịch zotero.preferences.export.quickCopy.exportFormats=Các Định dạng Xuất khẩu zotero.preferences.export.quickCopy.instructions=Quick Copy cho phép bạn sao chép các tham khảo được chọn vào clipboard bằng cách ấn phím tắt (%S) hoặc bằng cách kéo thả các biểu ghi vào trong một khuôn văn bản của một trang Web. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=Các tập tin sau đã có ở trong thư mục đích, và do đó không được sao chép: dragAndDrop.filesNotFound=Các tập tin sau không tồn tại, và do đó không được sao chép: @@ -445,6 +451,7 @@ fulltext.indexState.partial=Bán phần exportOptions.exportNotes=Xuất khẩu các Ghi chép exportOptions.exportFileData=Xuất khẩu các Tập tin +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=năm @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Luôn luôn theo lựa chọn này. integration.deleteCitedItem.title=Bạn có chắc bạn muốn xóa tham khảo này không? integration.deleteCitedItem.body=Tham khảo này được trích dẫn trong văn bản tài liệu của bạn. Nếu tham khảo này bị xóa, tất cả các trích dẫn tương ứng sẽ được gỡ bỏ khỏi văn bản. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/zh-CN/zotero/preferences.dtd b/chrome/locale/zh-CN/zotero/preferences.dtd index 9991de8eea..7cd0cb0357 100644 --- a/chrome/locale/zh-CN/zotero/preferences.dtd +++ b/chrome/locale/zh-CN/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/zh-CN/zotero/zotero.properties b/chrome/locale/zh-CN/zotero/zotero.properties index 82beb9dc63..533f41b82e 100644 --- a/chrome/locale/zh-CN/zotero/zotero.properties +++ b/chrome/locale/zh-CN/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=文献目录样式 zotero.preferences.export.quickCopy.exportFormats=导出格式 zotero.preferences.export.quickCopy.instructions=快速复制可以让你通过快捷键(%S)或拖放条目到文本框的方式将所选引文复制到剪切板. +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=下列文件因已在目标文件夹中, 所以没有复制: dragAndDrop.filesNotFound=未找到下列文件, 无法复制. @@ -445,6 +451,7 @@ fulltext.indexState.partial=部分 exportOptions.exportNotes=导出笔记 exportOptions.exportFileData=导出文件 +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=st, nd, rd, th date.abbreviation.year=y @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=Always follow this selection. integration.deleteCitedItem.title=确信要清除此文献吗? integration.deleteCitedItem.body=您的文档里引用了此文献. 删除它会清除所有引文. + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/locale/zh-TW/zotero/preferences.dtd b/chrome/locale/zh-TW/zotero/preferences.dtd index 368d4a1f61..e99d562687 100644 --- a/chrome/locale/zh-TW/zotero/preferences.dtd +++ b/chrome/locale/zh-TW/zotero/preferences.dtd @@ -47,6 +47,10 @@ + + + + @@ -55,6 +59,8 @@ + + @@ -80,3 +86,6 @@ + + + diff --git a/chrome/locale/zh-TW/zotero/zotero.properties b/chrome/locale/zh-TW/zotero/zotero.properties index c4a1114669..5d8ead6ce7 100644 --- a/chrome/locale/zh-TW/zotero/zotero.properties +++ b/chrome/locale/zh-TW/zotero/zotero.properties @@ -381,6 +381,12 @@ zotero.preferences.export.quickCopy.bibStyles=參考文獻的樣式 zotero.preferences.export.quickCopy.exportFormats=匯出格式 zotero.preferences.export.quickCopy.instructions=快速複製讓你可以按快捷鍵(%S)來把選取的參考文獻複製到剪貼簿,或者拖放項目到網頁的文字輸入區。 +zotero.preferences.advanced.resetTranslatorsAndStyles=Reset Translators and Styles +zotero.preferences.advanced.resetTranslatorsAndStyles.changesLost=Any new or modified translators or styles will be lost. +zotero.preferences.advanced.resetTranslators=Reset Translators +zotero.preferences.advanced.resetTranslators.changesLost=Any new or modified translators will be lost. +zotero.preferences.advanced.resetStyles=Reset Styles +zotero.preferences.advanced.resetStyles.changesLost=Any new or modified styles will be lost. dragAndDrop.existingFiles=以下的檔案已經存在目的目錄中,並未被複製: dragAndDrop.filesNotFound=找不到以下的檔案而無法加以複製: @@ -445,6 +451,7 @@ fulltext.indexState.partial=部分的 exportOptions.exportNotes=匯出筆記 exportOptions.exportFileData=匯出檔案 +exportOptions.UTF8=Export as UTF-8 date.daySuffixes=日, 日, 日, 日 date.abbreviation.year=年 @@ -481,3 +488,8 @@ integration.regenerate.saveBehavior=每次都作相同的選擇。 integration.deleteCitedItem.title=你確定要移除這個參考資料嗎? integration.deleteCitedItem.body=在你文件的內文中有引用到這個參考資料,刪除它將會移除所有的引用文獻。 + +styles.installStyle=Install style "%1$S" from %2$S? +styles.updateStyle=Update existing style "%1$S" with "%2$S" from %3$S? +styles.installed=The style "%S" was installed successfully. +styles.installError=%S does not appear to be a valid CSL file. diff --git a/chrome/skin/default/zotero/preferences.css b/chrome/skin/default/zotero/preferences.css index f4845bfef6..d262a20b05 100644 --- a/chrome/skin/default/zotero/preferences.css +++ b/chrome/skin/default/zotero/preferences.css @@ -100,6 +100,14 @@ grid row hbox:first-child font-size: .85em; } +#quickCopy-siteSettings-rows::-moz-tree-cell(quickCopy-copyAsHTML) { + /* + DEBUG: possible to center checkmark here instead of with spaces? + + Tried text-align, -moz-box-align, and -moz-box-pack + */ +} + #zotero-quickCopy-format { min-height: 1.5em; /* Fix collapse on Windows */ diff --git a/components/zotero-protocol-handler.js b/components/zotero-protocol-handler.js index 9200d4ede3..b41d64a8f2 100644 --- a/components/zotero-protocol-handler.js +++ b/components/zotero-protocol-handler.js @@ -154,8 +154,8 @@ function ChromeExtensionHandler() { // items were selected includeAllChildItems = false; } - // If combining children, add matching parents - else if (combineChildItems) { + // If combining children or standalone note/attachment, add matching parents + else if (combineChildItems || !results[i].isRegularItem()) { itemsHash[results[i].getID()] = items.length; items.push(results[i].toArray(2)); // Flag item as a search match @@ -263,6 +263,10 @@ function ChromeExtensionHandler() { var sorts = sortBy.split(','); for (var i=0; i]*>/gi); + for (var i in meta) { + var item = meta[i].match(/=\"([^"]*)\"/g); + if (item[0].substring(2, 10) == ''citation'') { + tags[item[0].substring(11, item[0].length - 1)] = item[1].substring(2, item[1].length - 1); + } + } + var newItem = new Zotero.Item("journalArticle"); + + for (var tag in tagMap) { + newItem[tagMap[tag]] = tags[tag]; + } + + for (var i in meta) { + if (meta[i].match(/DC.Contributor/)) { + newItem.creators.push(Zotero.Utilities.cleanAuthor(meta[i].match(/content=\"([^"]*)\">/)[1], "author")); + } + } + + newItem.attachments = [ + {url:tags["fulltext_html_url"], title:"PubMed Central Snapshot", mimeType:"text/html"}, + {url:tags["pdf_url"], title:"PubMed Central Full Text PDF", mimeType:"application/pdf"} + ]; + + newItem.complete(); + }); + } + Zotero.wait(); +}'); + +REPLACE INTO translators VALUES ('60d97c99-47f0-4323-98b6-5699faf827b1', '1.0.0b4.r5', '', '2008-01-09 20:00:00', '0', '100', '4', 'Blackwell Compass', 'Michael Berkowitz', 'http://www.blackwell-compass.com/subject/[^/]+/.+', +'function detectWeb(doc, url) { + if (url.indexOf("search_results") != -1 || url.indexOf("section_home") != -1) { return "multiple"; } else { return "journalArticle"; } }', +'function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == ''x'') return namespace; else return null; + } : null; + + var URIs = new Array(); + var items = new Object(); + if (detectWeb(doc, url) == "multiple") { + + var xpath = ''//div[@class="article-holder"]//h4[@class="article"]/a''; + var articles = doc.evaluate(xpath, doc, namespace, XPathResult.ANY_TYPE, null); + var next_art = articles.iterateNext(); + while (next_art) { + items[next_art.href] = next_art.textContent; + next_art = articles.iterateNext(); + } + items = Zotero.selectItems(items); + + for (var i in items) { + URIs.push(i); + } + } else { + URIs.push(url); + } + + Zotero.Utilities.processDocuments(URIs, function(doc, urll) { + var doi = doc.evaluate(''//div[@id="content"]/p/span[@class="guide"]/a[substring(@href, 1, 4) = "http"]'', doc, null, XPathResult.ANY_TYPE, null).iterateNext().href.match(/doi\/[^/]*\/([^&]*)/)[1]; + Zotero.Utilities.HTTP.doGet(''http://www.blackwell-synergy.com/action/downloadCitation?doi='' + doi + ''&include=cit&format=refman&direct=on&submit=Download+references'', function(text) { + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + item.attachments = [ + {url:item.url, title:"Blackwell Compass Snapshot", mimeType:"text/html"}, + {url:item.url.replace("/doi/abs", "/doi/pdf"), title:"Blackwell Compass Full Text PDF", mimeType:"application/pdf"} + ]; + + item.complete(); + + }); + + translator.translate(); + }); + }, function() {Zotero.done;}); + Zotero.wait(); +}'); + +REPLACE INTO translators VALUES ('ca6e95d1-46b9-4535-885c-df0c2d4b7f7a', '1.0.0b4.r5', '', '2008-01-07 19:00:00', '0', '100', '4', 'Innovate Online', 'Michael Berkowitz', '^http://(www.)?innovateonline.info/', +'function detectWeb(doc, url) { + if (url.indexOf("view=article") != -1) { + return "journalArticle"; + } else if (url.indexOf("view=search") != -1) { + return "multiple"; + } +}', +'function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == ''x'') return namespace; else return null; + } : null; + var newURIs = new Array(); + + if (url.indexOf("view=search") != -1) { + var titles = new Array(); + var hrefs = new Array(); + var items = new Object(); + var xpath = ''//ul[@class="articles"]/li[@class="result"]/div[@class="header"]''; + var names = doc.evaluate(xpath, doc, namespace, XPathResult.ANY_TYPE, null); + var next_item = names.iterateNext(); + while (next_item) { + titles.push(next_item.textContent.split(/\n/)[3]); + next_item = names.iterateNext(); + } + + var nextpath = ''//ul[@class="articles"]/li/@onclick''; + var links = doc.evaluate(nextpath, doc, namespace, XPathResult.ANY_TYPE, null); + var next_link = links.iterateNext(); + while (next_link) { + hrefs.push(next_link.textContent); + next_link = links.iterateNext(); + } + + for (var i = 0 ; i < titles.length ; i++) { + items[hrefs[i].match(/\d+/)] = titles[i]; + } + items = Zotero.selectItems(items); + + for (var i in items) { + newURIs.push(''http://innovateonline.info/index.php?view=article&id='' + i); + } + } else { + var newURL = url; + if (newURL.indexOf("highlight") != -1) { + newURL = newURL.substring(0, newURL.indexOf("highlight") -1); + } + if (newURL.indexOf("action=synopsis") != -1) { + newURL = newURL.replace("action=synopsis", "action=article"); + } + newURIs.push(newURL); + } + Zotero.debug(newURIs); + + Zotero.Utilities.processDocuments(newURIs, function(newDoc) { + var newItem = new Zotero.Item("journalArticle"); + newItem.repository = "Innovate Online"; + newItem.publicationTitle = "Innovate"; + newItem.title = newDoc.title.substring(10); + + var authors = newDoc.evaluate(''//div[@id="title"]/div[@class="author"]/a'', newDoc, namespace, XPathResult.ANY_TYPE, null); + var author = authors.iterateNext(); + while (author) { + newItem.creators.push(Zotero.Utilities.cleanAuthor(author.textContent, "author")); + author = authors.iterateNext(); + } + + newItem.date = newDoc.evaluate(''//div[@id="page"]/a/div[@class="title"]'', newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().textContent; + + var voliss = newDoc.evaluate(''//div[@id="page"]/a/div[@class="subtitle"]'', newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Volume\s+(\d+).*Issue\s+(\d+)/); + newItem.volume = voliss[1]; + newItem.issue = voliss[2]; + + var id = newDoc.location.href.match(/\d+/)[0]; + var PDFurl = "http://innovateonline.info/print.php?view=pdf&id=" + id; + newItem.attachments = [ + {url:newDoc.location.href, title:"Innovate Online Snapshot", mimeType:"text/html"}, + {url:PDFurl, title:"Innovate Online PDF", mimeType:"application/pdf"} + ] + + Zotero.Utilities.HTTP.doGet(newDoc.location.href.replace("action=article", "action=synopsis"), function(text) { + var abs = text.match(/
    \n

    (.*)<\/p>/)[1]; + newItem.abstractNote = Zotero.Utilities.unescapeHTML(Zotero.Utilities.cleanTags(abs)); + newItem.complete(); + }); + }, function() {Zotero.done;}); + Zotero.wait(); +}'); + +REPLACE INTO translators VALUES ('bdae838b-3a58-461f-9e8a-142ed9de61dc', '1.0.0b4.r5', '', '2008-01-10 21:00:00', '1', '100', '4', 'PLoS Journals', 'Michael Berkowitz', 'http://[^.]+\.plosjournals\.org/', +'function detectWeb(doc, url) { + if (doc.evaluate(''//div[@class="search"][@id="browseResults"]/ul/li/span/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext() || + doc.evaluate(''//div[@id="toclist"]/dl/dt/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + return "multiple"; + } else if (url.indexOf("get-document") != -1) { + return "journalArticle"; + } +}', 'function unescape(text) { var specialreg=new RegExp("&#[^;]+;"); var specials=specialreg.exec(text); @@ -2103,12 +2554,16 @@ REPLACE INTO translators VALUES ('bdae838b-3a58-461f-9e8a-142ed9de61dc', '1.0.0b function doWeb(doc, url) { var URLs = new Array(); var items = new Object(); - if (doc.evaluate(''//div[@class="search"][@id="browseResults"]/ul/li/span/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { - var xpath = ''//div[@class="search"][@id="browseResults"]/ul/li/span/a''; + if (detectWeb(doc, url) == "multiple") { + if (doc.evaluate(''//div[@class="search"][@id="browseResults"]/ul/li/span/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + var xpath = ''//div[@class="search"][@id="browseResults"]/ul/li/span/a''; + } else if (doc.evaluate(''//div[@id="toclist"]/dl/dt/a'', doc, null, XPathResult.ANY_TYPE, null).iterateNext()) { + var xpath = ''//div[@id="toclist"]/dl/dt/a''; + } var articles = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); var next_article = articles.iterateNext(); while (next_article) { - items[next_article.href] = next_article.textContent; + items[next_article.href] = Zotero.Utilities.cleanString(next_article.textContent); next_article = articles.iterateNext(); } items = Zotero.selectItems(items); @@ -2129,15 +2584,11 @@ function doWeb(doc, url) { var bits = doc.location.href.match(/(^.*\?request=).*(doi=.*$)/); var RISurl = bits[1] + ''download-citation&t=refman&'' + bits[2]; Zotero.Utilities.HTTP.doGet(RISurl, function(text) { - /*text = text.replace(/RT/, "TY"); - text = text.replace(/VO/, "VL"); - text = text.replace(/LK/, "UR"); - text = text.replace(/YR/, "PY");*/ var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { - var urlstring= bits[1]+ ''get-pdf&'' +bits[2].replace("doi=", "file=").replace("/", "_") + ''-S.pdf''; + var urlstring= bits[1]+ ''get-pdf&'' +bits[2].replace("doi=", "file=").replace("/", "_").replace("%2F", "_") + ''-S.pdf''; newItem.attachments.push({url:urlstring, title:newItem.title, mimeType:"application/pdf"}); var urlRE = /http:\/\/dx.doi.org\/(.*)$/; @@ -3394,16 +3845,30 @@ function doWeb(doc, url) { } '); -REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b4.r5', '', '2007-09-06 19:30:00', '0', '100', '4', 'ESA Journals', 'Michael Berkowitz', '^http://www.esajournals.org/*', +REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b4.r5', '', '2008-01-06 23:55:00', '0', '100', '4', 'ESA Journals', 'Michael Berkowitz', '^http://www.esajournals.org/*', 'function detectWeb(doc, url) { - Zotero.debug(doc.title); - if (url.indexOf("get-toc") != -1) { + if (url.indexOf("get-toc") != -1 || url.indexOf("searchtype") != -1) { return "multiple"; } else if (url.indexOf("get-document") != -1 || url.indexOf("get-abstract") != -1) { return "journalArticle"; } }', -'function doWeb(doc, url) { +'function senCase(string) { + var smallwords = Array("AND", "A", "IN", "THE", "BY", "OF"); + var sen = string.split(/\b/); + for (var i = 0 ; i < sen.length; i++) { + if (sen[i].match(/\w+/)) { + if (smallwords.indexOf(sen[i]) != -1 && i != 0) { + sen[i] = sen[i].toLowerCase(); + } else { + sen[i] = sen[i][0] + sen[i].substring(1).toLowerCase(); + } + } + } + return sen.join(""); +} + +function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; @@ -3432,7 +3897,7 @@ REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b var articles = new Object(); for (var i = 0 ; i < linksAr.length ; i++) { - articles[linksAr[i]] = titlesAr[i]; + articles[linksAr[i]] = senCase(titlesAr[i]); } articles = Zotero.selectItems(articles); @@ -3452,13 +3917,12 @@ REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b var URI = "http://www.esajournals.org/perlserv/?request=cite-builder&doi=" + doi; Zotero.Utilities.HTTP.doGet(URI, function(text) { var newURI = Zotero.Utilities.unescapeHTML(text.match(re)[1]); - Zotero.Utilities.HTTP.doGet("http://www.esajournals.org/perlserv/" + newURI, function(text) { + Zotero.Utilities.HTTP.doGet("http://" + doc.location.host + "/perlserv/" + newURI, function(text) { var translator = Zotero.loadTranslator("import"); text = text.replace(/RT/, "TY"); text = text.replace(/VO/, "VL"); text = text.replace(/LK/, "UR"); text = text.replace(/YR/, "PY"); - Zotero.debug(text); translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); translator.setString(text.replace(/([A-Z][A-Z\d]\s)/g, "$1 - ")); translator.setHandler("itemDone", function(obj, item) { @@ -3467,6 +3931,12 @@ REPLACE INTO translators VALUES ('5af42734-7cd5-4c69-97fc-bc406999bdba', '1.0.0b {url:"http://www.esajournals.org/perlserv/?request=res-loc&uri=urn%3Aap%3Apdf%3Adoi%3A" + doi, title:"EAS Full Text PDF", mimeType:"application/pdf"} ]; item.itemType = "journalArticle"; + item.title = item.title.replace(/\s+\-\s+/g, " "); + if (item.title.indexOf("JF") != -1) { + item.title = item.title.substring(0, item.title.indexOf("JF") - 1); + } + item.title = senCase(item.title); + item.abstractNote = item.notes[0][''note'']; item.complete(); }); translator.translate(); @@ -4693,7 +5163,7 @@ function doWeb(doc, url) } }'); -REPLACE INTO translators VALUES ('1a3e63b2-0adf-4c8e-928b-c58c2594b45d', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'BioMed Central and More', 'Ben Parr', '^http://(www.)?(biomedcentral|actavetscand|aidsrestherapy|almob|ann-clinmicrob|annals-general-psychiatry|asir-journal|arthritis-research|anzhealthpolicy|behavioralandbrainfunctions|bjoc.beilstein-journals|biology-direct|biomagres|bio-diglib|biomedical-engineering-online|bpsmedicine|breast-cancer-research|cancerci|cbmjournal|cardiab|cardiovascularultrasound|cellandchromosome|biosignaling|celldiv|cerebrospinalfluidresearch|journal.chemistrycentral|capmh|cmjournal|chiroandosteo|clinicalmolecularallergy|cpementalhealth|comparative-hepatology|conflictandhealth|resource-allocation|coughjournal|ccforum|cytojournal|diagnosticpathology|dynamic-med|ete-online|ehjournal|epi-perspectives|filariajournal|frontiersinzoology|gvt-journal|genomebiology|geochemicaltransactions|globalizationandhealth|harmreductionjournal|head-face-med|hqlo|health-policy-systems|human-resources-health|immunityageing|immunome-research|implementationscience|infectagentscancer|internationalbreastfeedingjournal|equityhealthj|ijbnpa|ij-healthgeographics|issoonline|jautoimdis|jbiol|j-biomed-discovery|jbppni|carcinogenesis|cardiothoracicsurgery|jcircadianrhythms|ethnobiomed|jexpclinassistreprod|jibtherapies|journal-inflammation|jmedicalcasereports|jmolecularsignaling|jnanobiotechnology|jnrbm|jneuroengrehab|jneuroinflammation|occup-med|josr-online|translational-medicine|kinetoplastids|lipidworld|malariajournal|medimmunol|microbialcellfactories|molecular-cancer|molecularneurodegeneration|molecularpain|neuraldevelopment|nonlinearbiomedphys|nuclear-receptor|nutritionandmetabolism|nutritionj|ojrd|om-pc|particleandfibretoxicology|ped-rheum|peh-med|plantmethods|pophealthmetrics|proteomesci|ro-journal|rbej|reproductive-health-journal|respiratory-research|retrovirology|salinesystems|scoliosisjournal|scfbm|substanceabusepolicy|tbiomed|thrombosisjournal|trialsjournal|virologyj|wjes|wjso)\.(com|org|net)', +REPLACE INTO translators VALUES ('1a3e63b2-0adf-4c8e-928b-c58c2594b45d', '1.0.0b4.r1', '', '2008-01-09 20:00:00', '0', '100', '4', 'BioMed Central and More', 'Ben Parr', 'http://[^/]*(biomedcentral|actavetscand|aidsrestherapy|almob|ann-clinmicrob|annals-general-psychiatry|asir-journal|arthritis-research|anzhealthpolicy|behavioralandbrainfunctions|bjoc.beilstein-journals|biology-direct|biomagres|bio-diglib|biomedical-engineering-online|bpsmedicine|breast-cancer-research|cancerci|cbmjournal|cardiab|cardiovascularultrasound|cellandchromosome|biosignaling|celldiv|cerebrospinalfluidresearch|journal.chemistrycentral|capmh|cmjournal|chiroandosteo|clinicalmolecularallergy|cpementalhealth|comparative-hepatology|conflictandhealth|resource-allocation|coughjournal|ccforum|cytojournal|diagnosticpathology|dynamic-med|ete-online|ehjournal|epi-perspectives|filariajournal|frontiersinzoology|gvt-journal|genomebiology|geochemicaltransactions|globalizationandhealth|harmreductionjournal|head-face-med|hqlo|health-policy-systems|human-resources-health|immunityageing|immunome-research|implementationscience|infectagentscancer|internationalbreastfeedingjournal|equityhealthj|ijbnpa|ij-healthgeographics|issoonline|jautoimdis|jbiol|j-biomed-discovery|jbppni|carcinogenesis|cardiothoracicsurgery|jcircadianrhythms|ethnobiomed|jexpclinassistreprod|jibtherapies|journal-inflammation|jmedicalcasereports|jmolecularsignaling|jnanobiotechnology|jnrbm|jneuroengrehab|jneuroinflammation|occup-med|josr-online|translational-medicine|kinetoplastids|lipidworld|malariajournal|medimmunol|microbialcellfactories|molecular-cancer|molecularneurodegeneration|molecularpain|neuraldevelopment|nonlinearbiomedphys|nuclear-receptor|nutritionandmetabolism|nutritionj|ojrd|om-pc|particleandfibretoxicology|ped-rheum|peh-med|plantmethods|pophealthmetrics|proteomesci|ro-journal|rbej|reproductive-health-journal|respiratory-research|retrovirology|salinesystems|scoliosisjournal|scfbm|substanceabusepolicy|tbiomed|thrombosisjournal|trialsjournal|virologyj|wjes|wjso)\.(com|org|net)', 'function detectWeb(doc,url) { var namespace = doc.documentElement.namespaceURI; @@ -5013,103 +5483,63 @@ function doWeb(doc,url) } }'); -REPLACE INTO translators VALUES ('b61c224b-34b6-4bfd-8a76-a476e7092d43', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'SSRN', 'Ramesh Srigiriraju', '^http://papers\.ssrn\.com/', +REPLACE INTO translators VALUES ('b61c224b-34b6-4bfd-8a76-a476e7092d43', '1.0.0b4.r5', '', '2008-01-10 21:00:00', '0', '100', '4', 'SSRN', 'Michael Berkowitz', '^http://papers\.ssrn\.com/', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; - var singpath=''//img[@title="go to Document Delivery"]''; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) - return "book"; - var searchpath=''//td/font/strong[text()="Sort by"]''; - if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) - return "multiple"; - var browspath=''//td/font/strong[text()="Sort by:"]''; - if(doc.evaluate(browspath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) + + if (doc.evaluate(''//font/strong/a[substring(@class, 1, 4) = "text"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "multiple"; + } else if (url.indexOf("abstract_id") != -1) { + return "journalArticle"; + } }', -'function doWeb(doc, url) { +'function doWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { return (prefix=="x")?namespace:null; }:null; - var singpath=''//img[@title="go to Document Delivery"]''; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { - var id=url.substring(url.indexOf("id=")+3); - var incase=id.indexOf("&"); - if(incase!=-1) - id=id.substring(0, incase); - var string="http://papers.ssrn.com/sol3/RefExport.cfm?abstract_id="+id+"&format=3"; - Zotero.Utilities.HTTP.doGet(string, function(text) { - var datareg=new RegExp(''input type="Hidden" name="hdnContent" value="([^"]+)"''); - var data=datareg.exec(text); + + var uris = new Array(); + + if (doc.evaluate(''//font/strong/a[substring(@class, 1, 4) = "text"]'', doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { + var items = new Object(); + var xpath = ''//font/strong/a[substring(@class, 1, 4) = "text"]''; + var titles = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); + var next_title = titles.iterateNext(); + while (next_title) { + items[next_title.href] = next_title.textContent; + next_title = titles.iterateNext(); + } + items = Zotero.selectItems(items); + for (var i in items) { + uris.push(i); + } + } else { + uris.push(url); + } + + Zotero.Utilities.processDocuments(uris, function(newDoc) { + var id = newDoc.location.href.match(/abstract_id=(\d+)/)[1]; + var newURL = ''http://papers.ssrn.com/sol3/RefExport.cfm?abstract_id='' + id + ''&format=3''; + Zotero.Utilities.HTTP.doGet(newURL, function(text) { + var ris=text.match(//)[1]; var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - trans.setString(data[1]); + trans.setString(ris); + trans.setHandler("itemDone", function(obj, item) { + item.itemType = "journalArticle"; + item.complete(); + }); trans.translate(); }); - } - var searchpath=''//td/font/strong[text()="Sort by"]''; - if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { - var idpath=''//tr/td/font/strong/a[@class="textLink"]''; - var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); - var id; - var items=new Array(); - while(id=ids.iterateNext()) { - var link=id.href; - var num=link.substring(link.lastIndexOf("id=")+3); - var incase=num.indexOf("&"); - if(incase!=-1) - num=num.substring(0, incase); - items[num]=id.textContent; - } - items=Zotero.selectItems(items); - var urls=new Array(); - for(var id in items) { - var string="http://papers.ssrn.com/sol3/RefExport.cfm?abstract_id="+id+"&format=3"; - Zotero.Utilities.HTTP.doGet(string, function(text) { - var datareg=new RegExp(''input type="Hidden" name="hdnContent" value="([^"]+)"''); - var data=datareg.exec(text); - var trans=Zotero.loadTranslator("import"); - trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - trans.setString(data[1]); - trans.translate(); - }); - } - } - var browspath=''//td/font/strong[text()="Sort by:"]''; - if(doc.evaluate(browspath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { - var idpath=''//font/strong/a[@class="textlink"]''; - var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); - var id; - var items=new Array(); - while(id=ids.iterateNext()) { - var link=id.href; - var num=link.substring(link.lastIndexOf("id=")+3); - var incase=num.indexOf("&"); - if(incase!=-1) - num=num.substring(0, incase); - items[num]=id.textContent; - } - items=Zotero.selectItems(items); - var urls=new Array(); - for(var id in items) { - var string="http://papers.ssrn.com/sol3/RefExport.cfm?abstract_id="+id+"&format=3"; - Zotero.Utilities.HTTP.doGet(string, function(text) { - var datareg=new RegExp(''input type="Hidden" name="hdnContent" value="([^"]+)"''); - var data=datareg.exec(text); - var trans=Zotero.loadTranslator("import"); - trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - trans.setString(data[1]); - trans.translate(); - }); - } - } + }, function() {Zotero.done;}); Zotero.wait(); }'); -REPLACE INTO translators VALUES ('1c34744d-690f-4cac-b31b-b7f0c90ac14d', '1.0.0b3.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'RSC Publishing', 'Ramesh Srigiriraju', 'http://(:?www\.|google\.)?rsc\.org/', +REPLACE INTO translators VALUES ('1c34744d-690f-4cac-b31b-b7f0c90ac14d', '1.0.0b3.r1', '', '2007-12-21 16:00:00', '0', '100', '4', 'RSC Publishing', 'Ramesh Srigiriraju', 'http://(:?www\.|google\.)?rsc\.org/', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { @@ -5277,6 +5707,8 @@ function doWeb(doc, url) { Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" + text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.translate(); Zotero.done(); @@ -5301,6 +5733,8 @@ function doWeb(doc, url) { Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" + text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.translate(); Zotero.done(); @@ -5317,6 +5751,8 @@ function doWeb(doc, url) { Zotero.Utilities.HTTP.doGet(string, function(text) { var trans=Zotero.loadTranslator("import"); trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + // fix bad Y1 tags, which have wrong spacing and typically terminate with "///" + text = text.replace("Y1 - ", "Y1 - "); trans.setString(text); trans.setHandler("itemDone", function(obj, newItem) { var url2=newItem.url; @@ -5529,75 +5965,6 @@ function doWeb(doc, url) { Zotero.wait(); }'); -REPLACE INTO translators VALUES ('0faa6714-927a-4b07-911e-7101895daae0', '1.0.0b4.r1', '', '2007-07-31 16:45:00', '0', '100', '4', 'GBV', 'Ramesh Srigiriraju', '^http://(?:www\.|gso\.)?gbv\.de/', -'function detectWeb(doc, url) { - var namespace=doc.documentElement.namespaceURI; - var nsResolver=namespace?function(prefix){ - return (prefix=="x")?namespace:null; - }:null; - var searchpath=''//tr/td[@class="tab1"][text()="shortlist" or text()="Kurzliste"]''; - if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) - return "multiple"; - var singpath=''//tr/td[@class="tab1"][text()="title data" or text()="Titeldaten"]''; - var singpath2=''//tr/td[@class="tab1"][text()="availability" or text()="Nachweisinformationen"]''; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()|| - doc.evaluate(singpath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) - return "website"; -}', -'function doWeb(doc, url) { - var namespace=doc.documentElement.namespaceURI; - var nsResolver=namespace?function(prefix){ - return (prefix=="x")?namespace:null; - }:null; - var searchpath=''//tr/td[@class="tab1"][text()="shortlist" or text()="Kurzliste"]''; - if(doc.evaluate(searchpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { - var titlpath=''//tr/td[@class="hit"]/a/text()''; - var idpath=''//tr/td[@class="hit"][@align="right"]/text()''; - var titles=doc.evaluate(titlpath, doc, nsResolver, XPathResult.ANY_TYPE, null); - var ids=doc.evaluate(idpath, doc, nsResolver, XPathResult.ANY_TYPE, null); - var items=new Array(); - var id; - while(id=ids.iterateNext()) { - var str=id.nodeValue; - str=str.substring(0, str.indexOf(".")); - items[str]=titles.iterateNext().nodeValue; - } - items=Zotero.selectItems(items); - var string="http://gso.gbv.de/DWN"; - for(var linx in items) { - var datastr="FRST="+linx+"&LAST="+linx+"&NORND=1&UFRST=" - +linx+"&ULAST="+linx+"&PRS=RIS&CHARSET_ONCE=UTF-8&MAXLINE=77&EMAIL="; - Zotero.Utilities.HTTP.doPost(string, datastr, function(text) { - var trans=Zotero.loadTranslator("import"); - trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - trans.setString(text); - trans.translate(); - Zotero.done(); - }); - } - Zotero.wait(); - } - var singpath=''//tr/td[@class="tab1"][text()="title data" or text()="Titeldaten"]''; - var singpath2=''//tr/td[@class="tab1"][text()="availability" or text()="Nachweisinformationen"]''; - if(doc.evaluate(singpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()|| - doc.evaluate(singpath2, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { - var pagepath=''//tr/td[@class="h2"]/strong[@class="pages"]/text()''; - var str=doc.evaluate(pagepath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; - var string="http://gso.gbv.de/DWN"; - var regex=new RegExp("^([\\d]+)"); - var nums=regex.exec(str); - var datastr="FRST="+nums[0]+"&LAST="+nums[0]+"&NORND=1&UFRST=" - +nums[0]+"&ULAST="+nums[0]+"&PRS=RIS&CHARSET_ONCE=UTF-8&MAXLINE=77&EMAIL="; - Zotero.Utilities.HTTP.doPost(string, datastr, function(text) { - var trans=Zotero.loadTranslator("import"); - trans.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - trans.setString(text); - trans.translate(); - Zotero.done(); - }); - } -}'); - REPLACE INTO translators VALUES ('4fd6b89b-2316-2dc4-fd87-61a97dd941e8', '1.0.0b3.r1', '', '2007-11-14 17:20:00', '1', '100', '4', 'Library Catalog (InnoPAC)', 'Simon Kornblith', '^https?://[^/]+/(?:search\??/|record=|search%7e/)', 'function detectWeb(doc, url) { // First, check to see if the URL alone reveals InnoPAC, since some sites don''t reveal the MARC button @@ -6117,7 +6484,7 @@ function doWeb(doc, url){ } }'); -REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b3.r1', '', '2007-08-31 21:00:00', '1', '100', '4', 'ProQuest', 'Simon Kornblith', '^https?://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=|TS=[0-9])', +REPLACE INTO translators VALUES ('a77690cf-c5d1-8fc4-110f-d1fc765dcf88', '1.0.0b3.r1', '', '2007-12-03 03:00:00', '1', '100', '4', 'ProQuest', 'Simon Kornblith', '^https?://[^/]+/pqdweb\?((?:.*\&)?did=.*&Fmt=[0-9]|(?:.*\&)Fmt=[0-9].*&did=|(?:.*\&)searchInterface=|(?:.*\&)TS=[0-9])', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { @@ -6247,7 +6614,7 @@ function doWeb(doc, url) { var str= mInfo.value; str= str.replace("retrieveGroup", "sid"); var url = host+"/pqdweb?RQT=530&markedListInfo="+str+"1"; - items[url] = Zotero.Utilities.cleanString(titleElmt.textContent); + items[url] = Zotero.Utilities.trimInternal(titleElmt.textContent); } while((mInfo = mInfos.iterateNext()) && (titleElmt = titleElmts.iterateNext())); @@ -6640,7 +7007,7 @@ function doWeb(doc, url) { Zotero.wait(); }'); -REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b3.r1', '', '2007-11-30 22:00:00', '1', '100', '4', 'LexisNexis', 'Sean Takats', '^https?://(?:www\.|web\.)?lexis-?nexis\.com[^/]*/us/lnacademic', +REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b3.r1', '', '2008-01-29 23:00:00', '1', '100', '4', 'LexisNexis', 'Sean Takats', 'https?://[^/]*lexis-?nexis\.com[^/]*/us/lnacademic', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { @@ -6682,6 +7049,7 @@ REPLACE INTO translators VALUES ('b047a13c-fe5c-6604-c997-bef15e502b09', '1.0.0b Zotero.Utilities.HTTP.doPost(uri, poststring, function(text) { uri = text.match(/&url=([^'']+)''/) uri = decodeURIComponent(uri[1]); + uri = uri.replace(/http:\/\/[^/]*\//, host+"/"); var uris = new Array(); uris.push(uri); Zotero.Utilities.processDocuments(uris, function(newDoc){ @@ -7430,7 +7798,7 @@ REPLACE INTO translators VALUES ('0f9fc2fc-306e-5204-1117-25bca009dffc', '1.0.0b Zotero.wait(); }'); -REPLACE INTO translators VALUES ('c54d1932-73ce-dfd4-a943-109380e06574', '1.0.0b4.r1', '', '2007-10-10 20:00:00', '1', '100', '4', 'Project MUSE', 'Simon Kornblith', '^https?://muse\.jhu\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\.html|search/results)', +REPLACE INTO translators VALUES ('c54d1932-73ce-dfd4-a943-109380e06574', '1.0.0b4.r1', '', '2008-01-13 19:30:00', '1', '100', '4', 'Project MUSE', 'Simon Kornblith', 'https?://[^/]*muse\.jhu\.edu[^/]*/(?:journals/[^/]+/[^/]+/[^/]+\.html|search/results)', 'function detectWeb(doc, url) { var searchRe = new RegExp("^https?://[^/]+/search/results"); if(searchRe.test(url)) { @@ -7546,7 +7914,7 @@ REPLACE INTO translators VALUES ('c54d1932-73ce-dfd4-a943-109380e06574', '1.0.0b } }'); -REPLACE INTO translators VALUES ('fcf41bed-0cbc-3704-85c7-8062a0068a7a', '1.0.0b3.r1', '', '2007-11-09 05:50:00', '1', '100', '4', 'NCBI PubMed', 'Simon Kornblith and Michael Berkowitz', '^http://www\.ncbi\.nlm\.nih\.gov/(sites/entrez|entrez/query\.fcgi\?.*db=PubMed)', +REPLACE INTO translators VALUES ('fcf41bed-0cbc-3704-85c7-8062a0068a7a', '1.0.0b3.r1', '', '2008-01-23 18:30:00', '1', '100', '4', 'NCBI PubMed', 'Simon Kornblith and Michael Berkowitz', 'http://[^/]*www\.ncbi\.nlm\.nih\.gov[^/]*/(pubmed|sites/entrez|entrez/query\.fcgi\?.*db=PubMed)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { @@ -7555,8 +7923,8 @@ REPLACE INTO translators VALUES ('fcf41bed-0cbc-3704-85c7-8062a0068a7a', '1.0.0b var uids = doc.evaluate(''//input[@id="UidCheckBox" or @name="uid"]'', doc, nsResolver, XPathResult.ANY_TYPE, null); - if(uids.iterateNext()) { - if (uids.iterateNext()){ + if(uids.iterateNext() && doc.title.indexOf("PMC Results") == -1) { + if (uids.iterateNext() && doc.title.indexOf("PMC Results") == -1){ return "multiple"; } return "journalArticle"; @@ -8199,133 +8567,122 @@ function doWeb() { getAllIds(); }'); -REPLACE INTO translators VALUES ('3af43735-36d3-46ae-9ca8-506ff032b0d3', '1.0.0b4.r1', '', '2007-06-21 06:30:00', '0', '100', '4', 'HeinOnline', 'Bill McKinney', 'http:\/\/heinonline\.org\/HOL\/Page\?handle\=hein\.journals\/.+', +REPLACE INTO translators VALUES ('a326fc49-60c2-405b-8f44-607e5d18b9ad', '1.0.0b4.r5', '', '2008-01-25 20:00:00', '0', '100', '4', 'Code4Lib Journal', 'Michael Berkowitz', 'http://journal.code4lib.org/', 'function detectWeb(doc, url) { - var namespace = doc.documentElement.namespaceURI; - var nsResolver = namespace ? function(prefix) { - if (prefix == ''x'') return namespace; else return null; - } : null; - - var re = /http:\/\/heinonline\.org\/HOL\/Page\?handle\=hein\.journals\/.+/ - if(re.test(url)) { - return "book"; - } else { - var aTags = doc.getElementsByTagName("a"); - for(var i=0; i 0) { - for (var i = 0; i < p[4].options.length; i++) { - if (p[4].options[ i ].selected) { - selectedPage = p[4].options[i].value; - pageNum = p[4].options[i].innerHTML; - newItem.pages = pageNum.replace(/^Page\s+/,"") + "-"; + Zotero.Utilities.HTTP.doGet(citationurl, function(text) { + var stuff = text.match(/(\d+)\s+([^\d]+)\s+(\d+)\s+\(([-\d]+)\)\s+
    \s+([^;]+)(;\s*(.*))?/); + newItem.volume = stuff[1]; + newItem.journalAbbreviation = stuff[2]; + newItem.pages = stuff[3]; + newItem.date = stuff[4]; + newItem.title = Zotero.Utilities.trimInternal(stuff[5]); + + if (stuff[7]) { + var authors = stuff[7].split('';''); + for (var i in authors) { + authors[i] = authors[i].split('',''); + newItem.creators.push({lastName:authors[i][0], firstName:authors[i][1], creatorType:"author"}); } } - } - - - // get handle - var handle=""; - var handleRe = /handle=([^\&]+)\&/ - var handleMatch = handleRe.exec(doc.location.href); - if (handleMatch) { - handle = handleMatch[1]; - } - - // fetch citation - var url = "http://heinonline.org/HOL/citation-info?handle="+handle+"&id="+selectedPage+"&rand=12345&collection=journals"; - Zotero.Utilities.HTTP.doGet(url, function(text) { - var tmpTxt = text; - var citeRe = /(\d+)\s+(.+)\s+(\d+)\s+\(([^\)]+)\)\s+
    \s+([^;]+)(;\s.+[\S])/ - var citeMatch = citeRe.exec(tmpTxt) - if (citeMatch) { - - newItem.volume = citeMatch[1]; - //newItem.issue= citeMatch[3]; - newItem.date = citeMatch[4]; - newItem.journalAbbreviation = citeMatch[2]; - newItem.title = citeMatch[5]; - - var tmpAuthors = citeMatch[6]; - var authors = tmpAuthors.split(";"); - for (i=1;i/; @@ -10793,22 +11240,18 @@ REPLACE INTO translators VALUES ('cde4428-5434-437f-9cd9-2281d14dbf9', '1.0.0b3. newItem.creators.push({lastName:names[0], isInstitution:true, creatorType:"author"}); } } else if(fieldCode == "SO") { - // make a vague attempt at getting a volume and pages - var m = fieldContent.match(/([0-9]+)\(([0-9]+)\):([A-Z]?[0-9]+(?:\-[A-Z]?[0-9]+))/); - if(m) { - newItem.volume = m[1]; - newItem.issue = m[2]; - newItem.pages = m[3]; - fieldContent = fieldContent.replace(m[0], ""); + var m = fieldContent.split("."); + newItem.publicationTitle = Zotero.Utilities.cleanString(m[0]); + if (m[1].match(/\d+\(\d+\)/)) { + var n = m[1].match(/(\d+)\((\d+)\)/); + Zotero.debug(n); + newItem.volume = n[1]; + newItem.issue = n[2]; + } else { + newItem.volume = m[1].match(/\d+/)[0]; } - // try to get the date, too - var m = fieldContent.match(/((?:January|February|March|April|May|June|July|August|September|October|November|December).*[0-9]{4});$/); - if(m) { - newItem.date = m[1]; - fieldContent = fieldContent.replace(m[0], ""); - } - - newItem.publicationTitle = Zotero.Utilities.superCleanString(fieldContent); + newItem.date = senCase(Zotero.Utilities.cleanString(m[2])); + newItem.pages = Zotero.Utilities.cleanString(m[3]); } else if(fieldCode == "SB") { newItem.tags.push(Zotero.Utilities.superCleanString(fieldContent)); } else if(fieldCode == "KW") { @@ -10827,10 +11270,7 @@ REPLACE INTO translators VALUES ('cde4428-5434-437f-9cd9-2281d14dbf9', '1.0.0b3. if(haveStarted) { newItem.complete(); } - - Zotero.done(); }); - Zotero.wait(); }'); @@ -10933,6 +11373,105 @@ REPLACE INTO translators VALUES ('cb48083-4d9-4ed-ac95-2e93dceea0ec', '1.0.0b3.r Zotero.wait(); }'); +REPLACE INTO translators VALUES ('df966c80-c199-4329-ab02-fa410c8eb6dc', '1.0.0b3.r1', '', '2008-01-23 20:00:00', '1', '100', '4', 'University of Chicago', 'Sean Takats', 'https?://[^/]*journals\.uchicago\.edu[^/]*/(?:doi/abs|doi/full|toc)', +'function detectWeb(doc, url) { + if(url.indexOf("toc") != -1) { + return "multiple"; + } else { + return "journalArticle"; + } +}', +'function doWeb(doc, url) { + var namespace = doc.documentElement.namespaceURI; + var nsResolver = namespace ? function(prefix) { + if (prefix == ''x'') return namespace; else return null; + } : null; + + var post = ""; + + var fulltext = new Object(); + + if(url.indexOf("toc") != -1) { + var items = new Array(); + var links = new Array(); + + var tableRows = doc.evaluate(''//li[div[@class="articleListing_col3"]/label][//input[@name="doi"]]'', doc, + nsResolver, XPathResult.ANY_TYPE, null); + var tableRow; + // Go through table rows + while(tableRow = tableRows.iterateNext()) { + var id = doc.evaluate(''.//input[@name="doi"]'', tableRow, nsResolver, XPathResult.ANY_TYPE, + null).iterateNext().value; + items[id] = Zotero.Utilities.trimInternal(doc.evaluate(''.//label'', tableRow, + nsResolver, XPathResult.ANY_TYPE, null).iterateNext().textContent); + } + + var items = Zotero.selectItems(items); + if(!items) return true; + + // find all fulltext links so we can determine where we can scrape the fulltext article + var fulltextLinks = doc.evaluate(''//a[starts-with(text(), "Full Text")]'', doc, + nsResolver, XPathResult.ANY_TYPE, null); + var fulltextLink; + while(fulltextLink = fulltextLinks.iterateNext()) { + links.push(fulltextLink.href.toString()); + } + + for(var i in items) { + post += "doi="+encodeURIComponent(i)+"&"; + + // check for fulltext links + for each(var link in links) { + if(link.indexOf(i) != -1) { + fulltext[i] = true; + break; + } + } + } + } else { + var m = url.match(/https?:\/\/[^\/]+\/doi\/[^\/]+\/([^\?]+)(\?|$)/); + if (m) { + var doi = m[1]; + } else { + m = url.match(/https?:\/\/[^\/]+\/links\/doi\/([^\?]+)(\?|$)/); + var doi = m[1]; + } + post += "doi="+encodeURIComponent(doi)+"&"; + + if(url.indexOf("doi/full") != -1 || + doc.evaluate(''//img[@alt="Full Text Article"]'', doc, nsResolver, XPathResult.ANY_TYPE, + null).iterateNext()) { + fulltext[doi] = true; + } + } + + post += "include=cit&downloadFileName=deadbeef&format=refman&direct=on&submit=Download+article+citation+data"; + + Zotero.Utilities.HTTP.doPost("http://www.journals.uchicago.edu/action/downloadCitation", post, function(text) { + // load translator for RIS + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + item.attachments = [ + {url:item.url, title:"University of Chicago Journals Snapshot", mimeType:"text/html"}, + {url:item.url.replace("/doi/abs", "/doi/pdf"), title:"University of Chicago Full Text PDF", mimeType:"application/pdf"} + ]; + // use fulltext if possible + if(fulltext[item.DOI.substr(4)]) { + item.attachments[0].url = item.attachments[0].url.replace("/doi/abs", "/doi/full"); + } + + item.complete(); + }); + translator.translate(); + + Zotero.done(); + }); + + Zotero.wait(); +}'); + REPLACE INTO translators VALUES ('f8765470-5ace-4a31-b4bd-4327b960ccd', '1.0.0b3.r1', '', '2007-03-24 22:20:00', 1, 100, 4, 'SpringerLink', 'Simon Kornblith', '^https?://(?:www\.springerlink\.com|springerlink.metapress.com)[^/]*/content/', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; @@ -11110,7 +11649,7 @@ REPLACE INTO translators VALUES ('6614a99-479a-4524-8e30-686e4d66663e', '1.0.0b3 Zotero.wait(); }'); -REPLACE INTO translators VALUES ('92d4ed84-8d0-4d3c-941f-d4b9124cfbb', '1.0.0b3.r1', '', '2007-11-29 18:00:00', 1, 100, 4, 'IEEE Xplore', 'Simon Kornblith', '^https?://ieeexplore.ieee.org[^/]*/(?:[^\?]+\?(?:|.*&)arnumber=[0-9]+|search/(?:searchresult.jsp|selected.jsp))', +REPLACE INTO translators VALUES ('92d4ed84-8d0-4d3c-941f-d4b9124cfbb', '1.0.0b3.r1', '', '2008-01-29 19:00:00', '1', '100', '4', 'IEEE Xplore', 'Simon Kornblith and Michael Berkowitz', 'https?://ieeexplore.ieee.org[^/]*/(?:[^\?]+\?(?:|.*&)arnumber=[0-9]+|search/(?:searchresult.jsp|selected.jsp))', 'function detectWeb(doc, url) { var articleRe = /[?&]arnumber=([0-9]+)/; var m = articleRe.exec(url); @@ -11122,7 +11661,7 @@ REPLACE INTO translators VALUES ('92d4ed84-8d0-4d3c-941f-d4b9124cfbb', '1.0.0b3. } return false; -}', +}', 'function doWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { @@ -11163,47 +11702,60 @@ REPLACE INTO translators VALUES ('92d4ed84-8d0-4d3c-941f-d4b9124cfbb', '1.0.0b3. } else { var urls = [url]; } - var arnumber = ""; for each(var url in urls) { var m = articleRe.exec(url); arnumber += "%3Carnumber%3E"+m[1]+"%3C%2Farnumber%3E"; - } - - var post = "dlSelect=cite_abs&fileFormate=ris&arnumber="+arnumber+"&x=5&y=10"; - - var isRe = /[?&]isnumber=([0-9]+)/; - var puRe = /[?&]punumber=([0-9]+)/; - - Zotero.Utilities.HTTP.doPost("http://ieeexplore.ieee.org/xpls/citationAct", post, function(text) { - // load translator for RIS - var translator = Zotero.loadTranslator("import"); - translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); - translator.setString(text); - translator.setHandler("itemDone", function(obj, item) { - var url = urls.shift(); - Zotero.debug(url); - var is = isRe.exec(url); - var pu = puRe.exec(url); - var arnumber = articleRe.exec(url); - - if(is && pu) { - item.url = "http://ieeexplore.ieee.org/iel4/"+pu[1]+"/"+is[1]+"/"+Zotero.Utilities.lpad(arnumber[1], "0", 8)+".pdf"; - item.attachments = [{title:"IEEE Xplore Full Text PDF", mimeType:"application/pdf", url:item.url}]; - } - - if(item.notes[0] && item.notes[0].note) { - item.abstractNote = item.notes[0].note; - item.notes = new Array(); - } - - item.complete(); + var newurls = [url]; + var post = "dlSelect=cite_abs&fileFormate=ris&arnumber="+arnumber+"&x=5&y=10"; + var isRe = /[?&]isnumber=([0-9]+)/; + var puRe = /[?&]punumber=([0-9]+)/; + Zotero.Utilities.HTTP.doPost("http://ieeexplore.ieee.org/xpls/citationAct", post, function(text) { + // load translator for RIS + var translator = Zotero.loadTranslator("import"); + translator.setTranslator("32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7"); + translator.setString(text); + translator.setHandler("itemDone", function(obj, item) { + var url = urls.shift(); + Zotero.debug(url); + var is = isRe.exec(url); + var pu = puRe.exec(url); + var arnumber = articleRe.exec(url); + + if(item.notes[0] && item.notes[0].note) { + item.abstractNote = item.notes[0].note; + item.notes = new Array(); + } + var dupes = new Array(); + for (var i = 0 ; i < item.creators.length - 1 ; i++) { + if (item.creators[i].lastName + item.creators[i].firstName == item.creators[i+1].lastName + item.creators[i].firstName) { + dupes.push(i + 1); + } + } + + for (var i in dupes) { + delete item.creators[dupes[i]]; + } + var dupes = []; + for (var i = 0 ; i < item.creators.length ; i++) { + if (item.creators[i]) { + dupes.push(item.creators[i]); + } + } + item.creators = dupes; + + Zotero.Utilities.processDocuments(newurls, function(newDoc) { + var xpath = ''//p[@class="bodyCopyBlackLargeSpaced"]''; + item.DOI = newDoc.evaluate(xpath, newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().textContent.match(/Identifier:\s+([^\n]*)\n/)[1]; + var pdfpath = ''//td[2][@class="bodyCopyBlackLarge"]/a[@class="bodyCopy"][substring(text(), 1, 3) = "PDF"]''; + var pdfurl = newDoc.evaluate(pdfpath, newDoc, namespace, XPathResult.ANY_TYPE, null).iterateNext().href; + item.attachments = [{url:pdfurl, title:"IEEE Xplore Full Text PDF", mimeType:"application/pdf"}]; + item.complete(); + }, function() {Zotero.done;}); + }); + translator.translate(); }); - translator.translate(); - - Zotero.done(); - }); - + } Zotero.wait(); }'); @@ -11331,7 +11883,7 @@ REPLACE INTO translators VALUES ('7bdb79e-a47f-4e3d-b317-ccd5a0a74456', '1.0.0b3 Zotero.wait(); }'); -REPLACE INTO translators VALUES ('850f4c5f-71fb-4669-b7da-7fb7a95500ef', '1.0.0b3r1', '', '2007-11-25 14:00:00', '0', '100', '4', 'Cambridge Journals Online', 'Sean Takats', '^https?://(?:www\.)?journals\.cambridge\.org/action/(quickSearch|search|displayAbstract|displayFulltext|displayIssue)', +REPLACE INTO translators VALUES ('850f4c5f-71fb-4669-b7da-7fb7a95500ef', '1.0.0b3r1', '', '2008-01-10 19:00:00', '0', '100', '4', 'Cambridge Journals Online', 'Sean Takats', 'https?://[^/]*journals\.cambridge\.org[^/]*/action/(quickSearch|search|displayAbstract|displayFulltext|displayIssue)', 'function detectWeb(doc, url) { var namespace=doc.documentElement.namespaceURI; var nsResolver=namespace?function(prefix) { @@ -11596,7 +12148,7 @@ function doWeb(doc, url) { } }'); -REPLACE INTO translators VALUES ('e78d20f7-488-4023-831-dfe39679f3f', '1.0.0b3.r1', '', '2007-03-24 22:20:00', '1', '100', '4', 'ACM', 'Simon Kornblith', '^https?://portal\.acm\.org[^/]*/(?:results\.cfm|citation\.cfm)', +REPLACE INTO translators VALUES ('e78d20f7-488-4023-831-dfe39679f3f', '1.0.0b3.r1', '', '2008-01-10 09:45:00', '1', '100', '4', 'ACM', 'Simon Kornblith', 'https?://[^/]*portal\.acm\.org[^/]*/(?:results\.cfm|citation\.cfm)', 'function detectWeb(doc, url) { if(url.indexOf("/results.cfm") != -1) { var items = Zotero.Utilities.getItemArray(doc, doc, ''^https?://[^/]+/citation.cfm\\?[^#]+$''); @@ -11664,9 +12216,12 @@ function scrape(doc) { } Zotero.Utilities.HTTP.doGet("http://portal.acm.org/"+m[1], function(text) { + // split() may no longer be necessary var m = text.split(/<\/?pre[^>]*>/ig); - var text = m[1]; - + if (m[1]) { + var text = m[1]; + } + // load Refer translator var translator = Zotero.loadTranslator("import"); translator.setTranslator("881f60f2-0802-411a-9228-ce5f47b64c7d"); @@ -12399,7 +12954,7 @@ REPLACE INTO translators VALUES ('a354331-981b-43de-a61-bc26dd1be3a9', '1.0.0b3. }); }'); -REPLACE INTO translators VALUES ('938ebe32-2b2e-4349-a5b3-b3a05d3de627', '1.0.0b3.r1', '', '2007-09-18 07:10:00', '1', '100', '4', 'ACS Publications', 'Sean Takats', '[^/]*/(?:wls/journals/query/subscriberResults\.html|acs/journals/toc.page|cgi-bin/(?:article|abstract|sample).cgi/[^/]+/[0-9]+/[0-9]+/i[0-9]+/(?:html|abs)/[^\.]+.html)', +REPLACE INTO translators VALUES ('938ebe32-2b2e-4349-a5b3-b3a05d3de627', '1.0.0b3.r1', '', '2007-12-21 22:00:00', '1', '100', '4', 'ACS Publications', 'Sean Takats', '[^/]*/(?:wls/journals/query/(?:subscriberResults|query)\.html|acs/journals/toc.page|cgi-bin/(?:article|abstract|sample).cgi/[^/]+/[0-9]+/[0-9]+/i[0-9]+/(?:html|abs)/[^\.]+.html)', 'function detectWeb(doc, url) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { @@ -13774,7 +14329,7 @@ function doImport() { } }'); -REPLACE INTO translators VALUES ('14763d24-8ba0-45df-8f52-b8d1108e7ac9', '1.0.0b4.r1', '', '2007-04-26 09:00:00', 1, 25, 2, 'Zotero RDF', 'Simon Kornblith', 'rdf', +REPLACE INTO translators VALUES ('14763d24-8ba0-45df-8f52-b8d1108e7ac9', '1.0.0b4.r1', '', '2008-01-10 22:00:00', 1, 25, 2, 'Zotero RDF', 'Simon Kornblith', 'rdf', 'Zotero.configure("getCollections", true); Zotero.configure("dataMode", "rdf"); Zotero.addOption("exportNotes", true); @@ -13819,14 +14374,14 @@ function generateTags(resource, tags) { } function generateCollection(collection) { - var collectionResource = "#collection:"+collection.id; + var collectionResource = "#collection_"+collection.id; Zotero.RDF.addStatement(collectionResource, rdf+"type", n.z+"Collection", false); Zotero.RDF.addStatement(collectionResource, n.dc+"title", collection.name, true); for each(var child in collection.descendents) { // add child list items if(child.type == "collection") { - Zotero.RDF.addStatement(collectionResource, n.dcterms+"hasPart", "#collection:"+child.id, false); + Zotero.RDF.addStatement(collectionResource, n.dcterms+"hasPart", "#collection_"+child.id, false); // do recursive processing of collections generateCollection(child); } else if(itemResources[child.id]) { @@ -14193,16 +14748,16 @@ function doExport() { usedResources[itemResources[item.itemID]] = true; } else { // just specify a node ID - itemResources[item.itemID] = "#item:"+item.itemID; + itemResources[item.itemID] = "#item_"+item.itemID; } for(var j in item.notes) { - itemResources[item.notes[j].itemID] = "#item:"+item.notes[j].itemID; + itemResources[item.notes[j].itemID] = "#item_"+item.notes[j].itemID; } for each(var attachment in item.attachments) { // just specify a node ID - itemResources[attachment.itemID] = "#item:"+attachment.itemID; + itemResources[attachment.itemID] = "#item_"+attachment.itemID; } } @@ -14910,7 +15465,7 @@ function doImport() { } }'); -REPLACE INTO translators VALUES ('32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7', '1.0.0b4.r1', '', '2007-11-29 21:00:00', '1', '100', '3', 'RIS', 'Simon Kornblith', 'ris', +REPLACE INTO translators VALUES ('32d59d2d-b65a-4da4-b0a3-bdd3cfb979e7', '1.0.2', '', '2008-01-04 02:47:18', '1', '100', '3', 'RIS', 'Simon Kornblith', 'ris', 'Zotero.configure("dataMode", "line"); Zotero.addOption("exportNotes", true); @@ -15143,26 +15698,20 @@ function processTag(item, tag, value) { } } else if(tag == "UR" || tag == "L1" || tag == "L2" || tag == "L4") { // URL - //using regex to test URL until #821 is fixed - urlRe = /(https?:\/\/[^\s]*)/; - var m = urlRe.exec(value); - if (m){ - value = m[1]; - if(!item.url) { + if(!item.url) { item.url = value; - } - if(tag == "UR") { - item.attachments.push({url:value}); - } else if(tag == "L1") { - item.attachments.push({url:value, mimeType:"application/pdf", - title:"Full Text (PDF)", downloadable:true}); - } else if(tag == "L2") { - item.attachments.push({url:value, mimeType:"text/html", - title:"Full Text (HTML)", downloadable:true}); - } else if(tag == "L4") { - item.attachments.push({url:value, - title:"Image", downloadable:true}); - } + } + if(tag == "UR") { + item.attachments.push({url:value}); + } else if(tag == "L1") { + item.attachments.push({url:value, mimeType:"application/pdf", + title:"Full Text (PDF)", downloadable:true}); + } else if(tag == "L2") { + item.attachments.push({url:value, mimeType:"text/html", + title:"Full Text (HTML)", downloadable:true}); + } else if(tag == "L4") { + item.attachments.push({url:value, + title:"Image", downloadable:true}); } } else if (tag == "IS") { // Issue Number (patent: patentNumber) @@ -15418,7 +15967,7 @@ function doExport() { } }'); -REPLACE INTO translators VALUES ('881f60f2-0802-411a-9228-ce5f47b64c7d', '1.0.0b4.r5', '', '2007-11-29 18:00:00', '1', '100', '3', 'EndNote/Refer/BibIX', 'Simon Kornblith', 'txt', +REPLACE INTO translators VALUES ('881f60f2-0802-411a-9228-ce5f47b64c7d', '1.0.0b4.r5', '', '2008-01-22 19:00:00', '1', '100', '3', 'Refer/BibIX', 'Simon Kornblith', 'txt', 'Zotero.configure("dataMode", "line"); function detectImport() { @@ -15696,8 +16245,9 @@ function doExport() { } }'); -REPLACE INTO translators VALUES ('9cb70025-a888-4a29-a210-93ec52da40d4', '1.0.0b4.r1', '', '2007-11-07 08:00:00', '1', '100', '3', 'BibTeX', 'Simon Kornblith', 'bib', +REPLACE INTO translators VALUES ('9cb70025-a888-4a29-a210-93ec52da40d4', '1.0.0b4.r1', '', '2008-01-24 18:00:00', '1', '100', '3', 'BibTeX', 'Simon Kornblith', 'bib', 'Zotero.configure("dataMode", "block"); +Zotero.addOption("UTF8", true); function detectImport() { var block = ""; @@ -15781,46 +16331,1408 @@ var months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"] /* - * this is the character table for converting TeX to Unicode. sorry, Czech - * speakers; you''ll have to add your own (or stop using BibTeX!) + * new mapping table based on that from Matthias Steffens, + * then enhanced with some fields generated from the unicode table. */ -var accentedCharacters = { - // grave accents - 192:"\\`A", 224:"\\`a", - 200:"\\`E", 232:"\\`e", - 204:"\\`I", 236:"\\`i", - 210:"\\`O", 242:"\\`o", - 217:"\\`U", 249:"\\`u", - // acute accents - 193:"\\''A", 225:"\\''a", - 201:"\\''E", 233:"\\''e", - 205:"\\''I", 237:"\\''i", - 211:"\\''O", 243:"\\''o", - 218:"\\''U", 250:"\\''u", - // circumflexes - 194:"\\^A", 226:"\\^a", - 202:"\\^E", 234:"\\^e", - 206:"\\^I", 238:"\\^i", - 212:"\\^O", 244:"\\^o", - 219:"\\^U", 251:"\\^u", - // tildes - 195:"\\~A", 227:"\\~a", - 213:"\\~O", 245:"\\~o", - 209:"\\~N", 241:"\\~n", - // umlauts - 196:''\\"A'', 228:''\\"a'', - 203:''\\"E'', 235:''\\"e'', - 207:''\\"I'', 239:''\\"i'', - 214:''\\"O'', 246:''\\"o'', - 220:''\\"U'', 252:''\\"u'', - // cidillas - 191:"\\c{C}", 231:"\\c{c}", - // AE norwegian tings - 198:"{\\AE}", 230:"{\\ae}", - // o norwegian things - 216:"{\\o}", 248:"{\\O}", - // a norweigan things - 197:"{\\AA}", 229:"{\\aa}" + +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 + "\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 + "\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 + "\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":"--", // HORIZONTAL BAR + "\u2016":"{\\textbardbl}", // DOUBLE VERTICAL LINE + "\u2017":"{\\textunderscore}", // DOUBLE LOW LINE + "\u2018":"{\\textquoteleft}", // LEFT SINGLE QUOTATION MARK + "\u2019":"{\\textquoteright}", // 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 + "\u22EF":"...", // MIDLINE HORIZONTAL ELLIPSIS + "\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 */ + "\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 + "\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 + "\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 + "\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 + "\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 + "\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 = { + "\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 + "\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 + "\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 + "\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 + "\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 + "\u02C6":"{\\textasciicircum}", // MODIFIER LETTER CIRCUMFLEX ACCENT + "\u02DC":"\\~{}", // SMALL TILDE + "\u02DD":"{\\textacutedbl}", // DOUBLE ACUTE ACCENT + "\u2001":" ", // EM QUAD + "\u2013":"{\\textendash}", // EN DASH + "\u2014":"{\\textemdash}", // EM DASH + "\u2015":"--", // HORIZONTAL BAR + "\u2016":"{\\textbardbl}", // DOUBLE VERTICAL LINE + "\u2017":"{\\textunderscore}", // DOUBLE LOW LINE + "\u2018":"{\\textquoteleft}", // LEFT SINGLE QUOTATION MARK + "\u2019":"{\\textquoteright}", // RIGHT SINGLE QUOTATION MARK + "\u201A":"{\\quotesinglbase}", // SINGLE LOW-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 + "\u2026":"{\\textellipsis}", // HORIZONTAL ELLIPSIS + "\u2030":"{\\textperthousand}", // PER MILLE SIGN + "\u2034":"''''''", // TRIPLE 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 + "\u2044":"{\\textfractionsolidus}", // FRACTION SLASH + "\u2048":"?!", // QUESTION EXCLAMATION MARK + "\u2049":"!?", // EXCLAMATION QUESTION MARK + "\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 + "\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 + "\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 + "\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 + "\u221E":"$\\infty$", // INFINITY + "\u2225":"||", // PARALLEL TO + "\u223C":"\\~{}", // TILDE OPERATOR + "\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 + "\u2297":"(x)", // 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 + "\u22EF":"...", // MIDLINE HORIZONTAL ELLIPSIS + "\u2329":"{\\textlangle}", // LEFT-POINTING ANGLE BRACKET + "\u232A":"{\\textrangle}", // RIGHT-POINTING ANGLE BRACKET + "\u2423":"{\\textvisiblespace}", // OPEN BOX + "\u2425":"///", // SYMBOL FOR DELETE FORM TWO + "\u25E6":"{\\textopenbullet}", // 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 + "\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 +/* Derived accented characters */ + "\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 + "\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 + "\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 + "\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 + "\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 + "\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 + +}; + +var alwaysMap = { + "|":"{\\textbar}", + "<":"{\\textless}", + ">":"{\\textgreater}", + "~":"{\\textasciitilde}", + "^":"{\\textasciicircum}", + "\\":"{\\textbackslash}" }; function processField(item, field, value) { @@ -15951,8 +17863,17 @@ function getFieldValue() { if(value.length > 1) { // replace accented characters (yucky slow) - for(var i in accentedCharacters) { - value = value.replace(accentedCharacters[i], i); + for (var i in reversemappingTable) { // really really slow! + var mapped = reversemappingTable[i]; + if (value.indexOf(mapped) != -1) { + Zotero.debug("Replace " + mapped + " in " + value + " with " + i); + value = value.replace(mapped, i, "g"); + } + mapped = mapped.replace(/[{}]/, ""); + if (value.indexOf(mapped) != -1) { + Zotero.debug("Replace(2) " + mapped + " in " + value + " with " + i); + value = value.replace(mapped, i, "g"); + } } // kill braces @@ -16018,16 +17939,11 @@ function beginRecord(type, closeChar) { } function doImport() { - // make regular expressions out of values - var newArray = new Array(); - for(var i in accentedCharacters) { - newArray[String.fromCharCode(i)] = new RegExp(accentedCharacters[i].replace(/\\/g, "\\\\"), "g"); - } - accentedCharacters = newArray; - var read = "", text = "", recordCloseElement = false; var type = false; + Zotero.setCharacterSet("UTF-8"); + while(read = Zotero.read(1)) { if(read == "@") { type = ""; @@ -16047,55 +17963,36 @@ function doImport() { // 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 writeMacroField(field, value) { - if (!value) { - return; +function writeField(field, value, isMacro) { + if(!value) return; + value = value + ""; // convert integers to strings + Zotero.write(",\n\t"+field+" = "); + if(!isMacro) Zotero.write("{"); + // I hope these are all the escape characters! + value = value.replace(/[|\<\>\~\^\\]/g, mapEscape).replace(/([\#\$\%\&\_])/g, "\\$1"); + if (!Zotero.getOption("UTF8")) { + value = value.replace(/[\u0080-\uFFFF]/g, mapAccent); } - - value = value.toString(); - // replace naughty chars - value = value.replace(/([#$%&~_^\\{}])/g, "\\$1"); - - // replace accented characters - for (var i in accentedCharacters) { - value = value.replace(accentedCharacters[i], i); - } - // replace other accented characters - value = value.replace(/[\u0080-\uFFFF]/g, "?") - - // write - Zotero.write(",\n\t"+field+" = "+value); + Zotero.write(value); + if(!isMacro) Zotero.write("}"); } -function writeField(field, value) { - if(!value) return; - - value = value.toString(); - // replace naughty chars - value = value.replace(/([#$%&~_^\\{}])/g, "\\$1"); - // we assume people who use braces in their title probably did so intentionally - if (field == "title") { - value = value.replace(/\\([{}])/g, "$1"); - } - // replace accented characters - for (var i in accentedCharacters) { - value = value.replace(accentedCharacters[i], i); - } - // replace other accented characters - value = value.replace(/[\u0080-\uFFFF]/g, "?") - - // write - Zotero.write(",\n\t"+field+" = {"+value+"}"); +function mapEscape(character) { + return alwaysMap[character]; +} + +function mapAccent(character) { + return (mappingTable[character] ? mappingTable[character] : "?"); } var numberRe = /^[0-9]+/; function doExport() { - // switch keys and values of accented characters - var newArray = new Array(); - for(var i in accentedCharacters) { - newArray["{"+accentedCharacters[i]+"}"] = new RegExp(String.fromCharCode(i), "g"); + if(Zotero.getOption("UTF8")) { + Zotero.setCharacterSet("UTF-8"); + } + else { + Zotero.setCharacterSet("us-ascii"); } - accentedCharacters = newArray; //Zotero.write("% BibTeX export generated by Zotero "+Zotero.Utilities.getVersion()); @@ -16110,33 +18007,37 @@ function doExport() { // create a unique citation key var basekey = ""; if(item.creators && item.creators[0] && item.creators[0].lastName) { - basekey = item.creators[0].lastName.toLowerCase().replace(/ /g,"_").replace(/,/g,""); + basekey += "_" + item.creators[0].lastName.toLowerCase().replace(/ /g,"_").replace(/,/g,""); } // include the item title as part of the citation key if (item["title"]) { // this is a list of words that should not appear as part of the citation key - var bannedTitleKeys = {"a" : 1, "an" : 1, "does": 1, "how": 1, "it''s": 1, "on" : 1, "some": 1, "the" : 1, "this" : 1, "why" : 1 }; - var titleElements = item["title"].split(" "); - var appendKey = ""; - for (te in titleElements) { - if (!bannedTitleKeys[titleElements[te].toLowerCase()]) { - appendKey = "_" + titleElements[te].toLowerCase() + "_"; + var bannedTitleKeys = ["a", "an", "from", "does", "how", "it''s", "its", "on", "some", "the", "this", "why"]; + var titleElements = item["title"].toLowerCase().split(" "); + for(var te in titleElements) { + if (bannedTitleKeys.indexOf(titleElements[te]) == -1) { + basekey += "_" + titleElements[te]; break; - } } - basekey = basekey + appendKey; + } } if(item.date) { var date = Zotero.Utilities.strToDate(item.date); if(date.year && numberRe.test(date.year)) { - basekey += date.year; + basekey += "_" + date.year; } } - // make sure we do not have any other funny characters - basekey = basekey.replace(/[\. ,'':\"!&]/g,""); + // 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 + + basekey = basekey.substr(1).replace(/[^a-z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+/g,""); var citekey = basekey; var i = 0; while(citekeys[citekey]) { @@ -16204,7 +18105,7 @@ function doExport() { if(item.date) { // need to use non-localized abbreviation if(date.month) { - writeMacroField("month", months[date.month]); + writeField("month", months[date.month], true); } if(date.year) { writeField("year", date.year); @@ -16230,6 +18131,7 @@ function doExport() { } }'); + REPLACE INTO translators VALUES ('a6ee60df-1ddc-4aae-bb25-45e0537be973', '1.0.0b3.r1', '', '2007-03-28 19:15:00', 1, 100, 1, 'MARC', 'Simon Kornblith', 'marc', 'function detectImport() { var marcRecordRegexp = /^[0-9]{5}[a-z ]{3}$/ @@ -16921,13 +18823,209 @@ function doExport() { } }'); -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/apa.csl', '2007-10-23 18:00:00', 'American Psychological Association', -' + + + +-- ---------------------------------------------------------------- +-- +-- CSL styles +-- +-- ---------------------------------------------------------------- +REPLACE INTO csl VALUES ('http://www.zotero.org/syles/ama', '2008-01-03 23:00:00', 'American Medical Association', +' + +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/apa', '2008-01-03 23:00:00', 'American Psychological Association', +' + '); + +'); -REPLACE INTO csl VALUES('http://www.zotero.org/namespaces/CSL/chicago-author-date.csl', '2007-11-10 03:39:37', 'Chicago Manual of Style (Author-Date)', +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/apsa', '2008-01-03 23:00:00', 'American Political Science Association', ' -'); - -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/chicago-note.csl', '2007-11-10 03:39:37', 'Chicago Manual of Style (Note without Reference List)', -' - - +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/asa', '2008-01-03 23:00:00', 'American Sociological Association (Author-Date)', +' + +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/chicago-author-date', '2008-01-03 23:00:00', 'Chicago Manual of Style (Author-Date format)', +' + +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/chicago-fullnote-bibliography', '2008-01-03 23:00:00', 'Chicago Manual of Style (Full Note with Bibliography)', +' +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/chicago-note-bibliography', '2008-01-03 23:00:00', 'Chicago Manual of Style (Note with Bibliography)', +' + + +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/chicago-note', '2008-01-03 23:00:00', 'Chicago Manual of Style (Note without Bibliography)', +' +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/ieee', '2008-01-03 23:00:00', 'IEEE', +' + +'); + + + +'); -REPLACE INTO csl VALUES('http://www.zotero.org/namespaces/CSL/chicago-note-bibliography.csl', '2007-10-23 18:00:00', 'Chicago Manual of Style (Note with Reference List)', +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/harvard1', '2008-01-03 23:00:00', 'Harvard Reference format 1 (Author-Date)', ' -'); + +'); -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/mla.csl', '2007-11-03 19:45:00', 'Modern Language Association', -' +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/mhra', '2008-01-03 23:00:00', 'Modern Humanities Research Association (Note with Bibliography)', +' +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/mhra_note_without_bibliography', '2008-01-03 23:00:00', 'Modern Humanities Research Association (Note without Bibliography)', +' + + +'); + +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/mla', '2008-01-03 23:00:00', 'Modern Language Association', +' + '); + +'); -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/mhra_note_without_bibliography.csl', '2007-10-23 18:00:00', 'Modern Humanities Research Association (Note without Bibliography)', +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/nature', '2008-01-03 23:00:00', 'Nature Journal', ' - -'); - -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/asa.csl', '2007-10-23 18:00:00', 'American Sociological Association', -' - -'); - - -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/nature.csl', '2007-10-23 18:00:00', 'Nature Journal', -' - + ' -); + +'); -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/nlm.csl', '2007-10-23 18:00:00', 'National Library of Medicine', +REPLACE INTO csl VALUES ('http://www.zotero.org/styles/nlm', '2008-01-03 23:00:00', 'National Library of Medicine', ' - + '); - -REPLACE INTO csl VALUES('http://purl.org/net/xbiblio/csl/styles/ieee.csl', '2007-10-23 18:00:00', 'IEEE', -' - -'); \ No newline at end of file + + National Library of Medicine + http://www.zotero.org/styles/nlm + + + Michael Berkowitz + mberkowi@gmu.edu + + + + 2008-01-03T23:00:00+00:00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'); \ No newline at end of file