Skip to search.

Breaking News Visit Yahoo! News for the latest.

×Close this window

framescript-users · FrameScript Users

The Yahoo! Groups Product Blog

Check it out!

Group Information

  • Members: 901
  • Category: Software
  • Founded: Aug 20, 1999
  • Language: English
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Hear how Yahoo! Groups has changed the lives of others. Take me there.

Messages

Advanced
Messages Help
Messages 1781 - 1810 of 10492   Oldest  |  < Older  |  Newer >  |  Newest
Messages: Show Message Summaries Sort by Date ^  
#1781 From: Klaus Mueller <mueller23@...>
Date: Thu Jan 3, 2002 10:06 pm
Subject: Re: FS-Scripts-Menu Name
utesch23
Send Email Send Email
 
Michael,

  > 'ESLMSSMENU'

Ok, thanks.

  > and it seems to be the same as on Windows

Yep.

  > Mac FrameScript application ... Fsl2_VVMR or Fsl2_VVME
  > I guess ElmScript versions start with "Esl"...

Now I'm wondering whether ESLM... is only ElmScript?
(and FrameScript Commands/Menus are called FSLM...?)
This FrameScript-/ElmScript-mess is really annoying.

Just curious:
For the command:
     New Command Label('Test') NewVar(vTestCommand)
       EventProc(TestCmd) AddTo(vTestMenu);
both of the following methods seem to work:
- Set vTestMenu= 'ESLMSSMENU';
also as:
- Get Object Type(Menu) Name('ESLMSSMENU') NewVar(vTestMenu);
Seems to be a 'undocumented feature'? ...

And 1 left:
Calling from the initial script an event script,
that wants to add a command to the scripts menu:
     Get Object Type(Menu) Name('ESLMSSMENU') NewVar(vTestMenu)
don't works for me, until at least one standard script was installed
before.
It also works adding this code:
     Install Script File(vScriptFolder+'dummy.fsl') Name('Dummy');
     UnInstall Script Name('Dummy');
Could anyone confirm this?

Best regards,
Klaus Mueller, Hamburg

#1782 From: Klaus Mueller <mueller23@...>
Date: Thu Jan 3, 2002 8:58 pm
Subject: Re: Hypertext on Mac
utesch23
Send Email Send Email
 
Michael,

Big thanks for your replies.

One note to my previous question:
  > 1) "openObjectId <$relfilename>:<$ObjectType> <$ObjectId>"
  >      New Marker NewVar(vMarker) MarkerText('openObjectId ' +
  >      vCurrentDoc.Name +':2 ' + vPgf.Unique)
  >      MarkerName('Hypertext') TextLoc(vTLoc);
  > "vCurrentDoc.Name":
  > This works on Windows, but apparently not on Mac.
  > Question: Is it possible to insert the complete path on Mac?
  > Must the DIRSEPs be re-coded in any way?
  > Or can this only be the filename without path ("$relfilename")?

I got the answer generating on a coworkers Mac a toc with
some files. The marker showed:
      openObjectId /Macintosh HD/Desktop Folder/Test.fm:2 998463
Slash before the hard disk!
So I coded <$relfilename>:
      Get String FromString(vDoc.Name) NewVar(vDocName)
        ReplaceAll(DIRSEP) With('/');
      If WindowSystem = 'Macintosh'
        Set vDocName= '/'+ vDocName;
      EndIf
(Guess this should work.)


  > 2) "message fsl scriptname message"

  > The FrameScript application is named Fsl2_VVMR or
  > Fsl2_VVME depending on the version
  > I guess ElmScript versions start with "Esl"...

Fsl2_60MR, Fsl2_556ME, Esl2_60MR, Esl1?_556ME:
Too much variables for me.

  > your best bet is to rename the FrameScript module
  > on Mac OS to be "fsl"
  > One could parse the Modules folder (Session.FMBinDir) to
  > check whether the user has renamed the module accordingly.

You're right.
So my code goes like this:

Set vFSClient = 'fsl';
If WindowSystem = 'Macintosh'
    Set vFSClient = 'fsl'; // <-- (Rename)
    Run CheckMacModule;
    If not vModuleFound LeaveSub; EndIf
EndIf
//...
//----------------------
Sub CheckMacModule
Loop ForEach (File) In(FMBinDir) LoopVar(vFile)
    Find String(vFSClient) InString(vFile)
      NoCase Suffix ReturnStatus(vModuleFound);
    If vModuleFound LeaveLoop; EndIf
Endloop
If vModuleFound LeaveSub; EndIf
Set vMsg = 'API-Client '+quote+vFSClient+quote+' not found '+CHARCR
    +'Please rename the FrameScript module in your '+CHARCR
    +'Modules folder to '+quote+vFSClient+quote+' *or* adjust '
    +'the variable '+CHARCR +quote+'vFSClient'+quote+ ' to your '
    +'FrameScript module name.'+CHARCR
    +'('+ThisScript+')';
Display vMsg;
EndSub


Kind regards,
Klaus Mueller, Hamburg

#1783 From: "hokuspokus22" <pcarey@...>
Date: Fri Jan 4, 2002 12:45 pm
Subject: accessing a marker object
hokuspokus22
Send Email Send Email
 
Hello all.
A quick [maybe numbskull] question:
If I know the textrange of a Marker,
how can I access the marker itself?

The following returns a Pgf Object...

Find FromTextLoc(vLinkRange) Marker('Hypertext')
ReturnStatus(vMarkerFound) ReturnRange(vMarkerRange);
If vMarkerRange
	 Set vMarker = vMarkerRange.Begin.Object;
EndIf


(I have a way that works, but I'm positive it's not the best way)
(I hope to avoid a Loop ForEach(Marker) solution)
Any help would be fantastic!
...Pete

#1784 From: "Rick Quatro" <rquatro@...>
Date: Fri Jan 4, 2002 1:36 pm
Subject: Re: accessing a marker object
frameexpert
Send Email Send Email
 
Once you get the text range (vMarkerRange), you use

Get TextList InRange(vMarkerRange) NewVar(vTlist)
   MarkerAnchor;
Get Member Number(1) From(vTlist) NewVar(vMarkerAnchor);
Set vMarker = vMarkerAnchor.TextData;

vMarker will be the marker object.

You can avoid the Find FromTextLoc code by using the Get TextList InObject
command. For example, here is a script that loops through all of the markers
in order in the main text flow (excluding tables).

Set vCurrentDoc = ActiveDoc;
Set vPgf = vCurrentDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
Loop While(vPgf)
   Get TextList InObject(vPgf) NewVar(vTlist) MarkerAnchor;
   Loop While(n <= vTlist.Count) LoopVar(n) Init(1) Incr(1)
     Get Member Number(n) From(vTlist) NewVar(vMarkerAnchor);
     Set vMarker = vMarkerAnchor.TextData;
   EndLoop
   Set vPgf = vPgf.NextPgfInFlow;
EndLoop

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Hello all.
> A quick [maybe numbskull] question:
> If I know the textrange of a Marker,
> how can I access the marker itself?
>
> The following returns a Pgf Object...
>
> Find FromTextLoc(vLinkRange) Marker('Hypertext')
> ReturnStatus(vMarkerFound) ReturnRange(vMarkerRange);
> If vMarkerRange
> Set vMarker = vMarkerRange.Begin.Object;
> EndIf
>
>
> (I have a way that works, but I'm positive it's not the best way)
> (I hope to avoid a Loop ForEach(Marker) solution)
> Any help would be fantastic!
> ...Pete

#1785 From: pcarey@...
Date: Fri Jan 4, 2002 1:18 pm
Subject: Re: accessing a marker object
hokuspokus22
Send Email Send Email
 
Ahh...
Thank you Rick.
I got into such a habit of using "Get TextList InObject()" that I forgot it
worked for TextRanges too.

--Pete




"Rick Quatro" <rquatro%rochester.rr.com@...> on 01/04/2002
08:36:47 AM

Please respond to framescript-users%yahoogroups.com@...

To:   framescript-users%yahoogroups.com@...
cc:    (bcc: Peter Carey/Lex/Lexmark)

Subject:  Re: [framescript-users] accessing a marker object



Once you get the text range (vMarkerRange), you use

Get TextList InRange(vMarkerRange) NewVar(vTlist)
   MarkerAnchor;
Get Member Number(1) From(vTlist) NewVar(vMarkerAnchor);
Set vMarker = vMarkerAnchor.TextData;

vMarker will be the marker object.

You can avoid the Find FromTextLoc code by using the Get TextList InObject
command. For example, here is a script that loops through all of the markers
in order in the main text flow (excluding tables).

Set vCurrentDoc = ActiveDoc;
Set vPgf = vCurrentDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
Loop While(vPgf)
   Get TextList InObject(vPgf) NewVar(vTlist) MarkerAnchor;
   Loop While(n <= vTlist.Count) LoopVar(n) Init(1) Incr(1)
     Get Member Number(n) From(vTlist) NewVar(vMarkerAnchor);
     Set vMarker = vMarkerAnchor.TextData;
   EndLoop
   Set vPgf = vPgf.NextPgfInFlow;
EndLoop

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Hello all.
> A quick [maybe numbskull] question:
> If I know the textrange of a Marker,
> how can I access the marker itself?
>
> The following returns a Pgf Object...
>
> Find FromTextLoc(vLinkRange) Marker('Hypertext')
> ReturnStatus(vMarkerFound) ReturnRange(vMarkerRange);
> If vMarkerRange
> Set vMarker = vMarkerRange.Begin.Object;
> EndIf
>
>
> (I have a way that works, but I'm positive it's not the best way)
> (I hope to avoid a Loop ForEach(Marker) solution)
> Any help would be fantastic!
> ...Pete




------------------------------------
     To post a message, email: framescript-users@yahoogroups.com
     To subscribe, email: framescript-users-subscribe@yahoogroups.com
     To unsubscribe, email: framescript-users-unsubscribe@yahoogroups.com
     To contact the list owner, email: framescript-users-owner@yahoogroups.com
     To change your email address or delivery options, visit:
http://groups.yahoo.com/group/framescript-users

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/

#1786 From: "kevc63" <kevc63@...>
Date: Fri Jan 4, 2002 8:13 pm
Subject: Import Graphic into existing Aframe in Table
kevc63
Send Email Send Email
 
Hi All,

