2016-12-19 8 views
1

Я пытаюсь написать сценарий, который преобразует все символы в нижний регистр, если применяется определенный вложенный стиль. Кажется, я не могу понять правильный синтаксис, чтобы получить текст.Как получить текст, к которому применяется вложенный стиль в InDesign

Первоначально я попытался следующие, которые работали на продлить, но строчными весь абзац, а не только текст, который имеет стиль символа применяется:

function lowerCaseNest(myPStyle, myCStyle){ 

var myDocument = app.documents.item(0); 
//Clear the find/change preferences. 
app.findTextPreferences = NothingEnum.nothing; 
app.changeTextPreferences = NothingEnum.nothing; 
//Set the find options. 
app.findChangeTextOptions.caseSensitive = false; 
app.findChangeTextOptions.includeFootnotes = false; 
app.findChangeTextOptions.includeHiddenLayers = false; 
app.findChangeTextOptions.includeLockedLayersForFind = false; 
app.findChangeTextOptions.includeLockedStoriesForFind = false; 
app.findChangeTextOptions.includeMasterPages = false; 
app.findChangeTextOptions.wholeWord = false; 

app.findTextPreferences.appliedParagraphStyle = myPStyle; 

var missingFind = app.activeDocument.findText(); 
var myDoc = app.documents[0]; 

for (var listIndex = 0 ; listIndex < missingFind.length; listIndex++) { 

      for (i = missingFind[listIndex].nestedStyles.length-1;i>=0; i--) { 

        for (j = missingFind[listIndex].nestedStyles[i].parent.characters.length-1;j>=0; j--) { 

         if (missingFind[listIndex].nestedStyles[i].parent.characters[j].contents.appliedCharacterStyle(myCStyle)) { 
           var myString = missingFind[listIndex].nestedStyles[i].parent.characters[j].contents;         

           if (typeof(myString) == "string"){ 
             var myNewString = myString.toLowerCase(); 
             missingFind[listIndex].nestedStyles[i].parent.characters[j].contents = myNewString; 
            } 
          } 

        } 

    } 

app.findTextPreferences = NothingEnum.nothing; 
app.changeTextPreferences = NothingEnum.nothing;  

}

Я тогда попытался играть вокруг с appliedNestedStyles, но не может понять, как получить текст, к которому применяется вложенный стиль.

Может ли кто-нибудь помочь в этом?

Спасибо! Джон

ответ

0

я на самом деле взял другой галс, и выяснил то, что работает:

function lowerCaseNest(myPStyle, myCStyle){ 

for (var i = 0; i < app.activeDocument.stories.length; i++){ 
       for (var j = 0; j < app.activeDocument.stories[i].paragraphs.length; j++){ 
         var myP = app.activeDocument.stories[i].paragraphs[j]; 
         if (myP.appliedParagraphStyle.name==myPStyle) { 
           for (k=0; k<myP.characters.length; k++) {          
             if(typeof(myP.characters[k].appliedNestedStyles[0]) != 'undefined'){ 
              if(myP.characters[k].appliedNestedStyles[0].name == myCStyle) { 
                var myC = myP.characters[k].contents; 
                if (typeof(myC)=='string'){ 
                 var myNewString = myC.toLowerCase(); 
                 myP.characters[k].contents = myNewString; 
                } 
              } 
            } 
          } 
        }     
      }  
    } 
} 

Тем не менее было бы интересно знать, если есть более простой способ справиться с этим, как я боюсь, что это может занять дольше работать на длинных документах, поскольку он имеет дело с каждым пунктом отдельно.

0

Если я не ошибаюсь appliedNestedStyle можно проследить в диалоге/C F путем ориентации приложенного characterStyle:

GREP 
Find : .+ 
Format : character style => myCharStyle 

затем

var found = doc.findGrep(); 

...