• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Preserve Local Formatting script and CS4

Community Beginner ,
May 07, 2009 May 07, 2009

Copy link to clipboard

Copied

Unfortunately, Dave Saunders' amazing PreserveLocalFormatting.jsx script (that changes local formatting to character styles) doesn't work under InDesign CS4. I've tried running it both as-is and in the compatibility mode (putting it in a folder marked Version 4.0 scripts), and it seems to star to run, but doesn't actually do anything. Anyone more versed in scripts know what might be the trouble?

http://indesignsecrets.com/downloads/PreserveLocalFormatting.jsx

TOPICS
Scripting

Views

34.0K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 06, 2009 Aug 06, 2009

Copy link to clipboard

Copied

It only occurred to me this morning -- there is no problem at all with 'other italics'!

Simply first replace "Book Italic" with a custom character style, and then run the script. The script is smart enough to leave existing character styles alone.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Aug 06, 2009 Aug 06, 2009

Copy link to clipboard

Copied

Sorry but what do you mean by "replace "Book Italic" with a custom character style"

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 06, 2009 Aug 06, 2009

Copy link to clipboard

Copied

#5. Any formatting other than those mentioned is not preserved or changed by this script. If you suspect your document has other types of formatting you want to preserve, replace these by hand with character styles. The script is hardcoded to ignore text that already has a character style,  something you can use in your advantage (when done properly).

So, in a fresh document (that has no character styles!), you can safely apply a custom character style to the text in the "Book Italic" font.

  • Create a new character style for the Book Italic font -- you should not call this style "Italic", obviously!
  • Call up the Find/Change box
  • In Find Formatting, enter the name of your font and "Book Italic" as the font style
  • In Change Formatting, set the character style to the one you created.
  • Check if "Include Footnotes" is on
  • Hit "Replace All"

Then run my script -- it will not change existing character styles.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Aug 06, 2009 Aug 06, 2009

Copy link to clipboard

Copied

Ok i got it

But this is the same as doin what i've done for my document, wich is : doing that AFTER running the script…

Same results, right ?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Aug 06, 2009 Aug 06, 2009

Copy link to clipboard

Copied

Yes, but that's because the script did not pick up the 'book italic' in the first place ...

Suppose you have a document with Times Italic and Helvetica Italic, and you want both to be preserved in their own font. Then you would have to change at least one of them to another style before you run the script -- to prevent both fonts get tagged as "Italic".

I have to do this almost every day, so for me it's becoming 2nd nature ...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 08, 2009 Dec 08, 2009

Copy link to clipboard

Copied

A super script. How to use it also in foonotes?

A good idea is to apply colours to the character styles. With this the document is very fast tested and subject to other exercises.

Thank you.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 08, 2009 Dec 08, 2009

Copy link to clipboard

Copied

mariana pineda wrote:


A super script. How to use it also in foonotes?

Super-script -- also known as "superior"!

It needs nothing special, it already should work just fine in footnotes, as well as in tables. The script searches the entire story. (An important note is that anchored objects contain "their own story" -- it does not work through to these as well.)

Ehm, the 'color' part is not entirely clear. Do you mean you want to see your italics (etc.) also in another color? When the script is finished, you can change the automatically created character styles and add some color to them.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Mar 31, 2015 Mar 31, 2015

Copy link to clipboard

Copied

Hi! I've tried to find me a PrepText script, and also the PerfetctPrepText script for windows.

Is there one to to be found at all?

Anu

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 06, 2010 Jan 06, 2010

Copy link to clipboard

Copied

Jongware's free script is wonderful and a great help to many people. You might also look at the Create Basic Character Styles and Create All Character Styles features in the Blatner Tools plug-in (dtptools.com/bt), along with the Create Paragraph Styles (which can create paragraph styles for you throughout an unstyled document).

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

Is there any possibility to adapt preptext to run on a bunch of files, without first putting the cursor in a text frame? I was thinking in using it with Peter Kahrel's batch script, but this manual step prevents it to work in batch. Thanks for any light you can share on this.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

That batch script lets you run a script against documents: check the "Run a script" box and select a script from the dropdown. Use "InDesign" for source and target format. Zip up your files (or copy them to a safe place) before you do anything.

Peter

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

Thanks for the hint Peter, but I received an error message at the end of script execution for each file I tried to process:

"undefined is not an object (at line 74)"

I tried using preptext with other batch script (Batcher, from Rorohiko), but it didn't work either.

I think it's because preptext needs the cursor inserted in a text frame before execution. Is there any way to automate this manual step?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

If it's true that the script needs some selection, then it could be changed. Jongware would be the one to do that, let's see if he feels like it.

Peter

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

Peter Kahrel wrote:

