Created
February 11, 2016 01:18
-
-
Save JMichaelTX/08a38accadbec4da2736 to your computer and use it in GitHub Desktop.
Transform String on Clipboard to Title Case using JavaScript for Automation (JXA)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶ | |
[STRINGS] Transform String on Clipboard to Title Case [JXA] | |
⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶ | |
DATE: Wed, Feb 10, 2016 | |
AUTHOR: JMichaelTX (in most forums) | |
Find any bugs/issues or have suggestions for improvement? | |
Contact me via PM or at blog.jmichaeltx.com/contact/ | |
REF: https://github.com/gouch/to-title-case/blob/master/to-title-case.js | |
⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶⩶ | |
*/ | |
var app = Application.currentApplication(); | |
app.includeStandardAdditions = true; | |
//~~~~~ PROTOTYPE DEFINITOINS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
// REF: https://github.com/gouch/to-title-case/blob/master/to-title-case.js | |
String.prototype.toTitleCase = function(){ | |
var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i; | |
return this.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function(match, index, title){ | |
if (index > 0 && index + match.length !== title.length && | |
match.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && | |
(title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') && | |
title.charAt(index - 1).search(/[^\s-]/) < 0) { | |
return match.toLowerCase(); | |
} | |
if (match.substr(1).search(/[A-Z]|\../) > -1) { | |
return match; | |
} | |
return match.charAt(0).toUpperCase() + match.substr(1); | |
}); | |
}; | |
//~~~~~~~~~~~~~~~~ END OF PROTOTYPE DEFINITIONS ~~~~~~~~~~~~~~~~~~~~~~ | |
//--- NOTE THAT USE OF THE PROTOTYPE toTitleCase() MUST BE AFTER ABOVE DEFINITION --- | |
var titleCaseStr = app.theClipboard().toTitleCase() | |
app.setTheClipboardTo(titleCaseStr) | |
titleCaseStr // Only needed if you want the script to return results to KM |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment