-
Notifications
You must be signed in to change notification settings - Fork 9
Text Analysis ID FC
Fabian Morón Zirfas edited this page Jun 13, 2025
·
3 revisions
This is Text Analysis with the InDesign build in Find And Change Options.
/*
This is text analysis the InDesign way.
It uses the InDesign Find And Change Options
*/
main();
function main() {
// create doc, get page, add text frame
var the_text_to_analyse =
"Ich bin Blindtext. Von Geburt an.\r" +
"Es hat lange gedauert, bis ich begriffen habe,\r" +
"was es bedeutet, ein blinder Text zu sein:\r" +
"Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r" +
"Oft wird man gar nicht erst gelesen.\r" +
"Aber bin ich deshalb ein schlechter Text?\r" +
"Ich weiß, dass ich nie die Chance haben werde im Stern zu erscheinen.\r" +
"Aber bin ich darum weniger wichtig? Ich bin blind!\r" +
"Aber ich bin gerne Text.\r" +
"Und sollten Sie mich jetzt tatsächlich zu Ende lesen,\r" +
"dann habe ich etwas geschafft, was den meisten 'normalen' Texten nicht gelingt.\r" +
"Ich bin Blindtext. Von Geburt an.\r" +
"Es hat lange gedauert, bis ich begriffen habe, was es bedeutet, ein blinder Text zu sein:\r" +
"Man macht keinen Sinn. Man wirkt hier und da aus dem Zusammenhang gerissen.\r" +
"Oft wird man gar nicht erst gelesen. Aber bin ich deshalb ein schlechter Text?\r" +
"Ich weiß, dass ich nie die Chance haben werde im Stern zu erscheinen.\r" +
"Aber bin ich darum weniger wichtig? Ich bin blind!\r" +
"Aber ich bin gerne Text.\r" +
"Und sollten Sie mich jetzt tatsächlich zu Ende lesen, dann habe ich etwas geschafft,\r" +
"was den meisten 'normalen' Texten nicht gelingt. Ich bin Blindtext.";
var doc = app.documents.add();
var page = doc.pages[0];
var docpref = doc.documentPreferences; // these are the prefs
// some values
var pw = 200;
var ph = 200;
// set the doc size
docpref.pageWidth = pw;
docpref.pageHeight = ph;
// make a text frame
var tf = page.textFrames.add({
geometricBounds: [12.7, 12.7, ph - 12.7, pw - 12.7],
});
// add some placeholder text
tf.contents = the_text_to_analyse;
/*
It is important to empty the Find Change fields of the interface
*/
app.findTextPreferences = NothingEnum.nothing; // now empty the find what field!!! that's important!!!
app.changeTextPreferences = NothingEnum.nothing; // empties the change to field!!! that's important!!!
// some settings for FC
app.findChangeTextOptions.includeFootnotes = true;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = true;
app.findChangeTextOptions.includeMasterPages = true;
// better like this
// app.findChangeTextOptions.properties = {
// includeFootnotes : true,
// includeHiddenLayers : false,
// includeLockedLayersForFind : false,
// includeLockedStoriesForFind : true,
// includeMasterPages : true
// };
var result_list = new Array(); // this will hold our result
/*
loop the words
we get the result and push it into an object
than we remove all results so they dont get a double count
*/
for (var i = 0; i < tf.words.length; i++) {
var a_single_word = tf.words[i].contents; // get the word for better handling
app.findTextPreferences.findWhat = a_single_word; // fill in the search term
app.changeTextPreferences.changeTo = ""; //after we counted the words we remove them
var result = doc.findText(); // now execute the FC
// we push the word and the count of it into an
// JSON OBJECT
result_list.push({
word: a_single_word,
count: result.length,
});
doc.changeText();
app.findTextPreferences = NothingEnum.nothing; // now empty the find what field!!! that's important!!!
app.changeTextPreferences = NothingEnum.nothing; // empties the change to field!!! that's important!!!
} // end loop
result_list.sort(compare); // this is deep JS stuff
var word_num = result_list.length;
// alert(result_list.toSource());
// Give back the result in a nice fashion
alert(
"You have " +
word_num +
" words in your text.\n" +
"The five top words are:\n" +
"Number 5: " +
result_list[word_num - 5].word +
" - " +
result_list[word_num - 5].count +
"\n" +
"Number 4: " +
result_list[word_num - 4].word +
" - " +
result_list[word_num - 4].count +
"\n" +
"Number 3: " +
result_list[word_num - 3].word +
" - " +
result_list[word_num - 3].count +
"\n" +
"Number 2: " +
result_list[word_num - 2].word +
" - " +
result_list[word_num - 2].count +
"\n" +
"Number 1: " +
result_list[word_num - 1].word +
" - " +
result_list[word_num - 1].count +
"\n" +
"Amazing. Isn't it?",
);
// you could just copy paste this alert into another file
// have a look how to include a file in here
// https://github.com/fabiantheblind/auto-typo-adbe-id/wiki/Includes
// alert("var data = " + result_list.toSource());
} // end main function
// this is deep Javascript Stuff
// you can write your custom comparator
// read this Stackoverflow post
// http://stackoverflow.com/questions/1129216/sorting-objects-in-an-array-by-a-field-value-in-javascript
function compare(a, b) {
if (a.count < b.count) return -1;
if (a.count > b.count) return 1;
return 0;
}This wiki is mostly maintained by:
ff6347
Thanks to:
- JohnDarnell for fixing lots of typos.
- jsp for fixing lots of typos.
- ltfschoen for fixing typos.
- wridgers for adding more links.
- EugenTepin for several improvements.
- vamitul for improvements.
- abandonedbywolves for adding an example.
- Travis Weston
- Andy Dayton
Thanks to the students from my seminars for asking all those questions and making me start this wiki.
- adinaradke
- AnitaMei
- ce0311
- coerv
- felixharle
- FerdinandP
- Flave
- marche
- monkian
- natael
- OliverMatelowski
- PDXIII
- praktischend
- schlompf
- skaim
You are awesome.
- Arrays
- Classes
- Comments
- Conditionals
- Functions
- Inspect Properties
- Loops
- Objects
- Output And Interaction
- Recursive Functions
- Inspect Properties
- Variables And Operations
- Extended JavaScript Guide
- Bridge Talk
- Create And Read Files
- Executing Shell Commands
- ExtendScript Toolkit
- File
- Folder
- Includes JSX
- Object Watch
- Read CSV
- Read In JSON From File And DONT Eval
- Storing Data In A Target Engine
- Target an application
- XML
- Isolate Layers With the Shy Setting
- Layer Duration Change
- Render And System Call
- Rename Layers
- SourceText to Keyframes from Array
- SourceText
- System Call
- app
- Colorbrewer
- ColorGroups
- Colors And Swatches
- Delay And View
- Dialogs
- Documents
- Duplicate And Transform
- Event AfterSave
- Export IDML
- ExtendScript in InDesign Scripting DOM
- Fonts
- GeometricBounds and Coordinates
- Get named pageItems
- Graphic Lines
- Groups
- HSL Color Wheel
- Images
- Includes
- InsertionPoints
- Layers
- Line Feeds And Carrige Returns
- Locked PageItems
- loops vs everyItem
- Masterspreads
- Matrix
- Objectstyles
- Outlines Groups Alignment
- Pages And Margins
- Pathfinder
- Placeholder Text
- Rectangles Ovals Polygons
- RulerOrigin
- Scripting Labels
- Select words at insertionPoint
- Simple Find And Change Grep with FC Query
- Simple Find And Change Grep
- Simple Find And Change Text
- Spiro
- Styles
- Table Cells
- Text Analysis ID FC
- Text Analysis
- Text Find Locations
- Text
- Transformation Matricies
- TransparencySettings
- XML creation and import