Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

EXPORT 2 ENGINES TO JSXBIN

New Here ,
Jun 15, 2025 Jun 15, 2025

Is it not possible to export a script with a JSXBIN extension if there is more than one engine in it?

TOPICS
Import and export , Scripting
121
Translate
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
Community Expert ,
Jun 15, 2025 Jun 15, 2025

Hi @shikul-daat for a start, I've never written a script targeting more than one engine. Could you explain how your script is set up to do that? Maybe you could post a very brief script just showing the relevant parts?

 

After that maybe we can address your question about jsxbin.

- Mark

Translate
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
New Here ,
Jun 16, 2025 Jun 16, 2025

I will share with you some of the script. As much as I tried to download the second engine, it caused the script not to open.


#target "InDesign"
#targetengine "searchIndex"

var gWin;
// --- שמות קבועים ---
var INDEX_FRAME_NAME = "GeneratedIndexIndexFrame";
var OBJECT_STYLE_NAME = "IndexFrameStyle";
var PARA_STYLE_INDEX_HEADING = "IndexHeading";
var PARA_STYLE_INDEX_SUBHEADING = "IndexSubheading";
var PARA_STYLE_INDEX_ENTRY = "IndexEntryLine";
var CHAR_STYLE_INDEX_TERM = "IndexTerm";
var CHAR_STYLE_INDEX_PAGE = "IndexPageNumber";
var CHAR_STYLE_PAGE_REF_IN_LISTBOX = "IndexPage";

// --- פונקציית רישום לקובץ ---
function logMessage(message) {
try {
var logFile = File(Folder.desktop + "/indesign_script_log.txt");
logFile.encoding = "UTF-8";
logFile.open("a");
var timestamp = new Date().toTimeString().split(' ')[0];
logFile.writeln(timestamp + " - " + message);
logFile.close();
} catch(e) { /* לא להפריע לסקריפט */ }
}

// --- פונקציה למיפוי שמות תווים מיוחדים ---
function mapSpecialCharString(contentString) {
if (contentString === null || contentString === undefined) return "";
var s = String(contentString); // ודא שזו מחרוזת
switch (s) {
case "SINGLE_RIGHT_QUOTE": case "SINGLE_LEFT_QUOTE": case "SINGLE_STRAIGHT_QUOTE":
return "'"; // \u0027 (גרש ASCII)
case "DOUBLE_RIGHT_QUOTE": case "DOUBLE_LEFT_QUOTE": case "DOUBLE_STRAIGHT_QUOTE":
return '"'; // \u0022 (מרכאות ASCII)
case "EM_SPACE": return "\u2003";
case "EN_SPACE": return "\u2002";
case "NONBREAKING_SPACE": return "\u00A0";
case "THIN_SPACE": return "\u2009";
case "HAIR_SPACE": return "\u200A";
case "PUNCTUATION_SPACE": return "\u2008";
case "FIGURE_SPACE": return "\u2007";
case "SIXTH_SPACE": return "\u2006";
case "QUARTER_SPACE": return "\u2005";
case "THIRD_SPACE": return "\u2004";
case "FLUSH_SPACE": return SpecialCharacters.FLUSH_SPACE; // InDesign specific
case "RIGHT_INDENT_TAB": return "\u0008";
case "INDENT_HERE_TAB": return "\u0007";
case "FRAME_BREAK": case "COLUMN_BREAK": case "PAGE_BREAK":
return "\r"; // המרה למעבר פסקה פשוט, ייתכן שצריך טיפול אחר
default:
if (/^\d{9,10}$/.test(s)) {
logMessage(" mapSpecialCharString: Detected and removing long number string: [" + s + "]");
return ""; // הסרה מוחלטת
}
// logMessage(" mapSpecialCharString: Unhandled/default content: [" + s + "] (type: " + typeof s + ")");
return s;
}
}


try {
logMessage("--- Script Started (v068.9) ---");
if(app.documents.length===0){ alert("אין מסמך פתוח."); exit(); }
var doc = app.activeDocument;
ensureStyles(doc);

if(gWin && gWin.visible){ gWin.active = true; exit(); }

gWin = new Window("palette","אינדקס משוכלל – גרסה 068.9");
buildUI(gWin, doc);
gWin.show();
// Request 2: Set focus to search field
if (gWin.txtSearchTerm) { // Check if txtSearchTerm exists (it's set as a property of gWin now)
gWin.txtSearchTerm.active = true;
}

} catch(e){
var errorMsg = "שגיאה בבלוק הראשי:\n" + e.message + "\nשורה " + (e.line||'?') + (e.fileName ? "\nקובץ: " + e.fileName : "");
logMessage("ERROR: " + errorMsg.replace(/\n/g, " | "));
alert(errorMsg);
}

function buildUI(win,doc){
win.orientation="column"; win.alignChildren="fill"; win.spacing=6; win.margins=10;

var pFind = win.add("panel",undefined,"פרטי חיפוש");
pFind.orientation="row"; pFind.alignChildren="fill"; pFind.spacing=6;

var c = pFind.add("group"); c.orientation="column"; c.alignChildren="fill"; c.spacing=4;
function row(label,fn, labelWidth){
var lWidth = labelWidth || 170; // Default label width
var g = c.add("group"); g.orientation="row"; g.alignChildren="fill";
g.add("statictext",undefined,label).preferredSize.width=lWidth;
var ctl = fn(g); ctl.alignment="fill"; return ctl;
}

// Assign the EditText to a property of 'win' so it can be accessed later for focus
win.txtSearchTerm = row("מחרוזת לחיפוש:", function(g){
var e = g.add("edittext",undefined,"",{characters:40});
e.preferredSize.width = 260; return e;
});

// Request 1: Checkbox for partial word search
var chkPartialWord = c.add("checkbox", undefined, "חפש גם חלק ממילה");
chkPartialWord.value = false; // Default to not searching partial words
chkPartialWord.alignment = "left"; // Align checkbox to the left under the search term

// Request 5: Change labels for context words
var gWords = c.add("group"); gWords.orientation="row"; gWords.alignment = "left";
gWords.add("statictext",undefined,"לפני המילה:");
var bef = gWords.add("edittext",undefined,"5"); bef.preferredSize.width=30;
gWords.add("statictext",undefined,"אחרי המילה:");
var aft = gWords.add("edittext",undefined,"10"); aft.preferredSize.width=30;


var ddlPara = row("סגנון פיסקה (במקור לחיפוש):", function(g){
var d = g.add("dropdownlist",undefined,doc.paragraphStyles.everyItem().name);
d.preferredSize.width = 180; d.selection = 0; return d;
});
var ddlObj = row("סגנון אובייקט (במקור לחיפוש):", function(g){
var d = g.add("dropdownlist",undefined,doc.objectStyles.everyItem().name);
d.preferredSize.width = 180; d.selection = 0; return d;
});

var colB = pFind.add("group"); colB.orientation="column"; colB.alignChildren="right";
var btnSearch = colB.add("button",undefined,"חפש");
var btnClear = colB.add("button",undefined,"נקה");

// Request 3: Enter key triggers search
if (win.txtSearchTerm) {
win.txtSearchTerm.onEnterKey = function() {
if (btnSearch.onClick) {
btnSearch.onClick();
}
};
}


var pRes = win.add("panel",undefined,"תוצאות");
pRes.orientation="column"; pRes.alignChildren="fill";

// Request 4: Wider columns for context (adjust as needed)
var list = pRes.add("listbox",undefined,[],{
numberOfColumns:5, showHeaders:true,
columnTitles:["#", "הקשר לפני", "מופע", "הקשר אחרי", "עמוד"],
columnWidths:[30, 220, 150, 220, 50], multiselect:true // Increased context columns
});
list.minimumSize.height = 220;

// Request 6: Side-by-side Select All / Deselect All buttons
var gSelectionButtons = pRes.add("group");
gSelectionButtons.orientation = "row";
gSelectionButtons.alignment = "center"; // Center the group in the panel
gSelectionButtons.spacing = 10;

var selAll = gSelectionButtons.add("button",undefined,"בחר הכל");
var desAll = gSelectionButtons.add("button",undefined,"בטל הכל");


var pSty = win.add("panel",undefined,"סגנונות להחלה באינדקס");
pSty.orientation="column"; pSty.alignChildren="fill"; pSty.spacing=4;

var gEntryParaStyle = pSty.add("group"); gEntryParaStyle.orientation="row"; gEntryParaStyle.alignChildren="right";
gEntryParaStyle.add("statictext", undefined, "סגנון פסקה (לשורה באינדקס):");
var ddlEntryPara = gEntryParaStyle.add("dropdownlist", undefined, doc.paragraphStyles.everyItem().name);
ddlEntryPara.preferredSize.width = 180;
try { ddlEntryPara.selection = doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_ENTRY).index; } catch (e) { if (doc.paragraphStyles.length > 0) ddlEntryPara.selection = 0; }

