#targetengine "session" function main() { //alert ("זה עבריט") if (app.documents.length === 0) { alert("No open document open."); return; } var doc = app.activeDocument; var objectStyleName = "mh"; // Helper: Find the Object Style named "mh" function findObjectStyleByName(doc, styleName) { function getAllObjectStyles(objStyleRoot, arr) { for (var i = 0; i < objStyleRoot.objectStyles.length; i++) { arr.push(objStyleRoot.objectStyles[i]); } for (var g = 0; g < objStyleRoot.objectStyleGroups.length; g++) { getAllObjectStyles(objStyleRoot.objectStyleGroups[g], arr); } } var allStyles = []; getAllObjectStyles(doc, allStyles); for (var s = 0; s < allStyles.length; s++) { if (allStyles[s].name === styleName) { return allStyles[s]; } } return null; } var objectStyle = findObjectStyleByName(doc, objectStyleName); if (!objectStyle) { alert("Object style '" + objectStyleName + "' not found."); return; } // Build an array of all text frames in the document, in correct page and threading order var allTextFrames = []; for (var i = 0; i < doc.textFrames.length; i++) { allTextFrames.push(doc.textFrames[i]); } // Helper to get the index of a text frame on its page for use in ordering function getFrameOrderOnSpread(frame) { var spread = frame.parent.parent; // frame > page > spread var items = spread.textFrames; for (var i = 0; i < items.length; i++) { if (items[i] === frame) { return i; } } return 0; } // Collect unique parentStory objects in the document var stories = []; for (var i = 0; i < allTextFrames.length; i++) { var stry = allTextFrames[i].parentStory; var found = false; for (var j = 0; j < stories.length; j++) { if (stories[j] === stry) { found = true; break; } } if (!found) { stories.push(stry); } } // For each story, work per text frame sequence for (var s = 0; s < stories.length; s++) { var story = stories[s]; var frames = story.textContainers; // Only operate if story has 2+ frames in thread if (frames.length < 2) continue; for (var i = 0; i < frames.length - 1; i++) { var thisFrame = frames[i]; var nextFrame = frames[i + 1]; // Find the first word in the NEXT frame var nextText = nextFrame.contents; var firstWord = ""; for (var c = 0; c < nextText.length; c++) { var ch = nextText.charAt(c); if (ch === " " || ch === "\r" || ch === "\n" || ch === "\t") { break; } firstWord += ch; } if (firstWord.length === 0) continue; // Insert a new text frame on the same page as thisFrame var thisPage = null; // The parent can be a Page or a Spread; get page safely if (thisFrame.parent.constructor.name === "Page") { thisPage = thisFrame.parent; } else if (thisFrame.parent.constructor.name === "Spread") { // Find the leftmost page on the spread var spreadPages = thisFrame.parent.pages; if (spreadPages.length > 0) { thisPage = spreadPages[0]; } } if (!thisPage) continue; alert ("זה עבריט") // Place new text frame at default pos (top left, offset if needed) var newX = 10, newY = 10, newW = 40, newH = 15; if (thisFrame.geometricBounds) { // Place up and left of original frame or offset var gb = thisFrame.geometricBounds; // [y1, x1, y2, x2] newX = gb[1] - 15; newY = gb[0] - 15; if (newX < 0) newX = 0; if (newY < 0) newY = 0; } var newBounds = [newY, newX, newY + newH, newX + newW]; var insertedFrame = thisPage.textFrames.add({geometricBounds: newBounds}); alert ("זה עבריט") var firstWord = "[ההמשך נמצא בעמ\'" + " " + nextFrame.parentPage.name + " " + "ד\"ה" + " " + firstWord + "]" insertedFrame.contents = firstWord; // Apply the object style insertedFrame.appliedObjectStyle = objectStyle; } } } app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Insert First Word from Next Text Frame - Style 'mh'");