Hyphen
Find hyphenated words
Dave Saunders
There may be some other legitimate line-ending characters I'm overlooking that need to be added to the string. Or you might be able to use grep to simplify that statement.
myStory = app.selection[0].parentStory; myLines = myStory.lines.everyItem().contents; for (var j = myLines.length - 1; j >= 0; j--) { if ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-/:".indexOf(myLines[j].slice(-1)) != -1) { alert("Line " + j + " of story ends in a soft hyphen.\n\n" + myLines[j]); } }
Dirk Becker
story = app.activeDocument.stories[0]; lines = story.lines; for( i=0; i < lines.length-1; i++ ) { l = lines[i]; w = l.words[-1]; if( l.characters[-1].index==w.characters[0].index+w.characters.length ) continue; $.writeln("line "+i +" l.c.i "+l.characters[-1].index +" w.i "+w.index +" w.c.i "+w.characters[0].index +" w.c.l "+w.characters.length +" w.c.z "+(w.characters[0].index+w.characters.length) ); $.writeln("line="+i+" word="+w.contents); }
Peter Kahrel
The three methods described here don't take into account hyphenated words like 'cross-eyed'. If you don't want to include these words when they break on the hyphen, you need to test whether the line ends in a hyphen. Something like
l.words[-1].lines.length == 2 && l.characters[-1].contents != '-';
doesn't find 'cross-eyed', even when it breaks across two lines. It finds 'cross-linguistic' when 'linguistic' is broken, but not when the line breaks at 'cross-'.
jxswm
this will get the hyphen
Line.prototype.getHyphen = function(){ try{if(this == null || this == undefined){return undefined;}}catch(e){return undefined;} var nextThis = this.paragraphs[0].lines.nextItem(this); if(nextThis != null){ if(this.words != null){ if(this.words.length > 0){ if(nextThis.words != null){ if(nextThis.words.length > 0){ var line0word_1 = this.words[-1]; var line1word0 = nextThis.words[0]; if(line0word_1.hyphenation && line1word0.hyphenation){ if(line0word_1 == line1word0){ return line0word_1; } } } } } } } return undefined; }
tobias wantzen, Shane Stanley
set theList to {} tell application "Adobe InDesign CS2" tell document 1 set theWords to object reference of every word of every story where baseline of character 1 is not baseline of character -1 repeat with aWord in theWords set firstLine to word -1 of (get line 1 of aWord) set secondLine to word 1 of (get line 2 of aWord) set end of theList to firstLine & "-" & secondLine end repeat end tell end tell return theList
In CS3 and later you find hyphenated words using the GREP expression "\\w+-\\w+"
To find out if they break across lines, check if the first and last characers are on the same line, for example by comparing their baseline values.
if(myWord.lines.length==2){ //it's hyphenated }
Report Page Hyphens script