var gTermCharStyle = pSty.add("group"); gTermCharStyle.orientation="row"; gTermCharStyle.alignChildren="right";
gTermCharStyle.add("statictext", undefined, "סגנון תו (למופע בתוך השורה):");
var ddlTermChar = gTermCharStyle.add("dropdownlist", undefined, doc.characterStyles.everyItem().name);
ddlTermChar.preferredSize.width = 180;
try { ddlTermChar.selection = doc.characterStyles.itemByName(CHAR_STYLE_INDEX_TERM).index; } catch (e) { if (doc.characterStyles.length > 0) ddlTermChar.selection = 0; }

var gPageCharStyle = pSty.add("group"); gPageCharStyle.orientation="row"; gPageCharStyle.alignChildren="right";
gPageCharStyle.add("statictext", undefined, "סגנון תו (למספר עמוד באינדקס):");
var ddlPageChar = gPageCharStyle.add("dropdownlist", undefined, doc.characterStyles.everyItem().name);
ddlPageChar.preferredSize.width = 180;
try { ddlPageChar.selection = doc.characterStyles.itemByName(CHAR_STYLE_INDEX_PAGE).index; } catch (e) { if (doc.characterStyles.length > 0) ddlPageChar.selection = 0; }

var gBot = win.add("group"); gBot.orientation="row"; gBot.alignment="right";
var insertBtn = gBot.add("button",undefined,"הכנס למסמך");
var closeBtn = gBot.add("button",undefined,"סגור");

btnSearch.onClick = function(){
try {
var term = trimStr(win.txtSearchTerm.text); // Use win.txtSearchTerm
if(!term){ alert("יש להזין מחרוזת."); return; }
win.activeSearchTerm = term;

var params = {
term: term,
before: parseInt(bef.text,10)||0,
after: parseInt(aft.text,10)||0,
paraFilter: doc.paragraphStyles[ddlPara.selection.index],
objFilter: doc.objectStyles[ddlObj.selection.index],
isPartial: chkPartialWord.value // Pass the checkbox value
};
logMessage("Starting new search for term: '" + term + "' with before=" + params.before + ", after=" + params.after + ", partial=" + params.isPartial);
var hits = runQuery(params,doc);
list.removeAll();
if(!hits) { logMessage("No hits found."); return; }
logMessage("Found " + hits.length + " hits. Populating ListBox...");

for(var i=0;i<hits.length;i++){
var h = hits[i];
logMessage(" Hit #" + (i+1) + ":");
logMessage(" Raw h.before: [" + h.before + "] (length: " + String(h.before).length + ")");
logMessage(" Raw h.word: [" + h.word + "] (length: " + String(h.word).length + ")");
logMessage(" Raw h.after: [" + h.after + "] (length: " + String(h.after).length + ")");

var cleanedBefore = cleanForListBoxDisplay(h.before);
var cleanedWord = cleanForListBoxDisplay(h.word);
var cleanedAfter = cleanForListBoxDisplay(h.after);

logMessage(" Cleaned h.before: [" + cleanedBefore + "]");
logMessage(" Cleaned h.word: [" + cleanedWord + "]");
logMessage(" Cleaned h.after: [" + cleanedAfter + "]");
logMessage(" Page: " + h.page);

var it = list.add("item",(i+1).toString());
it.subItems[0].text = cleanedBefore;
it.subItems[1].text = cleanedWord;
it.subItems[2].text = cleanedAfter;
it.subItems[3].text = h.page;
it._hit = h;
}
logMessage("Finished populating ListBox.");
} catch(e) {
var errorMsg = "שגיאה בחיפוש:\n" + e.message + "\nשורה " + (e.line||'?') + (e.fileName ? "\nקובץ: " + e.fileName : "");
logMessage("ERROR during search: " + errorMsg.replace(/\n/g, " | "));
alert(errorMsg);
}
};
btnClear.onClick = function(){ list.removeAll(); win.activeSearchTerm = ""; logMessage("Results cleared."); };

selAll.onClick = function(){ for(var i=0;i<list.items.length;i++) list.items[i].selected=true; };
desAll.onClick = function(){ for(var i=0;i<list.items.length;i++) list.items[i].selected=false; };

