Text to footnote in InDesign

Explorer ,
May 14, 2018 May 14, 2018

Copy link to clipboard

Copied

Hi,

I have been trying run a script that helps in automatically converting and placing text to footnotes in an InDesign document. Script:

var scriptName = "Convert text to footnote",

doc, story;

app.doScript(PreCheck, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "\"" + scriptName + "\" script");

//===================================== FUNCTIONS ======================================

function Main() {

var mEndNotes = doc.textFrames.add( {name:"EndNotes"} ), 

k, len, cIP, currPara, currFoot, mMarkers; 

 

app.findGrepPreferences = app.changeGrepPreferences = null; 

//--------------------------------------------- 

// edit doc.footnoteOption here 

with (doc.footnoteOptions)  

showPrefixSuffix = FootnotePrefixSuffix.PREFIX_SUFFIX_BOTH; 

prefix = "["; 

suffix = "]"; 

separatorText = "\t"; 

markerPositioning = FootnoteMarkerPositioning.NORMAL_MARKER; 

//------------------------------------------------------------ 

// move endnotes to a separate textFrame 

for (k=story.paragraphs.length - 1; k >=0; k--)  

if (story.paragraphs.contents.search(/^\[\d+\]/) == 0)  

currPara = story.paragraphs.move(LocationOptions.AT_BEGINNING, mEndNotes.parentStory); 

currPara.words[0].remove(); 

//-------------------------------------- 

// create footnote markers 

app.findGrepPreferences.findWhat = "\\[\\d+\\]"; 

mMarkers = story.findGrep(); 

len = mMarkers.length; 

while (len-->0) { 

cIP = mMarkers[len].insertionPoints[0].index; 

mMarkers[len].remove(); 

story.footnotes.add( LocationOptions.AFTER, story.insertionPoints[cIP] ); 

//------------------------------------------------------- 

// fill footnote contents with proper text 

for (k=0; k < story.footnotes.length; k++) { 

currFoot = story.footnotes

mEndNotes.paragraphs[0].texts[0].move(LocationOptions.AT_END, currFoot.texts[0]); 

if (story.footnotes.characters[-1].contents == "\r") story.footnotes.characters[-1].remove(); 

 

mEndNotes.remove();

}

//--------------------------------------------------------------------------------------------------------------------------------------------------------

function PreCheck() {

if (app.documents.length == 0) ErrorExit("Please open a document and try again.", true);

doc = app.activeDocument;

if (doc.converted) ErrorExit("The current document has been modified by being converted from older version of InDesign. Please save the document and try again.", true);

if (!doc.saved) ErrorExit("The current document has not been saved since it was created. Please save the document and try again.", true);

if (app.selection.length == 0) {

ErrorExit("Nothing is selected.", true);

}

else if (app.selection.length == 1) {

if (app.selection[0].constructor.name == "TextFrame" || app.selection[0].hasOwnProperty("baseline")) {

story = app.selection[0].parentStory;

}

else {

ErrorExit("Please select one text frame, or some text, or place the cursor and try again.", true);

}

}

else if (app.selection.length > 1) {

ErrorExit("Only one text frame or some text should be selected, or the cursor placed into the text.", true);

}

Main();

}

//--------------------------------------------------------------------------------------------------------------------------------------------------------

function ErrorExit(error, icon) {

alert(error, scriptName, icon);

exit();

}

//--------------------------------------------------------------------------------------------------------------------------------------------------------

Whenever I try to run this script in a document containing the following styling and text:

Text.png

It generates the following error:

Error.png

In all my documents, footnote text is marked in the same way and the text is usually at the end of the document. Though, the script worked for one of the documents however, it did not work for all others.

Could anyone help me with the idea of actually what is going wrong with the script? I have faced this problem in more than one file and have no idea about scripting.

Any help would be much appreciated.

Thanks and Regards,

Aman mittal

[This post moved from InDesign forum to InDesign Scripting forum by Moderator]

TOPICS
Scripting

Views

793

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Valorous Hero , May 15, 2018 May 15, 2018

First thing to do, when you're debugging, is to change the doScript in line 5 to a simple function call. In your case, change line 5 to

PreCheck();

That way, when you're shown an error message, it will say on what line the error message is and give specific details. With doScript, you only get the unhelpful message that is shown now.

So do that and post back.

Looking quickly at the script, though, it seems to copy out certain types of paragraphs, but it also seems to assume that each paragraph it co

...

Likes

Translate

Translate
Valorous Hero ,
May 15, 2018 May 15, 2018

Copy link to clipboard

Copied

LATEST

First thing to do, when you're debugging, is to change the doScript in line 5 to a simple function call. In your case, change line 5 to

PreCheck();

That way, when you're shown an error message, it will say on what line the error message is and give specific details. With doScript, you only get the unhelpful message that is shown now.

So do that and post back.

Looking quickly at the script, though, it seems to copy out certain types of paragraphs, but it also seems to assume that each paragraph it copies ends with a paragraph return. This might not always be the case, if the para is at the end of story.

So when you later loop through all (newly created) footnotes, you're assuming you'll find that many paragraphs, and it could be you won't.

Ariel

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines