Skip to main content
Participant
November 29, 2022
Answered

Inserting text and special characters at the insertion point

  • November 29, 2022
  • 2 replies
  • 1731 views

I'm trying to insert some text, followed by a column break, followed by some more text at the insertion point.  I'm working in Javascript.  The following doesn't work.

 

myIP.contents = "some text" + SpecialCharacters.columnBreak + "some more text";

 

because Javascript is just ends up converting SpecialCharacters.columnBreak into a number and inserting the number into the string.  How do I get this to work?

This topic has been closed for replies.
Correct answer Marc Autret

Hi @John Bruestle,

 

Very interesting problem.

 

  • I don't know a direct assignment solution in that particular case, because SpecialCharacters.columnBreak happens to belong to the set of special characters that have no univocal code point. Indeed, the underlying UTF16 code is U+000D (i.e. "\r") which is also assigned to other character breaks (end of para, frame break, etc.) So you cannot use sth like

 

 

myIP.contents = "some text" + "\r" + "some more text"; // won't work

 

 

Note that this is a special case. Most of the time you can reduce the SpecialCharacters enum into the corresponding "\uHHHH" code. (More on ID special character codes here: https://www.indiscripts.com/post/2009/07/idcs4-special-characters)

 

  • So, in order to handle such equivocal SpecialCharacters codes, it seems necessary to explicitly send the single command someIP.contents=SpecialCharacters.columnBreak at some point. Which leads to split the insertion process like so:

 

 

// The text you want to insert as an array
// (isolating the special char enum.)
// ---
var a = ["some text", SpecialCharacters.columnBreak, "some more"];
for( var i=a.length ; i-- ; myIP.insertionPoints[0].contents=a[i] );

 

 

A bit heavy-handed, but I'm curious if our colleagues have found a better approach.

 

Best,

Marc

2 replies

Marc Autret
Marc AutretCorrect answer
Legend
November 29, 2022

Hi @John Bruestle,

 

Very interesting problem.

 

  • I don't know a direct assignment solution in that particular case, because SpecialCharacters.columnBreak happens to belong to the set of special characters that have no univocal code point. Indeed, the underlying UTF16 code is U+000D (i.e. "\r") which is also assigned to other character breaks (end of para, frame break, etc.) So you cannot use sth like

 

 

myIP.contents = "some text" + "\r" + "some more text"; // won't work

 

 

Note that this is a special case. Most of the time you can reduce the SpecialCharacters enum into the corresponding "\uHHHH" code. (More on ID special character codes here: https://www.indiscripts.com/post/2009/07/idcs4-special-characters)

 

  • So, in order to handle such equivocal SpecialCharacters codes, it seems necessary to explicitly send the single command someIP.contents=SpecialCharacters.columnBreak at some point. Which leads to split the insertion process like so:

 

 

// The text you want to insert as an array
// (isolating the special char enum.)
// ---
var a = ["some text", SpecialCharacters.columnBreak, "some more"];
for( var i=a.length ; i-- ; myIP.insertionPoints[0].contents=a[i] );

 

 

A bit heavy-handed, but I'm curious if our colleagues have found a better approach.

 

Best,

Marc

TᴀW
Legend
November 29, 2022

I haven't!

id-extras.com | InDesign tools & scripts for typesetters, form designers, and translators
Known Participant
November 29, 2022

Hi John,

create a helper textframe outside of the page and add the ColumnBreak with a GREP or TEXT changeTo command. Then duplicate the ColumnBreak character to where you want it in the text.