insertBtn.onClick = function(){
try {
if(!list.selection || list.selection.length===0){ alert("בחר תוצאות."); return; }
var entryParaStyle = doc.paragraphStyles[ddlEntryPara.selection.index];
var termCharStyle = doc.characterStyles[ddlTermChar.selection.index];
var pageCharStyle = doc.characterStyles[ddlPageChar.selection.index];
var mainSearchTermForHeading = win.activeSearchTerm || "";
logMessage("Inserting " + list.selection.length + " selected hits for term: '" + mainSearchTermForHeading + "'");

insertHits(doc, list.selection, entryParaStyle, termCharStyle, pageCharStyle, mainSearchTermForHeading);

} catch(e) {
var errorMsg = "שגיאה בהכנסת ערכים:\n" + e.message + "\nשורה " + (e.line||'?') + (e.fileName ? "\nקובץ: " + e.fileName : "");
logMessage("ERROR during insert: " + errorMsg.replace(/\n/g, " | "));
alert(errorMsg);
}
};
closeBtn.onClick = function(){ logMessage("--- Script Closed ---"); win.close(); gWin=null; };
}

function trimStr(s){
if (s === null || s === undefined) return "";
return String(s).replace(/^[\s\u00A0]+|[\s\u00A0]+$/g,"");
}

function cleanForListBoxDisplay(str) {
if (str === null || str === undefined) return "";
var s = String(str);
s = s.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, "");
s = s.replace(/\u00AD/g, "");
s = s.replace(/\u200B/g, "");
s = s.replace(/[\s\r\n]+/g, " ");
return trimStr(s);
}

function ensureStyles(doc){
logMessage("Ensuring styles...");
if(!doc.characterStyles.itemByName(CHAR_STYLE_PAGE_REF_IN_LISTBOX).isValid) {
doc.characterStyles.add({name:CHAR_STYLE_PAGE_REF_IN_LISTBOX});
}
if(!doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_HEADING).isValid) {
doc.paragraphStyles.add({name:PARA_STYLE_INDEX_HEADING, fontStyle:"Bold", pointSize:15, justification:Justification.RIGHT_ALIGN, composer: "Adobe World-Ready Paragraph Composer"});
}
if(!doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_SUBHEADING).isValid) {
doc.paragraphStyles.add({name:PARA_STYLE_INDEX_SUBHEADING, fontStyle:"Bold", pointSize:11, spaceBefore:"3mm", spaceAfter:"1mm", justification:Justification.RIGHT_ALIGN, composer: "Adobe World-Ready Paragraph Composer"});
}
if(!doc.objectStyles.itemByName(OBJECT_STYLE_NAME).isValid) {
var objStyle = doc.objectStyles.add({name:OBJECT_STYLE_NAME});
objStyle.properties = { enableStroke: false, enableTextFrameTextFrameOptions: true, textFramePreferences: { firstBaselineOffset: FirstBaseline.ASCENT_OFFSET, textColumnCount: 1, insetSpacing: [ "2mm", "2mm", "2mm", "2mm" ] } };
}
if(!doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_ENTRY).isValid) {
var paraStyle = doc.paragraphStyles.add({name:PARA_STYLE_INDEX_ENTRY});
paraStyle.properties = { pointSize:9, justification:Justification.RIGHT_ALIGN, composer: "Adobe World-Ready Paragraph Composer" };
}
if(!doc.characterStyles.itemByName(CHAR_STYLE_INDEX_TERM).isValid) {
doc.characterStyles.add({name:CHAR_STYLE_INDEX_TERM, fontStyle:"Bold"});
}
if(!doc.characterStyles.itemByName(CHAR_STYLE_INDEX_PAGE).isValid) {
doc.characterStyles.add({name:CHAR_STYLE_INDEX_PAGE});
}
logMessage("Styles ensured.");
}

function escapeRE(s){ return String(s).replace(/([\\^$.*+?()[\]{}|])/g,"\\$&"); }
function buildExact(str){
var between="['\"׳״“”]?"; var out="";
var s = String(str);
for(var i=0;i<s.length;i++){
out += escapeRE(s.charAt(i));
if(i<s.length-1) out += between;
}
return out;
}

