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.