I'm having a problem I can't solve :(

I have a table with anchored frames to which I want to import
graphics. To accomplish this I first loop through each cell in the
table looking for the pgf "Art Anchor" when found I want to select
the anchored frame in that cell and Import a file into it.

Everything works except that the graphic is imported into a new
anchored frame inside of the existing anchored frame. Also one other
weird thing, the objectname for the graphic is showing up as UFrame
instead of AFrame. Does this mean anything?

Also thanks to all that have posted code to get me this far!!

Thanks very much for any responses, Kevin

SUB AddGraphics

	 Set vFlow = ActiveDoc.MainFlowInDoc;
	 // Find the first paragraph in the flow.
	 Set vPgf = vFlow.FirstTextFrameInFlow.FirstPgf;
	 Get TextList InObject(vPgf) NewVar(vTlist) TblAnchor;
	 // If there are one or more tables, this loop will be entered.

	 Loop While (x <= vTlist.Count) LoopVar(x) Init(1) Incr(1)
		 Get Member Number(x) From(vTlist) NewVar(vTblAnchor);
		 Set vTbl = vTblAnchor.TextData;
		 // Go to the first cell in the table.
		 Set vCell = vTbl.FirstRowInTbl.FirstCellInRow;
		 // Move from cell-to-cell.
		 Loop While(vCell)
			 Set vCellPgf = vCell.FirstPgf;
			 If vCellPgf.Name = 'Art Anchor'
				 Set vGraphic = FirstGraphicInDoc;
				 display vGraphic.ObjectName;
				 Set vGraphic.GraphicIsSelected = 1;
				 Set vPic = 'c:\\60433z.pcx';
				 Import File File(vPic);
			 EndIf
			 Set vCell = vCell.NextCellInTbl;
		 EndLoop
	 EndLoop


ENDSUB

#1787 From: "Rick Quatro" <rquatro@...>
Date: Fri Jan 4, 2002 11:42 pm
Subject: Re: Import Graphic into existing Aframe in Table
frameexpert
Send Email Send Email
 
Once you get to the paragraph containing the anchored frame, you can use
this to find it.

Get TextList InObject(vCellPgf) FrameAnchor NewVar(vTlist);
If vTlist.Count > 0
   Get Member Number(1) From(vTlist) NewVar(vFrameAnchor);
   Set vAFrame = vFrameAnchor.TextData;
   Set vAFrame.GraphicIsSelected = 1;
   Import File ...
EndIf

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Hi All,
>
> I'm having a problem I can't solve :(
>
> I have a table with anchored frames to which I want to import
> graphics. To accomplish this I first loop through each cell in the
> table looking for the pgf "Art Anchor" when found I want to select
> the anchored frame in that cell and Import a file into it.
>
> Everything works except that the graphic is imported into a new
> anchored frame inside of the existing anchored frame. Also one other
> weird thing, the objectname for the graphic is showing up as UFrame
> instead of AFrame. Does this mean anything?
>
> Also thanks to all that have posted code to get me this far!!
>
> Thanks very much for any responses, Kevin
>
> SUB AddGraphics
>
> Set vFlow = ActiveDoc.MainFlowInDoc;
> // Find the first paragraph in the flow.
> Set vPgf = vFlow.FirstTextFrameInFlow.FirstPgf;
> Get TextList InObject(vPgf) NewVar(vTlist) TblAnchor;
> // If there are one or more tables, this loop will be entered.
>
> Loop While (x <= vTlist.Count) LoopVar(x) Init(1) Incr(1)
> Get Member Number(x) From(vTlist) NewVar(vTblAnchor);
> Set vTbl = vTblAnchor.TextData;
> // Go to the first cell in the table.
> Set vCell = vTbl.FirstRowInTbl.FirstCellInRow;
> // Move from cell-to-cell.
> Loop While(vCell)
> Set vCellPgf = vCell.FirstPgf;
> If vCellPgf.Name = 'Art Anchor'
> Set vGraphic = FirstGraphicInDoc;
> display vGraphic.ObjectName;
> Set vGraphic.GraphicIsSelected = 1;
> Set vPic = 'c:\\60433z.pcx';
> Import File File(vPic);
> EndIf
> Set vCell = vCell.NextCellInTbl;
> EndLoop
> EndLoop
>
>
> ENDSUB

#1788 From: Ava Carmel <ava@...>
Date: Mon Jan 7, 2002 11:45 am
Subject: Table Continuation Variable
avagalileo
Send Email Send Email
 
Hi
I am struggling with my first FrameScript. I want it to search the
current document and add a Table Continuation variable to every table
that doesn't have one. So far I have:

Set vPgf = ActiveDoc.FirstPgfInDoc;
Loop for each(pgf) In(vCurrentDoc) LoopVar(vPgf)
  If vPgf.PgfFmt.Name = TableTitle
   //Check to see if there is a Table Continuation variable in the
paragraph
???
   //If there isn't such a variable, add one.
    New Text NewVar(vTextLoc)
    New Variable Format('Table Continuation') TextLoc(vTextLoc)
NewVar(vVar);
    Set vPgf = vPgf.NextPgfInDoc;
  EndIf
EndLoop

In any given Table Title there may or may not be a Table Continuation
variable. There may also be another type of variable. How do I check the
paragraph for only the Table Continuation variable? If I define a text
range, is the variable part of the text range or is it a separate
object?

Is the part of the script where I add the variable correct?  I still
don't understand how the TextLoc variable works.
Thanks
Ava Carmel
Galileo Technology, a Division of Marvell

#1789 From: "Rick Quatro" <rquatro@...>
Date: Mon Jan 7, 2002 1:57 pm
Subject: Re: Table Continuation Variable
frameexpert
Send Email Send Email
 
I would break this down into separate tasks to help you learn and understand
what you need to do. First of all, how do you insert a variable at the end
of a paragraph? Click in a table title to use this code.

// Make a variable for the paragraph.
Set vPgf = TextSelection.Begin.Object;
// Make a text location at the end of the paragraph.
New TextLoc NewVar(vTextLoc) Object(vPgf)
   Offset(ObjEndOffset - 1);
// Insert the variable.
New Variable Format('Table Continuation') TextLoc(vTextLoc)
   NewVar(vVar);

The next task is, how do you determine if the variable already exists in a
paragraph? Click in a paragraph that you know has the variable to test this
code.

Set vPgf = TextSelection.Begin.Object;
// Set a FrameScript variable to set if the
// Table Continuation variable is found.
Set vVariableFound = 0;
// Look for variables in the paragraph.
Get TextList InObject(vPgf) VarBegin
   NewVar(vTextList);
// Loop through the variables.
Loop While(n <= vTextList.Count) LoopVar(n) Init(1) Incr(1)
   Get Member Number(n) From(vTextList) NewVar(vVarBegin);
   // Test the variable.
   If vVarBegin.TextData.VarFmt.Name = 'Table Continuation'
     // If the Table Continuation variable is found,
     // set the FrameScript variable, and leave the loop.
     Set vVariableFound = 1;
     LeaveLoop;
   EndIf
EndLoop
// If the Table Continuation variable was not found, insert it.
// This is the code from the first task (without the first line).
If vVariableFound = 0
   // Make a text location at the end of the paragraph.
   New TextLoc NewVar(vTextLoc) Object(vPgf)
     Offset(ObjEndOffset - 1);
   // Insert the variable.
   New Variable Format('Table Continuation') TextLoc(vTextLoc)
     NewVar(vVar);
EndIf

All that is left is to loop through the paragraphs. Since a Table
Continuation variable can only be used in a table, it is easier to loop
through the tables. If you are only using Table Continuation variables in
table titles, it is even easier.

// Set a variable for the active document.
Set vCurrentDoc = ActiveDoc;
// Loop through the tables in the document.
Loop ForEach(Tbl) In(vCurrentDoc) LoopVar(vTbl)
   // Test for a table title in the current table.
   If vTbl.FirstPgf
     // Run a subroutine containing the previous code.
     Run InsertVariable vPgf(vTbl.FirstPgf);
   EndIf
EndLoop

Before you run this code, put the previous code into a subroutine at the
bottom of your script.

Sub InsertVariable
//
// Set a FrameScript variable to set if the
// Table Continuation variable is found.
Set vVariableFound = 0;
.... (etc.) ...
//
EndSub

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Hi
> I am struggling with my first FrameScript. I want it to search the
> current document and add a Table Continuation variable to every table
> that doesn't have one. So far I have:
>
> Set vPgf = ActiveDoc.FirstPgfInDoc;
> Loop for each(pgf) In(vCurrentDoc) LoopVar(vPgf)
>  If vPgf.PgfFmt.Name = TableTitle
>   //Check to see if there is a Table Continuation variable in the
> paragraph
> ???
>   //If there isn't such a variable, add one.
>    New Text NewVar(vTextLoc)
>    New Variable Format('Table Continuation') TextLoc(vTextLoc)
> NewVar(vVar);
>    Set vPgf = vPgf.NextPgfInDoc;
>  EndIf
> EndLoop
>
> In any given Table Title there may or may not be a Table Continuation
> variable. There may also be another type of variable. How do I check the
> paragraph for only the Table Continuation variable? If I define a text
> range, is the variable part of the text range or is it a separate
> object?
>
> Is the part of the script where I add the variable correct?  I still
> don't understand how the TextLoc variable works.
> Thanks
> Ava Carmel
> Galileo Technology, a Division of Marvell

#1790 From: Ava Carmel <ava@...>
Date: Tue Jan 8, 2002 1:50 pm
Subject: Table Continuation Variable
avagalileo
Send Email Send Email
 
Rick
Thanks so much for stepping me through this script.  Following is the
script I assembled from what you suggested.  Although it works, I have a
feeling that in the line which reads "Set vPgf =
TextSelection.Begin.Object; ", "TextSelection" should be replaced by
something else, but I don't know what.  What should it be?

Ava Carmel
Galileo Technology, a Division of Marvell


//This script adds a Continuation Variable to every table title that
doesn't already have one.

Set vCurrentDoc = ActiveDoc;
Loop ForEach(Tbl) In(vCurrentDoc) LoopVar(vTbl)
  If vTbl.FirstPgf
   Set vPgf = TextSelection.Begin.Object;
   Run InsertVariable vPgf(vTbl.FirstPgf);
  EndIf
EndLoop

Sub InsertVariable
  Set vVariableFound = 0;
  Get TextList InObject(vPgf) VarBegin NewVar(vTextList);
  Loop While(n <= vTextList.Count) LoopVar(n) Init(1) Incr(1)
   Get Member Number(n) From(vTextList) NewVar(vVarBegin);
    If vVarBegin.TextData.VarFmt.Name = 'Table Continuation'
     Set vVariableFound = 1;
     LeaveLoop;
    EndIf
  EndLoop
   If vVariableFound = 0
    New TextLoc NewVar(vTextLoc) Object(vPgf) Offset(ObjEndOffset - 1);
    New Variable Format('Table Continuation')
TextLoc(vTextLoc)NewVar(vVar);
   EndIf
EndSub

#1791 From: "Rick Quatro" <rquatro@...>
Date: Tue Jan 8, 2002 3:37 pm
Subject: Re: Table Continuation Variable
frameexpert
Send Email Send Email
 
Actually, you need to get rid of the line

Set vPgf = TextSelection.Begin.Object;

This line was so you could test each portion of the script. It returns the
paragraph that your insertion point is in.

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Rick
> Thanks so much for stepping me through this script.  Following is the
> script I assembled from what you suggested.  Although it works, I have a
> feeling that in the line which reads "Set vPgf =
> TextSelection.Begin.Object; ", "TextSelection" should be replaced by
> something else, but I don't know what.  What should it be?
>
> Ava Carmel
> Galileo Technology, a Division of Marvell
>
>
> //This script adds a Continuation Variable to every table title that
> doesn't already have one.
>
> Set vCurrentDoc = ActiveDoc;
> Loop ForEach(Tbl) In(vCurrentDoc) LoopVar(vTbl)
>  If vTbl.FirstPgf
>   Set vPgf = TextSelection.Begin.Object;
>   Run InsertVariable vPgf(vTbl.FirstPgf);
>  EndIf
> EndLoop
>
> Sub InsertVariable
>  Set vVariableFound = 0;
>  Get TextList InObject(vPgf) VarBegin NewVar(vTextList);
>  Loop While(n <= vTextList.Count) LoopVar(n) Init(1) Incr(1)
>   Get Member Number(n) From(vTextList) NewVar(vVarBegin);
>    If vVarBegin.TextData.VarFmt.Name = 'Table Continuation'
>     Set vVariableFound = 1;
>     LeaveLoop;
>    EndIf
>  EndLoop
>   If vVariableFound = 0
>    New TextLoc NewVar(vTextLoc) Object(vPgf) Offset(ObjEndOffset - 1);
>    New Variable Format('Table Continuation')
> TextLoc(vTextLoc)NewVar(vVar);
>   EndIf
> EndSub

#1792 From: "METZGAR, LISA" <lisa.metzgar@...>
Date: Tue Jan 8, 2002 7:43 pm
Subject: Using Cancel Button to End a Script
lisa.metzgar@...
Send Email Send Email
 
Hi,

I have created a script that imports updated formats from a document into a
Frame book. The script is an event script. Each time a book is opened, the
script asks the user whether or not he or she wants to update formats. Yes,
continues the script, no cancels it. The script then opens all the documents
and prompts the user to select a document to import from. I then use three
successive MEdit dialog boxes. Each box contains 2-4 checkboxes allowing the
user to select the desired formats. It also contains the default OK and
Cancel buttons. After the user has selected the desired options, the script
imports the selected formats.

My problem is that I would like to allow the user to click the cancel button
in any of these three boxes and cancel the script. I have tried two methods.
The first was to the following at the end of each dialog box:
IF DialogButtonVar1 = CancelButton
       EndEvent;
ENDIF

In each case, the dialog button variable was unique for that dialog box and
had been named at the beginning of the dialog box sequence. This works in
the first dialog box only. In other words, you can make or not make
selections in the first dialog box and, if you press Cancel, the script
simply ends without doing anything--which is what I want. However, if you
press Cancel on either the second or the third dialog box, it only cancels
the values entered in that dialog box--not in the previous boxes--and it
does not exit the script, which is what I would like it to do. My second
approach yielded exactly the same results. This approach was to put the
dialog box and import lines of the script into a sub routine, then put the
following at the end of each dialog box:
IF DialogButtonVar1 = CancelButton
       LeaveSub;
ENDIF

Any ideas on how I can get these Cancel buttons to cancel and end the whole
script? Or is this the default behavior of these buttons--in which case I
probably need to add a new button...

Many thanks,
Lisa

Lisa Metzgar
Technical Documentation Manager
Advanced Energy Industries, Inc.
Fort Collins CO 80252
970-407-6503


_________________________________________

This message, including any attachments, may contain information that is
confidential and proprietary information of Advanced Energy Industries, Inc.
The dissemination, distribution, use or copying of this message or any of
its attachments is strictly prohibited without the express written consent
of Advanced Energy Industries, Inc.

#1793 From: "METZGAR, LISA" <lisa.metzgar@...>
Date: Tue Jan 8, 2002 8:05 pm
Subject: Using Cancel Button to End a Script--Part II
lisa.metzgar@...
Send Email Send Email
 
Hi again,

Rick, thanks so much for your call. Here is the entire script.

Event NotePostOpenBook


//Sets the active book as the book that the script will run on
Set BookImport = ActiveBook;

//Asks if user wants to update. No closes the script. Yes continues

MsgBox 'Do you want to update formats in this book?' Mode(YesNo)
Button(ImportButton);
IF ImportButton = YesButton

//Opens all documents in book
    LOOP ForEach(BookComponent) In(BookImport) LoopVar(BookOpen)
       RUN isDocOpenAlready filename(BookOpen.Name) returns DocObj(dobj);
       IF dobj = 0
          SET errorcode = 0;
          OPEN Document File(BookOpen.Name) FileIsOldVersion
FontNotFoundInDoc NewVar(dobj);
          IF errorcode not 0
             MSGBOX 'Error opening component-'+BookOpen.Name+'
Msg-'+ErrorMsg;
          ENDIF
       ENDIF
    ENDLOOP

//Allows user to select the file to import files from
    DialogBox Type(ChooseFile)Title('Select the file from which you want to
import formats:')
    Directory('d:\') Mode(OpenFile) Button(ButtonVar)
    NewVar(FileVarName) Init('*.fm');
    IF ButtonVar = OKButton
       MsgBox Mode(Note) 'Formats will be imported from: '+FileVarname;
    ENDIF

//Opens document to import formats from
    Open Document File(FileVarName)  NewVar(ImportFromDoc);

//Runs the selection and import subroutine
Run ImportSub;

//Closes this event script
EndEvent


//-------------------------------------------
//This subroutine allows the user to select formats, then imports them

SUB ImportSub
    DialogBox Type(medit) Title('Formats to Import1') Button(DialogButtonVar)
       Title2('Which of the following formats do you want to import?')
       CheckBox1Label('Paragraph tags') CheckBox1(ParaTagImport)
       CheckBox2Label('Character tags') CheckBox2(CharaTag)
       CheckBox3Label('Master pages') Checkbox3(MasterPageImport)
       CheckBox4Label('Table formats') Checkbox4(TableFormat);
    IF DialogButtonVar = CancelButton
       LeaveSub;
    ENDIF

    DialogBox Type(medit) Title('Formats to Import1') Button(DialogButtonVar)
       Title2('Which of the following formats do you want to import?')
       CheckBox1Label('Color definitions') CheckBox1(ColorDef)
       CheckBox2Label('Document properties') CheckBox2(DocProp)
       CheckBox3Label('Reference pages') Checkbox3(ReferPages)
       CheckBox4Label('Variable definitions') Checkbox4(VariabDefs);
    IF DialogButtonVar = CancelButton
       LeaveSub;
    ENDIF

    DialogBox Type(medit) Title('Formats to Import3') Button(DialogButton3)
       Title2('Which of the following formats do you want to import?')
       CheckBox1Label('Cross reference formats') CheckBox1(CrossRefForms)
       CheckBox2Label('Conditional Text Settings') CheckBox2(CondTextSett);
    IF DialogButton3 = CancelButton
       LeaveSub;
    ENDIF

//Import paragraph tags
    IF ParaTagImport = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Pgf;
    ENDIF

//Import Character tags
    IF CharaTag = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Font;
    ENDIF


//Import Master Pages
    IF MasterPageImport = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Page;
    ENDIF

//Import Table Formats
    IF TableFormat = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Table;
    ENDIF

//Import Color Definitions
    IF ColorDef = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Color;
    ENDIF

//Import Document Properties
    IF DocProp = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
DocumentProps;
    ENDIF

//Import Reference Pages
    IF ReferPages = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
RefPage;
    ENDIF

//Import Variable Definitions
    IF VariabDefs = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Var;
    ENDIF

//Import Cross Reference Formats
    IF CrossRefForms = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
XRef;
    ENDIF

//Import Conditional Text Settings
    IF CondTextSett = 1
	 Import Formats BookObject(BookImport) FromDocObject(ImportFromDoc)
Cond;
    ENDIF

MsgBox Mode(Note) 'Formats imported but not saved. Check master page
assignment and other formatting issues.'

ENDSUB
//---------------------------------------------


//--------------------------------------------------------------------------
--
//   This subroutine checks the list of open documents to see if the
//   specified document is already open.
//
//   Format:
//       Run IsDocAlreadyOpen Filename(testfilename) returns
DocObj(retdocvar)
//
//    If it is open, it returns the document object
//    and returns zero if it is not open.
//--------------------------------------------------------------------------
--
SUB isDocOpenAlready using filename DocObj

    GET String FromString (filename) Uppercase NewVar(tfilename);  // Upper
case the string
    SET DocObj = 0;
    LOOP foreach(Doc) In(Session) LoopVar(testdocobj)
       GET String FromString (testdocobj.Name) Uppercase NewVar(tname); //
Upper case the string
       IF tname = tfilename
          SET DocObj = testdocobj;
          LEAVELOOP;
       ENDIF
    ENDLOOP

ENDSUB
//--------------------------------------------------------------------------
------




Again, many thanks,
Lisa

Lisa Metzgar
Technical Documentation Manager
Advanced Energy, Fort Collins
970-407-6503



_________________________________________

This message, including any attachments, may contain information that is
confidential and proprietary information of Advanced Energy Industries, Inc.
The dissemination, distribution, use or copying of this message or any of
its attachments is strictly prohibited without the express written consent
of Advanced Energy Industries, Inc.

#1794 From: Klaus Mueller <mueller23@...>
Date: Tue Jan 8, 2002 9:29 pm
Subject: Re: Using Cancel Button to End a Script--Part II
utesch23
Send Email Send Email
 
Hi Lisa,

  > Rick, thanks so much for your call

So ...  you got solved your problem?

  > My problem is that I would like to allow the user to
  > click the cancel button [...] and cancel the script.

Your first MsgBox Should cancel correctly:

  > IF ImportButton = YesButton
  > ...

although I prefer
      If ImportButton = NoButton LeaveSub; EndIf
because I then don't need indents for the following code.

Your second DialogBox Type(ChooseFile)
can't be cancelled ("File 'C:\Path\0" not found"; script continues).
Replace your
  > IF ButtonVar = OKButton
  >   MsgBox Mode(Note) 'Formats will be imported from: '+FileVarname;
  > ENDIF
with
     If ButtonVar = NoButton LeaveSub; EndIf
     MsgBox Mode(Note) 'Formats will be imported from: '+FileVarname;

Your DlgBoxes 3-5
  > dialog box and import lines of the script into a sub routine,
  > then put the following at the end of each dialog box:
  > IF DialogButtonVar1 = CancelButton
  >   LeaveSub;
  > ENDIF
does cancel the sub (and thus the script) correctly,
so I guess Rick already did help you?

Anyway: If you had any code in your MainEvent 'NotePostOpenBook'
after calling the subroutine, you could set a variable in your sub:
    IF DialogButton = CancelButton
      Set vStoppIt = true;
      LeaveSub;
    ENDIF
and check this variable in your calling routine/event:
    Run ImportSub;
    If vStoppIt LeaveSub; EndIf

And: Although it doesn't hurt, you don't need different
variables for your various dlgboxes.

Regards,
Klaus Mueller, Hamburg

#1795 From: "embegraf" <embegraf@...>
Date: Fri Jan 11, 2002 4:14 pm
Subject: Problems with Event NotePostOpenDoc
embegraf
Send Email Send Email
 
Hello Scripters,

I've got a bad problem with an event script that's fired after
opening documents. In normal operation everything works fine: The
script makes my document look like I want them to, e.g. hide rulers,
set my favorite zoom factor, etc.
However, since I install this script, FM crashes when I
generate/update certain books. I do not know what's "wrong" with the
book - it uses text insets, lots of cross-refs to other books that
use text insets and have lots of cross-refs etc.

I noticed that I must not execute the script if docs from the FM
install dir are opened (that's the first If statement), the second if
statement attempts to filter documents that would make FM crash for
other reasons - but obviously I missed something important. If I
comment out the section indicated below FM does never crash but when
I include it again I get these mysterious crashes.

Has anybody got an idea which property might provide the clue whether
I can execute the problematic code section or not?


~~~~~~~~

Event NotePostOpenDoc using FrameDoc Filename

	 // Ensure not to process FM internal files such as the math
palette
	 Get String FromString(Filename) StartPos(1) EndPos
(FMHomeDir.Count) Uppercase NewVar(vsCheckFilename);
	 Get String FromString(FMHomeDir) Uppercase NewVar
(vsCheckFMHomeDir);
	 If vsCheckFilename <> vsCheckFMHomeDir

		 // Check wether settings can be applied to doc or not

		 If FrameDoc = True and FrameDoc.Name <> False and
FrameDoc.IsIconified = False and FrameDoc.IsOnScreen = True

			 // Define View-Settings

			 Set vmMyZoom = 1.08pts;
			 Set vsFit = KbdZoomFitWindow;
			 Set vsPCatalog = False;
			 Set vsCCatalog = False;
			 Set vsDCatalog = False;
			 Set vsECatalog = False;
			 Set vsRulers = False;
			 Set vsCondtionalText = False;

// If the following part is executed, FM might crashes during
production of a book

			 // Default Hide Rulers?
			 If ViewRulers=0 and vsRulers = 'True'
				 ViewRulers=1;
			 EndIf
			 If ViewRulers=1 and vsRulers = 'False'
				 ViewRulers=0;
			 EndIf

			 If vmMyZoom <> False
				 Set FrameDoc.Zoom = vmMyZoom;
			 EndIf
			 If vsFit = 'KbdZoomFitWindow'
				 Execute Fc KbdZoomFitWindow;
			 EndIf
			 If vsFit = 'KbdZoomFitTextFrame'
				 Execute Fc KbdZoomFitTextFrame;
			 EndIf
			 If vsFit = 'KbdZoomFitPage'
				 Execute Fc KbdZoomFitPage;
			 EndIf

			 If vsCondtionalText = 'True'
				 Execute FC KbdCondText;
			 EndIf

			 If vsPCatalog = 'True'
				 Execute FC  KbdPgfWin;
			 EndIf
			 If vsCCatalog = 'True'
				 Execute FC  KbdFontWin;
			 EndIf
			 If vsDCatalog = 'True'
				 Execute FC  KbdToolWin;
			 EndIf
			 If vsECatalog = 'True'
				 Execute FC  KbdMathWin;
			 EndIf
// end of the problematic section

		 EndIf

	 EndIf

EndEvent




~~~~~

Thanks a lot for your help!

Regards,

Eckhard Graf

----------
Dipl.-Ing. (FH) Beng (Hons)
Eckhard Graf
Documentation Engineer
dSPACE GmbH
Technologiepark 25 · D-33100 Paderborn · Germany
Tel.: +495251-1638-671
Fax.: +495251-66529
mailto:EGraf@...

#1796 From: "David Feustel" <dfeustel@...>
Date: Fri Jan 11, 2002 4:22 pm
Subject: Re: Problems with Event NotePostOpenDoc
dfeustel@...
Send Email Send Email
 
What operating system are you using?

----- Original Message -----
From: "embegraf" <embegraf@...>
To: <framescript-users@yahoogroups.com>
Sent: Friday, January 11, 2002 11:14 AM
Subject: [framescript-users] Problems with Event NotePostOpenDoc


Hello Scripters,

I've got a bad problem with an event script that's fired after
opening documents. In normal operation everything works fine: The
script makes my document look like I want them to, e.g. hide rulers,
set my favorite zoom factor, etc.
However, since I install this script, FM crashes when I
generate/update certain books. I do not know what's "wrong" with the
book - it uses text insets, lots of cross-refs to other books that
use text insets and have lots of cross-refs etc.

#1797 From: Malcolm Mclean <mclean@...>
Date: Fri Jan 11, 2002 5:00 pm
Subject: RE: Problems with Event NotePostOpenDoc
mclean@...
Send Email Send Email
 
Hi Eckhard.

I haven't thought this through yet to see if this approach is even possible,
but it seems to me that you want to run the script that's triggered by
opening a doc only if you open the doc manually for editing - that is, only
if FM does not open the doc as part of the Update/Generate process.

Could you create a script that would set a flag triggered by
Update/Generate, and run the script to customise your FM editing environment
only if the flag is not set?

(I've seen something like this occur when FM is used with a C language FDK
application, and the problem turned out to be one of timing - FM was
starting to open the second file in a book before the first one was
completely opened. Perhaps the large number of insets etc alters the timing
of events enough that it causes the crash.)

Regards,

Malcolm

_______________________________________________________
Malcolm McLean
  Manager, Technical Publications
   Syndesis Limited
   30 Fulton Way, Richmond Hill
   ON Canada  L4B 1E6
  Phone: +1 905 886-7818 x2323
  Fax:   +1 905 886-5530
  Syndesis is automating next generation networks today!
  Find out how we're doing it at
  http://www.syndesis.com



-----Original Message-----
From: embegraf [mailto:embegraf@...]
Sent: Friday, January 11, 2002 11:15 AM
To: framescript-users@yahoogroups.com
Subject: [framescript-users] Problems with Event NotePostOpenDoc


Hello Scripters,

I've got a bad problem with an event script that's fired after
opening documents. In normal operation everything works fine: The
script makes my document look like I want them to, e.g. hide rulers,
set my favorite zoom factor, etc.
However, since I install this script, FM crashes when I
generate/update certain books. I do not know what's "wrong" with the
book - it uses text insets, lots of cross-refs to other books that
use text insets and have lots of cross-refs etc.

I noticed that I must not execute the script if docs from the FM
install dir are opened (that's the first If statement), the second if
statement attempts to filter documents that would make FM crash for
other reasons - but obviously I missed something important. If I
comment out the section indicated below FM does never crash but when
I include it again I get these mysterious crashes.

Has anybody got an idea which property might provide the clue whether
I can execute the problematic code section or not?


--- snip -----

#1798 From: Klaus Mueller <mueller23@...>
Date: Fri Jan 11, 2002 8:15 pm
Subject: Re: Problems with Event NotePostOpenDoc
utesch23
Send Email Send Email
 
Hi Eckhard,

I am not able to reproduce crashes while
book updating with your script installed.

Anyway: I have some comments to your code:

  > // Ensure not to process FM internal files such as
  > // the math palette
  > Get String FromString(Filename) StartPos(1) EndPos
  >   (FMHomeDir.Count) Uppercase NewVar(vsCheckFilename);
  > Get String FromString(FMHomeDir) Uppercase NewVar
  >   (vsCheckFMHomeDir);
  > If vsCheckFilename <> vsCheckFMHomeDir
  > // ...
  > EndIf

You can simplify this like:

     Find String (FMHomeDir) InString(Filename)
       NoCase Prefix ReturnStatus(vIsFrameDoc);
     If vIsFrameDoc LeaveSub; EndIf


  > Set vsRulers = False;
  > // ...
  > If ViewRulers=0 and vsRulers = 'True'
  >   ViewRulers=1;
  > EndIf

You don't need to check the current ruler status. Just
     Set ViewRulers=vsRulers;


  > Set vsFit = KbdZoomFitWindow;
  > // ...
  > If vsFit = 'KbdZoomFitWindow'
  >   Execute Fc KbdZoomFitWindow;
  > EndIf

Guess you wanted to
     Set vsFit = 'KbdZoomFitWindow'; //?
(Strings must be 'quoted')


  > If vsRulers = 'True'
  > If vsCondtionalText = 'True'
  > If vsPCatalog = 'True'
  > If vsCCatalog = 'True'
  > If vsDCatalog = 'True'
  > If vsECatalog = 'True'

Although you *can* set your variables to 'True'
or 'False', this doesn't make sense in boolean context.
With
     Set vsRulers = False;
you should check your status like
     If vsRulers = True // If vsRulers = False
or just
     If vsRulers // If not vsRulers


Regards,
Klaus Mueller, Hamburg

#1799 From: "Raskob, Elizabeth" <elizabeth.raskob@...>
Date: Fri Jan 11, 2002 8:29 pm
Subject: RE: Problems with Event NotePostOpenDoc
eraskob2
Send Email Send Email
 
Eckhard,

I have a Event NotePostOpenDoc that has never crashed when I generate a
file, but it uses totally different syntax, so I'm not sure what yours is
doing. Here's mine, in case that helps:

Event NotePostOpenDoc
   Set FrameDoc.Zoom = 1;
   Set FrameDoc.ViewTextSymbols = True;
   Set FrameDoc.ViewRulers = False;
   Set FrameDoc.ViewGrid = False;
   Set FrameDoc.ViewBorders = True;
   Execute FC KbdZoomFitWindow;
EndEvent

Elizabeth

-----Original Message-----
From: embegraf [mailto:embegraf@...]
Sent: 01/11/2002 11:15 AM
To: framescript-users@yahoogroups.com
Subject: [framescript-users] Problems with Event NotePostOpenDoc


Hello Scripters,

I've got a bad problem with an event script that's fired after
opening documents. In normal operation everything works fine: The
script makes my document look like I want them to, e.g. hide rulers,
set my favorite zoom factor, etc.
However, since I install this script, FM crashes when I
generate/update certain books. I do not know what's "wrong" with the
book - it uses text insets, lots of cross-refs to other books that
use text insets and have lots of cross-refs etc.

I noticed that I must not execute the script if docs from the FM
install dir are opened (that's the first If statement), the second if
statement attempts to filter documents that would make FM crash for
other reasons - but obviously I missed something important. If I
comment out the section indicated below FM does never crash but when
I include it again I get these mysterious crashes.

Has anybody got an idea which property might provide the clue whether
I can execute the problematic code section or not?


~~~~~~~~

Event NotePostOpenDoc using FrameDoc Filename

	 // Ensure not to process FM internal files such as the math
palette
	 Get String FromString(Filename) StartPos(1) EndPos
(FMHomeDir.Count) Uppercase NewVar(vsCheckFilename);
	 Get String FromString(FMHomeDir) Uppercase NewVar
(vsCheckFMHomeDir);
	 If vsCheckFilename <> vsCheckFMHomeDir

		 // Check wether settings can be applied to doc or not

		 If FrameDoc = True and FrameDoc.Name <> False and
FrameDoc.IsIconified = False and FrameDoc.IsOnScreen = True

			 // Define View-Settings

			 Set vmMyZoom = 1.08pts;
			 Set vsFit = KbdZoomFitWindow;
			 Set vsPCatalog = False;
			 Set vsCCatalog = False;
			 Set vsDCatalog = False;
			 Set vsECatalog = False;
			 Set vsRulers = False;
			 Set vsCondtionalText = False;

// If the following part is executed, FM might crashes during
production of a book

			 // Default Hide Rulers?
			 If ViewRulers=0 and vsRulers = 'True'
				 ViewRulers=1;
			 EndIf
			 If ViewRulers=1 and vsRulers = 'False'
				 ViewRulers=0;
			 EndIf

			 If vmMyZoom <> False
				 Set FrameDoc.Zoom = vmMyZoom;
			 EndIf
			 If vsFit = 'KbdZoomFitWindow'
				 Execute Fc KbdZoomFitWindow;
			 EndIf
			 If vsFit = 'KbdZoomFitTextFrame'
				 Execute Fc KbdZoomFitTextFrame;
			 EndIf
			 If vsFit = 'KbdZoomFitPage'
				 Execute Fc KbdZoomFitPage;
			 EndIf

			 If vsCondtionalText = 'True'
				 Execute FC KbdCondText;
			 EndIf

			 If vsPCatalog = 'True'
				 Execute FC  KbdPgfWin;
			 EndIf
			 If vsCCatalog = 'True'
				 Execute FC  KbdFontWin;
			 EndIf
			 If vsDCatalog = 'True'
				 Execute FC  KbdToolWin;
			 EndIf
			 If vsECatalog = 'True'
				 Execute FC  KbdMathWin;
			 EndIf
// end of the problematic section

		 EndIf

	 EndIf

EndEvent




~~~~~

Thanks a lot for your help!

Regards,

Eckhard Graf

----------
Dipl.-Ing. (FH) Beng (Hons)
Eckhard Graf
Documentation Engineer
dSPACE GmbH
Technologiepark 25 · D-33100 Paderborn · Germany
Tel.: +495251-1638-671
Fax.: +495251-66529
mailto:EGraf@...




------------------------------------
     To post a message, email: framescript-users@yahoogroups.com
     To subscribe, email: framescript-users-subscribe@yahoogroups.com
     To unsubscribe, email: framescript-users-unsubscribe@yahoogroups.com
     To contact the list owner, email:
framescript-users-owner@yahoogroups.com
     To change your email address or delivery options, visit:
http://groups.yahoo.com/group/framescript-users

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/

#1800 From: Klaus Mueller <mueller23@...>
Date: Sun Jan 13, 2002 3:01 pm
Subject: Aligning SideHeads
utesch23
Send Email Send Email
 
Hi Scripters,

Just another Script from HH.

Enjoy,
Klaus Mueller, Hamburg


   >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// AlignSideHeads2.fsl - Version 1.1
// Klaus Mueller, Hamburg. January 3, 2002
// e-mail any comments to mueller23@...

/*
// Aligning Side Head Paragraphs on left/right pages

// With known PgfFmts, the Counterpart will be applied.
// With unknown Formats, only the Alignment will be changed.
// Paragraph Overrides (except Alignment) will be kept.

// Necessary Adjustments (Event Initialize):
// - Wanted Alignment on left/right pages?
// - Adjust all Side Heads or specified only?
// - Add your Side Head Formats to the list! (left/right)

// This Script must be installed.
// (FS Guide: Installing Event Scripts)
*/

//----------------------
Event Initialize

//-- Align only the Pgfs specified?
//-- Not: Align *all* SideHead Pgfs
//Set vAlignDefinedFmtsOnly = true;

//-- Wanted Alignment: Must be PgfRight or PgfLeft
//-- Alignment on Left Pages:
Set vPgfAlignLeftPage = PgfRight;
//Set vPgfAlignLeftPage = PgfLeft;
//-- Alignment on Right Pages:
Set vPgfAlignRightPage = PgfLeft;
//Set vPgfAlignRightPage = PgfRight;

//-- Specify PgfFmts-Groups for Left/Right Pages:
//-- (Case-sensitive)
New StringList NewVar(vPgfFmtLeftPageLst);
New StringList NewVar(vPgfFmtRightPageLst);
Add Member('SideHead LeftPage') To(vPgfFmtLeftPageLst);
Add Member('SideHead RightPage') To(vPgfFmtRightPageLst);
Add Member('Marginalie linke Seite') To(vPgfFmtLeftPageLst);
Add Member('Marginalie rechte Seite') To(vPgfFmtRightPageLst);

If Language = 3 or Language = 22
    Set vLabelManual = 'Marginalien links/rechts';
    Set vLabelAuto = 'Marginalien li/re vor Speichern';
    Set vMsgDoAlign = 'Alle Marginalien im aktuellen ' + CHARCR
        + 'Dokument neu ausrichten?';
Else
    Set vLabelManual = 'Side Head Pgfs (left/right)';
    Set vLabelAuto = 'Side Head Pgfs (l/r) before saving';
    Set vMsgDoAlign = 'Align all Side Head Pgfs in current doc?';
EndIf

Run GetCheckMarkStatus;
Run DefineChars;

If not vKMScriptsMenu
    Run GetMenu Using vSLabel('Scripts')
      Returns vSMenu(vKMScriptsMenu);
EndIf
New Command Label(vLabelManual)
    NewVar(vAlignSiHeManualMenu) EventProc(vAlignSiHeManualCmd)
      AddTo(vKMScriptsMenu) EnabledWhen(EnableNeedsDocpOnly);
New Command Label(vLabelAuto)
    NewVar(vAlignSiHeAutoMenu) EventProc(vAlignSiHeAutoCmd)
      AddTo(vKMScriptsMenu);
    Set vAlignSiHeAutoMenu.CanHaveCheckMark = true;
Set vAlignSiHeAutoMenu.CheckMarkIsOn = vAlignSiHeAutoStatus;
EndEvent

//----------------------
Event Terminate
Remove CommandObject(vAlignSiHeManualMenu) From(vKMScriptsMenu)
Remove CommandObject(vAlignSiHeAutoMenu) From(vKMScriptsMenu)
EndEvent

//----------------------
Event vAlignSiHeAutoCmd
Set vAlignSiHeAutoMenu.CheckMarkIsOn =
    (not vAlignSiHeAutoMenu.CheckMarkIsOn);
Set vAlignSiHeAutoStatus = vAlignSiHeAutoMenu.CheckMarkIsOn;
If vAlignSiHeAutoStatus
    //-- Re-Align before Saving
    New Textfile File(vIniFile) NewVar(vIni) IOType(WriteOnly);
    Close textfile Object(vIni);
Else
    //-- Deactivate AutoAlign
    Delete File(vIniFile);
EndIf
EndEvent

//----------------------
Event vAlignSiHeManualCmd
Set vDoc = ActiveDoc;
If not vDoc LeaveSub; EndIf
If not vAlignSiHeAutoStatus
    MsgBox vMsgDoAlign Mode(YesNo) Button(btnvar);
    If btnvar = NoButton LeaveSub; EndIf
EndIf
Run ProcessDoc;
EndEvent

//----------------------
Event NotePreSaveDoc
If not vAlignSiHeAutoStatus LeaveSub; EndIf
Set vDoc = ActiveDoc;
If not vDoc LeaveSub; EndIf
Run ProcessDoc;
EndEvent

//----------------------
Sub GetCheckMarkStatus
local vFound;
Set vIniName = 'AlignSideHeads.ini';
Set vIniFile = FMInitDir +DIRSEP+ vIniName;
Loop ForEach (File) In(FMInitDir) LoopVar(vFile)
    Find String(vIniName) InString(vFile)
      NoCase Suffix ReturnStatus(vFound);
    If vFound LeaveLoop; EndIf
Endloop
Set vAlignSiHeAutoStatus = vFound;
EndSub

//----------------------
Sub ProcessDoc
Set vPgf = vDoc.FirstPgfInDoc;
Loop while (vPgf)
    Run ProcessPgf;
    Set vPgf = vPgf.NextPgfInDoc;
EndLoop
EndSub

//----------------------
Sub ProcessPgf

//-- Pgf Placement: Side Head?
If vPgf.Placement < 1 or vPgf.Placement > 3 LeaveSub; EndIf

//-- Exclude Master and Reference Pages
Set vPage = vPgf.Page;
If vPage.ObjectName not = 'BodyPage' LeaveSub; EndIf

//-- PgfFmt in List?
Set vFmtInList = false;
Set vPgfName = vPgf.Name;
Set vPgfNameNew = vPgfName;
Loop While(vi <= vPgfFmtLeftPageLst.Count)
      LoopVar(vi) InitVal(1) Incr(1)
    Get Member Number(vi) From(vPgfFmtLeftPageLst)
      NewVar(vPgfFmtLeft);
    Get Member Number(vi) From(vPgfFmtRightPageLst)
      NewVar(vPgfFmtRight);
    If vPgfName = vPgfFmtLeft
      Set vFmtInList = true;
      If vPage.PageIsRecto //-- Right Page
        Set vPgfNameNew = vPgfFmtRight;
      EndIf
      LeaveLoop;
    Else
      If vPgfName = vPgfFmtRight
        Set vFmtInList = true;
        If not vPage.PageIsRecto //-- Left Page
          Set vPgfNameNew = vPgfFmtLeft;
        EndIf
        LeaveLoop;
      EndIf
    EndIf
EndLoop

//-- Only defined PgfFmts?
If vAlignDefinedFmtsOnly
    If not vFmtInList LeaveSub; EndIf
EndIf

//-- Alignment from PgfFmt:
Get Object DocObject(vDoc) Type(PgfFmt)
    Name(vPgf.Name) NewVar(vPgfFmtOld);
Set vPgf.PgfAlignment = vPgfFmtOld.PgfAlignment;

//-- Bad Alignment?
Set vPgfAlign = vPgf.PgfAlignment;
Set vPgfAlignNew = vPgfAlign;
If vPage.PageIsRecto //-- Right Page
    Set vPgfAlignNew = vPgfAlignRightPage
Else //-- Left Page
    Set vPgfAlignNew = vPgfAlignLeftPage
EndIf
//-- Alignment ok?
If vPgfAlignNew = vPgfAlign LeaveSub; EndIf

If vPgfNameNew = vPgfName
    //-- unknown PgfFmt or only bad Alignment:
    //-- Change Alignment only:
    Set vPgf.PgfAlignment = vPgfAlignNew;
Else
    If vPgf.FormatOverride
      //-- change only Alignment and FmtName:
      //-- (Keeping other Overrides)
      Set vPgf.PgfAlignment = vPgfAlignNew;
      Set vPgf.Name = vPgfNameNew;
    Else //-- Align new PgfFmt
      Get Object DocObject(vDoc) Type(PgfFmt)
        Name(vPgfNameNew) NewVar(vPgfNewID);
      Set vPgf.Properties = vPgfNewID.Properties;
    EndIf
EndIf
EndSub

//----------------------
Sub DefineChars
New String IntValue(128) NewVar(vsAe_); //-- UpperAdieresis
New String IntValue(133) NewVar(vsOe_); //-- UpperOdieresis
New String IntValue(134) NewVar(vsUe_); //-- UpperUdieresis
New String IntValue(138) NewVar(vsae); //-- adieresis
New String IntValue(154) NewVar(vsoe); //-- odieresis
New String IntValue(159) NewVar(vsue); //-- udieresis
New String IntValue(167) NewVar(vsss); //-- germandbls
EndSub

//----------------------
Sub GetMenu Using vSLabel Returns vSMenu
local vMenu; local vMenuLabel; local vSLabelU;
Set vSMenu = '';
//-- (First) 'Scripts'-Menu:
Get String FromString(vSLabel) NewVar(vSLabelU)
    ReplaceAll('&') With('') UpperCase;
Loop ForEach(Menu) In(Session) LoopVar(vMenu)
    Get String FromString(vMenu.Label) NewVar(vMenuLabel)
      ReplaceAll('&') With('') UpperCase;
    If vMenuLabel = vSLabelU
      Set vSMenu = vMenu; LeaveLoop;
    EndIf
EndLoop
If not vSMenu
    //-- Menu 'Scripts' in FrameScript-Menu:
    //Set vScriptsMenu = 'ESLMSSMENU';
    Get Object Type(Menu) Name('ESLMSSMENU') NewVar(vSMenu);
EndIf
If not vSMenu
    //-- New Menu 'Scripts' in MainMenu:
    New Menu Label(vSLabel) NewVar(vSMenu)
      Addto('!MakerMainMenu');
EndIf
EndSub

/*
// -----------------------------------------
// AlignSideHeads - Version History
//
// Version 1.2  January 3, 2002
// AlignSideHeads2.fsl
// * Complete Overwork
//
// Version 1.1  September 9, 2001
// Marginalien1.fsl
// * First release of the script.
// -----------------------------------------
*/

   >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

#1801 From: "Rick Quatro" <rquatro@...>
Date: Mon Jan 14, 2002 2:59 pm
Subject: Re: Problems with Event NotePostOpenDoc
frameexpert
Send Email Send Email
 
Eckhard,

Your problem is probably due to the use of Fcodes in your script. Fcodes
require an active, visible document. When documents are open during an
update/generate, they are opened "invisibly" in the background. When your
script tries to fire an Fcode on the invisible documents, it may be causing
the crash.

There is a simple way to prevent a NotePostOpenDoc event from occurring
during an update generate. You need to add two additional events to your
script.

Event NotePreGenerate
   // Set a variable when generating.
   Set vGenerate = 1;
EndEvent

Event NotePostGenerate
   // Turn off the variable when generate is over.
   Set vGenerate = 0;
EndEvent

Event NotePostOpenDoc
   // If the script is in a generate, leave the event.
   // You can put this test just before the problematic section.
   If vGenerate = 1
     LeaveSub;
   EndIf
   ...
EndEvent

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

Hello Scripters,

I've got a bad problem with an event script that's fired after
opening documents. In normal operation everything works fine: The
script makes my document look like I want them to, e.g. hide rulers,
set my favorite zoom factor, etc.
However, since I install this script, FM crashes when I
generate/update certain books. I do not know what's "wrong" with the
book - it uses text insets, lots of cross-refs to other books that
use text insets and have lots of cross-refs etc.

I noticed that I must not execute the script if docs from the FM
install dir are opened (that's the first If statement), the second if
statement attempts to filter documents that would make FM crash for
other reasons - but obviously I missed something important. If I
comment out the section indicated below FM does never crash but when
I include it again I get these mysterious crashes.

Has anybody got an idea which property might provide the clue whether
I can execute the problematic code section or not?


~~~~~~~~

Event NotePostOpenDoc using FrameDoc Filename

// Ensure not to process FM internal files such as the math
palette
Get String FromString(Filename) StartPos(1) EndPos
(FMHomeDir.Count) Uppercase NewVar(vsCheckFilename);
Get String FromString(FMHomeDir) Uppercase NewVar
(vsCheckFMHomeDir);
If vsCheckFilename <> vsCheckFMHomeDir

// Check wether settings can be applied to doc or not

If FrameDoc = True and FrameDoc.Name <> False and
FrameDoc.IsIconified = False and FrameDoc.IsOnScreen = True

// Define View-Settings

Set vmMyZoom = 1.08pts;
Set vsFit = KbdZoomFitWindow;
Set vsPCatalog = False;
Set vsCCatalog = False;
Set vsDCatalog = False;
Set vsECatalog = False;
Set vsRulers = False;
Set vsCondtionalText = False;

// If the following part is executed, FM might crashes during
production of a book

// Default Hide Rulers?
If ViewRulers=0 and vsRulers = 'True'
ViewRulers=1;
EndIf
If ViewRulers=1 and vsRulers = 'False'
ViewRulers=0;
EndIf

If vmMyZoom <> False
Set FrameDoc.Zoom = vmMyZoom;
EndIf
If vsFit = 'KbdZoomFitWindow'
Execute Fc KbdZoomFitWindow;
EndIf
If vsFit = 'KbdZoomFitTextFrame'
Execute Fc KbdZoomFitTextFrame;
EndIf
If vsFit = 'KbdZoomFitPage'
Execute Fc KbdZoomFitPage;
EndIf

If vsCondtionalText = 'True'
Execute FC KbdCondText;
EndIf

If vsPCatalog = 'True'
Execute FC  KbdPgfWin;
EndIf
If vsCCatalog = 'True'
Execute FC  KbdFontWin;
EndIf
If vsDCatalog = 'True'
Execute FC  KbdToolWin;
EndIf
If vsECatalog = 'True'
Execute FC  KbdMathWin;
EndIf
// end of the problematic section

EndIf

EndIf

EndEvent

~~~~~

Thanks a lot for your help!

Regards,

Eckhard Graf

----------
Dipl.-Ing. (FH) Beng (Hons)
Eckhard Graf
Documentation Engineer
dSPACE GmbH
Technologiepark 25 · D-33100 Paderborn · Germany
Tel.: +495251-1638-671
Fax.: +495251-66529
mailto:EGraf@...

#1802 From: "Oleg A. Paraschenko" <olpa@...>
Date: Tue Jan 15, 2002 10:54 am
Subject: FrameScript ODBC module bugs
olpa@...
Send Email Send Email
 
Hello FrameScripters,

    I'm using ElmScript 2.1R2 for FM+SGML version 6.0p405 under
Windows 2000 Professional. I tested ODBC module of ElmScript
and found two errors.

1. Using command
       New EDB Datasource (vUndefined) NewVar (vDb);
     where 'vUndefined' is an undefined variables leads
     to access violation.

2. It seems that I can't assign to property 'CurrFieldName'
     of variable of type EQuery. Assigning to property
     'CurrFieldNum' is working.

    Workaround is possible, but correction of ODBC-module is desired.

    Bye!

----
Oleg



--
----
Oleg Paraschenko olpa@ http://bitplant.de/ - IT Services company
SGML/XML/Content management/WWW/Databases/Win32/Plug-ins/Scripts

#1803 From: "Oleg A. Paraschenko" <olpa@...>
Date: Tue Jan 15, 2002 11:08 am
Subject: custom external objects?
olpa@...
Send Email Send Email
 
Hello FrameScripters,

    I realized that ODBC and system modules are realized as
"external objects" and these modules are contained in
separate .dll-files. So one can extend functionality of
FrameScript developing custom external objects. I am
interesting if I can do it. Is it possible to get somewhere
developer's kit?

    Bye!

----
Oleg


--
----
Oleg Paraschenko olpa@ http://bitplant.de/ - IT Services company
SGML/XML/Content management/WWW/Databases/Win32/Plug-ins/Scripts

#1804 From: Michael Müller-Hillebrand <info@...>
Date: Tue Jan 15, 2002 11:16 am
Subject: Re: FrameScript ODBC module bugs
michaelmh
Send Email Send Email
 
On 15.01.2002 (13:54 Uhr +0300), Oleg A. Paraschenko wrote:

>1. Using command
>       New EDB Datasource (vUndefined) NewVar (vDb);
>     where 'vUndefined' is an undefined variables leads
>     to access violation.

I rather call this a programming mistake.

A real error in the ODBC module (and a problem to folks using other
than real ASCII characters) is the handling of so-called upper-ASCII
characters. The transformation of character data from Windows
encoding into FrameMaker encoding is incomplete and partly wrong.

ElmSoft is aware of this.

- Michael

--
----------------- computer assisted publishing -----------------
Tools for FrameScript/ElmScript users at <http://cap-studio.de>:
    * FrameMaker Objects and Properties Browser
    * FrameScript Syntax Highlighting for UltraEdit

#1805 From: "kenk57" <kenk57@...>
Date: Fri Jan 18, 2002 5:38 pm
Subject: Re: Paragraph Format Override
kenk57@...
Send Email Send Email
 
Hi Klaus,
I tried running this script today and got errors.
FrameScript-Compile Error CODE(-1) Line(1566) Col(1566)
After hitting the OK button:
Missing Script--Aborting

Thought you might like to know since you have been so kind as to
provide this to the public.

Win2K, Frame6, eval version of FrameScript 2.1. New user of
FrameScript.

Ken

--- In framescript-users@y..., Klaus Mueller <mueller23@w...> wrote:
> Hi all,
>
> I enhanced the recently posted script that identifies
> the current pgf format overrides.
>
> The following script creates a report of all pgf
> overrides in a doc or book with hyperlinks to the
> pgfs.
>
> Enjoy,
> Klaus Mueller, Hamburg
>
>
>  >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - -
>
> // PgfOverridesReport1.fsl - Version 1.0
> // Klaus Mueller, Hamburg. December 19, 2001
>
> // Report PgfFormat Overrides
>
> // Check 'Sub Initialization' to adjust.
> // (Un)comment 'Set vIsEnglish = true'
> // (Line 34) to toggle English/German.
>
> Set vDoc = ActiveDoc;
> Set vBook = ActiveBook;
> If not (vDoc or vBook) LeaveSub; EndIf
> If (not vDoc.Name)
>    Display 'Please save NoName Document'; LeaveSub;
> EndIf
> If not vBook.FirstComponentInBook LeaveSub; EndIf
>
>
> Run DefineChars;
> Run Initialization;
> Run InitStrings;
> Run MakeNewDoc;
> Set Displaying = 0;
> If vBook
>    Run GetBookDocs;
> Else
>    Run GetOverrides;
> EndIf
> Run FinishDoc;
>
> //----------------------
> Sub Initialization
>
> Set vIsEnglish = true;
>
> Set vListFont = 'Arial';
> Set vListDocMargin = 5mm;
> Set vPageLayout = 3;
>
> If vPageLayout = 1 //-- Half Screen
>    Set vListDocWidth = 130mm;
>    Set vListDocHeight = 140mm;
>    Set vListDocCols = 2;
>    Set vFontSizeBody = 8;
> EndIf
> If vPageLayout = 2 //-- Small Screen
>    Set vListDocWidth = 223mm;
>    Set vListDocHeight = 140mm;
>    Set vListDocCols = 3;
>    Set vFontSizeBody = 10;
> EndIf
> If vPageLayout = 3 //-- Big Screen
>    Set vListDocWidth = 223mm;
>    Set vListDocHeight = 140mm;
>    Set vListDocCols = 4;
>    Set vFontSizeBody = 8;
> EndIf
> If vPageLayout = 4 //-- Print
>    Set vListDocWidth = 297mm;
>    Set vListDocHeight = 210mm;
>    Set vListDocCols = 4;
>    Set vFontSizeBody = 8;
>    Set vListDocMargin = 10mm;
> EndIf
>
> Set vEmptyString = vsEmDash;
> Set vnl = CHARLF;
> If WindowSystem = 'Macintosh'
>    Set vnl = CHARCR;
> EndIf
>
> EndSub
>
> //----------------------
> Sub MakeNewDoc
> New Document Landscape NewVar(vListDoc)
> Width(vListDocWidth) Height(vListDocHeight)
> NumCols(vListDocCols) ColumnGap(5mm)
> TopMargin(vListDocMargin BottomMargin(vListDocMargin)
> LeftMargin(vListDocMargin) RightMargin(vListDocMargin)
> LeftInsideMargin(vListDocMargin)
> RightOutsideMargin(vListDocMargin);
>
> Run ClearDoc Using vNewDoc(vListDoc);
>
> Set vListDocName = TmpDir+DIRSEP+ vListDocFile;
> Save Document DocObject(vListDoc) File(vListDocName);
>
> Set vListDoc.PDFBookMark = true;
> Set vListDoc.GenerateAcrobatInfo = true;
>
> New Color Name('Background') NewVar(vColBG);
> If (vColBG)
>    Set vColBG.Cyan = 0; Set vColBG.Magenta = 0;
>    Set vColBG.Yellow = 10; Set vColBG.Black  = 0;
>    Set vColBG.ColorPrintCtl = 2;
> EndIf
> New Color Name('Heading1') NewVar(vColHd1);
> If (vColHd1)
>    Set vColHd1.Cyan = 30; Set vColHd1.Magenta = 100;
>    Set vColHd1.Yellow = 80; Set vColHd1.Black  = 5;
> EndIf
> New Color Name('Heading2') NewVar(vColHd2);
> If (vColHd2)
>    Set vColHd2.Cyan = 60; Set vColHd2.Magenta = 35;
>    Set vColHd2.Yellow = 15; Set vColHd2.Black  = 15;
> EndIf
> New Color Name('Small') NewVar(vColSm);
> If (vColSm)
>    Set vColSm.Cyan = 50; Set vColSm.Magenta = 10;
>    Set vColSm.Yellow = 20; Set vColSm.Black  = 30;
> EndIf
>
> Set vMPgFrame = FirstMasterPageInDoc.PageFrame;
> New Rectangle NewVar(vBackground) ParentObject(vMPgFrame)
>    Width(vListDocWidth) Height(vListDocHeight);
> Set vBackground.Fill = 0;
> Set vBackground.TintPercent = 100;
> Set vBackground.Color = vColBG;
>
> Set vHTMrk = 'Hypertext';
> Loop ForEach(MarkerType) In(vListDoc) LoopVar(vMarker)
>    If vMarker.InvariantName = 'Hypertext'
>      Set vHTMrk = vMarker.Name; LeaveLoop;
>    EndIf
> EndLoop
> Get Object Type(MarkerType) Name(vHTMrk) NewVar(vHTMarker);
>
> Run GetFontFamily Using vFont(vListFont) Returns vFontNr(vFNr)
>
> Set vFontSizeHead = vFontSizeBody+1;
> Set vFontSizeSmall = vFontSizeBody-1;
> New ParagraphFormat name('Body') NewVar(vPgfBody);
> Set vPgfBody.FontFamily = vFNr;
> Set vPgfBody.FontSize = vFontSizeBody;
> Set vPgfBody.FontWeight = 0;
> Set vPgfBody.SpaceAbove = 0;
> Set vPgfBody.SpaceBelow = 0;
> Set vPgfBody.LeftIndent = vFontSizeBody;
> Set vPgfBody.PgfAlignment = PgfLeft;
> Set vPgfBody.NextTag = 'Body';
> Set vPgfBody.UseNextTag = 1;
> Set vPgfBody.Hyphenate = 0;
> Set vPgfBody.BlockLines = 3;
> Set vPgfBody.PgfIsAutoNum = 1;
> Set vPgfBody.AutoNumString = vsEnDash+'\t';
> New Tablist NewVar(tblist) Tab(vFontSizeBody) TabType(TabLeft);
> Set vPgfBody.Tabs = tblist;
> Set vPgfBody.AcrobatLevel = 0;
>
> New ParagraphFormat name('Heading1') NewVar(vPgfH1);
> Set vPgfH1.FontFamily = vFNr;
> Set vPgfH1.FontSize = vFontSizeHead+2;
> Set vPgfH1.Color = vColHd1;
> Set vPgfH1.FontWeight = 9;
> Set vPgfH1.SpaceAbove = vFontSizeHead*1.5;
> Set vPgfH1.SpaceBelow = 0;
> Set vPgfH1.LeftIndent = 0pts;
> Set vPgfH1.PgfAlignment = PgfLeft;
> Set vPgfH1.KeepWithNext = 1;
> Set vPgfH1.NextTag = 'Small';
> Set vPgfH1.UseNextTag = 1;
> Set vPgfH1.Hyphenate = 0;
> Set vPgfH1.BlockLines = 3;
> Set vPgfH1.AcrobatLevel = 1;
>
> New ParagraphFormat name('Heading2') NewVar(vPgfH2);
> Set vPgfH2.FontFamily = vFNr;
> Set vPgfH2.FontSize = vFontSizeHead;
> Set vPgfH2.Color = vColHd2;
> Set vPgfH2.Underlining = 3;
> Set vPgfH2.FontWeight = 9;
> Set vPgfH2.SpaceAbove = vFontSizeHead;
> Set vPgfH2.SpaceBelow = 0;
> Set vPgfH2.LeftIndent = 0pts;
> Set vPgfH2.PgfAlignment = PgfLeft;
> Set vPgfH2.KeepWithNext = 1;
> Set vPgfH2.NextTag = 'Small';
> Set vPgfH2.UseNextTag = 1;
> Set vPgfH2.Hyphenate = 0;
> Set vPgfH2.BlockLines = 3;
> Set vPgfH2.AcrobatLevel = 2;
>
> New ParagraphFormat name('Small') NewVar(vPgfSmall);
> Set vPgfSmall.FontFamily = vFNr;
> Set vPgfSmall.FontSize = vFontSizeSmall;
> Set vPgfSmall.Color = vColSm;
> Set vPgfSmall.FontWeight = 1;
> Set vPgfSmall.SpaceAbove = 0;
> Set vPgfSmall.SpaceBelow = 2;
> Set vPgfSmall.LeftIndent = 0pts;
> Set vPgfSmall.PgfAlignment = PgfLeft;
> Set vPgfSmall.KeepWithNext = 1;
> Set vPgfSmall.NextTag = 'Body';
> Set vPgfSmall.UseNextTag = 1;
> Set vPgfSmall.Hyphenate = 1;
> Set vPgfSmall.BlockLines = 3;
> Set vPgfSmall.AcrobatLevel = 0;
>
> Set vPgfL = vListDoc.MainFlowInDoc.FirstPgfInFlow;
> Save Document DocObject(vListDoc) File(vListDocName);
>
> Set ActiveDoc = vDoc;
> EndSub
>
> //----------------------
> Sub FinishDoc
> Set ActiveDoc = vListDoc;
> Set ViewTextSymbols = False; Set ViewRulers = False;
> Set ViewBorders = False; Set ViewGrid = False;
> Execute Fc KbdZoomFitPage;
> //-- No Doc Focus (Hyperlink) w/ visible Pgf/Tab Designer:
> Execute Fc KbdClosePgffmt;
> Execute Fc KbdCloseTblfmt;
> //-- Make Viewer Doc
> Execute Fc KbdViewer; //Ger: !dY
> //Execute Fc ToggleFluidView; //Ger: !Ua
> Set vPgfL = vListDoc.MainFlowInDoc.FirstPgfInFlow;
> Set vPgfB = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> New TextRange NewVar(vTRange) Object(vPgfL)
>    Offset(0) Object(vPgfB) Offset(ObjEndOffset);
> New PropertyList NewVar(vPList) FontFamily(vFNr);
> Apply TextProperties TextRange(vTRange) Properties(vPList);
> Set Displaying = 1; Update Redisplay;
> Save Document DocObject(vListDoc) File(vListDocName);
> EndSub
>
> //----------------------
> Sub GetBookDocs
> Loop ForEach(BookComponent) In(vBook) LoopVar(vBookDoc)
>    Run CheckDocOpen vDocName(vBookDoc.Name)
>      Returns DocObj(vDoc) DocIsOpen;
>    If not vDoc
>      Set ErrorCode = 0;
>      Open Document File(vBookDoc.Name) NewVar(vDoc)
>        FileIsOldVersion(OK) FontNotFoundInDoc(OK)
>        UpdateTextReferences(No) UpdateXRefs(No)
>        RefFileNotFound(AllowAllRefFilesUnFindable)
>        AlertUserAboutFailure(False);
>      If ErrorCode
>        Write Console vBookDoc.Name+ ' could not be opened.';
>      EndIf
>    EndIf
>    If vDoc
>      Run GetOverrides;
>      If not DocIsOpen
>        Close Document DocObject(vDoc) IgnoreMods;
>      EndIf
>    EndIf
> EndLoop
> EndSub
>
> //----------------------
> Sub CheckDocOpen Using vDocName Returns DocObj DocIsOpen
> Get String FromString(vDocName) Uppercase NewVar(vDocNameU);
> Set DocObj = 0; Set DocIsOpen = false;
> Loop ForEach(Doc) In(Session) LoopVar(vSessionDoc)
>    Get String FromString (vSessionDoc.Name) Uppercase NewVar
(vSessionDocU);
>    If vSessionDocU = vDocNameU
>      Set DocObj = vSessionDoc;
>      Set DocIsOpen = true;
>      LeaveLoop;
>    EndIf
> EndLoop
> EndSub
>
> //----------------------
> Sub GetOverrides
> Set vDocName = vDoc.Name;
> If fslVersionMajor*10+fslVersionMinor >= 21
>    //Set vIsFS21 = true;
> EndIf
> If vIsFS21
>    New EFileInfo NewVar(vEfivDoc) FileName(vDocName);
>    Set vPathName = vEfivDoc.FileRoot;
>    Set vFileExt = vEfivDoc.FileName;
>    Delete Object(vEfivDoc);
> Else
>    Run ParseDocName;
> EndIf
>
> Set vPgfA = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> New Text Object(vPgfA) vFileExt;
> Set vPgfA.Properties = vPgfH1.Properties;
> New Paragraph NewVar(vPgfB) PrevObject(vPgfA);
>
> Set vPgfB.Properties = vPgfSmall.Properties;
> Set vPgfSummary = vPgfB;
> New Paragraph NewVar(vPgfC) PrevObject(vPgfB);
>
> Set ActiveDoc = vDoc;
> Set vFlow = vDoc.FirstFlowInDoc;
> Set vPgfFlow = vFlow.FirstTextFrameInFlow.FirstPgf;
> Set vCountOR = 0; Set vCountPgf = 0;
> Loop While(vFlow)
>    Loop While(vPgfFlow)
>      If vPgfFlow.Page.ObjectName = 'BodyPage'
>        Run ProcessPgf;
>      EndIf
>      Set vPgfFlow = vPgfFlow.NextPgfInFlow;
>    EndLoop
>    Set vFlow = vFlow.NextFlowInDoc;
>    If vFlow
>      Set vPgfFlow = vFlow.FirstTextFrameInFlow.FirstPgf;
>    EndIf
> EndLoop
> New Text Object(vPgfSummary) vFmtOverrides +': '
>    +vCountOR +vsTSpace+'/'+vsTSpace +vCountPgf+' '+vPgfSs;
> EndSub
>
> //----------------------
> Sub ProcessPgf
> //-- 'NextPgfInFlow' skips Tables and Footnotes
> Set vPgf = vPgfFlow;
> Run CheckOverride; //**
> Get TextList InObject(vPgf) NewVar(vTlistA) TblAnchor FnAnchor;
> Loop While (x <= vTlistA.Count) LoopVar(x) Init(1) Incr(1)
>    Get Member Number(x) From(vTlistA) NewVar(vAnchor);
>    If vAnchor.TextType = 'TblAnchor';
>      Set vTbl = vAnchor.TextData;
>      Set vCell = vTbl.FirstRowInTbl.FirstCellInRow;
>      Loop While(vCell)
>        Set vPgfCell = vCell.FirstPgf;
>          Loop While(vPgfCell)
>            Set vPgf = vPgfCell;
>            Run CheckOverride; //**
>            Set vPgfCell = vPgfCell.NextPgfInFlow;
>          EndLoop
>        Set vCell = vCell.NextCellInTbl;
>      EndLoop
>    else
>      Set vFn = vAnchor.TextData;
>      Set vPgfFn = vFn.FirstPgf;
>      Loop While(vPgfFn)
>        Set vPgf = vPgfFn;
>        Run CheckOverride; //**
>        Set vPgfFn = vPgfFn.NextPgfInFlow;
>      EndLoop
>    EndIf
> EndLoop
> EndSub
>
> //----------------------
> Sub CheckOverride
> Set vCountPgf = vCountPgf + 1;
> Get Object Type(PgfFmt) Name(vPgf.Name) NewVar(vPgfFmt);
> Run ComparePgfProps vObj1(vPgf) vObj2(vPgfFmt);
> If vPgf.FormatOverride
>
>    set vCountOR = vCountOR + 1;
>    Get String FromString(vMsg) NewVar(vMsg) RemoveTrailing(CHARCR);
>    Get String FromString(vMsg) NewVar(vMsg) RemoveTrailing(CHARLF);
>
>    Set vPgfA = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
>    New Text Object(vPgfA) 'Seite '+ vPgf.Page.PageNumString
> +'  ('+vPgf.Name+'):';
>    Set vPgfA.Properties = vPgfH2.Properties;
>    Set vHL = 'openObjectId ' +vDoc.Name+ ':2 '+ vPgf.Unique;
>    New TextLoc NewVar(vTLoc) Object(vPgfA) Offset(ObjEndOffset - 1);
>    New Marker NewVar(vMarker) MarkerText(vHL)
>      MarkerTypeId(vHTMarker) TextLoc(vTLoc);
>
>    New Paragraph NewVar(vPgfB) PrevObject(vPgfA);
>    Set vPgfB.Properties = vPgfSmall.Properties;
>    New Text Object(vPgfB) vFileExt;
>
>    New Paragraph NewVar(vPgfC) PrevObject(vPgfB);
>    Set vPgfC.Properties = vPgfBody.Properties;
>    New Text Object(vPgfC) vMsg;
>
>    Set vPgfD = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
>    New Paragraph NewVar(vPgfE) PrevObject(vPgfD);
>    Set vPgfE.Properties = vPgfH2.Properties;
>
> EndIf
> EndSub
>
> //----------------------
> Sub ComparePgfProps vObj1 vObj2
> Set vMsg = '';
>
> If not vObj2
>    Set vMsg = 'Format '+quote+vObj1.Name+quote+' '+vIsNotDefined;
>    LeaveSub;
> EndIf
>
> If not vPgf.FormatOverride
>    Set vMsg = vNoFmtOverride;
>    LeaveSub;
> EndIf
>
> //-- BASIC / BASIS --
> If vObj1.FirstIndent not= vObj2.FirstIndent
>    Run Points2cm Using vPoints(vObj1.FirstIndent)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.FirstIndent)
>      Returns vCm(vObj2Cm);
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = vObj1.FirstIndent/72*2.54;
>      Set vObj2Cm = vObj2.FirstIndent/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vFirstIndent +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> EndIf
> If vObj1.LeftIndent not= vObj2.LeftIndent
>    Run Points2cm Using vPoints(vObj1.LeftIndent)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.LeftIndent)
>      Returns vCm(vObj2Cm);
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = vObj1.LeftIndent/72*2.54;
>      Set vObj2Cm = vObj2.LeftIndent/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vLeftIndent +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> EndIf
> If vObj1.RightIndent not= vObj2.RightIndent
>    Run Points2cm Using vPoints(vObj1.RightIndent)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.RightIndent)
>      Returns vCm(vObj2Cm);
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = vObj1.RightIndent/72*2.54;
>      Set vObj2Cm = vObj2.RightIndent/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vRightIndent +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> EndIf
> If vObj1.SpaceAbove not= vObj2.SpaceAbove
>    Run Points2cm Using vPoints(vObj1.SpaceAbove)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.SpaceAbove)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.SpaceAbove)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.SpaceAbove)
>      Returns vPts(vObj2Pts);
>    //-- Centimeter only:
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = vObj1.SpaceAbove/72*2.54;
>      Set vObj2Cm = vObj2.SpaceAbove/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
>    //-- Points only:
>    //Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Pts
>    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
>    //-- Centimeter/Points:
>    //Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Cm +nbs+'cm / '+
vObj1Pts
>    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> EndIf
> If vObj1.SpaceBelow not= vObj2.SpaceBelow
>    Run Points2cm Using vPoints(vObj1.SpaceBelow)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.SpaceBelow)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.SpaceBelow)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.SpaceBelow)
>      Returns vPts(vObj2Pts);
>    //-- Centimeter only:
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = vObj1.SpaceBelow/72*2.54;
>      Set vObj2Cm = vObj2.SpaceBelow/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
>    //-- Points only:
>    //Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Pts
>    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
>    //-- Centimeter/Points:
>    //Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Cm +nbs+'cm / '+
vObj1Pts
>    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> EndIf
> If vObj1.Leading not= vObj2.Leading
>    Run Points2cm Using vPoints(vObj1.Leading+vObj1.FontSize)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.Leading+vObj2.FontSize)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.Leading+vObj1.FontSize)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.Leading+vObj2.FontSize)
>      Returns vPts(vObj2Pts);
>    //-- Centimeter only:
>    If vObj1Cm = vObj2Cm
>      Set vObj1Cm = (vObj1.Leading+vObj1.FontSize)/72*2.54;
>      Set vObj2Cm = (vObj2.Leading+vObj2.FontSize)/72*2.54;
>    EndIf
>    Set vMsg=vMsg+ vLeading +':  '+ vObj1Cm
>      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
>    //-- Points only:
>    //Set vMsg=vMsg+ vLeading +':  '+ vObj1Pts
>    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
>    //-- Centimeter/Points:
>    //Set vMsg=vMsg+ vLeading +':  '+ vObj1Cm +nbs+'cm / '+ vObj1Pts
>    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> EndIf
> If vObj1.LineSpacing not= vObj2.LineSpacing
>    //-- *** Dialog: Boolean!?
>    Run GetLineSpacing Using vLSpacing(vObj1.LineSpacing)
>      Returns vLSpacingString(vLSpace1);
>    Run GetLineSpacing Using vLSpacing(vObj2.LineSpacing)
>      Returns vLSpacingString(vLSpace2);
>    Set vMsg=vMsg+ vLineSpacing +':  '+ vLSpace1
>      +'  ('+vLSpace2+')' +vnl;
> EndIf
> If vObj1.PgfAlignment not= vObj2.PgfAlignment
>    Run GetAlignment Using vAlign(vObj1.PgfAlignment)
>      Returns vAlignString(vAlign1);
>    Run GetAlignment Using vAlign(vObj2.PgfAlignment)
>      Returns vAlignString(vAlign2);
>    Set vMsg=vMsg+ vAlignment +':  '+ vAlign1 +'  ('+vAlign2+')'
+vnl;
> EndIf
> If vObj1.NumTabs not= vObj2.NumTabs
>    Set vMsg=vMsg+ vNumTabs +':  '+ vObj1.NumTabs
>      +'  ('+vObj2.NumTabs+')' +vnl;
> EndIf
> New String NewVar(vTab1) Value(vObj1.Tabs);
> New String NewVar(vTab2) Value(vObj2.Tabs);
> If vTab1 not= vTab2
>    Set vMsg=vMsg+ vTabs +vnl;
> EndIf
> If vObj1.UseNextTag not= vObj2.UseNextTag
>    Run GetBoolean Using vBool(vObj1.UseNextTag)
>      Returns vBoolString(vBool1);
>    Run GetBoolean Using vBool(vObj2.UseNextTag)
>      Returns vBoolString(vBool2);
>    Set vMsg=vMsg+ vUseNextTag +':  '+ vBool1 +'  ('+vBool2+')' +vnl;
> EndIf
> If vObj1.NextTag not= vObj2.NextTag
>    Run GetString Using vString(vObj1.NextTag)
>      Returns vStringD(vString1);
>    Run GetString Using vString(vObj2.NextTag)
>      Returns vStringD(vString2);
>    Set vMsg=vMsg+ vNextTag +':  '+ vString1 +'  ('+vString2+')'
+vnl;
> EndIf
>
> //-- DEFAULT FONT / STANDARDSCHRIFT --
> If vObj1.FontFamily not= vObj2.FontFamily
>    Get Member Number(vObj1.FontFamily+1)
>      From(FontFamilyNames) NewVar(vFont1);
>    Get Member Number(vObj2.FontFamily+1)
>      From(FontFamilyNames) NewVar(vFont2);
>    Set vMsg=vMsg+ vFontFamily +':  '+ vFont1 +'  ('+vFont2+')' +vnl;
> EndIf
> If vObj1.FontSize not= vObj2.FontSize
>    Run FixPoints Using vPoints(vObj1.FontSize)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.FontSize)
>      Returns vPts(vObj2Pts);
>    Set vMsg=vMsg+ vFontSize +':  '+ vObj1Pts
>      +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
> EndIf
> If vObj1.FontAngle not= vObj2.FontAngle
>    Get Member Number(vObj1.FontAngle+1)
>      From(FontAngleNames) NewVar(vAngle1);
>    Get Member Number(vObj2.FontAngle+1)
>      From(FontAngleNames) NewVar(vAngle2);
>    If vObj1.FontAngle = 1 or vObj2.FontAngle = 1
>      //-- (skip italic/oblique differences)
>      Set vMsg=vMsg+ vFontAngle +':  '+ vAngle1
>        +'  ('+vAngle2+')' +vnl;
>    Endif
> EndIf
> If vObj1.FontWeight not= vObj2.FontWeight
>    Get Member Number(vObj1.FontWeight+1)
>      From(FontWeightNames) NewVar(vWeight1);
>    Get Member Number(vObj2.FontWeight+1)
>      From(FontWeightNames) NewVar(vWeight2);
>    //If (vObj1.FontWeight <= 6 and vObj2.FontWeight > 6)
>    //  or (vObj1.FontWeight > 6 and vObj2.FontWeight <= 6)
>    //-- (skip bold/semibold differences - not)
>      Set vMsg=vMsg+ vFontWeight +':  '+ vWeight1
>        +'  ('+vWeight2+')' +vnl;
>    //Endif
> EndIf
> If vObj1.FontVariation not= vObj2.FontVariation
>    Get Member Number(vObj1.FontVariation+1)
>      From(FontVariationNames) NewVar(vVar1);
>    Get Member Number(vObj2.FontVariation+1)
>      From(FontVariationNames) NewVar(vVar2);
>    Set vMsg=vMsg+ vFontVariation +':  '+ vVar1
>      +'  ('+vVar2+')' +vnl;
> EndIf
> If vObj1.Color not= vObj2.Color
>    Set vColor1 = vObj1.Color.Name;
>    Set vColor2 = vObj2.Color.Name;
>    Set vMsg=vMsg+ vFontColor +':  '+ vColor1
>      +'  ('+vColor2+')' +vnl;
> EndIf
> If vObj1.Spread not= vObj2.Spread
>    Run PerCent2String using vPerCentV(vObj1.Spread)
>      returns vPerCentS(vSpread1);
>    Run PerCent2String using vPerCentV(vObj2.Spread)
>      returns vPerCentS(vSpread2);
>    Set vMsg=vMsg+ vFontSpread +':  '+ vSpread1
>      +'  ('+vSpread2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.Stretch not= vObj2.Stretch
>    Run PerCent2String using vPerCentV(vObj1.Stretch)
>      returns vPerCentS(vStretch1);
>    Run PerCent2String using vPerCentV(vObj2.Stretch)
>      returns vPerCentS(vStretch2);
>    Set vMsg=vMsg+ vFontStretch +':  '+ vStretch1
>      +'  ('+vStretch2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.Language not= vObj2.Language
>    Run GetLanguage using vLID(vObj1.Language)
>      returns vLStr(vLang1)
>    Run GetLanguage using vLID(vObj2.Language)
>      returns vLStr(vLang2)
>    Set vMsg=vMsg+ vLanguage +':  '+ vLang1
>      +'  ('+vLang2+')' +vnl;
> EndIf
> If vObj1.Underlining not= vObj2.Underlining
>    Run GetUnderline Using vUL(vObj1.Underlining)
>      Returns vULString(vUL1);
>    Run GetUnderline Using vUL(vObj2.Underlining)
>      Returns vULString(vUL2);
>    Set vMsg=vMsg+ vUnderlining +':  '+ vUL1 +'  ('+vUL2+')' +vnl;
> EndIf
> If vObj1.Overline not= vObj2.Overline
>    Run GetBoolean Using vBool(vObj1.Overline)
>      Returns vBoolString(vOL1);
>    Run GetBoolean Using vBool(vObj2.Overline)
>      Returns vBoolString(vOL2);
>    Set vMsg=vMsg+ vOverline +':  '+ vOL1 +'  ('+vOL2+')' +vnl;
> EndIf
> If vObj1.Strikethrough not= vObj2.Strikethrough
>    Run GetBoolean Using vBool(vObj1.Strikethrough)
>      Returns vBoolString(vST1);
>    Run GetBoolean Using vBool(vObj2.Strikethrough)
>      Returns vBoolString(vST2);
>    Set vMsg=vMsg+ vStrikethrough +':  '+ vST1 +'  ('+vST2+')' +vnl;
> EndIf
> If vObj1.ChangeBar not= vObj2.ChangeBar
>    Run GetBoolean Using vBool(vObj1.ChangeBar)
>      Returns vBoolString(vCB1);
>    Run GetBoolean Using vBool(vObj2.ChangeBar)
>      Returns vBoolString(vCB2);
>    Set vMsg=vMsg+ vChangeBar +':  '+ vCB1 +'  ('+vCB2+')' +vnl;
> EndIf
> If vObj1.Position not= vObj2.Position
>    Run GetPosition Using vPos(vObj1.Position)
>      Returns vPosString(vPos1);
>    Run GetPosition Using vPos(vObj2.Position)
>      Returns vPosString(vPos2);
>    Set vMsg=vMsg+ vPosition +':  '+ vPos1 +'  ('+vPos2+')' +vnl;
> EndIf
> If vObj1.Capitalization not= vObj2.Capitalization
>    Run GetCapital Using vCap(vObj1.Capitalization)
>      Returns vCapString(vCap1);
>    Run GetCapital Using vCap(vObj2.Capitalization)
>      Returns vCapString(vCap2);
>    Set vMsg=vMsg+ vCapitalization +':  '+ vCap1 +'  ('+vCap2+')'
+vnl;
> EndIf
> If vObj1.PairKern not= vObj2.PairKern
>    Run GetBoolean Using vBool(vObj1.PairKern)
>      Returns vBoolString(vPK1);
>    Run GetBoolean Using vBool(vObj2.PairKern)
>      Returns vBoolString(vPK2);
>    Set vMsg=vMsg+ vPairKern +':  '+ vPK1 +'  ('+vPK2+')' +vnl;
> EndIf
> If vObj1.Outline not= vObj2.Outline
>    Run GetBoolean Using vBool(vObj1.Outline)
>      Returns vBoolString(vOtl1);
>    Run GetBoolean Using vBool(vObj2.Outline)
>      Returns vBoolString(vOtl2);
>    Set vMsg=vMsg+ vOutline +':  '+ vOtl1 +'  ('+vOtl2+')' +vnl;
> EndIf
> If vObj1.Shadow not= vObj2.Shadow
>    Run GetBoolean Using vBool(vObj1.Shadow)
>      Returns vBoolString(vShad1);
>    Run GetBoolean Using vBool(vObj2.Shadow)
>      Returns vBoolString(vShad2);
>    Set vMsg=vMsg+ vShadow +':  '+ vShad1 +'  ('+vShad2+')' +vnl;
> EndIf
>
> //-- PAGINATION / SEITENUMBRUCH --
> If vObj1.Start not= vObj2.Start
>    Run GetStart Using vStrt(vObj1.Start)
>      Returns vStrtString(vStart1);
>    Run GetStart Using vStrt(vObj2.Start)
>      Returns vStrtString(vStart2);
>    Set vMsg=vMsg+ vStart +':  '+ vStart1 +'  ('+vStart2+')' +vnl;
> EndIf
> If vObj1.KeepWithNext not= vObj2.KeepWithNext
>    Run GetBoolean Using vBool(vObj1.KeepWithNext)
>      Returns vBoolString(vKeep1a);
>    Run GetBoolean Using vBool(vObj2.KeepWithNext)
>      Returns vBoolString(vKeep2a);
>    Set vMsg=vMsg+ vKeepWithNext +':  '+ vKeep1a
>      +'  ('+vKeep2a+')' +vnl;
> EndIf
> If vObj1.KeepWithPrev not= vObj2.KeepWithPrev
>    Run GetBoolean Using vBool(vObj1.KeepWithPrev)
>      Returns vBoolString(vKeep1b);
>    Run GetBoolean Using vBool(vObj2.KeepWithPrev)
>      Returns vBoolString(vKeep2b);
>    Set vMsg=vMsg+ vKeepWithPrev +':  '+ vKeep1b
>      +'  ('+vKeep2b+')' +vnl;
> EndIf
> If vObj1.BlockLines not= vObj2.BlockLines
>    Set vMsg=vMsg+ vBlockLines +':  '+ vObj1.BlockLines
>      +'  ('+vObj2.BlockLines+')' +vnl;
> EndIf
> Set RunInSep1 = '['+ vObj1.RunInSeparator +']';
> Set RunInSep2 = '['+ vObj2.RunInSeparator +']';
> If vObj1.RunInSeparator not= vObj2.RunInSeparator
>    If vObj1.Placement = vObj2.Placement
>      Set vMsg=vMsg+ vPlacement +':  '+ vPlaceRunIn
>        +':  '+ RunInSep1 +'  ('+RunInSep2+')' +vnl;
>    EndIf
> EndIf
> If vObj1.Placement not= vObj2.Placement
>    Run GetPlacement Using vPlace(vObj1.Placement)
>      vRIS(RunInSep1) vFirst(1) Returns vPlaceString(vPlace1);
>    Run GetPlacement Using vPlace(vObj2.Placement)
>      vRIS(RunInSep2) vFirst(0) Returns vPlaceString(vPlace2);
>    Set vMsg=vMsg+ vPlacement +':  '+ vPlace1 +'  ('+vPlace2+')'
+vnl;
> EndIf
>
> //-- NUMBERING / NUMERIERUNG --
> If vObj1.PgfIsAutoNum not= vObj2.PgfIsAutoNum
>    Run GetBoolean Using vBool(vObj1.PgfIsAutoNum)
>      Returns vBoolString(vAN1);
>    Run GetBoolean Using vBool(vObj2.PgfIsAutoNum)
>      Returns vBoolString(vAN2);
>    Set vMsg=vMsg+ vPgfIsAutoNum +':  '+ vAN1 +'  ('+vAN2+')' +vnl;
> EndIf
> If vObj1.AutoNumString not= vObj2.AutoNumString
>    Run GetString Using vString(vObj1.AutoNumString)
>      Returns vStringD(vANS1);
>    Run GetString Using vString(vObj2.AutoNumString)
>      Returns vStringD(vANS2);
>    Set vMsg=vMsg+ vAutoNumString +':  '+ vANS1 +'  ('+vANS2+')'
+vnl;
> EndIf
> If vObj1.AutoNumChar not= vObj2.AutoNumChar
>    Run GetString Using vString(vObj1.AutoNumChar)
>      Returns vStringD(vANC1);
>    Run GetString Using vString(vObj2.AutoNumChar)
>      Returns vStringD(vANC2);
>    Set vMsg=vMsg+ vAutoNumChar +':  '+ vANC1 +'  ('+vANC2+')' +vnl;
> EndIf
> If vObj1.NumAtEnd not= vObj2.NumAtEnd
>    Run GetAutoNumPos Using vNumAtEnd(vObj1.NumAtEnd)
>      Returns vANPosString(vANP1);
>    Run GetAutoNumPos Using vNumAtEnd(vObj2.NumAtEnd)
>      Returns vANPosString(vANP2);
>    Set vMsg=vMsg+ vAutoNumPos +':  '+ vANP1 +'  ('+vANP2+')' +vnl;
> EndIf
>
> //-- ADVANCED / EXTRA --
> If vObj1.AdjHyphens not= vObj2.AdjHyphens
>    Set vMsg=vMsg+ vAdjHyphens +':  '+ vObj1.AdjHyphens
>      +'  ('+vObj2.AdjHyphens+')' +vnl;
> EndIf
> If vObj1.HyphMinWord not= vObj2.HyphMinWord
>    Set vMsg=vMsg+ vHyphMinWord +':  '+ vObj1.HyphMinWord
>      +'  ('+vObj2.HyphMinWord+')' +vnl;
> EndIf
> If vObj1.HyphMinPrefix not= vObj2.HyphMinPrefix
>    Set vMsg=vMsg+ vHyphMinPrefix +':  '+ vObj1.HyphMinPrefix
>      +'  ('+vObj2.HyphMinPrefix+')' +vnl;
> EndIf
> If vObj1.HyphMinSuffix not= vObj2.HyphMinSuffix
>    Set vMsg=vMsg+ vHyphMinSuffix +':  '+ vObj1.HyphMinSuffix
>      +'  ('+vObj2.HyphMinSuffix+')' +vnl;
> EndIf
> If vObj1.Hyphenate not= vObj2.Hyphenate
>    Run GetBoolean Using vBool(vObj1.Hyphenate)
>      Returns vBoolString(vHyph1);
>    Run GetBoolean Using vBool(vObj2.Hyphenate)
>      Returns vBoolString(vHyph2);
>    Set vMsg=vMsg+ vHyphenate +':  '+ vHyph1 +'  ('+vHyph2+')' +vnl;
> EndIf
> If vObj1.MinSpace not= vObj2.MinSpace
>    Run PerCent2String using vPerCentV(vObj1.MinSpace)
>      returns vPerCentS(vMinSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MinSpace)
>      returns vPerCentS(vMinSpace2);
>    Set vMsg=vMsg+ vMinSpace +':  '+ vMinSpace1
>      +'  ('+vMinSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.MaxSpace not= vObj2.MaxSpace
>    Run PerCent2String using vPerCentV(vObj1.MaxSpace)
>      returns vPerCentS(vMaxSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MaxSpace)
>      returns vPerCentS(vMaxSpace2);
>    Set vMsg=vMsg+ vMaxSpace +':  '+ vMaxSpace1
>      +'  ('+vMaxSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.OptSpace not= vObj2.OptSpace
>    Run PerCent2String using vPerCentV(vObj1.OptSpace)
>      returns vPerCentS(vOptSpace1);
>    Run PerCent2String using vPerCentV(vObj2.OptSpace)
>      returns vPerCentS(vOptSpace2);
>    Set vMsg=vMsg+ vOptSpace +':  '+ vOptSpace1
>      +'  ('+vOptSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.LetterSpace not= vObj2.LetterSpace
>    Run GetBoolean Using vBool(vObj1.LetterSpace)
>      Returns vBoolString(vLSp1);
>    Run GetBoolean Using vBool(vObj2.LetterSpace)
>      Returns vBoolString(vLSp2);
>    Set vMsg=vMsg+ vLetterSpace +':  '+ vLSp1 +'  ('+vLSp2+')' +vnl;
> EndIf
> If vObj1.TopSeparator not= vObj2.TopSeparator
>    Run GetString Using vString(vObj1.TopSeparator)
>      Returns vStringD(vSepTop1);
>    Run GetString Using vString(vObj2.TopSeparator)
>      Returns vStringD(vSepTop2);
>    Set vMsg=vMsg+ vTopSeparator +':  '+ vSepTop1
>      +'  ('+vSepTop2+')' +vnl;
> EndIf
> If vObj1.BottomSeparator not= vObj2.BottomSeparator
>    Run GetString Using vString(vObj1.BottomSeparator)
>      Returns vStringD(vSepBot1);
>    Run GetString Using vString(vObj2.BottomSeparator)
>      Returns vStringD(vSepBot2);
>    Set vMsg=vMsg+ vBottomSeparator +':  '+ vSepBot1
>      +'  ('+vSepBot2+')' +vnl;
> EndIf
>
> //-- TABLE CELL / ZELLE --
> If vObj1.CellVAlignment not= vObj2.CellVAlignment
>    Run GetCellVAlign Using vCellVA(vObj1.CellVAlignment)
>      Returns vCellVAString(vCA1);
>    Run GetCellVAlign Using vCellVA(vObj2.CellVAlignment)
>      Returns vCellVAString(vCA2);
>    Set vMsg=vMsg+ vCellVAlignment +':  '+ vCA1 +'  ('+vCA2+')' +vnl;
> EndIf
>
> Set vCMF1 = vObj1.CellMarginsFixed;
> Set vCMF2 = vObj2.CellMarginsFixed;
>
> Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> If vCMF1 - PgfFixedTMargin >= 0
>    Set vCTF1 = vCellMarginFixed;
>    Set vCMF1 = vCMF1 - PgfFixedTMargin;
> EndIf
> If vCMF2 - PgfFixedTMargin >= 0
>    Set vCTF2 = vCellMarginFixed;
>    Set vCMF2 = vCMF2 - PgfFixedTMargin;
> EndIf
> If vObj1.CellTopMargin not= vObj2.CellTopMargin
>      or vCTF1 not= vCTF2
>    Run Points2cm Using vPoints(vObj1.CellTopMargin)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.CellTopMargin)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.CellTopMargin)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.CellTopMargin)
>      Returns vPts(vObj2Pts);
>    If vCTF2 = vCTF1
>      Set vCTF2 = '';
>    Else
>      Set vCTF2 = vDash+vCTF2;
>    EndIf
>    //-- Centimeter:
>    Set vMsg=vMsg+ vCellTopMargin +' ('+ vCTF1 +'):  '
>      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
>    //-- Points:
>    //Set vMsg=vMsg+ vCellTopMargin +' ('+ vCTF1 +'):  '
>    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> EndIf
>
> Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> If vCMF1 - PgfFixedRMargin >= 0
>    Set vCTF1 = vCellMarginFixed;
>    Set vCMF1 = vCMF1 - PgfFixedRMargin;
> EndIf
> If vCMF2 - PgfFixedRMargin >= 0
>    Set vCTF2 = vCellMarginFixed;
>    Set vCMF2 = vCMF2 - PgfFixedRMargin;
> EndIf
> If vObj1.CellRightMargin not= vObj2.CellRightMargin
>      or vCTF1 not= vCTF2
>    Run Points2cm Using vPoints(vObj1.CellRightMargin)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.CellRightMargin)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.CellRightMargin)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.CellRightMargin)
>      Returns vPts(vObj2Pts);
>    If vCTF2 = vCTF1
>      Set vCTF2 = '';
>    Else
>      Set vCTF2 = vDash+vCTF2;
>    EndIf
>    //-- Centimeter:
>    Set vMsg=vMsg+ vCellRightMargin +' ('+ vCTF1 +'):  '
>      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
>    //-- Points:
>    //Set vMsg=vMsg+ vCellRightMargin +' ('+ vCTF1 +'):  '
>    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> EndIf
>
> Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> If vCMF1 - PgfFixedBMargin >= 0
>    Set vCTF1 = vCellMarginFixed;
>    Set vCMF1 = vCMF1 - PgfFixedBMargin;
> EndIf
> If vCMF2 - PgfFixedBMargin >= 0
>    Set vCTF2 = vCellMarginFixed;
>    Set vCMF2 = vCMF2 - PgfFixedBMargin;
> EndIf
> If vObj1.CellBottomMargin not= vObj2.CellBottomMargin
>      or vCTF1 not= vCTF2
>    If vCTF2 = vCTF1
>      Set vCTF2 = '';
>    Else
>      Set vCTF2 = vDash+vCTF2;
>    EndIf
>    Run Points2cm Using vPoints(vObj1.CellBottomMargin)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.CellBottomMargin)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.CellBottomMargin)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.CellBottomMargin)
>      Returns vPts(vObj2Pts);
>    //-- Centimeter:
>    Set vMsg=vMsg+ vCellBottomMargin +' ('+ vCTF1 +'):  '
>      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
>    //-- Points:
>    //Set vMsg=vMsg+ vCellBottomMargin +' ('+ vCTF1 +'):  '
>    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> EndIf
>
> Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> If vCMF1 - PgfFixedLMargin >= 0
>    Set vCTF1 = vCellMarginFixed;
>    Set vCMF1 = vCMF1 - PgfFixedLMargin;
> EndIf
> If vCMF2 - PgfFixedLMargin >= 0
>    Set vCTF2 = vCellMarginFixed;
>    Set vCMF2 = vCMF2 - PgfFixedLMargin;
> EndIf
> If vObj1.CellLeftMargin not= vObj2.CellLeftMargin
>      or vCTF1 not= vCTF2
>    If vCTF2 = vCTF1
>      Set vCTF2 = '';
>    Else
>      Set vCTF2 = vDash+vCTF2;
>    EndIf
>    Run Points2cm Using vPoints(vObj1.CellLeftMargin)
>      Returns vCm(vObj1Cm);
>    Run Points2cm Using vPoints(vObj2.CellLeftMargin)
>      Returns vCm(vObj2Cm);
>    Run FixPoints Using vPoints(vObj1.CellLeftMargin)
>      Returns vPts(vObj1Pts);
>    Run FixPoints Using vPoints(vObj2.CellLeftMargin)
>      Returns vPts(vObj2Pts);
>    //-- Centimeter:
>    Set vMsg=vMsg+ vCellLeftMargin +' ('+ vCTF1 +'):  '
>      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
>    //-- Points:
>    //Set vMsg=vMsg+ vCellLeftMargin +' ('+ vCTF1 +'):  '
>    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> EndIf
> //-------
> If vObj1.KernX not= vObj2.KernX
>    Run FixPoints Using vPoints(vObj1.KernX) Returns vPts(vKernX1);
>    Run FixPoints Using vPoints(vObj2.KernX) Returns vPts(vKernX2);
>    Set vMsg=vMsg+ vKernX +':  '+ vKernX1 +'  ('+vKernX2+') '
>      +vemspace +vnl;
> EndIf
> If vObj1.KernY not= vObj2.KernY
>    Run FixPoints Using vPoints(vObj1.KernY) Returns vPts(vKernY1);
>    Run FixPoints Using vPoints(vObj2.KernY) Returns vPts(vKernY2);
>    Set vMsg=vMsg+ vKernY +':  '+ vKernY1 +'  ('+vKernY2+') '
>      +vemspace +vnl;
> EndIf
> //-------
> /*
> //-- only relevant at pgffmt level,
> //-- change of pgf.AcrobatLevel does not set override flag
> If vObj1.AcrobatLevel not= vObj2.AcrobatLevel
>    Set vMsg=vMsg+ vAcrobatLevel +':  '+ vObj1.AcrobatLevel
>      +'  ('+vObj2.AcrobatLevel+')' +vnl;
> EndIf
> If vObj1.PDFStructureLevel not= vObj2.PDFStructureLevel
>    Set vMsg=vMsg+ vPDFStructureLevel +':  '+ vObj1.PDFStructureLevel
>      +'  ('+vObj2.PDFStructureLevel+')' +vnl;
> EndIf
> */
> //-------
> If vObj1.MinJRomSpace not= vObj2.MinJRomSpace
>    Run PerCent2String using vPerCentV(vObj1.MinJRomSpace)
>      returns vPerCentS(vMinJRomSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MinJRomSpace)
>      returns vPerCentS(vMinJRomSpace2);
>    Set vMsg=vMsg+ vMinJRomSpace +':  '+ vMinJRomSpace1
>      +'  ('+vMinJRomSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.MaxJRomSpace not= vObj2.MaxJRomSpace
>    Run PerCent2String using vPerCentV(vObj1.MaxJRomSpace)
>      returns vPerCentS(vMaxJRomSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MaxJRomSpace)
>      returns vPerCentS(vMaxJRomSpace2);
>    Set vMsg=vMsg+ vMaxJRomSpace +':  '+ vMaxJRomSpace1
>      +'  ('+vMaxJRomSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.OptJRomSpace not= vObj2.OptJRomSpace
>    Run PerCent2String using vPerCentV(vObj1.OptJRomSpace)
>      returns vPerCentS(vOptJRomSpace1);
>    Run PerCent2String using vPerCentV(vObj2.OptJRomSpace)
>      returns vPerCentS(vOptJRomSpace2);
>    Set vMsg=vMsg+ vOptJRomSpace +':  '+ vOptJRomSpace1
>      +'  ('+vOptJRomSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.MinJLetSpace not= vObj2.MinJLetSpace
>    Run PerCent2String using vPerCentV(vObj1.MinJLetSpace)
>      returns vPerCentS(vMinJLetSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MinJLetSpace)
>      returns vPerCentS(vMinJLetSpace2);
>    Set vMsg=vMsg+ vMinJLetSpace +':  '+ vMinJLetSpace1
>      +'  ('+vMinJLetSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.MaxJLetSpace not= vObj2.MaxJLetSpace
>    Run PerCent2String using vPerCentV(vObj1.MaxJLetSpace)
>      returns vPerCentS(vMaxJLetSpace1);
>    Run PerCent2String using vPerCentV(vObj2.MaxJLetSpace)
>      returns vPerCentS(vMaxJLetSpace2);
>    Set vMsg=vMsg+ vMaxJLetSpace +':  '+ vMaxJLetSpace1
>      +'  ('+vMaxJLetSpace2+')'+nbs+'%' +vnl;
> EndIf
> If vObj1.OptJLetSpace not= vObj2.OptJLetSpace
>    Run PerCent2String using vPerCentV(vObj1.OptJLetSpace)
>      returns vPerCentS(vOptJLetSpace1);
>    Run PerCent2String using vPerCentV(vObj2.OptJLetSpace)
>      returns vPerCentS(vOptJLetSpace2);
>    Set vMsg=vMsg+ vOptJLetSpace +':  '+ vOptJLetSpace1
>      +'  ('+vOptJLetSpace2+')'+nbs+'%' +vnl;
> EndIf
> //-------
> If vObj1.YakumonoType not= vObj2.YakumonoType
>    Run GetYakumono Using vYakType(vObj1.YakumonoType)
>      Returns vYakTypeString(vJak1);
>    Run GetYakumono Using vYakType(vObj2.YakumonoType)
>      Returns vYakTypeString(vJak2);
>    Set vMsg=vMsg+ vYakumonoType +':  '+ vJak1 +'  ('+vJak2+')' +vnl;
> EndIf
> If vObj1.Tsume not= vObj2.Tsume
>    Set vMsg=vMsg+ 'Tsume:  '+ vObj1.Tsume
>      +'  ('+vObj2.Tsume+')' +vnl;
> EndIf
> //-------
> If vObj1.FontFamily = vObj2.FontFamily
>    and vObj1.FontAngle = vObj2.FontAngle
>    and vObj1.FontWeight = vObj2.FontWeight
>    and vObj1.FontVariation = vObj2.FontVariation
>    If vObj1.FontPlatformName not= vObj2.FontPlatformName
>      Set vMsg=vMsg+ 'Font - PlatformName' +':  '
>        + vObj1.FontPlatformName +'  ('
>        + vObj2.FontPlatformName +')' +vnl;
>    EndIf
>    If vObj1.FontPostScriptName not= vObj2.FontPostScriptName
>      Set vMsg=vMsg+ 'Font - PostScriptName' +':  '
>        + vObj1.FontPostScriptName +'  ('
>        + vObj2.FontPostScriptName +')' +vnl;
>    EndIf
>    If vObj1.FontPanoseName not= vObj2.FontPanoseName
>      Set vMsg=vMsg+ 'Font - PanoseName' +':  '
>        + vObj1.FontPanoseName +'  ('
>        + vObj2.FontPanoseName +')' +vnl;
>    EndIf
>    If vObj1.WesternFontPlatformName not=
vObj2.WesternFontPlatformName
>      Set vMsg=vMsg+ 'Font - PlatformName (Western)' +':  '
>        + vObj1.WesternFontPlatformName +'  ('
>        + vObj2.WesternFontPlatformName +')' +vnl;
>    EndIf
>    If vObj1.WesternFontPostScriptName not=
vObj2.WesternFontPostScriptName
>      Set vMsg=vMsg+ 'Font - PostScriptName (Western)' +':  '
>        + vObj1.WesternFontPostScriptName +'  ('
>        + vObj2.WesternFontPostScriptName +')' +vnl;
>    EndIf
>    If vObj1.WesternFontPanoseName not= vObj2.WesternFontPanoseName
>      Set vMsg=vMsg+ 'Font - PanoseName (Western)' +':  '
>        + vObj1.WesternFontPanoseName +'  ('
>        + vObj2.WesternFontPanoseName +')' +vnl;
>    EndIf
>    If vObj1.FontEncodingName not= vObj2.FontEncodingName
>      Set vMsg=vMsg+ 'Font - EncodingName' +':  '
>        + vObj1.FontEncodingName +'  ('
>        + vObj2.FontEncodingName +')' +vnl;
>    EndIf
>    If vObj1.CombinedFontFamily not= vObj2.CombinedFontFamily
>      Set vMsg=vMsg+ 'Font - CombinedFontFamily' +vnl;
>    EndIf
> EndIf
>
> //----------------------
> Sub FixPoints Using vPoints Returns vPts
> New Real NewVar(vPtsR) Value(vPoints);
> Set vPtsR = vPtsR *1000+0.5;
> New Integer NewVar(vPtsR) Value(vPtsR);
> New Real NewVar(vPtsR) Value(vPtsR);
> Set vPtsR = vPtsR/1000;
> New String NewVar(vPts) Value(vPtsR);
> Get String FromString(vPts) NewVar(vPts)
>    ReplaceAll('.') With(vDecChar);
> Find String(vDecChar) InString(vPts) ReturnPos(vPos);
> Get String FromString(vPts) NewVar(vPts) EndPos(vPos+3);
> Get String FromString(vPts) NewVar(vPts) RemoveTrailing('0');
> Get String FromString(vPts) NewVar(vPts) RemoveTrailing(vDecChar);
> EndSub
>
> //----------------------
> Sub Points2cm Using vPoints Returns vCm
> New Real NewVar(vCmR) Value(vPoints/72*2.54);
> Set vCmR = vCmR *1000+0.5;
> New Integer NewVar(vCmR) Value(vCmR);
> New Real NewVar(vCmR) Value(vCmR);
> Set vCmR = vCmR/1000;
> New String NewVar(vCm) Value(vCmR);
> Get String FromString(vCm) NewVar(vCm)
>    ReplaceAll('.') With(vDecChar);
> Find String(vDecChar) InString(vCm) ReturnPos(vPos);
> Get String FromString(vCm) NewVar(vCm) EndPos(vPos+3);
> Get String FromString(vCm) NewVar(vCm) RemoveTrailing('0');
> Get String FromString(vCm) NewVar(vCm) RemoveTrailing(vDecChar);
> EndSub
>
> //----------------------
> Sub GetBoolean Using vBool Returns vBoolString
> Set vBoolString = vBooleanYes;
> If vBool = 0 Set vBoolString = vBooleanNo; EndIf
> EndSub
>
> //----------------------
> Sub GetBooleanCB Using vBool Returns vBoolString
> //-- 'graphical' Yes/No (-?)
> Set vBoolString = '[x]';
> If vBool = 0 Set vBoolString = '[ ]'; EndIf
> EndSub
>
> //----------------------
> Sub GetString Using vString Returns vStringD
> //-- Prevent confusion specifying empty strings
> Set vStringD = vEmptyString;
> If vString Set vStringD = vString; EndIf
> EndSub
>
> //----------------------
> Sub PerCent2String using vPerCentV returns vPerCentS
> New Real NewVar(vPerCentV) value(vPerCentV);
> Set viRound = 0.00005;
> If vPerCentV < 0 Set viRound = -0.00005; EndIf
> New Integer NewVar(vPerCentI) value((vPerCentV+viRound)*10000);
> New Real NewVar(vPerCentR) value(vPerCentI);
> New Real NewVar(vPerCentR) value(vPerCentR/100);
> Set vPerCentS = '' + vPerCentR;
> Find String('.') InString(vPerCentS) ReturnPos(vPos);
> Get String FromString(vPerCentS) EndPos(vPos+2) NewVar(vPerCentS);
> Get String FromString(vPerCentS) NewVar(vPerCentS)
>    ReplaceAll('.') With(vDecChar);
> EndSub
>
> //----------------------
> Sub GetLineSpacing Using vLSpacing Returns vLSpacingString
> If vLSpacing = PgfFixed
>    Set vLSpacingString = vLSpFixed; LeaveSub;
> EndIf
> If vLSpacing = PgfProportional
>    Set vLSpacingString = vLSpProportional; LeaveSub;
> EndIf
> If vLSpacing = PgfFloating
>    Set vLSpacingString = vLSpFloating; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetAlignment Using vAlign Returns vAlignString
> If vAlign = PgfLeft
>    Set vAlignString = vAlignLeft; LeaveSub;
> EndIf
> If vAlign = PgfRight
>    Set vAlignString = vAlignRight; LeaveSub;
> EndIf
> If vAlign = PgfCenter
>    Set vAlignString = vAlignCenter; LeaveSub;
> EndIf
> If vAlign = PgfJustified
>    Set vAlignString = vAlignJustified; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetLanguage using vLID returns vLStr
> If vLID=LangBrazilian Set vLStr='Portugues do Brazil'; EndIf
> If vLID=LangBritish Set vLStr='British English'; EndIf
> If vLID=LangCanadianFrench Set vLStr='Canadien Francais'; EndIf
> If vLID=LangCatalan Set vLStr='Catala'; EndIf
> If vLID=LangDanish Set vLStr='Dansk'; EndIf
> If vLID=LangDutch Set vLStr='Nederlands'; EndIf
> If vLID=LangEnglish Set vLStr='American English'; EndIf
> If vLID=LangFinnish Set vLStr='Suomi'; EndIf
> If vLID=LangFrench Set vLStr='Francais'; EndIf
> If vLID=LangGerman Set vLStr='Deutsch'; EndIf
> If vLID=LangItalian Set vLStr='Italiano'; EndIf
> If vLID=LangNewDutch Set vLStr='Nederlands Nieuw'; EndIf
> If vLID=LangNewGerman Set vLStr='Deutsch (neu)'; EndIf
> //If vLID=LangNewSwiss Set vLStr='Schweizerdeutsch (neu)'; EndIf
> If vLID=23 Set vLStr='Schweizerdeutsch (neu)'; EndIf
> If vLID=LangNorwegian Set vLStr='Norsk'; EndIf
> If vLID=LangNynorsk Set vLStr='Nynorsk'; EndIf
> If vLID=LangPortuguese Set vLStr='Portugues'; EndIf
> If vLID=LangSpanish Set vLStr='Espanol'; EndIf
> If vLID=LangSwedish Set vLStr='Svenska'; EndIf
> If vLID=LangSwissGerman Set vLStr='Schweizerdeutsch'; EndIf
> If vLID=LangJapanese Set vLStr='Japanese'; EndIf
> If vLID=LangTraditionalChinese Set vLStr='Trad. Chinese'; EndIf
> If vLID=LangSimplifiedChinese Set vLStr='Simplified Chinese';EndIf
> If vLID=LangKorean Set vLStr='Korean'; EndIf
> If vLID=LangNoLanguage Set vLStr=vLangNoLanguage; EndIf
> EndSub
>
> //----------------------
> Sub GetUnderline Using vUL Returns vULString
> If vUL = CbNoUnderline
>    Set vULString = vULNot; LeaveSub;
> EndIf
> If vUL = CbSingleUnderline
>    Set vULString = vULSingle; LeaveSub;
> EndIf
> If vUL = CbDoubleUnderline
>    Set vULString = vULDouble; LeaveSub;
> EndIf
> If vUL = CbNumericUnderline
>    Set vULString = vULNumeric; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetPosition Using vPos Returns vPosString
> If vPos = PosNorm
>    Set vPosString = vPosNorm; LeaveSub;
> EndIf
> If vPos = PosSuper
>    Set vPosString = vPosSuper; LeaveSub;
> EndIf
> If vPos = PosSub
>    Set vPosString = vPosSub; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetCapital Using vCap Returns vCapString
> If vCap = CapitalCaseNorm
>    Set vCapString = vCapitalNorm; LeaveSub;
> EndIf
> If vCap = CapitalCaseSmall
>    Set vCapString = vCapitalSmall; LeaveSub;
> EndIf
> If vCap = CapitalCaseLower
>    Set vCapString = vCapitalLower; LeaveSub;
> EndIf
> If vCap = CapitalCaseUpper
>    Set vCapString = vCapitalUpper; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetStart Using vStrt Returns vStrtString
> If vStrt = PgfAnywhere
>    Set vStrtString = vStartAnywhere; LeaveSub;
> EndIf
> If vStrt = PgfTopOfCol
>    Set vStrtString = vStartTopOfCol; LeaveSub;
> EndIf
> If vStrt = PgfTopOfPage
>    Set vStrtString = vStartTopOfPage; LeaveSub;
> EndIf
> If vStrt = PgfTopOfLeftPage
>    Set vStrtString = vStartTopLeft; LeaveSub;
> EndIf
> If vStrt = PgfTopOfRightPage
>    Set vStrtString = vStartTopRight; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetPlacement Using vPlace vRIS vFirst Returns vPlaceString
> If vPlace = PgfSideBody
>    Set vPlaceString = vPlaceSideBody; LeaveSub;
> EndIf
> If vPlace = PgfRunIn
>    Set vPlaceString = vPlaceRunIn +' '+ vRIS; LeaveSub;
> EndIf
> If vPlace = PgfSideHeadTop
>    Set vx = vPlaceSHTop;
>    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
>    Set vPlaceString = vx;
>    Set vFirstSideHead = true; LeaveSub;
> EndIf
> If vPlace = PgfSideHeadFirstBaseline
>    Set vx = vPlaceSHFirstBaseline;
>    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
>    Set vPlaceString = vx;
>    Set vFirstSideHead = true; LeaveSub;
> EndIf
> If vPlace = PgfSideHeadLastBaseline
>    Set vx = vPlaceSHLastBaseline;
>    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
>    Set vPlaceString = vx;
>    Set vFirstSideHead = true; LeaveSub
> EndIf
> If vPlace = PgfStraddleNormalOnly
>    Set vPlaceString = vPlaceStraddleNormalOnly; LeaveSub;
> EndIf
> If vPlace = PgfStraddle
>    Set vPlaceString = vPlaceStraddle; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetAutoNumPos Using vNumAtEnd Returns vANPosString
> Set vANPosString = vAutoNumPosPB;
> If vNumAtEnd
>    Set vANPosString = vAutoNumPosPE;
> EndIf
> EndSub
>
> //----------------------
> Sub GetCellVAlign Using vCellVA Returns vCellVAString
> If vCellVA = PgfVAlignTop
>    Set vCellVAString = vPgfVAlignTop; LeaveSub;
> EndIf
> If vCellVA = PgfVAlignMiddle
>    Set vCellVAString = vPgfVAlignMiddle; LeaveSub;
> EndIf
> If vCellVA = PgfVAlignBottom
>    Set vCellVAString = vPgfVAlignBottom; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub GetYakumono Using vYakType Returns vYakTypeString
> If vYakType = vFloatingYakumono
>    Set vYakTypeString = vFloatingYakumono; LeaveSub;
> EndIf
> If vYakType = vMonospaceYakumono
>    Set vYakTypeString = vMonospaceYakumono; LeaveSub;
> EndIf
> If vYakType = vFixedYakumono
>    Set vYakTypeString = vFixedYakumono; LeaveSub;
> EndIf
> EndSub
>
> //----------------------
> Sub ClearDoc Using vNewDoc
> //-- NewDoc: Delete all unnecessary components
> Set vObj = vNewDoc.FirstPgfFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextPgfFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstCharFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextCharFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstCondFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextCondFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstColorInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextColorInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstMarkerTypeInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextMarkerTypeInDoc;
>    //Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstRulingFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextRulingFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstTblFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextTblFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstVarFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextVarFmtInDoc;
>    //Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstXRefFmtInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextXRefFmtInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstTblInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.NextTblInDoc;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstMasterPageInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.PageNext;
>    Delete Object(vObjToDelete);
> EndLoop
> Set vObj = vNewDoc.FirstRefPageInDoc;
> Loop While(vObj)
>    Set vObjToDelete = vObj;
>    Set vObj = vObj.PageNext;
>    Delete Object(vObjToDelete);
> EndLoop
> EndSub
>
> //----------------------
> Sub GetFontFamily Using vFont Returns vFontNr
> Set vFontNr = 1; Set vk = FontFamilyNames.Count;
> Loop While(vj <= vk) LoopVar(vj) InitVal(1) Incr(1)
>    Get Member Number(vj) From(FontFamilyNames) NewVar(vFontName);
>    If vFontName = vFont
>      Set vFontNr = vj-1;
>      LeaveLoop;
>    EndIf
> EndLoop
> EndSub
>
> //----------------------
> Sub ParseDocName
>    Returns vPathFile vPathName vFileName vExt vFileExt
> // vPathFile - c:\dir\document      vFileName - document
> // vPathName - c:\dir               vExt      - .fm
> // vFileExt  - document.fm
> local PosVar; local vPathFileExt; local vFilePath;
> Get String FromString(vDoc.Name) Reverse NewVar(vPathFileExt);
> Find String('.') InString(vPathFileExt) ReturnPos(vpPosVar);
> Get String FromString(vPathFileExt) EndPos(vpPosVar) Reverse NewVar
(vExt);
> Get String FromString(vPathFileExt) StartPos(vpPosVar+1) Reverse
> NewVar(vPathFile);
> Get String FromString(vPathFile) Reverse NewVar(vFilePath);
> Find String(DIRSEP) InString(vFilePath) ReturnPos(vpPosVar);
> Get String FromString(vFilePath) StartPos(vpPosVar+1) Reverse
> NewVar(vPathName);
> Get String FromString(vFilePath) EndPos(vpPosVar-1) Reverse
> NewVar(vFileName);
> Set vFileExt = vFileName+vExt;
> EndSub
>
> //----------------------
> Sub DefineChars
> New String IntValue(17) NewVar(nbs); // nbspace
> New String IntValue(128) NewVar(vsAe_); // UpperAdieresis
> New String IntValue(133) NewVar(vsOe_); // UpperOdieresis
> New String IntValue(134) NewVar(vsUe_); // UpperUdieresis
> New String IntValue(138) NewVar(vsae); // adieresis
> New String IntValue(154) NewVar(vsoe); // odieresis
> New String IntValue(159) NewVar(vsue); // udieresis
> New String IntValue(167) NewVar(vsss); // germandbls
> New String IntValue(208) NewVar(vsEnDash); // endash
> New String IntValue(209) NewVar(vsEmDash); //— emdash
> New String IntValue(18) NewVar(vsTSpace); // tspace
> EndSub
>
> //----------------------
> Sub InitStrings
> If not vIsEnglish
>    //-- German string definitions
>    Set vDecChar = ',';
>    Set vPgfS = 'Absatz';
>    Set vPgfSs = 'Abs'+vsae+'tze';
>    Set vCurrentPgf = 'Aktueller Absatz';
>    Set vFmtOverride = 'Format'+vsue+'berschreibung';
>    Set vFmtOverrides = vsUe_+'berschreibungen';
>    Set vNoFmtOverride = 'Keine ' +vFmtOverride ;
>    Set vIsNotDefined = 'ist nicht definiert';
>    Set vBooleanYes = 'Ja';
>    Set vBooleanNo = 'Nein';
>    Set vemspace = 'Geviert';
>    Set vDash = ' '+vsEnDash+' ';
>    Set vListDocFile = 'Absatz'+vsue+'berschreibungen.fm';
>    //-- BASIS
>    Set vFirstIndent = 'Einzug 1. Zeile';
>    Set vLeftIndent = 'Einzug Links';
>    Set vRightIndent = 'Einzug Rechts';
>    Set vSpaceAbove = 'Abstand Oben';
>    Set vSpaceBelow = 'Abstand Unten';
>    Set vLeading = 'Zeilenabstand';
>    Set vLineSpacing = 'Zeilenabstand';
>    Set vLSpFixed = 'Fest';
>    Set vLSpProportional = 'Proportional';
>    Set vLSpFloating = 'Flexibel';
>    Set vAlignment = 'Ausrichtung';
>    Set vAlignLeft = 'Linksb'+vsue+'ndig';
>    Set vAlignRight = 'Rechtsb'+vsue+'ndig';
>    Set vAlignCenter = 'Zentriert';
>    Set vAlignJustified = 'Blocksatz';
>    Set vNumTabs = 'Tabulatoren' +vDash+ 'Anzahl';
>    Set vTabs = 'Tabulatoren' +vDash+ 'Werte';
>    Set vUseNextTag = 'N'+vsae+'chster Absatz';
>    Set vNextTag = 'Typ n'+vsae+'chster Absatz';
>    //-- STANDARDSCHRIFT
>    Set vFontFamily = 'Schrift';
>    Set vFontSize = 'Schriftgr'+vsoe+vsss+'e';
>    Set vFontAngle = 'Schriftneigung';
>    Set vFontWeight = 'Schriftst'+vsae+'rke';
>    Set vFontVariation = 'Schriftvariation';
>    Set vFontColor = 'Schriftfarbe';
>    Set vFontSpread = 'Zeichenabstand';
>    Set vFontStretch = 'Zeichenbreite';
>    Set vLanguage = 'Sprache';
>    Set vLangNoLanguage = 'Keine';
>    Set vUnderlining = 'Unterstreichen';
>    Set vULNot = 'Nicht';
>    Set vULSingle = 'Einfach';
>    Set vULDouble = 'Doppelt';
>    Set vULNumeric = 'Numerisch';
>    Set vOverline = vsUe_+'berstreichen';
>    Set vStrikethrough = 'Durchstreichen';
>    Set vChangeBar = vsAe_+'nderungsbalken';
>    Set vPosition = 'Position';
>    Set vPosNorm = 'Normal';
>    Set vPosSuper = 'Hochgestellt';
>    Set vPosSub = 'Tiefgestellt';
>    Set vCapitalization = 'Gro'+vsss+'/Klein';
>    Set vCapitalNorm = 'Normal';
>    Set vCapitalSmall = 'Kapit'+vsae+'lchen';
>    Set vCapitalLower = 'Kleinbuchstaben';
>    Set vCapitalUpper = 'Versalien';
>    Set vPairKern = 'Unterschneiden';
>    Set vOutline = 'Outline';
>    Set vShadow = 'Shadow';
>    //-- SEITENUMBRUCH
>    Set vStart = 'Absatzumbruch';
>    Set vStartAnywhere = 'Beliebig';
>    Set vStartTopOfCol = 'Spaltenbeginn';
>    Set vStartTopOfPage = 'Seitenbeginn';
>    Set vStartTopLeft = 'Beginn linke Seite';
>    Set vStartTopRight = 'Beginn rechte Seite';
>    Set vKeepWithNext = 'Absatzverbindung mit N'+vsae+'chstem';
>    Set vKeepWithPrev = 'Absatzverbindung mit Vorherigem';
>    Set vBlockLines = 'Absatzkontrolle (HuKi/SchuJu)';
>    Set vPlacement = 'Umbruchformat';
>    Set vPlaceSideBody = 'In Spalte';
>    Set vPlaceRunIn = 'Zwischen'+vsue+'berschrift'
+vDash+ 'Interpunktion';
>    Set vPlaceRunInSeparator = 'Interpunktionszeichen';
>    Set vPlaceSideHead = 'Seitl. '+vsUe_+'berschrift'
+vDash+ 'Ausrichtung';
>    Set vPlaceSHTop = 'Obere Kante';
>    Set vPlaceSHFirstBaseline = 'Erste Grundlinie';
>    Set vPlaceSHLastBaseline = 'Letzte Grundlinie';
>    Set vPlaceStraddleNormalOnly = vsUe_+'ber alle Spalten';
>    Set vPlaceStraddle = vsUe_+'ber alle Spalten und seitl.
> '+vsUe_+'berschriften';
>    //-- NUMERIERUNG
>    Set vPgfIsAutoNum = 'Autom. Num. aktiviert';
>    Set vAutoNumString = 'Autom. Num.' +vDash+ 'String';
>    Set vAutoNumChar = 'Autom. Num.' +vDash+ 'Zeichenformat';
>    Set vAutoNumPos = 'Autom. Num.' +vDash+ 'Position';
>    Set vAutoNumPosPB = 'Absatzbeginn';
>    Set vAutoNumPosPE = 'Absatzende';
>    //-- EXTRA
>    Set vAdjHyphens = 'Aut. Trennung: Untereinander';
>    Set vHyphMinWord = 'Aut. Trennung: K'+vsue+'rzestes Wort';
>    Set vHyphMinPrefix = 'Aut. Trennung: K'+vsue+'rzestes
Pr'+vsae+'fix';
>    Set vHyphMinSuffix = 'Aut. Trennung: K'+vsue+'rzestes Suffix';
>    Set vHyphenate = 'Aut. Trennung: Aktiviert
>    Set vMinSpace = 'Wortabstand: Minimum';
>    Set vMaxSpace = 'Wortabstand: Maximum';
>    Set vOptSpace = 'Wortabstand: Optimum';
>    Set vLetterSpace = 'Automatisch sperren';
>    Set vTopSeparator = 'Rahmen '+vsue+'ber Absatz';
>    Set vBottomSeparator = 'Rahmen unter Absatz';
>    //-- ZELLE
>    Set vCellVAlignment  = 'Zelle Ausrichtung vert.';
>    Set vPgfVAlignTop = 'Oben';
>    Set vPgfVAlignMiddle = 'Mitte';
>    Set vPgfVAlignBottom = 'Unten';
>    Set vCellTopMargin= 'Zellenrand Oben';
>    Set vCellBottomMargin= 'Zellenrand Unten';
>    Set vCellLeftMargin= 'Zellenrand Links';
>    Set vCellRightMargin= 'Zellenrand Rechts';
>    Set vCellMarginFixed = 'absolut';
>    Set vCellMarginAdded = 'addiert';
>    //-------
>    Set vKernX = 'Kerning horizontal'
>    Set vKernY = 'Kerning vertikal'
>    //-------
>    Set vAcrobatLevel = 'PDF Lesezeichenebene';
>    Set vPDFStructureLevel = 'PDF Strukturebene';
>    //-------
>    Set vMinJRomSpace = 'Wortabstand: Minimum (Asian-Roman)';
>    Set vMaxJRomSpace = 'Wortabstand: Maximum (Asian-Roman)';
>    Set vOptJRomSpace = 'Wortabstand: Optimum (Asian-Roman)';
>    Set vMinJLetSpace = 'Zeichenabstand: Minimum (Asian)';
>    Set vMaxJLetSpace = 'Zeichenabstand: Maximum (Asian)';
>    Set vOptJLetSpace = 'Zeichenabstand: Optimum (Asian)';
>    //-------
>    Set vYakumonoType = 'Yakumono Rules';
>    Set vFloatingYakumono = 'Floating';
>    Set vMonospaceYakumono = 'Monospace';
>    Set vFixedYakumono = 'Fixed';
> Else
>    //-- English string definitions
>    Set vDecChar = '.';
>    Set vPgfS = 'Paragraph';
>    Set vPgfSs = 'Paragraphs';
>    Set vCurrentPgf = 'Current Paragraph';
>    Set vFmtOverride = 'Format Override';
>    Set vFmtOverrides = 'Overrides';
>    Set vNoFmtOverride = 'No ' +vFmtOverride ;
>    Set vIsNotDefined = 'is not defined';
>    Set vBooleanYes = 'Yes';
>    Set vBooleanNo = 'No';
>    Set vemspace = 'emspace';
>    Set vDash = vsEmDash;
>    Set vListDocFile = 'Pgf Format Overrides.fm';
>    //-- BASIC
>    Set vFirstIndent = 'Indent First';
>    Set vLeftIndent = 'Indent Left';
>    Set vRightIndent = 'Indent Right';
>    Set vSpaceAbove = 'Space Above Pgf';
>    Set vSpaceBelow = 'Space Below Pgf';
>    Set vLeading = 'Leading';
>    Set vLineSpacing = 'Line Spacing';
>    Set vLSpFixed = 'Fixed';
>    Set vLSpProportional = 'Proportional';
>    Set vLSpFloating = 'Floating';
>    Set vAlignment= 'Alignment';
>    Set vAlignLeft = 'Left';
>    Set vAlignRight = 'Right';
>    Set vAlignCenter = 'Center';
>    Set vAlignJustified = 'Justified';
>    Set vNumTabs = 'Tab Stops' +vDash+ 'number';
>    Set vTabs = 'Tab Stops' +vDash+ 'values';
>    Set vUseNextTag = 'Next Pgf Tag';
>    Set vNextTag = 'Next Pgf Tag';
>    //-- DEFAULT FONT
>    Set vFontFamily = 'Font Family';
>    Set vFontSize = 'Font Size';
>    Set vFontAngle = 'Font Angle';
>    Set vFontWeight = 'Font Weight';
>    Set vFontVariation = 'Font Variation';
>    Set vFontColor = 'Font Color';
>    Set vFontSpread = 'Char Spread';
>    Set vFontStretch = 'Char Stretch';
>    Set vLanguage = 'Language';
>    Set vLangNoLanguage = 'None';
>    Set vUnderlining = 'Underline';
>    Set vULNot = 'None';
>    Set vULSingle = 'Single';
>    Set vULDouble = 'Double';
>    Set vULNumeric = 'Numeric';
>    Set vOverline = 'Overline';
>    Set vStrikethrough = 'Strikethrough';
>    Set vChangeBar = 'ChangeBar';
>    Set vPosition = 'Position';
>    Set vPosNorm = 'Normal';
>    Set vPosSuper = 'Superscript';
>    Set vPosSub = 'Subscript';
>    Set vCapitalization = 'Capitalization';
>    Set vCapitalNorm = 'Normal';
>    Set vCapitalSmall = 'Small Caps';
>    Set vCapitalLower = 'Lower';
>    Set vCapitalUpper = 'Upper';
>    Set vPairKern = 'Pair Kern';
>    Set vOutline = 'Outline';
>    Set vShadow = 'Shadow';
>    //-- PAGINATION
>    Set vStart = 'Paragraph Placement';
>    Set vStartAnywhere = 'Anywhere';
>    Set vStartTopOfCol = 'Top of Column';
>    Set vStartTopOfPage = 'Top of Page';
>    Set vStartTopLeft = 'Top of Left Page';
>    Set vStartTopRight = 'Top of Right Page';
>    Set vKeepWithNext = 'Keep with Next Pgf';
>    Set vKeepWithPrev = 'Keep with Previous Pgf';
>    Set vBlockLines = 'Widow/Orphan Lines';
>    Set vPlacement = 'Placement Format';
>    Set vPlaceSideBody = 'In Column';
>    Set vPlaceRunIn = 'Run-In Head' +vDash+ 'Default Punctuation';
>    Set vPlaceRunInSeparator = 'Punctuation Char';
>    Set vPlaceSideHead = 'Side Head' +vDash+ 'Alignment';
>    Set vPlaceSHTop = 'Top';
>    Set vPlaceSHFirstBaseline = 'First Baseline';
>    Set vPlaceSHLastBaseline = 'Last Baseline';
>    Set vPlaceStraddleNormalOnly = 'Straddle Across All Columns';
>    Set vPlaceStraddle = 'Straddle Across All Columns and Side
Heads';
>    //-- NUMBERING
>    Set vPgfIsAutoNum = 'Autonumbering Enabled';
>    Set vAutoNumString = 'Autonumbering' +vDash+ 'Format';
>    Set vAutoNumChar = 'Autonumbering' +vDash+ 'Character Format';
>    Set vAutoNumPos = 'Autonumbering' +vDash+ 'Position';
>    Set vAutoNumPosPB = 'Start of Paragraph';
>    Set vAutoNumPosPE = 'End of Paragraph';
>    //-- ADVANCED
>    Set vAdjHyphens = 'Aut. Hyphenation: Max. # Adjacent';
>    Set vHyphMinWord = 'Aut. Hyphenation: Shortest Word';
>    Set vHyphMinPrefix = 'Aut. Hyphenation: Shortest Prefix';
>    Set vHyphMinSuffix = 'Aut. Hyphenation: Shortest Suffix';
>    Set vHyphenate = 'Aut. Hyphenation: Enabled
>    Set vMinSpace = 'Word Spacing: Minimum';
>    Set vMaxSpace = 'Word Spacing: Maximum';
>    Set vOptSpace = 'Word Spacing: Optimum';
>    Set vLetterSpace = 'Allow Automatic Letter Spacing';
>    Set vTopSeparator = 'Frame Above Pgf';
>    Set vBottomSeparator = 'Frame Below Pgf';
>    //-- TABLE CELL
>    Set vCellVAlignment  = 'Cell Vertical Alignment';
>    Set vPgfVAlignTop = 'Top';
>    Set vPgfVAlignMiddle = 'Middle';
>    Set vPgfVAlignBottom = 'Bottom';
>    Set vCellTopMargin= 'Cell Margin Top';
>    Set vCellBottomMargin= 'Cell Margin Bottom';
>    Set vCellLeftMargin= 'Cell Margin Left';
>    Set vCellRightMargin= 'Cell Margin Right';
>    Set vCellMarginFixed = 'Fixed';
>    Set vCellMarginAdded = 'Added';
>    //-------
>    Set vKernX = 'Kerning Horizontal'
>    Set vKernY = 'Kerning Vertical'
>    //-------
>    Set vAcrobatLevel = 'PDF Bookmark Level';
>    Set vPDFStructureLevel = 'PDF Structure Level';
>    //-------
>    Set vMinJRomSpace = 'Word spacing: Minimum (Asian-Roman)';
>    Set vMaxJRomSpace = 'Word spacing: Maximum (Asian-Roman)';
>    Set vOptJRomSpace = 'Word spacing: Optimum (Asian-Roman)';
>    Set vMinJLetSpace = 'Letter spacing: Minimum (Asian)';
>    Set vMaxJLetSpace = 'Letter spacing: Maximum (Asian)';
>    Set vOptJLetSpace = 'Letter spacing: Optimum (Asian)';
>    //-------
>    Set vYakumonoType = 'Yakumono Rules';
>    Set vFloatingYakumono = 'Floating';
>    Set vMonospaceYakumono = 'Monospace';
>    Set vFixedYakumono = 'Fixed';
> EndIf
> EndSub
>
>  >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  - -