If it's true that the script needs some selection, then it could be changed. Jongware would be the one to do that, let's see if he feels like it.`

Sure.

PageLab wrote:

I think it's because preptext needs the cursor inserted in a text frame before execution. Is there any way to automate this manual step?

Yep. Follow the next steps carefully.

1. Remove the top braced statement, from "if (app.activeDocument.selection .." to "exit(0); .. }" -- the entire 5 lines. These are the lines that check if the cursor is inside a text frame.

2. Scroll all the way to the bottom of the script. The other line to change is the very final statement (excluding the last two braces; leave those alone, please).

3. Change the line

app.activeDocument.selection[0].parent.changeText (false);

to

app.activeDocument.changeText (false);

-- i.e., remove "selection[0].parent."

4. Save the script, preferably under a new name.

5. Run it as usual, through the Script Panel, to see if it does work (you don't need to click the text cursor inside a text frame anymore), and if it does, try it with one of the script batchers.

6. Sit back with the warm feeling of a job well done.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jan 22, 2013 Jan 22, 2013

Copy link to clipboard

Copied

This script has a funny follow-up story. (It's just past the midnite hour here, so gather round for a True story.)

It works by brute force; it searches for every possible combination of font style, underline, and position and some else -- all in all, something like 64 different combinations. And the largest portion of those are bogus. I mean, come on! What was the last time you found a bold italicized, superscripted, underlined text? ... Unfortunately, there always are authors that like everything to stand out as much as possible (in my opinion, completely reversing the intended effect) and so it's not safe to check for any less combo's.

Now InDesign is a strange beast, internally. Text formatting is not implemented, as it was in WordPerfect and still is in HTML, by inserting 'formatting codes' inside running text; rather, text consists of multiple "runs". One run holds just the plain ASCII text. (More precise, 16-bit Unicode text.) Another run holds lengths of paragraph styles -- "the first 10 characters have paragraph style X, the next 24 characters have style Y"; and yet another one per-character formatting: "the first 5 characters are nothing special, then 10 characters are bold, italic, and underlined, then 19 more without anything".

Using scripting, you can easily get access to paragraph styles and individual characters, but also to these so-called Text Style Ranges, and it occurred to me I could use those to build up the list of required New Character Styles. So I wrote a script to loop over each of them, checking if each already had a character style applied to them, and if not, checking if there is an existing style for its extra attributes and creating it if not. Much to my surprise, it's way faster than this version of PrepText. Alas ... it's also way more complete -- too complete, in fact!

There seems to be some internal dispute inside InDesign on whether plain text is called "Regular" or "Roman", something that infrequently is visible in the Paragraph or Character style panel. You may see a certain text has an override, and its style gets a "+". But when you hover your mouse over the style name, it says 'Plain text + "Regular"' -- and that text style already is 'regular'. Alt+clicking clears this 'override', and you see the '+' disappear, but nothing really changes, because, well, the text was Regular and now it's Regular again.

I think (without having any real evidence for that) it's because ID's default font has been "Times Roman" for years, which is internally stored as "family: Times, style: Roman". Apparently, sometimes the affix "Roman" gets replaced in your text with "Regular", and sometimes it does not. For one, I've never seen "Minion Pro Roman"; it seems you always get to see the 'correct' style name after all. Or at least, that's what gets shown in the interface.

Back to the super-complete FastPrepText: it also picks up this nigh-on invisible difference between "Roman" (even if it's visibly called "Regular"!) and "Regular", and much to my dismay, I not only get character styles such as "Superscript" but also "Regular + Superscript", and even "Regular" on its own! The weirdest thing is, you might think a smart fella like me would be able to test the name of the font style before declaring it to be "local formatting". I did check, and in all cases all scripts are confident the style name is, in fact, "Regular" -- right before it seems to decide 'wait it's local formatting anyway', and then it still creates the "Regular" character styles!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 23, 2013 Jan 23, 2013

Copy link to clipboard

Copied

Now I'm really educated on preptext! I'm looking forward for your FastPrepText script. I'm sure will be as useful as preptext.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jan 23, 2013 Jan 23, 2013

Copy link to clipboard

Copied

Thank a bunch sir, nice and easy! I just had to remove "selection[0].parent." on line 96 too, and it worked great with no cursor inserted!

Now, the batch part worked fine with Rorohiko's Batcher, but it didn't worked with Peter's excellent batch script (it keeps processing the doc over and over, with no error message).

This is really a time saver. Here's the complete adapted preptext script with the code to run flawlessly with Batcher:

//DESCRIPTION: Jongware's PrepText (adapted to run with Batcher, by Rorohiko)

var myMaximumValue = 63;
var myProgressBarWidth = 384;
var myIncrement = myMaximumValue/myProgressBarWidth;
myCreateProgressPanel(myMaximumValue, myProgressBarWidth);

myProgressPanel.myProgressBar.value = 0;
myCreateProgressPanel(100, 400);
myProgressPanel.show();

for (b=0; b<2; b++)
{
     for (i=0; i<2; i++)
     {
          for (s=0; s<2; s++)
          {
               for (u=0; u<2; u++)
               {
               //     Don't process strikeout
                    for (k=0; k<1; k++)
                    {
                         for (c=0; c<3; c++)
                         {
                              if (b+i+s+u+k+c)
                              {
                                   myProgressPanel.myProgressBar.value = 32*b+16*i+8*s+4*u+2*k+c;
                                   findAttr (b, i, s, false, u, /*k*/false, c, "");
                                   if (s)
                                        findAttr (b, i, false, s, u, /*k*/false, c, "");
                              }
                         }
                    }
               }
          }
     }
}
myProgressPanel.hide();

exit(0);

function myCreateProgressPanel(myMaximumValue, myProgressBarWidth)
{
     myProgressPanel = new Window('window', 'Prepping text');
     with(myProgressPanel)
     {
          myProgressPanel.myProgressBar = add('progressbar', [12, 12, myProgressBarWidth, 24], 0, myMaximumValue);
     }
}

function findAttr (bold, italic, superscript, subscript, underline, strikeout, small_all_caps, StyleName)
{
     app.findTextPreferences = NothingEnum.nothing;
     app.changeTextPreferences = NothingEnum.nothing;
     app.findTextPreferences.appliedCharacterStyle = app.activeDocument.characterStyles[0];     // "[None]"

     app.findTextPreferences.fontStyle = "Regular";
     app.findTextPreferences.position = Position.NORMAL;
     app.findTextPreferences.capitalization = Capitalization.NORMAL;
     app.findTextPreferences.underline = false;
     app.findTextPreferences.strikeThru = false;

     if (bold)
     {
          if (italic)
               app.findTextPreferences.fontStyle = "Bold Italic";
          else
               app.findTextPreferences.fontStyle = "Bold";
     } else
     {
          if (italic)
               app.findTextPreferences.fontStyle = "Italic";
     }
     if (superscript)
          app.findTextPreferences.position = Position.SUPERSCRIPT;

     if (subscript)
          app.findTextPreferences.position = Position.SUBSCRIPT;

     if (underline)
          app.findTextPreferences.underline = true;
     if (strikeout)
          app.findTextPreferences.strikeThru = true;

     if (small_all_caps == 1)
          app.findTextPreferences.capitalization = Capitalization.SMALL_CAPS;
     if (small_all_caps == 2)
          app.findTextPreferences.capitalization = Capitalization.ALL_CAPS;

     foundItems = app.activeDocument.findText();

     if (foundItems.length > 0)
     {
          if (StyleName == "")
          {
          //     Make up a name
               if (bold)
                    StyleName = "Bold";
               if (italic)
               {
                    if (bold)
                         StyleName = "Bold Italic";
                    else
                         StyleName = "Italic";
               }
               if (superscript)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Super";
               }
               if (subscript)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Sub";
               }
               if (underline)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Underline";
               }
               if (strikeout)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Stkout";
               }
               if (small_all_caps == 1)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Scaps";
               }
               if (small_all_caps == 2)
               {
                    if (StyleName) StyleName += " + ";
                    StyleName += "Caps";
               }
               try
               {
                    cstyle = app.activeDocument.characterStyles.add({name:StyleName}); // , fontStyle:app.findTextPreferences.fontStyle, underline:app.findTextPreferences.underline, strikeThru:app.findTextPreferences.strikeThru, position:app.findTextPreferences.position, capitalization:app.findTextPreferences.capitalization});
                    if (bold || italic) cstyle.fontStyle = app.findTextPreferences.fontStyle;
                    if (superscript || subscript) cstyle.position = app.findTextPreferences.position;
                    if (underline) cstyle.underline = app.findTextPreferences.underline;
                    if (strikeout) cstyle.strikeThru = app.findTextPreferences.strikeThru;
                    if (small_all_caps) cstyle.capitalization = app.findTextPreferences.capitalization;
               } catch (e)
               {
               }
          }
          app.changeTextPreferences.appliedCharacterStyle = StyleName;
          app.activeDocument.changeText (false);
     }
}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Mar 31, 2015 Mar 31, 2015

Copy link to clipboard

Copied

LATEST

Hi again,

also I'm wondering, does the PreserveLocalFormatting.jsx do the same things as the PrepText and PerfectPrepText scripts do?

And is the PreserveLocalFormatting.jsx available for windows. I dowloaded a file, but then noticed that was for MAC too.

Anu

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines