Merge pull request #402 from adam3smith/transform-sentence

Change Transform text so that sentence case capitalizes after :, ?, ! Th...
This commit is contained in:
Dan Stillman 2014-01-14 11:22:21 -08:00
commit c1c2f6b9de
2 changed files with 12 additions and 3 deletions

View file

@ -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()");

View file

@ -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];
}
}