IdExtenso: ExtendScript Framework for InDesign Ninjas
April 20, 2017 | Extras | en
Driven by a mix of vanity and liberalness I decided to make public the building blocks of my InDesign scripting framework, which I called IdExtenso. The alpha release is now available on my GitHub account and will be regularly extended in the coming weeks and months…
Overview
IdExtenso is a work-in-progress API dedicated to ExtendScript developers looking for a robust solution in the particular field of InDesign scripting. Think of it as a toolbox based on efficient and growing building blocks.
Do you need a clean JSON formatter that really supports ExtendScript oddities and InDesign DOM objects? Would you like to trace your debug messages in a log file the easy way? And always making sure that the environment (operating system, InDesign version, locale, script engine) is properly addressed? IdExtenso natively provides these features as they are parts of its core structure.
The framework is designed to support ExtendScript from version 3.92 to 4.5 and InDesign from v. 6.0 (CS4) to 12.x (CC 2017) in both Mac OS and Windows platforms. It fixes, improves or extends a number of built-in functionalities. For example, myString.toSource()
can now save 30% of the original result length, and RegExp.prototype["=="]
is now implemented so that you can compare regexes using ==
.
What IdExtenso Is Not
Anyway, IdExtenso is definitely not a “syntactic sugar” provider. Its main purpose is to deal with ExtendScript—which is not pure JavaScript—and to make InDesign easier to automate. In fact, care has been taken to limit the addition of JS helpers that one could easily find in other well-known libraries.
By the way, IdExtenso does not pretend to form a library. Rather, it is about articulating a complete workspace! Thus, it doesn't make sense to use it in small projects that don't involve topics like localization, performance, user interface, modularity, compatibility, code-factoring, robustness, settings management, etc.
Key Points
• As fast and optimized as we can.
• Light-weight and very non-polluting regarding the [[global]]
scope.
• Smart support of persistent engines created via the #targetengine
directive.
• Still works fine in a JSXBIN export of your final project.
• Fixes (at best as possible) compatibility issues between ExtendScript and/or InDesign DOM versions.
• Various—and always growing—additional modules that you can plug at wish through #include. Among the available modules of the /etc
branch are: Yalt (localization engine, new version), Web (HTTP/1.0 getter), Settings (multiscope settings manager), MD5, DateFormat, and more coming soon!
Check out IdExtenso and discover how indiscripts products are designed behind the scene!
Comments
Marc, this is fantastic! But I dread the sleepless nights in store messing around with all of this goodness! :-)
Hi Ariel,
Thanks a lot for your support. Really appreciated.
I'm aware this project is not an easy one. As our colleague Dirk Becker once told me with great honesty—and lucidity—, my coding style “may hurt acceptance. Some refreshing ideas, but they require too much effort for getting used.”
Maybe IdExtenso will gradually show that the effort is worth it…
Best,
Marc
I look at it differently: A master at work!