function runQuery(p,doc){ // p now includes p.isPartial
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;

if (p.isPartial) {
// Request 1: For partial word search, use a simpler pattern
app.findGrepPreferences.findWhat = escapeRE(p.term);
logMessage("GREP pattern (partial): " + app.findGrepPreferences.findWhat);
} else {
// Original whole word search
var allowed="\\w\\u0590-\\u05FF\\-–—\\.\\,;:!?\\(\\)\\[\\]{}“”\"׳״…·";
var pattern = "(?<!["+allowed+"])"+ buildExact(p.term) +"(?!["+allowed+"])";
app.findGrepPreferences.findWhat = pattern;
logMessage("GREP pattern (whole word): " + pattern);
}

var foundItems;
try { foundItems = doc.findGrep(); } catch(e) { logMessage("ERROR during GREP search: " + e.message); alert("שגיאה בחיפוש GREP: " + e.message); app.findGrepPreferences = NothingEnum.nothing; return null; }
app.findGrepPreferences = NothingEnum.nothing;
if(!foundItems.length){ return null; }
var out=[];
for(var i=0;i<foundItems.length;i++){
var h=foundItems[i];
try{
if (h.parentTextFrames.length === 0 || !h.parentTextFrames[0].isValid) continue;
if(p.objFilter.name !== doc.objectStyles[0].name && h.parentTextFrames[0].appliedObjectStyle.name != p.objFilter.name) continue;
}catch(e){ continue; }
if (h.paragraphs.length === 0 || !h.paragraphs[0].isValid) continue;
if(p.paraFilter.name !== doc.paragraphStyles[0].name && h.paragraphs[0].appliedParagraphStyle.name != p.paraFilter.name) continue;
var ctx = contextAround(h, p.before, p.after);
out.push({ before: ctx.before, word: String(h.contents), after: ctx.after, page: (function(){try{return h.parentTextFrames[0].parentPage.name;}catch(e){return "-";}})() });
}
return out;
}

function contextAround(textObject, numWordsBefore, numWordsAfter){
logMessage(" contextAround: Getting context for word: [" + String(textObject.contents) + "]");
var story = textObject.parentStory;
var foundIndexStart = textObject.insertionPoints[0].index;
var foundIndexEnd = textObject.insertionPoints[-1].index;
var beforeText = "";
var wordsCountedBefore = 0;

if (numWordsBefore > 0) {
var searchStartIndex = foundIndexStart - 1;
var currentWord = "";
logMessage(" contextAround (before loop) - searchStartIndex: " + searchStartIndex);
while(searchStartIndex >= 0 && wordsCountedBefore < numWordsBefore) {
var charObj = story.characters[searchStartIndex];
var chContent = "";
var chDisplayForLog = "";

if (charObj.isValid) {
chContent = charObj.contents;
chDisplayForLog = String(chContent);
chContent = mapSpecialCharString(chContent);
}

var charCode = -1, hexCode = "N/A";
if (chDisplayForLog.length > 0) {
charCode = chDisplayForLog.charCodeAt(0);
hexCode = charCode.toString(16).toUpperCase();
}
logMessage(" contextAround (before) - index: " + searchStartIndex + ", charText: [" + chDisplayForLog + "], mappedTo: ["+chContent+"], charCode: " + charCode + " (0x" + hexCode + "), wordsCounted: " + wordsCountedBefore);

if (chContent === "\r" || chContent === "\n") { if (currentWord.length > 0 && currentWord.replace(/\s/g, "").length > 0) wordsCountedBefore++; break; }
beforeText = chContent + beforeText;
if (/\s/.test(chContent)) { if (currentWord.length > 0 && currentWord.replace(/\s/g, "").length > 0) { wordsCountedBefore++; currentWord = ""; }}
else { currentWord = chContent + currentWord; }
searchStartIndex--;
}
if (searchStartIndex < 0 && currentWord.length > 0 && currentWord.replace(/\s/g, "").length > 0) wordsCountedBefore++;
logMessage(" contextAround (before text collected): [" + beforeText + "]");
}
var afterText = "";
var wordsCountedAfter = 0;
if (numWordsAfter > 0) {
var searchEndIndex = foundIndexEnd;
var currentWordAfter = "";
logMessage(" contextAround (after loop) - searchEndIndex: " + searchEndIndex + ", story.characters.length: " + story.characters.length);
while(searchEndIndex < story.characters.length && wordsCountedAfter < numWordsAfter) {
var charObj = story.characters[searchEndIndex];
var chContent = "";
var chDisplayForLog = "";

if (charObj.isValid) {
chContent = charObj.contents;
chDisplayForLog = String(chContent);
chContent = mapSpecialCharString(chContent);
}

var charCode = -1, hexCode = "N/A";
if (chDisplayForLog.length > 0) {
charCode = chDisplayForLog.charCodeAt(0);
hexCode = charCode.toString(16).toUpperCase();
}
logMessage(" contextAround (after) - index: " + searchEndIndex + ", charText: [" + chDisplayForLog + "], mappedTo: ["+chContent+"], charCode: " + charCode + " (0x" + hexCode + "), wordsCounted: " + wordsCountedAfter);

if (chContent === "\r" || chContent === "\n") { if (currentWordAfter.length > 0 && currentWordAfter.replace(/\s/g, "").length > 0) wordsCountedAfter++; break; }
afterText += chContent;
if (/\s/.test(chContent)) { if (currentWordAfter.length > 0 && currentWordAfter.replace(/\s/g, "").length > 0) { wordsCountedAfter++; currentWordAfter = ""; }}
else { currentWordAfter += chContent; }
searchEndIndex++;
}
if (searchEndIndex === story.characters.length && currentWordAfter.length > 0 && currentWordAfter.replace(/\s/g, "").length > 0) wordsCountedAfter++;
logMessage(" contextAround (after text collected): [" + afterText + "]");
}
return {before: beforeText, after: afterText};
}


