修改HelpNDoc脚本:从帮助主题定位库项并补全替代文本
HelpNDoc脚本:自动填充图片/图片映射的默认替代文本
需求回顾
已实现功能:
- 遍历所有库项
- 筛选出图片(类型1)和图片映射(类型9)
- 提取并更新默认内边距:若为0则设为5
待补充功能:
- 当库项的默认替代文本为空时,遍历所有帮助主题查找该库项的使用实例
- 提取实例中第一个非空的替代文本,设置为该库项的默认值
- 若遍历完所有主题仍未找到非空替代文本,输出该库项名称
修正并完善后的脚本
var aList: THndLibraryItemsInfoArray; nCnt: Integer; aDefaultAltText: string; aDefaultPadding: Integer; // 新增变量用于遍历主题和元素 aTopics: THndTopicsInfoArray; nTopicIdx: Integer; aElements: THndTopicElementsInfoArray; nElemIdx: Integer; bFoundAltText: Boolean; begin // 获取所有库项 aList := HndLibraryItems.GetItemList([]); // 遍历每个库项 for nCnt := 0 to Length(aList) - 1 do begin // 筛选图片(类型1)和图片映射(类型9) if (HndLibraryItems.GetItemKind(aList[nCnt].id) = 1) or (HndLibraryItems.GetItemKind(aList[nCnt].id) = 9) then begin // 获取默认替代文本 aDefaultAltText := HndLibraryItemsMeta.GetItemMetaStringValue(aList[nCnt].id, 'defaultalttext', ''); // 当默认替代文本为空时,查找使用实例 if aDefaultAltText = '' then begin bFoundAltText := False; // 获取所有帮助主题 aTopics := HndTopics.GetTopicList([]); // 遍历每个主题 for nTopicIdx := 0 to Length(aTopics) - 1 do begin // 获取当前主题下的所有元素 aElements := HndTopicElements.GetElementList(aTopics[nTopicIdx].Id); // 遍历主题内的每个元素 for nElemIdx := 0 to Length(aElements) - 1 do begin // 判断元素是否引用了当前库项 if (aElements[nElemIdx].LibraryItemId = aList[nCnt].id) then begin // 提取该元素的替代文本 var elemAltText := HndTopicElements.GetElementPropertyString(aElements[nElemIdx].Id, 'alt', ''); if elemAltText <> '' then begin // 设置为库项的默认替代文本 HndLibraryItemsMeta.SetItemMetaStringValue(aList[nCnt].id, 'defaultalttext', elemAltText); bFoundAltText := True; Break; // 找到第一个非空值后退出元素循环 end; end; end; if bFoundAltText then Break; // 找到后退出主题循环 end; // 未找到非空替代文本时输出库项名称 if not bFoundAltText then Writeln('未找到非空替代文本的库项:' + aList[nCnt].Name); end; // 获取并更新默认内边距 aDefaultPadding := HndLibraryItemsMeta.GetItemMetaIntValue(aList[nCnt].id, 'defaultpadding', 0); if aDefaultPadding = 0 then HndLibraryItemsMeta.SetItemMetaIntValue(aList[nCnt].id, 'defaultpadding', 5); end; end; end.
关键逻辑说明
- 语法修正:调整原代码中不符合Pascal规范的
var声明位置,统一移至代码块开头。 - 主题与元素遍历:
- 通过
HndTopics.GetTopicList([])获取所有帮助主题 - 对每个主题,调用
HndTopicElements.GetElementList()获取其下所有元素
- 通过
- 库项引用匹配:通过元素的
LibraryItemId与当前库项ID比对,确认是否为目标库项的使用实例 - 替代文本提取与更新:找到第一个非空的元素替代文本后,立即更新库项默认值并终止遍历,提升执行效率
- 无匹配时的输出:通过
Writeln输出无有效替代文本的库项名称,方便后续人工处理
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

