Indiscripts

Automating InDesign since 2009

Tips

Scripters corner: howtos, tips and tricks for automating complex InDesign tasks.

Let's Play with JS Array Objects (in ExtendScript)

IdExtenso provides a new ArrayAs2D module that unleashes the hidden strengths of ExtendScript operators. With this toy, you can now write code that adds, multiplies, evaluates 2D points or vectors. For example, if you develop an InDesign script based on Bézier curves or working on polygonal paths, all calculations of points, distances, normalized vectors, etc. become wonderfully compact…

Continue reading...

Make `&` (almost) Behave as a Reference Operator

Suppose you have an ExtendScript class (I mean, “prototype”) whose methods essentially return new object instances. As an obvious example, consider the concat or slice methods of Array.prototype. They always produce a new array rather than reworking the existing one. There are situations where you want to update the calling object —and make this explicit in the code— while still leveraging the methods already available…

Continue reading...

Private Investigation into Style Overrides

Myths and facts about text formatting overrides in InDesign…

Continue reading...

Built-In String Features in IdExtenso

If you are one of the happy users of the IdExtenso scripting framework for InDesign, you may have noticed — or overlooked! — that this enhanced version of ExtendScript provides many additional services, including in the primitive areas of the language. For example, any string immediately has functionalities like trim(), codePointAt(), toUTF8(), which aren't available in the root syntax. Let's take a closer look at this toolbox…

Continue reading...

Scripting: How to Position InDesign Guides

Now, can you tell what X and Y are?InDesign guides are funny creatures. Whether or not they are assigned to a page via the fitToPage property, they remain firmly anchored to the geometry of the spread they belong to. The most mysterious thing is their location attribute, which does not obey all the principles ordinarily weighing on rulers coordinates. This article explores how to determine correct positions in all scenarios…

Continue reading...

What's New in IdExtenso 2.31008

IdExtenso: ExtendScript Framework for InDesign Ninjas

Continue reading...

InDesign Scripting: Why are Endnotes so Hard to Decipher?

InDesign's endnotes are just text ranges enclosed in U+FEFF markers.

Continue reading...

The Magic Parent Bounding Box

Now what is the geometry of that cell?Geometry in InDesign can get deadly complex. Take a document, create a frame, insert a table, change a particular cell into a “graphic cell,” convert its inner object into an ellipse, play with strokes, rotate and scale the object, transform the parent frame in the fanciest way. Then ask yourself the question: what are the exact coordinates, shape or area of the final table cell?…

Continue reading...

The Case of Converting InDesign Inches to Ciceros

While working on his Measurements scripts, my colleague Mikhail Ivanyushin reported me weird biases related to units conversion. In particular, he observed a discrepancy between InDesign's display and direct results from ExtendScript when addressing inches-to-ciceros translation…

Continue reading...

The Hard Problem of Quantified Alternatives in ExtendScript

In most cases, ExtendScript regular expressions cannot digest the (a|b)+ scheme. This bug is not new, but it's worth defining its symptoms and extent. This article presents a very simple problem, with no known solution to date…

Continue reading...

Porting your InDesign Script into IdExtenso — Step 5

In this episode we seriously improve the relationship between user settings and user interface. As a result, we get a smart InDesign script that both remembers the choices the user made within the session and adapts to the context, that is, whether the script should target the selection or a larger scope…

Continue reading...

Coordinate Spaces & Transformations in InDesign [UPDATE]

Coordinate Spaces & Transformations is a free eBook covering all atomic subjects that a InDesign scripter or developer should grab before using transformation matrices and the related methods. The last update has minor corrections and notes…

Download version 3.2 (PDF, 41 pages)

Continue reading...

Porting your InDesign Script into IdExtenso — Step 4

The previous episode dealt with modularity in IdExtenso, now is the time to take full advantage of it! Today we will see how to add a dialog interacting with user options. You will be amazed at how quickly this component fits into the script…

Continue reading...

Porting your InDesign Script into IdExtenso — Step 3

In this episode, you will learn how to arrange your code so that it fits into IdExtenso's “modular space.” Modularity is a key term when it comes to maintaining a large-scale project. Even if our sample script is not in itself of pharaonic complexity, we will transform it, as an exercise, into a pure module…

Continue reading...

Porting your InDesign Script into IdExtenso — Step 2

Today we will embed in IdExtenso the code we prepared in the previous episode. That's of course an important move, especially when you perform it for the very first time (since then you need to install the framework.) But you will discover in what follows the immediate advantages that $$ offers you…

Continue reading...

Porting your InDesign Script into IdExtenso — Step 1

So, you have the root idea and a basic code for your next InDesign script. All is fine. It works so well that you're now planning to release it, which opens additional questions: Will it work everywhere? How do I trace risky functions? What if I need to integrate new features later on? How do I deal with persistent user settings? How to add a basic interface? How will I localize the dialog in other languages? Can I make my script available in a dedicated menu? Will it work in a JSXBIN package as well? Can I obfuscate my code?…

Continue reading...

Page Range Formatter [UPDATE]

Given an unordered set of page numbers—e.g. {13, 9, 25, 12, 11, 8}—we often have to compute and output a range specification in the form "8-9; 11-13; 25". While this topic has been already discussed in the InDesign scripting forum, I'd like to explore today a slightly different approach…

Continue reading...

The Cell Tint Enigma

How do Tint objects operate at the Cell level?

Continue reading...

ScriptUI vs. UI Scaling

From CC 2014, InDesign and Illustrator interfaces needed to adapt to OS “scale settings” strategy on 4K/Retina displays. And with Windows 10 defaultly scaling at 150% in such resolutions, Adobe engineers were forced to rework their famous HiDPI support, which led to introduce UI Scaling in the Preferences dialog box. So far, so good. But ScriptUI has not been fully “informed” of these new rules…

Continue reading...

Understanding the `count( )` Method

InDesign's scripting infrastructure is based on DOM objects (Document, Story, Paragraph…) and any such object has an associated collection (Documents, Stories, Paragraphs…). Collections typically arise in complex specifiers like myDocument.stories.everyItem().words. They also provide two essential members, the length property and the count() method. How do they differ?

Continue reading...

- Page 1 of 3