function findOrCreateTextFrame(doc, frameName, objStyleName) {
var frame = null;
try {
var pageItem = doc.pageItems.itemByName(frameName);
if (pageItem.isValid && pageItem instanceof TextFrame) {
frame = pageItem;
logMessage("Found existing index frame: '" + frameName + "' on page " + frame.parentPage.name);
if (frame.parentStory.storyPreferences.storyDirection !== StoryDirectionOptions.RIGHT_TO_LEFT_DIRECTION) {
frame.parentStory.storyPreferences.storyDirection = StoryDirectionOptions.RIGHT_TO_LEFT_DIRECTION;
logMessage("Set story direction to RTL for existing frame.");
}
return frame;
} else if (pageItem.isValid) {
logMessage("Found PageItem with name '" + frameName + "' but it is not a TextFrame. Will create a new one.");
}
} catch (e) { /* לא נמצא */ }

logMessage("Index frame '" + frameName + "' not found or not a TextFrame. Creating new frame...");
var newPage = doc.pages.add(LocationOptions.AT_END);
logMessage("Added new page: " + newPage.name);
var pm = newPage.marginPreferences;
var bounds = [pm.top, pm.left, newPage.bounds[2] - pm.bottom, newPage.bounds[3] - pm.right];
frame = newPage.textFrames.add({ geometricBounds: bounds, name: frameName });
logMessage("Created new text frame on page " + newPage.name);
try {
var objStyleToApply = doc.objectStyles.itemByName(objStyleName);
if (objStyleToApply.isValid) {
frame.appliedObjectStyle = objStyleToApply;
logMessage("Applied object style '" + objStyleName + "' to new frame.");
} else {
logMessage("Object style '" + objStyleName + "' not found or invalid.");
}
} catch (e) { logMessage("ERROR applying object style: " + e.message); }
frame.parentStory.storyPreferences.storyDirection = StoryDirectionOptions.RIGHT_TO_LEFT_DIRECTION;
logMessage("Set story direction to RTL for new frame.");

var storyIsEffectivelyEmpty = true;
if (frame.parentStory.texts.length > 0) {
if (frame.parentStory.texts[0].contents.replace(/[\r\n\s]/g,"") !== "") {
storyIsEffectivelyEmpty = false;
}
}
if (storyIsEffectivelyEmpty) {
frame.parentStory.insertionPoints[0].contents = "אינדקס\r";
logMessage("Added 'אינדקס' heading to new frame's story.");
try { frame.parentStory.paragraphs[0].appliedParagraphStyle = doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_HEADING); } catch(e) {}
}
return frame;
}