#1806 From: "kenk57" <kenk57@...>
Date: Fri Jan 18, 2002 5:58 pm
Subject: Re: Paragraph Format Override
kenk57@...
Send Email Send Email
 
Sorry Klaus,
I found the cause of the error. I had copied the text from the post
and some text at line 1566 was moved to the next line down. I
corrected it.

Very nice work by the way. The script works as advertised. I hope to
learn from your script and perhaps write something this good one day.

Ken

--- In framescript-users@y..., "kenk57" <kenk57@y...> wrote:
> Hi Klaus,
> I tried running this script today and got errors.
> FrameScript-Compile Error CODE(-1) Line(1566) Col(1566)
> After hitting the OK button:
> Missing Script--Aborting
>
> Thought you might like to know since you have been so kind as to
> provide this to the public.
>
> Win2K, Frame6, eval version of FrameScript 2.1. New user of
> FrameScript.
>
> Ken
>
> --- In framescript-users@y..., Klaus Mueller <mueller23@w...> wrote:
> > Hi all,
> >
> > I enhanced the recently posted script that identifies
> > the current pgf format overrides.
> >
> > The following script creates a report of all pgf
> > overrides in a doc or book with hyperlinks to the
> > pgfs.
> >
> > Enjoy,
> > Klaus Mueller, Hamburg
> >
> >
> >  >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - -
  -
