I have noticed this with most “titlecase” programs that I have tried. My solution has been to first make everything lowercase and then apply the titlecase, which seems to work more reliably.

YMMV.

TjL


On 21 Oct 2015, at 2:23, Michelle wrote:

Hello, Fletcher,

Thanks! It's a big improvement over my original. However, it's still not
quite 100% there.  Couple things:

1. I need it to change "THE" and "The" to "the" (and the same for all of
the other words that I listed).  Currently, it leaves lower-case "the"
uncapitalized, which is good, but it completely ignores "THE" and "The."

2. If one of the listed words happens to be the first or last word of a
string, it should be capitalized.

Thanks again!  I hope that many others can benefit from this, too.

Michelle



On Tuesday, October 20, 2015 at 10:21:33 PM UTC-7, flet...@cumuli.com wrote:

I found a regular expression online and adapted it for BBEdit. If you
replace the else conditional of your script with this it seems to work.

tell application "BBEdit"
tell window 1
 if (selection as text) is "" then
   set cursorPoint to characterOffset of selection
   find "\\b\\w" options {search mode:grep, backwards:true} with
selecting match
   set selection to (grep substitution of "\\U&")
   select insertion point before character cursorPoint
 else
   replace
"\\b(a)(?!(nd?|s|t)?\\b)|\\b(b)(?!(ut|y)?\\b)|\\b(f)(?!(or|rom)?\\b)|\\b(i)\\b|\\b(i)(?!(n|nto|t)?\\b)|\\b(n)(?!(or)?\\b)|\\b(o)(?!(f|n|nto|r)?\\b)|\\b(s)(?!(o)?\\b)|\\b(t)(?!(he|o)?\\b)|\\b(w)(?!(ith)?\\b)|\\b([^abfinostw])(?!\\b)"
using "\\u\\0" options {search mode:grep} searching in selection
 end if
end tell
end tell

The find pattern is kind of a bear, but it breaks down to selecting the first letter of a word which is not equal to one of the items in your list. You can use this directly in BBEdit and then it's double escaped in the AppleScript above. For example, it selects an "a" which starts a word and is not followed by "n", "nd", "s", or "t", a "b" which starts a word and is
not followed by "ut" or "y", etc.

\b(a)(?!(nd?|s|t)?\b)|\b(b)(?!(ut|y)?\b)|\b(f)(?!(or|rom)?\b)|\b(i)\b|\b(i)(?!(n|nto|t)?\b)|\b(n)(?!(or)?\b)|\b(o)(?!(f|n|nto|r)?\b)|\b(s)(?!(o)?\b)|\b(t)(?!(he|o)?\b)|\b(w)(?!(ith)?\b)|\b([^abfinostw])(?!\b)


The replacement pattern is \u\0 which changes the found character to
uppercase.

The regex pattern I adapted can be found here, but it uses a different
engine than BBEdit and didn't code quite the same list of words.

http://indesignsecrets.com/grep-solution-to-flawed-title-case-feature.php
<http://www.google.com/url?q=http%3A%2F%2Findesignsecrets.com%2Fgrep-solution-to-flawed-title-case-feature.php&sa=D&sntz=1&usg=AFQjCNHwWf_wBasrURjqoZf-4lO_HtZpWw>

[fletcher]



--
This is the BBEdit Talk public discussion group. If you have a
feature request or would like to report a problem, please email
"supp...@barebones.com" rather than posting to the group.
Follow @bbedit on Twitter: <http://www.twitter.com/bbedit>

---
You received this message because you are subscribed to the Google Groups "BBEdit Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to bbedit+unsubscr...@googlegroups.com.
To post to this group, send email to bbedit@googlegroups.com.

--
This is the BBEdit Talk public discussion group. If you have a feature request or would like to report a problem, please email
"supp...@barebones.com" rather than posting to the group.
Follow @bbedit on Twitter: <http://www.twitter.com/bbedit>

--- You received this message because you are subscribed to the Google Groups "BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to bbedit+unsubscr...@googlegroups.com.
To post to this group, send email to bbedit@googlegroups.com.

Reply via email to