commit c1c2f6b9decca4c97c5005954f36026b12766b80
parent ac3cf03922c7362bd6c566ec2d2907352abf1eb4
Author: Dan Stillman <dstillman@gmail.com>
Date: Tue, 14 Jan 2014 11:22:21 -0800
Merge pull request #402 from adam3smith/transform-sentence
Change Transform text so that sentence case capitalizes after :, ?, ! Th...
Diffstat:
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/chrome/content/zotero/bindings/itembox.xml b/chrome/content/zotero/bindings/itembox.xml
@@ -1947,7 +1947,12 @@
var newVal = Zotero.Utilities.capitalizeTitle(val.toLowerCase(), true);
break;
case 'sentence':
- var newVal = val.length ? val[0].toUpperCase()+val.substr(1).toLowerCase() : val;
+ // capitalize the first letter, including after beginning punctuation
+ // capitalize after :, ?, ! and remove space(s) before those analogous to capitalizeTitle function
+ // also deal with initial punctuation here - open quotes and Spanish beginning quotation marks
+ newVal = val.toLowerCase();
+ newVal = newVal.replace(/(([:\?!]\s*|^)([\'\"¡¿“‘„«\s]+)?[^\s])/g, function (x) {
+ return x.replace(/\s+/m, " ").toUpperCase();});
break;
default:
throw ("Invalid transform mode '" + mode + "' in zoteroitembox.textTransform()");
diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js
@@ -757,13 +757,17 @@ Zotero.Utilities = {
// not first or last word
&& i != 0 && i != lastWordIndex
// does not follow a colon
- && (previousWordIndex == -1 || words[previousWordIndex][words[previousWordIndex].length-1] != ":")
+ && (previousWordIndex == -1 || words[previousWordIndex][words[previousWordIndex].length-1].search(/[:\?!]/)==-1)
) {
words[i] = lowerCaseVariant;
} else {
// this is not a skip word or comes after a colon;
// we must capitalize
- words[i] = upperCaseVariant.substr(0, 1) + lowerCaseVariant.substr(1);
+ // handle punctuation in the beginning, including multiple, as in "¿Qué pasa?"
+ var punct = words[i].match(/^[\'\"¡¿“‘„«\s]+/);
+ punct = punct ? punct[0].length+1 : 1;
+ words[i] = words[i].length ? words[i].substr(0, punct).toUpperCase() +
+ words[i].substr(punct).toLowerCase() : words[i];
}
}