"SetStoryComposer": A Script Utility for Typesetting Non-Latin Scripts in Adobe InDesign
Kevin Cole

"SetStoryComposer": A Script Utility for Typesetting Non-Latin Scripts in Adobe InDesign

Last year a legal research publication which I co-authored in my role at Refugee Solidarity Network was being translated and typeset in Bangla from the original English. Along the way, the publications specialist with whom we were collaborating ran into a number of difficulties in working with the Bangla script in Adobe InDesign, and eventually I took over the typesetting work for this project.

One of the major hurdles in translating the document was that without setting each text frame to use Adobe’s “World Ready Paragraph Composer,” text written in more complex (non-Latin) scripts would frequently be rendered incorrectly. To those who don’t read these scripts, the rendering errors often seem quite innocuous and difficult to spot, though they’re anything but to native readers!

Image illustrating text rendering errors when using Adobe's Paragraph Composer with Bangla text instead of the Adobe World Ready Paragraph Composer.

Automating the Application of the Appropriate Paragraph Composer

In our research document there were more than 1,000 individual text frames, so manually setting each frame’s paragraph composer was out of the question and would leave far too much room for human error. Luckily, Adobe InDesign supports the creation of Javascript-based script utilities which can be invoked from within the editor’s user interface. I wrote a simple script which, when activated, prompts the user to indicate which paragraph composer they would like to use in their document. The script then automatically sets the correct composer for all text frames within the document.

Lessons Learned

It’s always a thrill to be able to provide tools to the global computing community, and especially so when these tools support the use of languages and scripts which have traditionally received less focus from computing/technological communities. Writing and releasing this script to the world via Github was also a perfect opportunity for me to take a deep dive into the various Open Source Software (OSS) licenses out there. Ultimately, I settled on the MIT License as it is both easy-to-understand, widely used, and is generally permissive in allowing others to pick up and expand on my work.

← Back to projects