function insertHits(doc, selectedHits, entryParaStyle, termCharStyle, pageCharStyle, mainSearchTerm){
var indexFrame = findOrCreateTextFrame(doc, INDEX_FRAME_NAME, OBJECT_STYLE_NAME);
if (!indexFrame || !indexFrame.isValid) { alert("לא ניתן היה למצוא או ליצור תיבת טקסט לאינדקס."); return; }
var storyToInsertIn = indexFrame.parentStory;

if (storyToInsertIn.length > 0) {
var lastChar = storyToInsertIn.characters[-1].contents;
if (lastChar !== "\r" && lastChar !== "\n") {
storyToInsertIn.insertionPoints[-1].contents = "\r";
}
}

if (mainSearchTerm && mainSearchTerm.length > 0) {
storyToInsertIn.insertionPoints[-1].contents = mainSearchTerm + "\r";
logMessage("Added subheading for term: '" + mainSearchTerm + "'");
try {
var subheadingPara = storyToInsertIn.paragraphs.item(-2); // Should be the one before the final CR we might have just added.
// If the story was empty or ended with CR, this might be -1 or -2 relative to the "new" content.
// Let's find the paragraph containing the mainSearchTerm
var paras = storyToInsertIn.paragraphs;
for(var pIdx = paras.length -1; pIdx >=0; pIdx--){
if(paras[pIdx].contents.indexOf(mainSearchTerm + "\r") === 0 || paras[pIdx].contents === mainSearchTerm + "\r" || paras[pIdx].contents === mainSearchTerm){
subheadingPara = paras[pIdx];
break;
}
}
if(subheadingPara && subheadingPara.isValid) {
subheadingPara.appliedParagraphStyle = doc.paragraphStyles.itemByName(PARA_STYLE_INDEX_SUBHEADING);
} else {
logMessage("Could not reliably find subheading paragraph for styling.");
}

} catch (e) { logMessage("ERROR applying subheading style: " + e.message); }
if (storyToInsertIn.characters.length > 0 && storyToInsertIn.characters[-1].contents !== "\r" && storyToInsertIn.characters[-1].contents !== "\n") {
storyToInsertIn.insertionPoints[-1].contents = "\r";
}
}

for(var i=0; i < selectedHits.length; i++){
var h = selectedHits[i]._hit;
var hitBefore = String(h.before);
var hitWord = String(h.word);
var hitAfter = String(h.after);
var pageNumStr = String(h.page).replace(/\s/g,'');

var fullEntryText = hitBefore + hitWord + hitAfter;
var lineContent = trimStr(fullEntryText) + "\u0008" + pageNumStr;

var currentIp = storyToInsertIn.insertionPoints[-1];
currentIp.contents = lineContent;

var currentPara = storyToInsertIn.paragraphs.lastItem();
try { currentPara.appliedParagraphStyle = entryParaStyle; } catch(e) { logMessage("ERROR applying entry paragraph style: " + e.message + " to: " + currentPara.contents.replace(/\r/g,"[CR]")); }

try {
var paraObjForStyle = currentPara;
var ritIndex = -1;
// Find RIT from end of paragraph for safety, though it should be unique
for(var k = paraObjForStyle.characters.length -1; k >=0; k--) {
if (paraObjForStyle.characters[k].contents === "\u0008") {
ritIndex = paraObjForStyle.characters[k].index - paraObjForStyle.characters[0].index; // Relative index
break;
}
}

if (ritIndex !== -1) {
if (hitWord.length > 0) {
var textBeforeRIT = paraObjForStyle.texts.itemByRange(paraObjForStyle.characters[0], paraObjForStyle.characters[ritIndex-1]).contents;
var wordActualStart = textBeforeRIT.indexOf(hitWord);
if (wordActualStart !== -1) {
if ((wordActualStart + hitWord.length -1) < ritIndex) {
paraObjForStyle.characters.itemByRange(wordActualStart, wordActualStart + hitWord.length - 1).appliedCharacterStyle = termCharStyle;
} else {
logMessage("Could not apply term style, range issue: term '" + hitWord + "' in '" + textBeforeRIT + "'");
}
} else {
var tempCleanedWord = hitWord.replace(/['"]/g, "");
if (tempCleanedWord.length > 0) {
wordActualStart = textBeforeRIT.indexOf(tempCleanedWord);
if (wordActualStart !== -1 && (wordActualStart + tempCleanedWord.length -1) < ritIndex) {
paraObjForStyle.characters.itemByRange(wordActualStart, wordActualStart + tempCleanedWord.length - 1).appliedCharacterStyle = termCharStyle;
} else {
logMessage("Could not accurately apply char style (fallback) to term '" + hitWord + "' in entry: " + trimStr(fullEntryText));
}
} else {
logMessage("Could not accurately apply char style (empty after clean) to term '" + hitWord + "' in entry: " + trimStr(fullEntryText));
}
}
}

if (pageNumStr.length > 0) {
var pageNumStartIndexInPara = ritIndex + 1;
var pageNumEndIndexInPara = ritIndex + pageNumStr.length;
if (pageNumEndIndexInPara < paraObjForStyle.characters.length && pageNumStartIndexInPara <= pageNumEndIndexInPara) {
paraObjForStyle.characters.itemByRange(pageNumStartIndexInPara, pageNumEndIndexInPara).appliedCharacterStyle = pageCharStyle;
} else {
logMessage("Could not apply page number style. Calculated end index " + pageNumEndIndexInPara + " is out of bounds for paragraph length " + paraObjForStyle.characters.length + " or start index " + pageNumStartIndexInPara + " invalid for page: " + pageNumStr);
}
}
} else {
logMessage("Right Indent Tab not found in paragraph: " + currentPara.contents.replace(/\r/g,"[CR]"));
}
} catch(e) { logMessage("ERROR applying character styles (v068.9 logic): " + e.message + " for para content: " + currentPara.contents.replace(/\r/g, "[CR]")); }

if (storyToInsertIn.characters.length > 0 && storyToInsertIn.characters[-1].contents !== "\r" && storyToInsertIn.characters[-1].contents !== "\n") {
storyToInsertIn.insertionPoints[-1].contents = "\r";
}

} // סוף לולאת selectedHits

// --- טיפול בגלישת טקסט ---
var currentFrameForOverflow = indexFrame;
var overflowCounter = 0;
var MAX_OVERFLOW_PAGES = 25;

while (currentFrameForOverflow.overflows && overflowCounter < MAX_OVERFLOW_PAGES) {
logMessage("Handling overflow for frame on page " + currentFrameForOverflow.parentPage.name);
var lastPageInDoc = doc.pages.lastItem();
var newOverflowPage = doc.pages.add(LocationOptions.AFTER, lastPageInDoc);
logMessage("Added new page for overflow: " + newOverflowPage.name);

var pmOverflow = newOverflowPage.marginPreferences;
var boundsOverflow = [pmOverflow.top, pmOverflow.left, newOverflowPage.bounds[2] - pmOverflow.bottom, newOverflowPage.bounds[3] - pmOverflow.right];

var nextFrame = newOverflowPage.textFrames.add({ geometricBounds: boundsOverflow });
try {
var objStyleToApply = doc.objectStyles.itemByName(OBJECT_STYLE_NAME);
if (objStyleToApply.isValid) nextFrame.appliedObjectStyle = objStyleToApply;
} catch (e) { logMessage("Error applying object style to overflow frame: " + e.message); }

currentFrameForOverflow.nextTextFrame = nextFrame;
currentFrameForOverflow = nextFrame;
overflowCounter++;
logMessage("Linked to new frame on page " + currentFrameForOverflow.parentPage.name + ". Overflow pages created so far: " + overflowCounter);
}
if (overflowCounter >= MAX_OVERFLOW_PAGES) {
logMessage("WARNING: Reached maximum overflow page limit (" + MAX_OVERFLOW_PAGES + "). Index might still be overflowing.");
alert("האינדקס ארוך מאוד והגיע למגבלת יצירת הדפים האוטומטית ("+MAX_OVERFLOW_PAGES+"). ייתכן שעדיין יש תוכן גולש.");
}

try {
app.select(indexFrame);
if (app.activeWindow && app.activeWindow.isValid) {
app.activeWindow.activePage = indexFrame.parentPage;
app.activeWindow.zoom(ZoomOptions.FIT_PAGE);
}
} catch(e) { /* שגיאה */ }

var startPageName = indexFrame.parentPage.name;
var endPageName = currentFrameForOverflow.parentPage.name;
var pageInfo = (startPageName === endPageName && overflowCounter === 0) ? startPageName : startPageName + " עד " + endPageName;

logMessage("Finished inserting hits. " + selectedHits.length + " entries added. Content spans page(s): " + pageInfo);
alert(selectedHits.length + " ערכים נבחרים הוספו לאינדקס. התוכן נמצא בעמוד(ים): " + pageInfo + ".");
}

Translate
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
New Here ,
Jun 23, 2025 Jun 23, 2025
LATEST

Has no one had experience with this kind of problem?

Translate
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