【发布时间】:2022-01-05 13:16:07
【问题描述】:
我开始为 InDesign 编写这段代码,为所有字母添加下划线,除了带有后代的字母,并添加了一个对话框窗口来选择线条的笔划和偏移量。 现在我有两个问题:
- 程序在所有字母下划线
- 笔画和偏移不会改变
我是 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;
}
【问题讨论】:
-
那么,怎么样,斯特法妮娅?您是否尝试过建议的解决方案?你能提供一些反馈吗?
-
嗨,尤里,是的,非常感谢!我一直等到我能正确回答你。代码完美运行!我只是想问你为什么我需要使用方法.characters,代码不是已经将选择读取为一系列字符吗?你能告诉我更多关于如何在输入字段中保留最后使用的值吗?谢谢你:)
-
坦率地说,我还没准备好回答为什么 InDesign 无法直接获取和更改选定的字符。我只是看到还有一个集合:
words,并且这个集合的第一个元素(words[0])包含集合caracters。它就是这样工作的。可能是有原因的,我不知道。至于保留上次使用的值,我已经更新了我的答案。 -
谢谢尤里,我今天就去看看。非常感谢!
-
嗨,尤里,非常感谢!
标签: javascript adobe-indesign underline