应用超链接目标时,Indesign 脚本 GREP 搞砸了

Indesign script GREP messes up when applying hyperlink destination

在 InDesign 中偶然发现了一个非常奇怪的脚本、GREP 和超链接问题。我正在尝试编写一个脚本 (js) 来自动创建跨大型书籍 (e-book) 的超链接。我已经成功编写了词汇表超链接脚本,但这是用于章节参考。这个想法是让 GREP 搜索找到所有匹配标题样式(下划线,在本例中为 20pt)的单词,然后在该点插入超链接目标。奇怪的是,当脚本运行时,它弄乱了 GREP 搜索结果,查找上一行的文本。

 
var doc = app.activeDocument;  
  
doc.hyperlinkTextDestinations.everyItem().remove();  
doc.hyperlinkTextSources.everyItem().remove();  
doc.hyperlinks.everyItem().remove();  
  
app.findGrepPreferences = app.changeGrepPreferences = null;  
app.findGrepPreferences.pointSize = 20;  
app.findGrepPreferences.underline = true;  
app.findGrepPreferences.findWhat = '';  
  
var results = app.activeDocument.findGrep();  
  
for (var i=0; i < results.length; i++) {  
    var text = results[i].texts.firstItem();  
    $.writeln(text.contents);  
    doc.hyperlinkTextDestinations.add(  
         text,   
         {  
             name: text.contents  
         }  
     );   
} 

运行 此脚本覆盖以下文本(删除了 indesign 样式): 一个值得信赖的称号 一些文字 控制和确定性 一些文字 标题 一些文字 在 InDesign 中编写脚本 一些文字

向控制台输出以下内容:

值得信赖的头衔 控制和确定性

标题 xt 在 InDesi 中编写脚本

前 2 个是正确的,但它弄乱了最后 2 个。如果我注释掉对添加超链接目标方法的调用,我会在控制台中看到正确的文本:

值得信赖的头衔 控制和确定性 标题 在 InDesign 中编写脚本

非常感谢任何帮助。

谢谢,

改为将文本从结尾更改为开头。反转 for 循环,或(更简单)更改返回找到的结果的顺序:

var results = app.activeDocument.findGrep(true);

(这里布尔值的含义见an online reference)。

它从头到尾不起作用的原因是因为您将 result 列表存储到一个变量中,并且当您之后更改文本时它不会更新。不幸的是,'inserting a hyperlink destination' 所做的是:它在 运行 文本中插入一个隐藏字符。从那时起,所有以前找到的位置都不再可信,所以你必须重新执行 findGrep 命令(并跳过第一个找到的结果)——或者从头到尾处理结果,所以您所做的任何更改都不会影响您仍需要处理的文本。