>  - -
> >
> > // PgfOverridesReport1.fsl - Version 1.0
> > // Klaus Mueller, Hamburg. December 19, 2001
> >
> > // Report PgfFormat Overrides
> >
> > // Check 'Sub Initialization' to adjust.
> > // (Un)comment 'Set vIsEnglish = true'
> > // (Line 34) to toggle English/German.
> >
> > Set vDoc = ActiveDoc;
> > Set vBook = ActiveBook;
> > If not (vDoc or vBook) LeaveSub; EndIf
> > If (not vDoc.Name)
> >    Display 'Please save NoName Document'; LeaveSub;
> > EndIf
> > If not vBook.FirstComponentInBook LeaveSub; EndIf
> >
> >
> > Run DefineChars;
> > Run Initialization;
> > Run InitStrings;
> > Run MakeNewDoc;
> > Set Displaying = 0;
> > If vBook
> >    Run GetBookDocs;
> > Else
> >    Run GetOverrides;
> > EndIf
> > Run FinishDoc;
> >
> > //----------------------
> > Sub Initialization
> >
> > Set vIsEnglish = true;
> >
> > Set vListFont = 'Arial';
> > Set vListDocMargin = 5mm;
> > Set vPageLayout = 3;
> >
> > If vPageLayout = 1 //-- Half Screen
> >    Set vListDocWidth = 130mm;
> >    Set vListDocHeight = 140mm;
> >    Set vListDocCols = 2;
> >    Set vFontSizeBody = 8;
> > EndIf
> > If vPageLayout = 2 //-- Small Screen
> >    Set vListDocWidth = 223mm;
> >    Set vListDocHeight = 140mm;
> >    Set vListDocCols = 3;
> >    Set vFontSizeBody = 10;
> > EndIf
> > If vPageLayout = 3 //-- Big Screen
> >    Set vListDocWidth = 223mm;
> >    Set vListDocHeight = 140mm;
> >    Set vListDocCols = 4;
> >    Set vFontSizeBody = 8;
> > EndIf
> > If vPageLayout = 4 //-- Print
> >    Set vListDocWidth = 297mm;
> >    Set vListDocHeight = 210mm;
> >    Set vListDocCols = 4;
> >    Set vFontSizeBody = 8;
> >    Set vListDocMargin = 10mm;
> > EndIf
> >
> > Set vEmptyString = vsEmDash;
> > Set vnl = CHARLF;
> > If WindowSystem = 'Macintosh'
> >    Set vnl = CHARCR;
> > EndIf
> >
> > EndSub
> >
> > //----------------------
> > Sub MakeNewDoc
> > New Document Landscape NewVar(vListDoc)
> > Width(vListDocWidth) Height(vListDocHeight)
> > NumCols(vListDocCols) ColumnGap(5mm)
> > TopMargin(vListDocMargin BottomMargin(vListDocMargin)
> > LeftMargin(vListDocMargin) RightMargin(vListDocMargin)
> > LeftInsideMargin(vListDocMargin)
> > RightOutsideMargin(vListDocMargin);
> >
> > Run ClearDoc Using vNewDoc(vListDoc);
> >
> > Set vListDocName = TmpDir+DIRSEP+ vListDocFile;
> > Save Document DocObject(vListDoc) File(vListDocName);
> >
> > Set vListDoc.PDFBookMark = true;
> > Set vListDoc.GenerateAcrobatInfo = true;
> >
> > New Color Name('Background') NewVar(vColBG);
> > If (vColBG)
> >    Set vColBG.Cyan = 0; Set vColBG.Magenta = 0;
> >    Set vColBG.Yellow = 10; Set vColBG.Black  = 0;
> >    Set vColBG.ColorPrintCtl = 2;
> > EndIf
> > New Color Name('Heading1') NewVar(vColHd1);
> > If (vColHd1)
> >    Set vColHd1.Cyan = 30; Set vColHd1.Magenta = 100;
> >    Set vColHd1.Yellow = 80; Set vColHd1.Black  = 5;
> > EndIf
> > New Color Name('Heading2') NewVar(vColHd2);
> > If (vColHd2)
> >    Set vColHd2.Cyan = 60; Set vColHd2.Magenta = 35;
> >    Set vColHd2.Yellow = 15; Set vColHd2.Black  = 15;
> > EndIf
> > New Color Name('Small') NewVar(vColSm);
> > If (vColSm)
> >    Set vColSm.Cyan = 50; Set vColSm.Magenta = 10;
> >    Set vColSm.Yellow = 20; Set vColSm.Black  = 30;
> > EndIf
> >
> > Set vMPgFrame = FirstMasterPageInDoc.PageFrame;
> > New Rectangle NewVar(vBackground) ParentObject(vMPgFrame)
> >    Width(vListDocWidth) Height(vListDocHeight);
> > Set vBackground.Fill = 0;
> > Set vBackground.TintPercent = 100;
> > Set vBackground.Color = vColBG;
> >
> > Set vHTMrk = 'Hypertext';
> > Loop ForEach(MarkerType) In(vListDoc) LoopVar(vMarker)
> >    If vMarker.InvariantName = 'Hypertext'
> >      Set vHTMrk = vMarker.Name; LeaveLoop;
> >    EndIf
> > EndLoop
> > Get Object Type(MarkerType) Name(vHTMrk) NewVar(vHTMarker);
> >
> > Run GetFontFamily Using vFont(vListFont) Returns vFontNr(vFNr)
> >
> > Set vFontSizeHead = vFontSizeBody+1;
> > Set vFontSizeSmall = vFontSizeBody-1;
> > New ParagraphFormat name('Body') NewVar(vPgfBody);
> > Set vPgfBody.FontFamily = vFNr;
> > Set vPgfBody.FontSize = vFontSizeBody;
> > Set vPgfBody.FontWeight = 0;
> > Set vPgfBody.SpaceAbove = 0;
> > Set vPgfBody.SpaceBelow = 0;
> > Set vPgfBody.LeftIndent = vFontSizeBody;
> > Set vPgfBody.PgfAlignment = PgfLeft;
> > Set vPgfBody.NextTag = 'Body';
> > Set vPgfBody.UseNextTag = 1;
> > Set vPgfBody.Hyphenate = 0;
> > Set vPgfBody.BlockLines = 3;
> > Set vPgfBody.PgfIsAutoNum = 1;
> > Set vPgfBody.AutoNumString = vsEnDash+'\t';
> > New Tablist NewVar(tblist) Tab(vFontSizeBody) TabType(TabLeft);
> > Set vPgfBody.Tabs = tblist;
> > Set vPgfBody.AcrobatLevel = 0;
> >
> > New ParagraphFormat name('Heading1') NewVar(vPgfH1);
> > Set vPgfH1.FontFamily = vFNr;
> > Set vPgfH1.FontSize = vFontSizeHead+2;
> > Set vPgfH1.Color = vColHd1;
> > Set vPgfH1.FontWeight = 9;
> > Set vPgfH1.SpaceAbove = vFontSizeHead*1.5;
> > Set vPgfH1.SpaceBelow = 0;
> > Set vPgfH1.LeftIndent = 0pts;
> > Set vPgfH1.PgfAlignment = PgfLeft;
> > Set vPgfH1.KeepWithNext = 1;
> > Set vPgfH1.NextTag = 'Small';
> > Set vPgfH1.UseNextTag = 1;
> > Set vPgfH1.Hyphenate = 0;
> > Set vPgfH1.BlockLines = 3;
> > Set vPgfH1.AcrobatLevel = 1;
> >
> > New ParagraphFormat name('Heading2') NewVar(vPgfH2);
> > Set vPgfH2.FontFamily = vFNr;
> > Set vPgfH2.FontSize = vFontSizeHead;
> > Set vPgfH2.Color = vColHd2;
> > Set vPgfH2.Underlining = 3;
> > Set vPgfH2.FontWeight = 9;
> > Set vPgfH2.SpaceAbove = vFontSizeHead;
> > Set vPgfH2.SpaceBelow = 0;
> > Set vPgfH2.LeftIndent = 0pts;
> > Set vPgfH2.PgfAlignment = PgfLeft;
> > Set vPgfH2.KeepWithNext = 1;
> > Set vPgfH2.NextTag = 'Small';
> > Set vPgfH2.UseNextTag = 1;
> > Set vPgfH2.Hyphenate = 0;
> > Set vPgfH2.BlockLines = 3;
> > Set vPgfH2.AcrobatLevel = 2;
> >
> > New ParagraphFormat name('Small') NewVar(vPgfSmall);
> > Set vPgfSmall.FontFamily = vFNr;
> > Set vPgfSmall.FontSize = vFontSizeSmall;
> > Set vPgfSmall.Color = vColSm;
> > Set vPgfSmall.FontWeight = 1;
> > Set vPgfSmall.SpaceAbove = 0;
> > Set vPgfSmall.SpaceBelow = 2;
> > Set vPgfSmall.LeftIndent = 0pts;
> > Set vPgfSmall.PgfAlignment = PgfLeft;
> > Set vPgfSmall.KeepWithNext = 1;
> > Set vPgfSmall.NextTag = 'Body';
> > Set vPgfSmall.UseNextTag = 1;
> > Set vPgfSmall.Hyphenate = 1;
> > Set vPgfSmall.BlockLines = 3;
> > Set vPgfSmall.AcrobatLevel = 0;
> >
> > Set vPgfL = vListDoc.MainFlowInDoc.FirstPgfInFlow;
> > Save Document DocObject(vListDoc) File(vListDocName);
> >
> > Set ActiveDoc = vDoc;
> > EndSub
> >
> > //----------------------
> > Sub FinishDoc
> > Set ActiveDoc = vListDoc;
> > Set ViewTextSymbols = False; Set ViewRulers = False;
> > Set ViewBorders = False; Set ViewGrid = False;
> > Execute Fc KbdZoomFitPage;
> > //-- No Doc Focus (Hyperlink) w/ visible Pgf/Tab Designer:
> > Execute Fc KbdClosePgffmt;
> > Execute Fc KbdCloseTblfmt;
> > //-- Make Viewer Doc
> > Execute Fc KbdViewer; //Ger: !dY
> > //Execute Fc ToggleFluidView; //Ger: !Ua
> > Set vPgfL = vListDoc.MainFlowInDoc.FirstPgfInFlow;
> > Set vPgfB = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> > New TextRange NewVar(vTRange) Object(vPgfL)
> >    Offset(0) Object(vPgfB) Offset(ObjEndOffset);
> > New PropertyList NewVar(vPList) FontFamily(vFNr);
> > Apply TextProperties TextRange(vTRange) Properties(vPList);
> > Set Displaying = 1; Update Redisplay;
> > Save Document DocObject(vListDoc) File(vListDocName);
> > EndSub
> >
> > //----------------------
> > Sub GetBookDocs
> > Loop ForEach(BookComponent) In(vBook) LoopVar(vBookDoc)
> >    Run CheckDocOpen vDocName(vBookDoc.Name)
> >      Returns DocObj(vDoc) DocIsOpen;
> >    If not vDoc
> >      Set ErrorCode = 0;
> >      Open Document File(vBookDoc.Name) NewVar(vDoc)
> >        FileIsOldVersion(OK) FontNotFoundInDoc(OK)
> >        UpdateTextReferences(No) UpdateXRefs(No)
> >        RefFileNotFound(AllowAllRefFilesUnFindable)
> >        AlertUserAboutFailure(False);
> >      If ErrorCode
> >        Write Console vBookDoc.Name+ ' could not be opened.';
> >      EndIf
> >    EndIf
> >    If vDoc
> >      Run GetOverrides;
> >      If not DocIsOpen
> >        Close Document DocObject(vDoc) IgnoreMods;
> >      EndIf
> >    EndIf
> > EndLoop
> > EndSub
> >
> > //----------------------
> > Sub CheckDocOpen Using vDocName Returns DocObj DocIsOpen
> > Get String FromString(vDocName) Uppercase NewVar(vDocNameU);
> > Set DocObj = 0; Set DocIsOpen = false;
> > Loop ForEach(Doc) In(Session) LoopVar(vSessionDoc)
> >    Get String FromString (vSessionDoc.Name) Uppercase NewVar
> (vSessionDocU);
> >    If vSessionDocU = vDocNameU
> >      Set DocObj = vSessionDoc;
> >      Set DocIsOpen = true;
> >      LeaveLoop;
> >    EndIf
> > EndLoop
> > EndSub
> >
> > //----------------------
> > Sub GetOverrides
> > Set vDocName = vDoc.Name;
> > If fslVersionMajor*10+fslVersionMinor >= 21
> >    //Set vIsFS21 = true;
> > EndIf
> > If vIsFS21
> >    New EFileInfo NewVar(vEfivDoc) FileName(vDocName);
> >    Set vPathName = vEfivDoc.FileRoot;
> >    Set vFileExt = vEfivDoc.FileName;
> >    Delete Object(vEfivDoc);
> > Else
> >    Run ParseDocName;
> > EndIf
> >
> > Set vPgfA = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> > New Text Object(vPgfA) vFileExt;
> > Set vPgfA.Properties = vPgfH1.Properties;
> > New Paragraph NewVar(vPgfB) PrevObject(vPgfA);
> >
> > Set vPgfB.Properties = vPgfSmall.Properties;
> > Set vPgfSummary = vPgfB;
> > New Paragraph NewVar(vPgfC) PrevObject(vPgfB);
> >
> > Set ActiveDoc = vDoc;
> > Set vFlow = vDoc.FirstFlowInDoc;
> > Set vPgfFlow = vFlow.FirstTextFrameInFlow.FirstPgf;
> > Set vCountOR = 0; Set vCountPgf = 0;
> > Loop While(vFlow)
> >    Loop While(vPgfFlow)
> >      If vPgfFlow.Page.ObjectName = 'BodyPage'
> >        Run ProcessPgf;
> >      EndIf
> >      Set vPgfFlow = vPgfFlow.NextPgfInFlow;
> >    EndLoop
> >    Set vFlow = vFlow.NextFlowInDoc;
> >    If vFlow
> >      Set vPgfFlow = vFlow.FirstTextFrameInFlow.FirstPgf;
> >    EndIf
> > EndLoop
> > New Text Object(vPgfSummary) vFmtOverrides +': '
> >    +vCountOR +vsTSpace+'/'+vsTSpace +vCountPgf+' '+vPgfSs;
> > EndSub
> >
> > //----------------------
> > Sub ProcessPgf
> > //-- 'NextPgfInFlow' skips Tables and Footnotes
> > Set vPgf = vPgfFlow;
> > Run CheckOverride; //**
> > Get TextList InObject(vPgf) NewVar(vTlistA) TblAnchor FnAnchor;
> > Loop While (x <= vTlistA.Count) LoopVar(x) Init(1) Incr(1)
> >    Get Member Number(x) From(vTlistA) NewVar(vAnchor);
> >    If vAnchor.TextType = 'TblAnchor';
> >      Set vTbl = vAnchor.TextData;
> >      Set vCell = vTbl.FirstRowInTbl.FirstCellInRow;
> >      Loop While(vCell)
> >        Set vPgfCell = vCell.FirstPgf;
> >          Loop While(vPgfCell)
> >            Set vPgf = vPgfCell;
> >            Run CheckOverride; //**
> >            Set vPgfCell = vPgfCell.NextPgfInFlow;
> >          EndLoop
> >        Set vCell = vCell.NextCellInTbl;
> >      EndLoop
> >    else
> >      Set vFn = vAnchor.TextData;
> >      Set vPgfFn = vFn.FirstPgf;
> >      Loop While(vPgfFn)
> >        Set vPgf = vPgfFn;
> >        Run CheckOverride; //**
> >        Set vPgfFn = vPgfFn.NextPgfInFlow;
> >      EndLoop
> >    EndIf
> > EndLoop
> > EndSub
> >
> > //----------------------
> > Sub CheckOverride
> > Set vCountPgf = vCountPgf + 1;
> > Get Object Type(PgfFmt) Name(vPgf.Name) NewVar(vPgfFmt);
> > Run ComparePgfProps vObj1(vPgf) vObj2(vPgfFmt);
> > If vPgf.FormatOverride
> >
> >    set vCountOR = vCountOR + 1;
> >    Get String FromString(vMsg) NewVar(vMsg) RemoveTrailing
(CHARCR);
> >    Get String FromString(vMsg) NewVar(vMsg) RemoveTrailing
(CHARLF);
> >
> >    Set vPgfA = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> >    New Text Object(vPgfA) 'Seite '+ vPgf.Page.PageNumString
> > +'  ('+vPgf.Name+'):';
> >    Set vPgfA.Properties = vPgfH2.Properties;
> >    Set vHL = 'openObjectId ' +vDoc.Name+ ':2 '+ vPgf.Unique;
> >    New TextLoc NewVar(vTLoc) Object(vPgfA) Offset(ObjEndOffset -
1);
> >    New Marker NewVar(vMarker) MarkerText(vHL)
> >      MarkerTypeId(vHTMarker) TextLoc(vTLoc);
> >
> >    New Paragraph NewVar(vPgfB) PrevObject(vPgfA);
> >    Set vPgfB.Properties = vPgfSmall.Properties;
> >    New Text Object(vPgfB) vFileExt;
> >
> >    New Paragraph NewVar(vPgfC) PrevObject(vPgfB);
> >    Set vPgfC.Properties = vPgfBody.Properties;
> >    New Text Object(vPgfC) vMsg;
> >
> >    Set vPgfD = vListDoc.MainFlowInDoc.LastTextFrameInFlow.LastPgf;
> >    New Paragraph NewVar(vPgfE) PrevObject(vPgfD);
> >    Set vPgfE.Properties = vPgfH2.Properties;
> >
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub ComparePgfProps vObj1 vObj2
> > Set vMsg = '';
> >
> > If not vObj2
> >    Set vMsg = 'Format '+quote+vObj1.Name+quote+' '+vIsNotDefined;
> >    LeaveSub;
> > EndIf
> >
> > If not vPgf.FormatOverride
> >    Set vMsg = vNoFmtOverride;
> >    LeaveSub;
> > EndIf
> >
> > //-- BASIC / BASIS --
> > If vObj1.FirstIndent not= vObj2.FirstIndent
> >    Run Points2cm Using vPoints(vObj1.FirstIndent)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.FirstIndent)
> >      Returns vCm(vObj2Cm);
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = vObj1.FirstIndent/72*2.54;
> >      Set vObj2Cm = vObj2.FirstIndent/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vFirstIndent +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> > EndIf
> > If vObj1.LeftIndent not= vObj2.LeftIndent
> >    Run Points2cm Using vPoints(vObj1.LeftIndent)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.LeftIndent)
> >      Returns vCm(vObj2Cm);
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = vObj1.LeftIndent/72*2.54;
> >      Set vObj2Cm = vObj2.LeftIndent/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vLeftIndent +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> > EndIf
> > If vObj1.RightIndent not= vObj2.RightIndent
> >    Run Points2cm Using vPoints(vObj1.RightIndent)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.RightIndent)
> >      Returns vCm(vObj2Cm);
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = vObj1.RightIndent/72*2.54;
> >      Set vObj2Cm = vObj2.RightIndent/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vRightIndent +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> > EndIf
> > If vObj1.SpaceAbove not= vObj2.SpaceAbove
> >    Run Points2cm Using vPoints(vObj1.SpaceAbove)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.SpaceAbove)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.SpaceAbove)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.SpaceAbove)
> >      Returns vPts(vObj2Pts);
> >    //-- Centimeter only:
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = vObj1.SpaceAbove/72*2.54;
> >      Set vObj2Cm = vObj2.SpaceAbove/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> >    //-- Points only:
> >    //Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Pts
> >    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
> >    //-- Centimeter/Points:
> >    //Set vMsg=vMsg+ vSpaceAbove +':  '+ vObj1Cm +nbs+'cm / '+
> vObj1Pts
> >    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> > EndIf
> > If vObj1.SpaceBelow not= vObj2.SpaceBelow
> >    Run Points2cm Using vPoints(vObj1.SpaceBelow)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.SpaceBelow)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.SpaceBelow)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.SpaceBelow)
> >      Returns vPts(vObj2Pts);
> >    //-- Centimeter only:
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = vObj1.SpaceBelow/72*2.54;
> >      Set vObj2Cm = vObj2.SpaceBelow/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> >    //-- Points only:
> >    //Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Pts
> >    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
> >    //-- Centimeter/Points:
> >    //Set vMsg=vMsg+ vSpaceBelow +':  '+ vObj1Cm +nbs+'cm / '+
> vObj1Pts
> >    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> > EndIf
> > If vObj1.Leading not= vObj2.Leading
> >    Run Points2cm Using vPoints(vObj1.Leading+vObj1.FontSize)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.Leading+vObj2.FontSize)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.Leading+vObj1.FontSize)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.Leading+vObj2.FontSize)
> >      Returns vPts(vObj2Pts);
> >    //-- Centimeter only:
> >    If vObj1Cm = vObj2Cm
> >      Set vObj1Cm = (vObj1.Leading+vObj1.FontSize)/72*2.54;
> >      Set vObj2Cm = (vObj2.Leading+vObj2.FontSize)/72*2.54;
> >    EndIf
> >    Set vMsg=vMsg+ vLeading +':  '+ vObj1Cm
> >      +'  ('+vObj2Cm+')'+nbs+'cm' +vnl;
> >    //-- Points only:
> >    //Set vMsg=vMsg+ vLeading +':  '+ vObj1Pts
> >    //  +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
> >    //-- Centimeter/Points:
> >    //Set vMsg=vMsg+ vLeading +':  '+ vObj1Cm +nbs+'cm / '+
vObj1Pts
> >    //  +nbs+'pt  ('+ vObj2Cm +nbs+'cm / '+vObj2Pts+nbs+'pt)' +vnl;
> > EndIf
> > If vObj1.LineSpacing not= vObj2.LineSpacing
> >    //-- *** Dialog: Boolean!?
> >    Run GetLineSpacing Using vLSpacing(vObj1.LineSpacing)
> >      Returns vLSpacingString(vLSpace1);
> >    Run GetLineSpacing Using vLSpacing(vObj2.LineSpacing)
> >      Returns vLSpacingString(vLSpace2);
> >    Set vMsg=vMsg+ vLineSpacing +':  '+ vLSpace1
> >      +'  ('+vLSpace2+')' +vnl;
> > EndIf
> > If vObj1.PgfAlignment not= vObj2.PgfAlignment
> >    Run GetAlignment Using vAlign(vObj1.PgfAlignment)
> >      Returns vAlignString(vAlign1);
> >    Run GetAlignment Using vAlign(vObj2.PgfAlignment)
> >      Returns vAlignString(vAlign2);
> >    Set vMsg=vMsg+ vAlignment +':  '+ vAlign1 +'  ('+vAlign2+')'
> +vnl;
> > EndIf
> > If vObj1.NumTabs not= vObj2.NumTabs
> >    Set vMsg=vMsg+ vNumTabs +':  '+ vObj1.NumTabs
> >      +'  ('+vObj2.NumTabs+')' +vnl;
> > EndIf
> > New String NewVar(vTab1) Value(vObj1.Tabs);
> > New String NewVar(vTab2) Value(vObj2.Tabs);
> > If vTab1 not= vTab2
> >    Set vMsg=vMsg+ vTabs +vnl;
> > EndIf
> > If vObj1.UseNextTag not= vObj2.UseNextTag
> >    Run GetBoolean Using vBool(vObj1.UseNextTag)
> >      Returns vBoolString(vBool1);
> >    Run GetBoolean Using vBool(vObj2.UseNextTag)
> >      Returns vBoolString(vBool2);
> >    Set vMsg=vMsg+ vUseNextTag +':  '+ vBool1 +'  ('+vBool2+')'
+vnl;
> > EndIf
> > If vObj1.NextTag not= vObj2.NextTag
> >    Run GetString Using vString(vObj1.NextTag)
> >      Returns vStringD(vString1);
> >    Run GetString Using vString(vObj2.NextTag)
> >      Returns vStringD(vString2);
> >    Set vMsg=vMsg+ vNextTag +':  '+ vString1 +'  ('+vString2+')'
> +vnl;
> > EndIf
> >
> > //-- DEFAULT FONT / STANDARDSCHRIFT --
> > If vObj1.FontFamily not= vObj2.FontFamily
> >    Get Member Number(vObj1.FontFamily+1)
> >      From(FontFamilyNames) NewVar(vFont1);
> >    Get Member Number(vObj2.FontFamily+1)
> >      From(FontFamilyNames) NewVar(vFont2);
> >    Set vMsg=vMsg+ vFontFamily +':  '+ vFont1 +'  ('+vFont2+')'
+vnl;
> > EndIf
> > If vObj1.FontSize not= vObj2.FontSize
> >    Run FixPoints Using vPoints(vObj1.FontSize)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.FontSize)
> >      Returns vPts(vObj2Pts);
> >    Set vMsg=vMsg+ vFontSize +':  '+ vObj1Pts
> >      +'  ('+vObj2Pts+')'+nbs+'pt' +vnl;
> > EndIf
> > If vObj1.FontAngle not= vObj2.FontAngle
> >    Get Member Number(vObj1.FontAngle+1)
> >      From(FontAngleNames) NewVar(vAngle1);
> >    Get Member Number(vObj2.FontAngle+1)
> >      From(FontAngleNames) NewVar(vAngle2);
> >    If vObj1.FontAngle = 1 or vObj2.FontAngle = 1
> >      //-- (skip italic/oblique differences)
> >      Set vMsg=vMsg+ vFontAngle +':  '+ vAngle1
> >        +'  ('+vAngle2+')' +vnl;
> >    Endif
> > EndIf
> > If vObj1.FontWeight not= vObj2.FontWeight
> >    Get Member Number(vObj1.FontWeight+1)
> >      From(FontWeightNames) NewVar(vWeight1);
> >    Get Member Number(vObj2.FontWeight+1)
> >      From(FontWeightNames) NewVar(vWeight2);
> >    //If (vObj1.FontWeight <= 6 and vObj2.FontWeight > 6)
> >    //  or (vObj1.FontWeight > 6 and vObj2.FontWeight <= 6)
> >    //-- (skip bold/semibold differences - not)
> >      Set vMsg=vMsg+ vFontWeight +':  '+ vWeight1
> >        +'  ('+vWeight2+')' +vnl;
> >    //Endif
> > EndIf
> > If vObj1.FontVariation not= vObj2.FontVariation
> >    Get Member Number(vObj1.FontVariation+1)
> >      From(FontVariationNames) NewVar(vVar1);
> >    Get Member Number(vObj2.FontVariation+1)
> >      From(FontVariationNames) NewVar(vVar2);
> >    Set vMsg=vMsg+ vFontVariation +':  '+ vVar1
> >      +'  ('+vVar2+')' +vnl;
> > EndIf
> > If vObj1.Color not= vObj2.Color
> >    Set vColor1 = vObj1.Color.Name;
> >    Set vColor2 = vObj2.Color.Name;
> >    Set vMsg=vMsg+ vFontColor +':  '+ vColor1
> >      +'  ('+vColor2+')' +vnl;
> > EndIf
> > If vObj1.Spread not= vObj2.Spread
> >    Run PerCent2String using vPerCentV(vObj1.Spread)
> >      returns vPerCentS(vSpread1);
> >    Run PerCent2String using vPerCentV(vObj2.Spread)
> >      returns vPerCentS(vSpread2);
> >    Set vMsg=vMsg+ vFontSpread +':  '+ vSpread1
> >      +'  ('+vSpread2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.Stretch not= vObj2.Stretch
> >    Run PerCent2String using vPerCentV(vObj1.Stretch)
> >      returns vPerCentS(vStretch1);
> >    Run PerCent2String using vPerCentV(vObj2.Stretch)
> >      returns vPerCentS(vStretch2);
> >    Set vMsg=vMsg+ vFontStretch +':  '+ vStretch1
> >      +'  ('+vStretch2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.Language not= vObj2.Language
> >    Run GetLanguage using vLID(vObj1.Language)
> >      returns vLStr(vLang1)
> >    Run GetLanguage using vLID(vObj2.Language)
> >      returns vLStr(vLang2)
> >    Set vMsg=vMsg+ vLanguage +':  '+ vLang1
> >      +'  ('+vLang2+')' +vnl;
> > EndIf
> > If vObj1.Underlining not= vObj2.Underlining
> >    Run GetUnderline Using vUL(vObj1.Underlining)
> >      Returns vULString(vUL1);
> >    Run GetUnderline Using vUL(vObj2.Underlining)
> >      Returns vULString(vUL2);
> >    Set vMsg=vMsg+ vUnderlining +':  '+ vUL1 +'  ('+vUL2+')' +vnl;
> > EndIf
> > If vObj1.Overline not= vObj2.Overline
> >    Run GetBoolean Using vBool(vObj1.Overline)
> >      Returns vBoolString(vOL1);
> >    Run GetBoolean Using vBool(vObj2.Overline)
> >      Returns vBoolString(vOL2);
> >    Set vMsg=vMsg+ vOverline +':  '+ vOL1 +'  ('+vOL2+')' +vnl;
> > EndIf
> > If vObj1.Strikethrough not= vObj2.Strikethrough
> >    Run GetBoolean Using vBool(vObj1.Strikethrough)
> >      Returns vBoolString(vST1);
> >    Run GetBoolean Using vBool(vObj2.Strikethrough)
> >      Returns vBoolString(vST2);
> >    Set vMsg=vMsg+ vStrikethrough +':  '+ vST1 +'  ('+vST2+')'
+vnl;
> > EndIf
> > If vObj1.ChangeBar not= vObj2.ChangeBar
> >    Run GetBoolean Using vBool(vObj1.ChangeBar)
> >      Returns vBoolString(vCB1);
> >    Run GetBoolean Using vBool(vObj2.ChangeBar)
> >      Returns vBoolString(vCB2);
> >    Set vMsg=vMsg+ vChangeBar +':  '+ vCB1 +'  ('+vCB2+')' +vnl;
> > EndIf
> > If vObj1.Position not= vObj2.Position
> >    Run GetPosition Using vPos(vObj1.Position)
> >      Returns vPosString(vPos1);
> >    Run GetPosition Using vPos(vObj2.Position)
> >      Returns vPosString(vPos2);
> >    Set vMsg=vMsg+ vPosition +':  '+ vPos1 +'  ('+vPos2+')' +vnl;
> > EndIf
> > If vObj1.Capitalization not= vObj2.Capitalization
> >    Run GetCapital Using vCap(vObj1.Capitalization)
> >      Returns vCapString(vCap1);
> >    Run GetCapital Using vCap(vObj2.Capitalization)
> >      Returns vCapString(vCap2);
> >    Set vMsg=vMsg+ vCapitalization +':  '+ vCap1 +'  ('+vCap2+')'
> +vnl;
> > EndIf
> > If vObj1.PairKern not= vObj2.PairKern
> >    Run GetBoolean Using vBool(vObj1.PairKern)
> >      Returns vBoolString(vPK1);
> >    Run GetBoolean Using vBool(vObj2.PairKern)
> >      Returns vBoolString(vPK2);
> >    Set vMsg=vMsg+ vPairKern +':  '+ vPK1 +'  ('+vPK2+')' +vnl;
> > EndIf
> > If vObj1.Outline not= vObj2.Outline
> >    Run GetBoolean Using vBool(vObj1.Outline)
> >      Returns vBoolString(vOtl1);
> >    Run GetBoolean Using vBool(vObj2.Outline)
> >      Returns vBoolString(vOtl2);
> >    Set vMsg=vMsg+ vOutline +':  '+ vOtl1 +'  ('+vOtl2+')' +vnl;
> > EndIf
> > If vObj1.Shadow not= vObj2.Shadow
> >    Run GetBoolean Using vBool(vObj1.Shadow)
> >      Returns vBoolString(vShad1);
> >    Run GetBoolean Using vBool(vObj2.Shadow)
> >      Returns vBoolString(vShad2);
> >    Set vMsg=vMsg+ vShadow +':  '+ vShad1 +'  ('+vShad2+')' +vnl;
> > EndIf
> >
> > //-- PAGINATION / SEITENUMBRUCH --
> > If vObj1.Start not= vObj2.Start
> >    Run GetStart Using vStrt(vObj1.Start)
> >      Returns vStrtString(vStart1);
> >    Run GetStart Using vStrt(vObj2.Start)
> >      Returns vStrtString(vStart2);
> >    Set vMsg=vMsg+ vStart +':  '+ vStart1 +'  ('+vStart2+')' +vnl;
> > EndIf
> > If vObj1.KeepWithNext not= vObj2.KeepWithNext
> >    Run GetBoolean Using vBool(vObj1.KeepWithNext)
> >      Returns vBoolString(vKeep1a);
> >    Run GetBoolean Using vBool(vObj2.KeepWithNext)
> >      Returns vBoolString(vKeep2a);
> >    Set vMsg=vMsg+ vKeepWithNext +':  '+ vKeep1a
> >      +'  ('+vKeep2a+')' +vnl;
> > EndIf
> > If vObj1.KeepWithPrev not= vObj2.KeepWithPrev
> >    Run GetBoolean Using vBool(vObj1.KeepWithPrev)
> >      Returns vBoolString(vKeep1b);
> >    Run GetBoolean Using vBool(vObj2.KeepWithPrev)
> >      Returns vBoolString(vKeep2b);
> >    Set vMsg=vMsg+ vKeepWithPrev +':  '+ vKeep1b
> >      +'  ('+vKeep2b+')' +vnl;
> > EndIf
> > If vObj1.BlockLines not= vObj2.BlockLines
> >    Set vMsg=vMsg+ vBlockLines +':  '+ vObj1.BlockLines
> >      +'  ('+vObj2.BlockLines+')' +vnl;
> > EndIf
> > Set RunInSep1 = '['+ vObj1.RunInSeparator +']';
> > Set RunInSep2 = '['+ vObj2.RunInSeparator +']';
> > If vObj1.RunInSeparator not= vObj2.RunInSeparator
> >    If vObj1.Placement = vObj2.Placement
> >      Set vMsg=vMsg+ vPlacement +':  '+ vPlaceRunIn
> >        +':  '+ RunInSep1 +'  ('+RunInSep2+')' +vnl;
> >    EndIf
> > EndIf
> > If vObj1.Placement not= vObj2.Placement
> >    Run GetPlacement Using vPlace(vObj1.Placement)
> >      vRIS(RunInSep1) vFirst(1) Returns vPlaceString(vPlace1);
> >    Run GetPlacement Using vPlace(vObj2.Placement)
> >      vRIS(RunInSep2) vFirst(0) Returns vPlaceString(vPlace2);
> >    Set vMsg=vMsg+ vPlacement +':  '+ vPlace1 +'  ('+vPlace2+')'
> +vnl;
> > EndIf
> >
> > //-- NUMBERING / NUMERIERUNG --
> > If vObj1.PgfIsAutoNum not= vObj2.PgfIsAutoNum
> >    Run GetBoolean Using vBool(vObj1.PgfIsAutoNum)
> >      Returns vBoolString(vAN1);
> >    Run GetBoolean Using vBool(vObj2.PgfIsAutoNum)
> >      Returns vBoolString(vAN2);
> >    Set vMsg=vMsg+ vPgfIsAutoNum +':  '+ vAN1 +'  ('+vAN2+')' +vnl;
> > EndIf
> > If vObj1.AutoNumString not= vObj2.AutoNumString
> >    Run GetString Using vString(vObj1.AutoNumString)
> >      Returns vStringD(vANS1);
> >    Run GetString Using vString(vObj2.AutoNumString)
> >      Returns vStringD(vANS2);
> >    Set vMsg=vMsg+ vAutoNumString +':  '+ vANS1 +'  ('+vANS2+')'
> +vnl;
> > EndIf
> > If vObj1.AutoNumChar not= vObj2.AutoNumChar
> >    Run GetString Using vString(vObj1.AutoNumChar)
> >      Returns vStringD(vANC1);
> >    Run GetString Using vString(vObj2.AutoNumChar)
> >      Returns vStringD(vANC2);
> >    Set vMsg=vMsg+ vAutoNumChar +':  '+ vANC1 +'  ('+vANC2+')'
+vnl;
> > EndIf
> > If vObj1.NumAtEnd not= vObj2.NumAtEnd
> >    Run GetAutoNumPos Using vNumAtEnd(vObj1.NumAtEnd)
> >      Returns vANPosString(vANP1);
> >    Run GetAutoNumPos Using vNumAtEnd(vObj2.NumAtEnd)
> >      Returns vANPosString(vANP2);
> >    Set vMsg=vMsg+ vAutoNumPos +':  '+ vANP1 +'  ('+vANP2+')' +vnl;
> > EndIf
> >
> > //-- ADVANCED / EXTRA --
> > If vObj1.AdjHyphens not= vObj2.AdjHyphens
> >    Set vMsg=vMsg+ vAdjHyphens +':  '+ vObj1.AdjHyphens
> >      +'  ('+vObj2.AdjHyphens+')' +vnl;
> > EndIf
> > If vObj1.HyphMinWord not= vObj2.HyphMinWord
> >    Set vMsg=vMsg+ vHyphMinWord +':  '+ vObj1.HyphMinWord
> >      +'  ('+vObj2.HyphMinWord+')' +vnl;
> > EndIf
> > If vObj1.HyphMinPrefix not= vObj2.HyphMinPrefix
> >    Set vMsg=vMsg+ vHyphMinPrefix +':  '+ vObj1.HyphMinPrefix
> >      +'  ('+vObj2.HyphMinPrefix+')' +vnl;
> > EndIf
> > If vObj1.HyphMinSuffix not= vObj2.HyphMinSuffix
> >    Set vMsg=vMsg+ vHyphMinSuffix +':  '+ vObj1.HyphMinSuffix
> >      +'  ('+vObj2.HyphMinSuffix+')' +vnl;
> > EndIf
> > If vObj1.Hyphenate not= vObj2.Hyphenate
> >    Run GetBoolean Using vBool(vObj1.Hyphenate)
> >      Returns vBoolString(vHyph1);
> >    Run GetBoolean Using vBool(vObj2.Hyphenate)
> >      Returns vBoolString(vHyph2);
> >    Set vMsg=vMsg+ vHyphenate +':  '+ vHyph1 +'  ('+vHyph2+')'
+vnl;
> > EndIf
> > If vObj1.MinSpace not= vObj2.MinSpace
> >    Run PerCent2String using vPerCentV(vObj1.MinSpace)
> >      returns vPerCentS(vMinSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MinSpace)
> >      returns vPerCentS(vMinSpace2);
> >    Set vMsg=vMsg+ vMinSpace +':  '+ vMinSpace1
> >      +'  ('+vMinSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.MaxSpace not= vObj2.MaxSpace
> >    Run PerCent2String using vPerCentV(vObj1.MaxSpace)
> >      returns vPerCentS(vMaxSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MaxSpace)
> >      returns vPerCentS(vMaxSpace2);
> >    Set vMsg=vMsg+ vMaxSpace +':  '+ vMaxSpace1
> >      +'  ('+vMaxSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.OptSpace not= vObj2.OptSpace
> >    Run PerCent2String using vPerCentV(vObj1.OptSpace)
> >      returns vPerCentS(vOptSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.OptSpace)
> >      returns vPerCentS(vOptSpace2);
> >    Set vMsg=vMsg+ vOptSpace +':  '+ vOptSpace1
> >      +'  ('+vOptSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.LetterSpace not= vObj2.LetterSpace
> >    Run GetBoolean Using vBool(vObj1.LetterSpace)
> >      Returns vBoolString(vLSp1);
> >    Run GetBoolean Using vBool(vObj2.LetterSpace)
> >      Returns vBoolString(vLSp2);
> >    Set vMsg=vMsg+ vLetterSpace +':  '+ vLSp1 +'  ('+vLSp2+')'
+vnl;
> > EndIf
> > If vObj1.TopSeparator not= vObj2.TopSeparator
> >    Run GetString Using vString(vObj1.TopSeparator)
> >      Returns vStringD(vSepTop1);
> >    Run GetString Using vString(vObj2.TopSeparator)
> >      Returns vStringD(vSepTop2);
> >    Set vMsg=vMsg+ vTopSeparator +':  '+ vSepTop1
> >      +'  ('+vSepTop2+')' +vnl;
> > EndIf
> > If vObj1.BottomSeparator not= vObj2.BottomSeparator
> >    Run GetString Using vString(vObj1.BottomSeparator)
> >      Returns vStringD(vSepBot1);
> >    Run GetString Using vString(vObj2.BottomSeparator)
> >      Returns vStringD(vSepBot2);
> >    Set vMsg=vMsg+ vBottomSeparator +':  '+ vSepBot1
> >      +'  ('+vSepBot2+')' +vnl;
> > EndIf
> >
> > //-- TABLE CELL / ZELLE --
> > If vObj1.CellVAlignment not= vObj2.CellVAlignment
> >    Run GetCellVAlign Using vCellVA(vObj1.CellVAlignment)
> >      Returns vCellVAString(vCA1);
> >    Run GetCellVAlign Using vCellVA(vObj2.CellVAlignment)
> >      Returns vCellVAString(vCA2);
> >    Set vMsg=vMsg+ vCellVAlignment +':  '+ vCA1 +'  ('+vCA2+')'
+vnl;
> > EndIf
> >
> > Set vCMF1 = vObj1.CellMarginsFixed;
> > Set vCMF2 = vObj2.CellMarginsFixed;
> >
> > Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> > If vCMF1 - PgfFixedTMargin >= 0
> >    Set vCTF1 = vCellMarginFixed;
> >    Set vCMF1 = vCMF1 - PgfFixedTMargin;
> > EndIf
> > If vCMF2 - PgfFixedTMargin >= 0
> >    Set vCTF2 = vCellMarginFixed;
> >    Set vCMF2 = vCMF2 - PgfFixedTMargin;
> > EndIf
> > If vObj1.CellTopMargin not= vObj2.CellTopMargin
> >      or vCTF1 not= vCTF2
> >    Run Points2cm Using vPoints(vObj1.CellTopMargin)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.CellTopMargin)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.CellTopMargin)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.CellTopMargin)
> >      Returns vPts(vObj2Pts);
> >    If vCTF2 = vCTF1
> >      Set vCTF2 = '';
> >    Else
> >      Set vCTF2 = vDash+vCTF2;
> >    EndIf
> >    //-- Centimeter:
> >    Set vMsg=vMsg+ vCellTopMargin +' ('+ vCTF1 +'):  '
> >      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
> >    //-- Points:
> >    //Set vMsg=vMsg+ vCellTopMargin +' ('+ vCTF1 +'):  '
> >    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> > EndIf
> >
> > Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> > If vCMF1 - PgfFixedRMargin >= 0
> >    Set vCTF1 = vCellMarginFixed;
> >    Set vCMF1 = vCMF1 - PgfFixedRMargin;
> > EndIf
> > If vCMF2 - PgfFixedRMargin >= 0
> >    Set vCTF2 = vCellMarginFixed;
> >    Set vCMF2 = vCMF2 - PgfFixedRMargin;
> > EndIf
> > If vObj1.CellRightMargin not= vObj2.CellRightMargin
> >      or vCTF1 not= vCTF2
> >    Run Points2cm Using vPoints(vObj1.CellRightMargin)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.CellRightMargin)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.CellRightMargin)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.CellRightMargin)
> >      Returns vPts(vObj2Pts);
> >    If vCTF2 = vCTF1
> >      Set vCTF2 = '';
> >    Else
> >      Set vCTF2 = vDash+vCTF2;
> >    EndIf
> >    //-- Centimeter:
> >    Set vMsg=vMsg+ vCellRightMargin +' ('+ vCTF1 +'):  '
> >      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
> >    //-- Points:
> >    //Set vMsg=vMsg+ vCellRightMargin +' ('+ vCTF1 +'):  '
> >    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> > EndIf
> >
> > Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> > If vCMF1 - PgfFixedBMargin >= 0
> >    Set vCTF1 = vCellMarginFixed;
> >    Set vCMF1 = vCMF1 - PgfFixedBMargin;
> > EndIf
> > If vCMF2 - PgfFixedBMargin >= 0
> >    Set vCTF2 = vCellMarginFixed;
> >    Set vCMF2 = vCMF2 - PgfFixedBMargin;
> > EndIf
> > If vObj1.CellBottomMargin not= vObj2.CellBottomMargin
> >      or vCTF1 not= vCTF2
> >    If vCTF2 = vCTF1
> >      Set vCTF2 = '';
> >    Else
> >      Set vCTF2 = vDash+vCTF2;
> >    EndIf
> >    Run Points2cm Using vPoints(vObj1.CellBottomMargin)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.CellBottomMargin)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.CellBottomMargin)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.CellBottomMargin)
> >      Returns vPts(vObj2Pts);
> >    //-- Centimeter:
> >    Set vMsg=vMsg+ vCellBottomMargin +' ('+ vCTF1 +'):  '
> >      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
> >    //-- Points:
> >    //Set vMsg=vMsg+ vCellBottomMargin +' ('+ vCTF1 +'):  '
> >    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> > EndIf
> >
> > Set vCTF1 = vCellMarginAdded; Set vCTF2 = vCellMarginAdded;
> > If vCMF1 - PgfFixedLMargin >= 0
> >    Set vCTF1 = vCellMarginFixed;
> >    Set vCMF1 = vCMF1 - PgfFixedLMargin;
> > EndIf
> > If vCMF2 - PgfFixedLMargin >= 0
> >    Set vCTF2 = vCellMarginFixed;
> >    Set vCMF2 = vCMF2 - PgfFixedLMargin;
> > EndIf
> > If vObj1.CellLeftMargin not= vObj2.CellLeftMargin
> >      or vCTF1 not= vCTF2
> >    If vCTF2 = vCTF1
> >      Set vCTF2 = '';
> >    Else
> >      Set vCTF2 = vDash+vCTF2;
> >    EndIf
> >    Run Points2cm Using vPoints(vObj1.CellLeftMargin)
> >      Returns vCm(vObj1Cm);
> >    Run Points2cm Using vPoints(vObj2.CellLeftMargin)
> >      Returns vCm(vObj2Cm);
> >    Run FixPoints Using vPoints(vObj1.CellLeftMargin)
> >      Returns vPts(vObj1Pts);
> >    Run FixPoints Using vPoints(vObj2.CellLeftMargin)
> >      Returns vPts(vObj2Pts);
> >    //-- Centimeter:
> >    Set vMsg=vMsg+ vCellLeftMargin +' ('+ vCTF1 +'):  '
> >      + vObj1Cm +'  ('+vObj2Cm+ vCTF2 +')'+nbs+'cm' +vnl;
> >    //-- Points:
> >    //Set vMsg=vMsg+ vCellLeftMargin +' ('+ vCTF1 +'):  '
> >    //  + vObj1Pts +'  ('+vObj2Pts+ vCTF2 +')'+nbs+'pt' +vnl;
> > EndIf
> > //-------
> > If vObj1.KernX not= vObj2.KernX
> >    Run FixPoints Using vPoints(vObj1.KernX) Returns vPts(vKernX1);
> >    Run FixPoints Using vPoints(vObj2.KernX) Returns vPts(vKernX2);
> >    Set vMsg=vMsg+ vKernX +':  '+ vKernX1 +'  ('+vKernX2+') '
> >      +vemspace +vnl;
> > EndIf
> > If vObj1.KernY not= vObj2.KernY
> >    Run FixPoints Using vPoints(vObj1.KernY) Returns vPts(vKernY1);
> >    Run FixPoints Using vPoints(vObj2.KernY) Returns vPts(vKernY2);
> >    Set vMsg=vMsg+ vKernY +':  '+ vKernY1 +'  ('+vKernY2+') '
> >      +vemspace +vnl;
> > EndIf
> > //-------
> > /*
> > //-- only relevant at pgffmt level,
> > //-- change of pgf.AcrobatLevel does not set override flag
> > If vObj1.AcrobatLevel not= vObj2.AcrobatLevel
> >    Set vMsg=vMsg+ vAcrobatLevel +':  '+ vObj1.AcrobatLevel
> >      +'  ('+vObj2.AcrobatLevel+')' +vnl;
> > EndIf
> > If vObj1.PDFStructureLevel not= vObj2.PDFStructureLevel
> >    Set vMsg=vMsg+ vPDFStructureLevel +':  '+
vObj1.PDFStructureLevel
> >      +'  ('+vObj2.PDFStructureLevel+')' +vnl;
> > EndIf
> > */
> > //-------
> > If vObj1.MinJRomSpace not= vObj2.MinJRomSpace
> >    Run PerCent2String using vPerCentV(vObj1.MinJRomSpace)
> >      returns vPerCentS(vMinJRomSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MinJRomSpace)
> >      returns vPerCentS(vMinJRomSpace2);
> >    Set vMsg=vMsg+ vMinJRomSpace +':  '+ vMinJRomSpace1
> >      +'  ('+vMinJRomSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.MaxJRomSpace not= vObj2.MaxJRomSpace
> >    Run PerCent2String using vPerCentV(vObj1.MaxJRomSpace)
> >      returns vPerCentS(vMaxJRomSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MaxJRomSpace)
> >      returns vPerCentS(vMaxJRomSpace2);
> >    Set vMsg=vMsg+ vMaxJRomSpace +':  '+ vMaxJRomSpace1
> >      +'  ('+vMaxJRomSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.OptJRomSpace not= vObj2.OptJRomSpace
> >    Run PerCent2String using vPerCentV(vObj1.OptJRomSpace)
> >      returns vPerCentS(vOptJRomSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.OptJRomSpace)
> >      returns vPerCentS(vOptJRomSpace2);
> >    Set vMsg=vMsg+ vOptJRomSpace +':  '+ vOptJRomSpace1
> >      +'  ('+vOptJRomSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.MinJLetSpace not= vObj2.MinJLetSpace
> >    Run PerCent2String using vPerCentV(vObj1.MinJLetSpace)
> >      returns vPerCentS(vMinJLetSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MinJLetSpace)
> >      returns vPerCentS(vMinJLetSpace2);
> >    Set vMsg=vMsg+ vMinJLetSpace +':  '+ vMinJLetSpace1
> >      +'  ('+vMinJLetSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.MaxJLetSpace not= vObj2.MaxJLetSpace
> >    Run PerCent2String using vPerCentV(vObj1.MaxJLetSpace)
> >      returns vPerCentS(vMaxJLetSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.MaxJLetSpace)
> >      returns vPerCentS(vMaxJLetSpace2);
> >    Set vMsg=vMsg+ vMaxJLetSpace +':  '+ vMaxJLetSpace1
> >      +'  ('+vMaxJLetSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > If vObj1.OptJLetSpace not= vObj2.OptJLetSpace
> >    Run PerCent2String using vPerCentV(vObj1.OptJLetSpace)
> >      returns vPerCentS(vOptJLetSpace1);
> >    Run PerCent2String using vPerCentV(vObj2.OptJLetSpace)
> >      returns vPerCentS(vOptJLetSpace2);
> >    Set vMsg=vMsg+ vOptJLetSpace +':  '+ vOptJLetSpace1
> >      +'  ('+vOptJLetSpace2+')'+nbs+'%' +vnl;
> > EndIf
> > //-------
> > If vObj1.YakumonoType not= vObj2.YakumonoType
> >    Run GetYakumono Using vYakType(vObj1.YakumonoType)
> >      Returns vYakTypeString(vJak1);
> >    Run GetYakumono Using vYakType(vObj2.YakumonoType)
> >      Returns vYakTypeString(vJak2);
> >    Set vMsg=vMsg+ vYakumonoType +':  '+ vJak1 +'  ('+vJak2+')'
+vnl;
> > EndIf
> > If vObj1.Tsume not= vObj2.Tsume
> >    Set vMsg=vMsg+ 'Tsume:  '+ vObj1.Tsume
> >      +'  ('+vObj2.Tsume+')' +vnl;
> > EndIf
> > //-------
> > If vObj1.FontFamily = vObj2.FontFamily
> >    and vObj1.FontAngle = vObj2.FontAngle
> >    and vObj1.FontWeight = vObj2.FontWeight
> >    and vObj1.FontVariation = vObj2.FontVariation
> >    If vObj1.FontPlatformName not= vObj2.FontPlatformName
> >      Set vMsg=vMsg+ 'Font - PlatformName' +':  '
> >        + vObj1.FontPlatformName +'  ('
> >        + vObj2.FontPlatformName +')' +vnl;
> >    EndIf
> >    If vObj1.FontPostScriptName not= vObj2.FontPostScriptName
> >      Set vMsg=vMsg+ 'Font - PostScriptName' +':  '
> >        + vObj1.FontPostScriptName +'  ('
> >        + vObj2.FontPostScriptName +')' +vnl;
> >    EndIf
> >    If vObj1.FontPanoseName not= vObj2.FontPanoseName
> >      Set vMsg=vMsg+ 'Font - PanoseName' +':  '
> >        + vObj1.FontPanoseName +'  ('
> >        + vObj2.FontPanoseName +')' +vnl;
> >    EndIf
> >    If vObj1.WesternFontPlatformName not=
> vObj2.WesternFontPlatformName
> >      Set vMsg=vMsg+ 'Font - PlatformName (Western)' +':  '
> >        + vObj1.WesternFontPlatformName +'  ('
> >        + vObj2.WesternFontPlatformName +')' +vnl;
> >    EndIf
> >    If vObj1.WesternFontPostScriptName not=
> vObj2.WesternFontPostScriptName
> >      Set vMsg=vMsg+ 'Font - PostScriptName (Western)' +':  '
> >        + vObj1.WesternFontPostScriptName +'  ('
> >        + vObj2.WesternFontPostScriptName +')' +vnl;
> >    EndIf
> >    If vObj1.WesternFontPanoseName not= vObj2.WesternFontPanoseName
> >      Set vMsg=vMsg+ 'Font - PanoseName (Western)' +':  '
> >        + vObj1.WesternFontPanoseName +'  ('
> >        + vObj2.WesternFontPanoseName +')' +vnl;
> >    EndIf
> >    If vObj1.FontEncodingName not= vObj2.FontEncodingName
> >      Set vMsg=vMsg+ 'Font - EncodingName' +':  '
> >        + vObj1.FontEncodingName +'  ('
> >        + vObj2.FontEncodingName +')' +vnl;
> >    EndIf
> >    If vObj1.CombinedFontFamily not= vObj2.CombinedFontFamily
> >      Set vMsg=vMsg+ 'Font - CombinedFontFamily' +vnl;
> >    EndIf
> > EndIf
> >
> > //----------------------
> > Sub FixPoints Using vPoints Returns vPts
> > New Real NewVar(vPtsR) Value(vPoints);
> > Set vPtsR = vPtsR *1000+0.5;
> > New Integer NewVar(vPtsR) Value(vPtsR);
> > New Real NewVar(vPtsR) Value(vPtsR);
> > Set vPtsR = vPtsR/1000;
> > New String NewVar(vPts) Value(vPtsR);
> > Get String FromString(vPts) NewVar(vPts)
> >    ReplaceAll('.') With(vDecChar);
> > Find String(vDecChar) InString(vPts) ReturnPos(vPos);
> > Get String FromString(vPts) NewVar(vPts) EndPos(vPos+3);
> > Get String FromString(vPts) NewVar(vPts) RemoveTrailing('0');
> > Get String FromString(vPts) NewVar(vPts) RemoveTrailing(vDecChar);
> > EndSub
> >
> > //----------------------
> > Sub Points2cm Using vPoints Returns vCm
> > New Real NewVar(vCmR) Value(vPoints/72*2.54);
> > Set vCmR = vCmR *1000+0.5;
> > New Integer NewVar(vCmR) Value(vCmR);
> > New Real NewVar(vCmR) Value(vCmR);
> > Set vCmR = vCmR/1000;
> > New String NewVar(vCm) Value(vCmR);
> > Get String FromString(vCm) NewVar(vCm)
> >    ReplaceAll('.') With(vDecChar);
> > Find String(vDecChar) InString(vCm) ReturnPos(vPos);
> > Get String FromString(vCm) NewVar(vCm) EndPos(vPos+3);
> > Get String FromString(vCm) NewVar(vCm) RemoveTrailing('0');
> > Get String FromString(vCm) NewVar(vCm) RemoveTrailing(vDecChar);
> > EndSub
> >
> > //----------------------
> > Sub GetBoolean Using vBool Returns vBoolString
> > Set vBoolString = vBooleanYes;
> > If vBool = 0 Set vBoolString = vBooleanNo; EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetBooleanCB Using vBool Returns vBoolString
> > //-- 'graphical' Yes/No (-?)
> > Set vBoolString = '[x]';
> > If vBool = 0 Set vBoolString = '[ ]'; EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetString Using vString Returns vStringD
> > //-- Prevent confusion specifying empty strings
> > Set vStringD = vEmptyString;
> > If vString Set vStringD = vString; EndIf
> > EndSub
> >
> > //----------------------
> > Sub PerCent2String using vPerCentV returns vPerCentS
> > New Real NewVar(vPerCentV) value(vPerCentV);
> > Set viRound = 0.00005;
> > If vPerCentV < 0 Set viRound = -0.00005; EndIf
> > New Integer NewVar(vPerCentI) value((vPerCentV+viRound)*10000);
> > New Real NewVar(vPerCentR) value(vPerCentI);
> > New Real NewVar(vPerCentR) value(vPerCentR/100);
> > Set vPerCentS = '' + vPerCentR;
> > Find String('.') InString(vPerCentS) ReturnPos(vPos);
> > Get String FromString(vPerCentS) EndPos(vPos+2) NewVar(vPerCentS);
> > Get String FromString(vPerCentS) NewVar(vPerCentS)
> >    ReplaceAll('.') With(vDecChar);
> > EndSub
> >
> > //----------------------
> > Sub GetLineSpacing Using vLSpacing Returns vLSpacingString
> > If vLSpacing = PgfFixed
> >    Set vLSpacingString = vLSpFixed; LeaveSub;
> > EndIf
> > If vLSpacing = PgfProportional
> >    Set vLSpacingString = vLSpProportional; LeaveSub;
> > EndIf
> > If vLSpacing = PgfFloating
> >    Set vLSpacingString = vLSpFloating; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetAlignment Using vAlign Returns vAlignString
> > If vAlign = PgfLeft
> >    Set vAlignString = vAlignLeft; LeaveSub;
> > EndIf
> > If vAlign = PgfRight
> >    Set vAlignString = vAlignRight; LeaveSub;
> > EndIf
> > If vAlign = PgfCenter
> >    Set vAlignString = vAlignCenter; LeaveSub;
> > EndIf
> > If vAlign = PgfJustified
> >    Set vAlignString = vAlignJustified; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetLanguage using vLID returns vLStr
> > If vLID=LangBrazilian Set vLStr='Portugues do Brazil'; EndIf
> > If vLID=LangBritish Set vLStr='British English'; EndIf
> > If vLID=LangCanadianFrench Set vLStr='Canadien Francais'; EndIf
> > If vLID=LangCatalan Set vLStr='Catala'; EndIf
> > If vLID=LangDanish Set vLStr='Dansk'; EndIf
> > If vLID=LangDutch Set vLStr='Nederlands'; EndIf
> > If vLID=LangEnglish Set vLStr='American English'; EndIf
> > If vLID=LangFinnish Set vLStr='Suomi'; EndIf
> > If vLID=LangFrench Set vLStr='Francais'; EndIf
> > If vLID=LangGerman Set vLStr='Deutsch'; EndIf
> > If vLID=LangItalian Set vLStr='Italiano'; EndIf
> > If vLID=LangNewDutch Set vLStr='Nederlands Nieuw'; EndIf
> > If vLID=LangNewGerman Set vLStr='Deutsch (neu)'; EndIf
> > //If vLID=LangNewSwiss Set vLStr='Schweizerdeutsch (neu)'; EndIf
> > If vLID=23 Set vLStr='Schweizerdeutsch (neu)'; EndIf
> > If vLID=LangNorwegian Set vLStr='Norsk'; EndIf
> > If vLID=LangNynorsk Set vLStr='Nynorsk'; EndIf
> > If vLID=LangPortuguese Set vLStr='Portugues'; EndIf
> > If vLID=LangSpanish Set vLStr='Espanol'; EndIf
> > If vLID=LangSwedish Set vLStr='Svenska'; EndIf
> > If vLID=LangSwissGerman Set vLStr='Schweizerdeutsch'; EndIf
> > If vLID=LangJapanese Set vLStr='Japanese'; EndIf
> > If vLID=LangTraditionalChinese Set vLStr='Trad. Chinese'; EndIf
> > If vLID=LangSimplifiedChinese Set vLStr='Simplified Chinese';EndIf
> > If vLID=LangKorean Set vLStr='Korean'; EndIf
> > If vLID=LangNoLanguage Set vLStr=vLangNoLanguage; EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetUnderline Using vUL Returns vULString
> > If vUL = CbNoUnderline
> >    Set vULString = vULNot; LeaveSub;
> > EndIf
> > If vUL = CbSingleUnderline
> >    Set vULString = vULSingle; LeaveSub;
> > EndIf
> > If vUL = CbDoubleUnderline
> >    Set vULString = vULDouble; LeaveSub;
> > EndIf
> > If vUL = CbNumericUnderline
> >    Set vULString = vULNumeric; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetPosition Using vPos Returns vPosString
> > If vPos = PosNorm
> >    Set vPosString = vPosNorm; LeaveSub;
> > EndIf
> > If vPos = PosSuper
> >    Set vPosString = vPosSuper; LeaveSub;
> > EndIf
> > If vPos = PosSub
> >    Set vPosString = vPosSub; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetCapital Using vCap Returns vCapString
> > If vCap = CapitalCaseNorm
> >    Set vCapString = vCapitalNorm; LeaveSub;
> > EndIf
> > If vCap = CapitalCaseSmall
> >    Set vCapString = vCapitalSmall; LeaveSub;
> > EndIf
> > If vCap = CapitalCaseLower
> >    Set vCapString = vCapitalLower; LeaveSub;
> > EndIf
> > If vCap = CapitalCaseUpper
> >    Set vCapString = vCapitalUpper; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetStart Using vStrt Returns vStrtString
> > If vStrt = PgfAnywhere
> >    Set vStrtString = vStartAnywhere; LeaveSub;
> > EndIf
> > If vStrt = PgfTopOfCol
> >    Set vStrtString = vStartTopOfCol; LeaveSub;
> > EndIf
> > If vStrt = PgfTopOfPage
> >    Set vStrtString = vStartTopOfPage; LeaveSub;
> > EndIf
> > If vStrt = PgfTopOfLeftPage
> >    Set vStrtString = vStartTopLeft; LeaveSub;
> > EndIf
> > If vStrt = PgfTopOfRightPage
> >    Set vStrtString = vStartTopRight; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetPlacement Using vPlace vRIS vFirst Returns vPlaceString
> > If vPlace = PgfSideBody
> >    Set vPlaceString = vPlaceSideBody; LeaveSub;
> > EndIf
> > If vPlace = PgfRunIn
> >    Set vPlaceString = vPlaceRunIn +' '+ vRIS; LeaveSub;
> > EndIf
> > If vPlace = PgfSideHeadTop
> >    Set vx = vPlaceSHTop;
> >    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
> >    Set vPlaceString = vx;
> >    Set vFirstSideHead = true; LeaveSub;
> > EndIf
> > If vPlace = PgfSideHeadFirstBaseline
> >    Set vx = vPlaceSHFirstBaseline;
> >    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
> >    Set vPlaceString = vx;
> >    Set vFirstSideHead = true; LeaveSub;
> > EndIf
> > If vPlace = PgfSideHeadLastBaseline
> >    Set vx = vPlaceSHLastBaseline;
> >    If Not vFirstSideHead Set vx = vPlaceSideHead +': '+ vx; EndIf
> >    Set vPlaceString = vx;
> >    Set vFirstSideHead = true; LeaveSub
> > EndIf
> > If vPlace = PgfStraddleNormalOnly
> >    Set vPlaceString = vPlaceStraddleNormalOnly; LeaveSub;
> > EndIf
> > If vPlace = PgfStraddle
> >    Set vPlaceString = vPlaceStraddle; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetAutoNumPos Using vNumAtEnd Returns vANPosString
> > Set vANPosString = vAutoNumPosPB;
> > If vNumAtEnd
> >    Set vANPosString = vAutoNumPosPE;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetCellVAlign Using vCellVA Returns vCellVAString
> > If vCellVA = PgfVAlignTop
> >    Set vCellVAString = vPgfVAlignTop; LeaveSub;
> > EndIf
> > If vCellVA = PgfVAlignMiddle
> >    Set vCellVAString = vPgfVAlignMiddle; LeaveSub;
> > EndIf
> > If vCellVA = PgfVAlignBottom
> >    Set vCellVAString = vPgfVAlignBottom; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub GetYakumono Using vYakType Returns vYakTypeString
> > If vYakType = vFloatingYakumono
> >    Set vYakTypeString = vFloatingYakumono; LeaveSub;
> > EndIf
> > If vYakType = vMonospaceYakumono
> >    Set vYakTypeString = vMonospaceYakumono; LeaveSub;
> > EndIf
> > If vYakType = vFixedYakumono
> >    Set vYakTypeString = vFixedYakumono; LeaveSub;
> > EndIf
> > EndSub
> >
> > //----------------------
> > Sub ClearDoc Using vNewDoc
> > //-- NewDoc: Delete all unnecessary components
> > Set vObj = vNewDoc.FirstPgfFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextPgfFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstCharFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextCharFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstCondFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextCondFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstColorInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextColorInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstMarkerTypeInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextMarkerTypeInDoc;
> >    //Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstRulingFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextRulingFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstTblFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextTblFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstVarFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextVarFmtInDoc;
> >    //Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstXRefFmtInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextXRefFmtInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstTblInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.NextTblInDoc;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstMasterPageInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.PageNext;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > Set vObj = vNewDoc.FirstRefPageInDoc;
> > Loop While(vObj)
> >    Set vObjToDelete = vObj;
> >    Set vObj = vObj.PageNext;
> >    Delete Object(vObjToDelete);
> > EndLoop
> > EndSub
> >
> > //----------------------
> > Sub GetFontFamily Using vFont Returns vFontNr
> > Set vFontNr = 1; Set vk = FontFamilyNames.Count;
> > Loop While(vj <= vk) LoopVar(vj) InitVal(1) Incr(1)
> >    Get Member Number(vj) From(FontFamilyNames) NewVar(vFontName);
> >    If vFontName = vFont
> >      Set vFontNr = vj-1;
> >      LeaveLoop;
> >    EndIf
> > EndLoop
> > EndSub
> >
> > //----------------------
> > Sub ParseDocName
> >    Returns vPathFile vPathName vFileName vExt vFileExt
> > // vPathFile - c:\dir\document      vFileName - document
> > // vPathName - c:\dir               vExt      - .fm
> > // vFileExt  - document.fm
> > local PosVar; local vPathFileExt; local vFilePath;
> > Get String FromString(vDoc.Name) Reverse NewVar(vPathFileExt);
> > Find String('.') InString(vPathFileExt) ReturnPos(vpPosVar);
> > Get String FromString(vPathFileExt) EndPos(vpPosVar) Reverse
NewVar
> (vExt);
> > Get String FromString(vPathFileExt) StartPos(vpPosVar+1) Reverse
> > NewVar(vPathFile);
> > Get String FromString(vPathFile) Reverse NewVar(vFilePath);
> > Find String(DIRSEP) InString(vFilePath) ReturnPos(vpPosVar);
> > Get String FromString(vFilePath) StartPos(vpPosVar+1) Reverse
> > NewVar(vPathName);
> > Get String FromString(vFilePath) EndPos(vpPosVar-1) Reverse
> > NewVar(vFileName);
> > Set vFileExt = vFileName+vExt;
> > EndSub
> >
> > //----------------------
> > Sub DefineChars
> > New String IntValue(17) NewVar(nbs); // nbspace
> > New String IntValue(128) NewVar(vsAe_); // UpperAdieresis
> > New String IntValue(133) NewVar(vsOe_); // UpperOdieresis
> > New String IntValue(134) NewVar(vsUe_); // UpperUdieresis
> > New String IntValue(138) NewVar(vsae); // adieresis
> > New String IntValue(154) NewVar(vsoe); // odieresis
> > New String IntValue(159) NewVar(vsue); // udieresis
> > New String IntValue(167) NewVar(vsss); // germandbls
> > New String IntValue(208) NewVar(vsEnDash); // endash
> > New String IntValue(209) NewVar(vsEmDash); //— emdash
> > New String IntValue(18) NewVar(vsTSpace); // tspace
> > EndSub
> >
> > //----------------------
> > Sub InitStrings
> > If not vIsEnglish
> >    //-- German string definitions
> >    Set vDecChar = ',';
> >    Set vPgfS = 'Absatz';
> >    Set vPgfSs = 'Abs'+vsae+'tze';
> >    Set vCurrentPgf = 'Aktueller Absatz';
> >    Set vFmtOverride = 'Format'+vsue+'berschreibung';
> >    Set vFmtOverrides = vsUe_+'berschreibungen';
> >    Set vNoFmtOverride = 'Keine ' +vFmtOverride ;
> >    Set vIsNotDefined = 'ist nicht definiert';
> >    Set vBooleanYes = 'Ja';
> >    Set vBooleanNo = 'Nein';
> >    Set vemspace = 'Geviert';
> >    Set vDash = ' '+vsEnDash+' ';
> >    Set vListDocFile = 'Absatz'+vsue+'berschreibungen.fm';
> >    //-- BASIS
> >    Set vFirstIndent = 'Einzug 1. Zeile';
> >    Set vLeftIndent = 'Einzug Links';
> >    Set vRightIndent = 'Einzug Rechts';
> >    Set vSpaceAbove = 'Abstand Oben';
> >    Set vSpaceBelow = 'Abstand Unten';
> >    Set vLeading = 'Zeilenabstand';
> >    Set vLineSpacing = 'Zeilenabstand';
> >    Set vLSpFixed = 'Fest';
> >    Set vLSpProportional = 'Proportional';
> >    Set vLSpFloating = 'Flexibel';
> >    Set vAlignment = 'Ausrichtung';
> >    Set vAlignLeft = 'Linksb'+vsue+'ndig';
> >    Set vAlignRight = 'Rechtsb'+vsue+'ndig';
> >    Set vAlignCenter = 'Zentriert';
> >    Set vAlignJustified = 'Blocksatz';
> >    Set vNumTabs = 'Tabulatoren' +vDash+ 'Anzahl';
> >    Set vTabs = 'Tabulatoren' +vDash+ 'Werte';
> >    Set vUseNextTag = 'N'+vsae+'chster Absatz';
> >    Set vNextTag = 'Typ n'+vsae+'chster Absatz';
> >    //-- STANDARDSCHRIFT
> >    Set vFontFamily = 'Schrift';
> >    Set vFontSize = 'Schriftgr'+vsoe+vsss+'e';
> >    Set vFontAngle = 'Schriftneigung';
> >    Set vFontWeight = 'Schriftst'+vsae+'rke';
> >    Set vFontVariation = 'Schriftvariation';
> >    Set vFontColor = 'Schriftfarbe';
> >    Set vFontSpread = 'Zeichenabstand';
> >    Set vFontStretch = 'Zeichenbreite';
> >    Set vLanguage = 'Sprache';
> >    Set vLangNoLanguage = 'Keine';
> >    Set vUnderlining = 'Unterstreichen';
> >    Set vULNot = 'Nicht';
> >    Set vULSingle = 'Einfach';
> >    Set vULDouble = 'Doppelt';
> >    Set vULNumeric = 'Numerisch';
> >    Set vOverline = vsUe_+'berstreichen';
> >    Set vStrikethrough = 'Durchstreichen';
> >    Set vChangeBar = vsAe_+'nderungsbalken';
> >    Set vPosition = 'Position';
> >    Set vPosNorm = 'Normal';
> >    Set vPosSuper = 'Hochgestellt';
> >    Set vPosSub = 'Tiefgestellt';
> >    Set vCapitalization = 'Gro'+vsss+'/Klein';
> >    Set vCapitalNorm = 'Normal';
> >    Set vCapitalSmall = 'Kapit'+vsae+'lchen';
> >    Set vCapitalLower = 'Kleinbuchstaben';
> >    Set vCapitalUpper = 'Versalien';
> >    Set vPairKern = 'Unterschneiden';
> >    Set vOutline = 'Outline';
> >    Set vShadow = 'Shadow';
> >    //-- SEITENUMBRUCH
> >    Set vStart = 'Absatzumbruch';
> >    Set vStartAnywhere = 'Beliebig';
> >    Set vStartTopOfCol = 'Spaltenbeginn';
> >    Set vStartTopOfPage = 'Seitenbeginn';
> >    Set vStartTopLeft = 'Beginn linke Seite';
> >    Set vStartTopRight = 'Beginn rechte Seite';
> >    Set vKeepWithNext = 'Absatzverbindung mit N'+vsae+'chstem';
> >    Set vKeepWithPrev = 'Absatzverbindung mit Vorherigem';
> >    Set vBlockLines = 'Absatzkontrolle (HuKi/SchuJu)';
> >    Set vPlacement = 'Umbruchformat';
> >    Set vPlaceSideBody = 'In Spalte';
> >    Set vPlaceRunIn = 'Zwischen'+vsue+'berschrift'
> +vDash+ 'Interpunktion';
> >    Set vPlaceRunInSeparator = 'Interpunktionszeichen';
> >    Set vPlaceSideHead = 'Seitl. '+vsUe_+'berschrift'
> +vDash+ 'Ausrichtung';
> >    Set vPlaceSHTop = 'Obere Kante';
> >    Set vPlaceSHFirstBaseline = 'Erste Grundlinie';
> >    Set vPlaceSHLastBaseline = 'Letzte Grundlinie';
> >    Set vPlaceStraddleNormalOnly = vsUe_+'ber alle Spalten';
> >    Set vPlaceStraddle = vsUe_+'ber alle Spalten und seitl.
> > '+vsUe_+'berschriften';
> >    //-- NUMERIERUNG
> >    Set vPgfIsAutoNum = 'Autom. Num. aktiviert';
> >    Set vAutoNumString = 'Autom. Num.' +vDash+ 'String';
> >    Set vAutoNumChar = 'Autom. Num.' +vDash+ 'Zeichenformat';
> >    Set vAutoNumPos = 'Autom. Num.' +vDash+ 'Position';
> >    Set vAutoNumPosPB = 'Absatzbeginn';
> >    Set vAutoNumPosPE = 'Absatzende';
> >    //-- EXTRA
> >    Set vAdjHyphens = 'Aut. Trennung: Untereinander';
> >    Set vHyphMinWord = 'Aut. Trennung: K'+vsue+'rzestes Wort';
> >    Set vHyphMinPrefix = 'Aut. Trennung: K'+vsue+'rzestes
> Pr'+vsae+'fix';
> >    Set vHyphMinSuffix = 'Aut. Trennung: K'+vsue+'rzestes Suffix';
> >    Set vHyphenate = 'Aut. Trennung: Aktiviert
> >    Set vMinSpace = 'Wortabstand: Minimum';
> >    Set vMaxSpace = 'Wortabstand: Maximum';
> >    Set vOptSpace = 'Wortabstand: Optimum';
> >    Set vLetterSpace = 'Automatisch sperren';
> >    Set vTopSeparator = 'Rahmen '+vsue+'ber Absatz';
> >    Set vBottomSeparator = 'Rahmen unter Absatz';
> >    //-- ZELLE
> >    Set vCellVAlignment  = 'Zelle Ausrichtung vert.';
> >    Set vPgfVAlignTop = 'Oben';
> >    Set vPgfVAlignMiddle = 'Mitte';
> >    Set vPgfVAlignBottom = 'Unten';
> >    Set vCellTopMargin= 'Zellenrand Oben';
> >    Set vCellBottomMargin= 'Zellenrand Unten';
> >    Set vCellLeftMargin= 'Zellenrand Links';
> >    Set vCellRightMargin= 'Zellenrand Rechts';
> >    Set vCellMarginFixed = 'absolut';
> >    Set vCellMarginAdded = 'addiert';
> >    //-------
> >    Set vKernX = 'Kerning horizontal'
> >    Set vKernY = 'Kerning vertikal'
> >    //-------
> >    Set vAcrobatLevel = 'PDF Lesezeichenebene';
> >    Set vPDFStructureLevel = 'PDF Strukturebene';
> >    //-------
> >    Set vMinJRomSpace = 'Wortabstand: Minimum (Asian-Roman)';
> >    Set vMaxJRomSpace = 'Wortabstand: Maximum (Asian-Roman)';
> >    Set vOptJRomSpace = 'Wortabstand: Optimum (Asian-Roman)';
> >    Set vMinJLetSpace = 'Zeichenabstand: Minimum (Asian)';
> >    Set vMaxJLetSpace = 'Zeichenabstand: Maximum (Asian)';
> >    Set vOptJLetSpace = 'Zeichenabstand: Optimum (Asian)';
> >    //-------
> >    Set vYakumonoType = 'Yakumono Rules';
> >    Set vFloatingYakumono = 'Floating';
> >    Set vMonospaceYakumono = 'Monospace';
> >    Set vFixedYakumono = 'Fixed';
> > Else
> >    //-- English string definitions
> >    Set vDecChar = '.';
> >    Set vPgfS = 'Paragraph';
> >    Set vPgfSs = 'Paragraphs';
> >    Set vCurrentPgf = 'Current Paragraph';
> >    Set vFmtOverride = 'Format Override';
> >    Set vFmtOverrides = 'Overrides';
> >    Set vNoFmtOverride = 'No ' +vFmtOverride ;
> >    Set vIsNotDefined = 'is not defined';
> >    Set vBooleanYes = 'Yes';
> >    Set vBooleanNo = 'No';
> >    Set vemspace = 'emspace';
> >    Set vDash = vsEmDash;
> >    Set vListDocFile = 'Pgf Format Overrides.fm';
> >    //-- BASIC
> >    Set vFirstIndent = 'Indent First';
> >    Set vLeftIndent = 'Indent Left';
> >    Set vRightIndent = 'Indent Right';
> >    Set vSpaceAbove = 'Space Above Pgf';
> >    Set vSpaceBelow = 'Space Below Pgf';
> >    Set vLeading = 'Leading';
> >    Set vLineSpacing = 'Line Spacing';
> >    Set vLSpFixed = 'Fixed';
> >    Set vLSpProportional = 'Proportional';
> >    Set vLSpFloating = 'Floating';
> >    Set vAlignment= 'Alignment';
> >    Set vAlignLeft = 'Left';
> >    Set vAlignRight = 'Right';
> >    Set vAlignCenter = 'Center';
> >    Set vAlignJustified = 'Justified';
> >    Set vNumTabs = 'Tab Stops' +vDash+ 'number';
> >    Set vTabs = 'Tab Stops' +vDash+ 'values';
> >    Set vUseNextTag = 'Next Pgf Tag';
> >    Set vNextTag = 'Next Pgf Tag';
> >    //-- DEFAULT FONT
> >    Set vFontFamily = 'Font Family';
> >    Set vFontSize = 'Font Size';
> >    Set vFontAngle = 'Font Angle';
> >    Set vFontWeight = 'Font Weight';
> >    Set vFontVariation = 'Font Variation';
> >    Set vFontColor = 'Font Color';
> >    Set vFontSpread = 'Char Spread';
> >    Set vFontStretch = 'Char Stretch';
> >    Set vLanguage = 'Language';
> >    Set vLangNoLanguage = 'None';
> >    Set vUnderlining = 'Underline';
> >    Set vULNot = 'None';
> >    Set vULSingle = 'Single';
> >    Set vULDouble = 'Double';
> >    Set vULNumeric = 'Numeric';
> >    Set vOverline = 'Overline';
> >    Set vStrikethrough = 'Strikethrough';
> >    Set vChangeBar = 'ChangeBar';
> >    Set vPosition = 'Position';
> >    Set vPosNorm = 'Normal';
> >    Set vPosSuper = 'Superscript';
> >    Set vPosSub = 'Subscript';
> >    Set vCapitalization = 'Capitalization';
> >    Set vCapitalNorm = 'Normal';
> >    Set vCapitalSmall = 'Small Caps';
> >    Set vCapitalLower = 'Lower';
> >    Set vCapitalUpper = 'Upper';
> >    Set vPairKern = 'Pair Kern';
> >    Set vOutline = 'Outline';
> >    Set vShadow = 'Shadow';
> >    //-- PAGINATION
> >    Set vStart = 'Paragraph Placement';
> >    Set vStartAnywhere = 'Anywhere';
> >    Set vStartTopOfCol = 'Top of Column';
> >    Set vStartTopOfPage = 'Top of Page';
> >    Set vStartTopLeft = 'Top of Left Page';
> >    Set vStartTopRight = 'Top of Right Page';
> >    Set vKeepWithNext = 'Keep with Next Pgf';
> >    Set vKeepWithPrev = 'Keep with Previous Pgf';
> >    Set vBlockLines = 'Widow/Orphan Lines';
> >    Set vPlacement = 'Placement Format';
> >    Set vPlaceSideBody = 'In Column';
> >    Set vPlaceRunIn = 'Run-In Head' +vDash+ 'Default Punctuation';
> >    Set vPlaceRunInSeparator = 'Punctuation Char';
> >    Set vPlaceSideHead = 'Side Head' +vDash+ 'Alignment';
> >    Set vPlaceSHTop = 'Top';
> >    Set vPlaceSHFirstBaseline = 'First Baseline';
> >    Set vPlaceSHLastBaseline = 'Last Baseline';
> >    Set vPlaceStraddleNormalOnly = 'Straddle Across All Columns';
> >    Set vPlaceStraddle = 'Straddle Across All Columns and Side
> Heads';
> >    //-- NUMBERING
> >    Set vPgfIsAutoNum = 'Autonumbering Enabled';
> >    Set vAutoNumString = 'Autonumbering' +vDash+ 'Format';
> >    Set vAutoNumChar = 'Autonumbering' +vDash+ 'Character Format';
> >    Set vAutoNumPos = 'Autonumbering' +vDash+ 'Position';
> >    Set vAutoNumPosPB = 'Start of Paragraph';
> >    Set vAutoNumPosPE = 'End of Paragraph';
> >    //-- ADVANCED
> >    Set vAdjHyphens = 'Aut. Hyphenation: Max. # Adjacent';
> >    Set vHyphMinWord = 'Aut. Hyphenation: Shortest Word';
> >    Set vHyphMinPrefix = 'Aut. Hyphenation: Shortest Prefix';
> >    Set vHyphMinSuffix = 'Aut. Hyphenation: Shortest Suffix';
> >    Set vHyphenate = 'Aut. Hyphenation: Enabled
> >    Set vMinSpace = 'Word Spacing: Minimum';
> >    Set vMaxSpace = 'Word Spacing: Maximum';
> >    Set vOptSpace = 'Word Spacing: Optimum';
> >    Set vLetterSpace = 'Allow Automatic Letter Spacing';
> >    Set vTopSeparator = 'Frame Above Pgf';
> >    Set vBottomSeparator = 'Frame Below Pgf';
> >    //-- TABLE CELL
> >    Set vCellVAlignment  = 'Cell Vertical Alignment';
> >    Set vPgfVAlignTop = 'Top';
> >    Set vPgfVAlignMiddle = 'Middle';
> >    Set vPgfVAlignBottom = 'Bottom';
> >    Set vCellTopMargin= 'Cell Margin Top';
> >    Set vCellBottomMargin= 'Cell Margin Bottom';
> >    Set vCellLeftMargin= 'Cell Margin Left';
> >    Set vCellRightMargin= 'Cell Margin Right';
> >    Set vCellMarginFixed = 'Fixed';
> >    Set vCellMarginAdded = 'Added';
> >    //-------
> >    Set vKernX = 'Kerning Horizontal'
> >    Set vKernY = 'Kerning Vertical'
> >    //-------
> >    Set vAcrobatLevel = 'PDF Bookmark Level';
> >    Set vPDFStructureLevel = 'PDF Structure Level';
> >    //-------
> >    Set vMinJRomSpace = 'Word spacing: Minimum (Asian-Roman)';
> >    Set vMaxJRomSpace = 'Word spacing: Maximum (Asian-Roman)';
> >    Set vOptJRomSpace = 'Word spacing: Optimum (Asian-Roman)';
> >    Set vMinJLetSpace = 'Letter spacing: Minimum (Asian)';
> >    Set vMaxJLetSpace = 'Letter spacing: Maximum (Asian)';
> >    Set vOptJLetSpace = 'Letter spacing: Optimum (Asian)';
> >    //-------
> >    Set vYakumonoType = 'Yakumono Rules';
> >    Set vFloatingYakumono = 'Floating';
> >    Set vMonospaceYakumono = 'Monospace';
> >    Set vFixedYakumono = 'Fixed';
> > EndIf
> > EndSub
> >
> >  >> snip  8< - - - - - - - - - - - - - - - - - - - - - - - - - - -
  -
