Skip to main content
K.Daube
Community Expert
Community Expert
Nov 22, 2016 7:14 PM UTC
Answered

Setting up a character format

Dear friends,

It's quite easy to set up a new character format with 'all AsIs', but I have not found the necessary ingredients to set up one with particular properties:
a) name = superscript:     all AsIs, but superscript
b) name = highlight:         all AsIs, but a colour (from the standard set)
Hence I had the idea to call the Character Designer by means of F-codes.
Well - it opens, but I do not see how to set the dialogue to "All AsIs" - because the user normally has its cursor somewhere in the document and the really defined properties are only seen if the cursor is outside the document.
So far I'm here:

function DefineCharFmt (sName, oDoc, bProperty) {
var charFmt = 0, fcode = [],  msg; 
  msg = "Character format '" + sName + "' does not exist in catalogue\nShall it be created?";
  charFmt = oDoc.GetNamedCharFmt (sName); 
  if (!charFmt.ObjectValid()) {                   // does not exist in catalogue
    if (confirm (msg, false, "Confirm new character format")) {
      charFmt = oDoc.NewNamedObject (Constants.FO_CharFmt, sName);
      if (bProperty) {                  
        fcode[0] = FCodes.CHAR_DESIGN_CAT;       // Open Charactr designer to set the property
//      fcode[1] = FCodes.CHAR_DESIGNKIT_RESET;   // nothing to do with Set AsIs
          Fcodes(fcode);
      }
      return true;
    } else {
      return false;name
    }
  }
  return true;
} //--- end DefineCharFmt 


Maybe I need to put it the other way round:
Instruct the user that for the proper function of the script the xxx character formats must exist in the catalogue and be set up accordingly...
Or:
Createte the needed character formats in the catalogue - only "AsIs" and instruct the user to set them up properly to see the effect in the document.

Klaus

This topic is closed to new replies. Start a new post to keep the conversation going.
frameexpert
frameexpertCorrect answer
Community Expert
Nov 23, 2016 9:49 PM UTC

Hi Klaus,

Your approach with the color is not quite correct. You need this:

oColor = oDoc.GetNamedColor ("Salmon");

charFmt.UseColor = true;

charFmt.Color = oColor;

-Rick

www.frameexpert.com

3 replies

K.Daube
Community Expert
K.DaubeCommunity ExpertAuthor
Community Expert
Nov 23, 2016 9:24 PM UTC

Well, for the simple cases (only AsIs, AsIs + superscript) I'm succesful.

But defining a colour is not that easy:

#target framemaker

var oDoc = app.ActiveDoc, OK;
$.writeln (DefineCharFmt ("0-C", oDoc));    // AsIs + colour Salmon

function DefineCharFmt (sName, oDoc) {
var charFmt = 0, oColor = new Object (Color);
  charFmt = oDoc.GetNamedCharFmt (sName); 
  if (!charFmt.ObjectValid()) {                   // does not exist in catalogue
    charFmt = oDoc.NewNamedObject (Constants.FO_CharFmt, sName); // define new char format - all AsIs
    oColor.ReservedColor = Constants.FV_COLOR_SALMON; // 1
    charFmt.UseColor = true;
    charFmt.Color = oColor;   // 2
  }
} //--- end DefineCharFmt 

LIne 07 creates the character format "all AsIs", to which I want to add only one property: a predefined colour.

At line 10 an inspection of the objects shows:

   oColor.Name = Salmon; oColor.ReservedColor = 16

But line 12 reveals:

   charFmt.Color.Name = null; charFmt.Color.ReservedColor = 0

What is missing here?

Thanks for Your help

Klaus

Translate
frameexpert
Community Expert
frameexpertCommunity ExpertCorrect answer
Community Expert
Nov 23, 2016 9:49 PM UTC

Hi Klaus,

Your approach with the color is not quite correct. You need this:

oColor = oDoc.GetNamedColor ("Salmon");

charFmt.UseColor = true;

charFmt.Color = oColor;

-Rick

Translate
www.frameexpert.com
K.Daube
Community Expert
K.DaubeCommunity ExpertAuthor
Community Expert
Nov 24, 2016 8:36 AM UTC

Thank You Rick - this works.

Anidea last night was to use the PropVals method - but did not get all pieces to that puzzle. What are the necessary constants (besides FV_COLOR_SALMON) and how to assign the properties to the color? Would it be something like this?

var oProps = new PropVals() ;

var propVal = new PropVal() ; 
      propVal.propIdent.num = Constants.????; 
      propVal.propVal.valType = Constants.FT_Integer; 
      propVal.propVal.ival = Constants.FV_COLOR_SALMON; 
      oProps.push(propVal);

      oColor = oColor.SetProps(oProps);

It was to late in the day for these experiments...

And the method you present is much more transparent to me. So my final codeis this:

#target framemaker

var oDoc = app.ActiveDoc, OK;

OK = DefineCharFmt ("0-A", oDoc, 0, true);          // just AsIs
$.writeln (OK);
OK = DefineCharFmt ("0-B", oDoc, 1, false);          // AsIs + superscript
$.writeln (OK);
OK = DefineCharFmt ("0-C", oDoc, 2, true);          // AsIs + colour Salmon
$.writeln (OK);

function DefineCharFmt (sName, oDoc, iType, bModifyable) {
// In        sName:  name of character format to be checked
//           oDoc:  current document
//           iType:  Type of character format property to set
//                   0  all set to AsIs
//                   1  superscript
//                   2  predefined colour Salmon
//           bModifyable: see msg
// Out       false, if char format is not defined (even after user prompt)
// Reference Rick Quatro at https://forums.adobe.com/thread/2240616
var msg, charFmt = 0, oColor = new Object (Color);

  msg = "Character format '" + sName + "' does not exist in catalogue\nShall it be created?";
  if (bModifyable) {
    msg = msg + "\n\nYou may modify the character format later to your desire, e.g. other colour";
  } else {
    msg = msg + "\n\nDo not modify the character format later!";
  }
  charFmt = oDoc.GetNamedCharFmt (sName); 
  if (!charFmt.ObjectValid()) {                  // does not exist in catalogue
    if (confirm (msg, false, "Confirm new character format")) {
      charFmt = oDoc.NewNamedObject (Constants.FO_CharFmt, sName); // define new char format - all AsIs
      switch (iType) {                 
        case 0:
          break;
        case 1:
          charFmt.Position = Constants.FV_POS_SUPER; // FV_POS_NORM, FV_POS_SUB
          break;
        case 2:
          oColor = oDoc.GetNamedColor ("Salmon");
          charFmt.UseColor = true;
          charFmt.Color = oColor;
          break; 
        default:
          alert ("DefineCharFmt:\nPgm error: case " + iType + " not defined.", "DefineCharFmt", true);
          return false;
      }
      return true;
    } else {
      return false;                              // No character format defined
    }
  }
  return true;
} //--- end DefineCharFmt

Translate