【问题标题】:keyword tags in chm hhkchm hhk 中的关键字标签
【发布时间】:2019-04-05 03:00:10
【问题描述】:

我目前正在检查 CHM 的二进制索引构建,但我注意到示例项目中的一些 hhk(例如生成的 Sphinx)有一个似乎没有在 chmspec 中记录的“关键字”标签。 chmspec 确实暗示该关键字存在。

这个上下文中的“关键字”标签只是(名字?)“名称”标签的别名吗?

来自例如ags (https://github.com/adventuregamestudio/ags-manual/issues/14) 他们的chmfiles里面确实有hhks。

LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="Functions that return a value">
        <param name="See Also" value="Functions that return a value">
    </OBJECT>
    <UL> <LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="Scripting Tutorial">
        <param name="Local" value="ScriptingTutorialPart1.html#index-7">
    </OBJECT>
    </UL><LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="Game / Global functions">
        <param name="Local" value="Game.html#index-0">
    </OBJECT>
    <UL> <LI> <OBJECT type="text/sitemap">
        <param name="Keyword" value="AbortGame">
        <param name="Local" value="Game.html#index-1"> ...

【问题讨论】:

  • 请在您的问题中添加 *.hhk 示例项目文件中的简短代码示例(MS 索引站点地图格式)。
  • 完成。感谢您的关注。

标签: chm chmcmd


【解决方案1】:

短篇小说 - 我不知道为什么 name="Keyword" 在这里用于 name="Name"。似乎这两个属性都可用,但这没有记录。我倾向于name="Keyword",但此时我使用name="Name"

您知道 - 为 HTMLHelp 文件 (CHM) 创建一个好的索引非常耗时并且需要大量工作。由于用户越来越多地使用全文搜索(或 Google),我很少创建复杂的索引。我正在使用带有属性name="Name" 的以下语法(站点地图sn-p):

<LI> <OBJECT type="text/sitemap">
    <param name="Name" value="Flowers">
    <param name="Local" value="Garden/flowers.htm">
    </OBJECT>

这是很久以前的事了,但我记得以前见过name="Keyword"这个属性。经过一番搜索,我的记忆又回来了。

如果您使用 HTMLHelp Workshop (HHW) 将 WinHelp 项目转换为 HTMLHelp,您会在索引中生成这些属性(我再次尝试了这些旧东西)。

<LI> <OBJECT type="text/sitemap">
    <param name="Keyword" value="Adresse">
    <param name="Name" value="RS485-Bus durchsuchen">
    <param name="Local" value="html/sens04xe.htm">
    </OBJECT>
<LI> <OBJECT type="text/sitemap">
    <param name="Keyword" value="Baudrate">
    <param name="Name" value="Konfiguration der PC-Schnittstelle">
    <param name="Local" value="html/sens04xd.htm">
    <param name="Name" value="RS485-Interface des Transmitters">
    <param name="Local" value="html/sens04xh.htm">
    </OBJECT>

重复节点信息在使用 HHW 进行索引时也经常发生。当然,在这种情况下,我使用 FAR HTML 的 Auto-Normalize HHK Files 功能会导致:

<LI> <OBJECT type="text/sitemap">
    <param name="Name" value="Adresse">
    <param name="Local" value="html/sens04xe.htm">
    </OBJECT>
<LI> <OBJECT type="text/sitemap">
    <param name="Name" value="Baudrate">
    <param name="Name" value="Konfiguration der PC-Schnittstelle">
    <param name="Local" value="html/sens04xd.htm">
    <param name="Name" value="RS485-Interface des Transmitters">
    <param name="Local" value="html/sens04xh.htm">
    </OBJECT>

两个 *.hhk 变体都被编译成 CHM,没有错误。用户看到的没有区别。以下屏幕截图(FAR HTML GUI)显示了标准化后的索引编辑器对话框。只有关键字,例如分配给两个主题的“Baudrute”现在有一颗红星。在规范化之前,所有关键字都有一个红星。

在编辑由 HHW 编辑的 HHK 文件时(如上所述),您可能会看到许多带有单个弹出项目的单个文件夹。这些可以减少并简化为单个非弹出条目。您想要保留此重复信息的唯一原因是如果您使用信息类型——HTMLHelp 1.x 的一个功能,无论如何都没有正确完成。如果有机会,建议您始终规范化 HHK 索引。它减少了文件大小和复杂性,并且在运行时对用户没有明显的变化。

我试图在 1997 年出版的“Official Microsoft HTMLHelp Authoring Kit”一书中找到一些文档,但没有找到。

其他信息:

HTML 内嵌关键字

在 HTMLHelp 项目中,索引的关键字可以使用未记录的函数集成为

部分中的元语句。以这种方式指定的关键字包含在已编译帮助系统的索引中。

见:http://www.help-info.de/en/KIT/Creating_Index/create_index.htm#UndocumentedIndex

<html>
<head>
  <title>How one grows trees </title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta name="keywords" content="tree, hole">
  <meta name="MS-HKWD" content="oak">
  <meta name="MS-HKWD" content="beech">
  <meta name="MS-HKWD" content="water">
  <meta name="MS-HAID" content="botany">
  <link href="../design.css" rel="stylesheet" type="text/css" />
</head>

供构建者使用的 Sphinx 源代码 HTMLHelp

似乎name="Keyword" 在这里被硬编码(对于name="Name" 的情况,我没有进一步深入):

https://github.com/sphinx-doc/sphinx/blob/master/sphinx/builders/htmlhelp.py

【讨论】:

  • 谢谢。你证实了我的猜想。也感谢您对 inline 关键字的帮助,我也没有在 chmcmd 编译器中实现它。 (然而)。我会看看是否可以对未规范化的索引发出警告。
  • @Marco 请注意,当使用内联关键字时,往返反编译 编译不起作用。关键字已从 HTML 文件中删除。