>  - -

#1807 From: Klaus Mueller <mueller23@...>
Date: Sat Jan 19, 2002 10:47 am
Subject: Re: Re: Paragraph Format Override
utesch23
Send Email Send Email
 
Hi Ken,

Thank you.

Currently there is still a bug in the script when running on Mac.
After I got the confirmation of the fix I will post the update.

(Please: do not insert the whole post/script when replying.)

Regards,
Klaus Mueller, Hamburg

#1808 From: Klaus Mueller <mueller23@...>
Date: Sat Jan 19, 2002 10:58 pm
Subject: Copy/Paste in Frame-Dialogs
utesch23
Send Email Send Email
 
Hi all,

[Win98, FM6, FS2.1]

I am trying to insert text from clipboard into a FrameMaker-Dialog
and copy it back to the clipboard.

The FCs KbdPaste and KbdCopy always copy and paste text
within the document, regardless of the focus in Dialogs.

Actually I want to:
copy selected text to clipboard (Fc KbdCopy),
open the Spelling dialog (Fc FocusInputSpell),
paste the the text into the Dialog (Fc KbdPaste),
possibly set the focus to document (Set ActiveDoc.IsInFront = true;)
let FM show the hyphenation (Fc KbdHyphenate),
set the focus to the Spelling dialog (Fc FocusInputSpell),
copy the hyphenated word back to clipboard (Fc KbdCopy)
and finally close the Dialog (Fc KbdCloseSpell),

Any thoughts?

Thanks,
Klaus Mueller, Hamburg

#1809 From: "Rick Quatro" <rquatro@...>
Date: Mon Jan 21, 2002 1:43 pm
Subject: Re: Copy/Paste in Frame-Dialogs
frameexpert
Send Email Send Email
 
Klaus,

You cannot use FrameScript to copy and paste in dialog boxes in Windows
FrameMaker. I think this is a limitation of the FDK, but I could not find it
in the documentation.

Rick Quatro
Carmen Publishing
585 659-8267 (new area code)
rick@...
http://www.frameexpert.com

> Hi all,
>
> [Win98, FM6, FS2.1]
>
> I am trying to insert text from clipboard into a FrameMaker-Dialog
> and copy it back to the clipboard.
>
> The FCs KbdPaste and KbdCopy always copy and paste text
> within the document, regardless of the focus in Dialogs.
>
> Actually I want to:
> copy selected text to clipboard (Fc KbdCopy),
> open the Spelling dialog (Fc FocusInputSpell),
> paste the the text into the Dialog (Fc KbdPaste),
> possibly set the focus to document (Set ActiveDoc.IsInFront = true;)
> let FM show the hyphenation (Fc KbdHyphenate),
> set the focus to the Spelling dialog (Fc FocusInputSpell),
> copy the hyphenated word back to clipboard (Fc KbdCopy)
> and finally close the Dialog (Fc KbdCloseSpell),
>
> Any thoughts?
>
> Thanks,
> Klaus Mueller, Hamburg
>

#1810 From: Marcus Streets <marcus@...>
Date: Mon Jan 21, 2002 2:28 pm
Subject: Re: Follow-up: Readability Index
marcus@...
Send Email Send Email
 
rick.sapir@... wrote [on Framers]:
>
> A week ago I asked if anyone was using an automated tool with FM to
> determine a readability level (e.g., Fog index level). I received a few
> queries from other folks who were also interested in the same information,
> but I was unable to find any such tool. So, does _anyone_ use _any_ method
> to measure readability with FM docs? Thanks,
>
It should be possible to write such a tool using the FDK - or one of its
wrappers.
However, most of the readability indexes require you to count syllables,
or count the number of words with multiple syllables. I am not sure how
one sets about doing this.
I thought I would mail this to the Framescript list to see if anyone
there had any ideas.

Marcus

Messages 1781 - 1810 of 10492   Oldest  |  < Older  |  Newer >  |  Newest
Add to My Yahoo!      XML What's This?

Copyright © 2010 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines NEW - Help