簡體   English   中英

如何使用 JavaScript 在 InDesign 中為字符下划線?

[英]How to underline charachters in InDesign with JavaScript?

我開始為 InDesign 編寫這段代碼,為所有字母添加下划線,除了帶有后代的字母,並添加了一個對話框 window 來選擇線條的筆划和偏移量。 現在我有兩個問題:

  1. 該程序強調所有字母
  2. 行程和偏移量不會改變

我是 Javascript 的初學者,這是第一次為 InDesign 編碼。 有人有線索嗎? 謝謝!

 // UNDERLINE ALL BUT NO DESCENDANTS



//Make certain that user interaction (display of dialogs, etc.) is turned on.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

if (app.documents.length != 0){
    try {
      // Run script with single undo if supported
      if (parseFloat(app.version) < 6) {
        main();
      } else {
        app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Expand State Abbreviations");
      }
      // Global error reporting
    } catch ( error ) {
      alert( error + " (Line " + error.line + " in file " + error.fileName + ")");
    }
}else{
    alert("Open a document first before running this script.");
}


///MAIN FUNCTION 
function main(){

     if(app.selection.length != 0){
        myDisplayDialog();
    }
}




//INTERFACE 
function myDisplayDialog(){
    //declare variables 
    //general 
    var myDoc = app.activeDocument;
    var mS = myDoc.selection; 
    // dialog 
    var myDialog = app.dialogs.add({name:"Underliner"});
    var myLabelWidth = 70;  
    with(myDialog.dialogColumns.add()){
        with(borderPanels.add()){
            with(dialogColumns.add()){
                with(dialogRows.add()){
                    staticTexts.add({staticLabel:"Stroke:", minWidth:myLabelWidth});
                    staticTexts.add({staticLabel:"Offset:", minWidth:myLabelWidth});
                }
            }              
                with(dialogRows.add()){
                    staticTexts.add({staticLabel:""});
                    var myStroke = measurementEditboxes.add({editValue:1, editUnits:MeasurementUnits.points});
                    var myOffset = measurementEditboxes.add({editValue: 15, editUnits:MeasurementUnits.points});
                    
                }
            
        }
    }

    var myResult = myDialog.show();
    if(myResult == true){
            var myStroke = myStroke.editValue;
            var myOffset = myOffset.editValue;
            myDialog.destroy();
            underline(mS,myStroke,myOffset);
        }
        else{
            myDialog.destroy();
            alert("Invalid page range.");
        }
 }



//REAL FUNCTION 
function underline(charList,stroke, offset){
var len = charList.length;
const doNotUnderline = ['g','j','p','q','y'];
    for (var i=0; i < len; i++){
         try{
            var myChar = charList[i];
            //console.log(typeof myText);
            if (includes(myChar, doNotUnderline) == false)
            {
                myChar.underline = true;
                myChar.underlineWeight == stroke;
                myChar.underlineOffset == offset;
                
            } else {
                myChar.underline = false;
                
            }

         }catch(r){
            alert(r.description);
            break;
        }
    }
}


//function to know if char is in array
function includes(elemento,array)
{
    var len = array.length;
    for(var i=0; i<len ;i++)
    {
        if(array[i]==elemento){return true;}
    }
    return false;
}

在 function underline()中嘗試這些更改:

//REAL FUNCTION
function underline(words,stroke, offset) {  // <------ here 'words' instead of 'charList'
    var charList = words[0].characters;     // <------ here get 'characters' of the 'words'
    var len = charList.length;

    const doNotUnderline = ['g','j','p','q','y'].join(); // <------- here '.join()'
    for (var i=0; i < len; i++){
         try{
            var myChar = charList[i];
            // if (includes(myChar, doNotUnderline) == false) // <----- no need 
            if (doNotUnderline.indexOf(myChar.contents) < 0) // <------ 'indexOf()' instead of 'includes()' 
            {
                myChar.underline = true;
                myChar.underlineWeight = stroke; // <------- here '=' instead of '=='
                myChar.underlineOffset = offset; // <------- here '=' instead of '=='

            } else {
                myChar.underline = false;
            }

         }catch(r){
            alert(r.description);
            break;
        }
    }
}

可能還有其他改進。 它需要額外的研究。 但是,如果您更改這些行,它應該在一定程度上起作用。

還有一件小事可以極大地改善用戶體驗:在輸入字段中保留上次使用的值。 它可以很容易地完成,讓我知道你需要它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM