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
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.
Copy link to clipboard
Copied
Sorry but what do you mean by "replace "Book Italic" with a custom character style"
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.
Then run my script -- it will not change existing character styles.
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 ?
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 ...
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.
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.
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
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).
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.
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
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?
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
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.
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!
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.
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);
}
}
Copy link to clipboard
Copied
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