我使用 scribble 来生成我的包裹文件。
raco 会将我的文档与球拍自己的文档整合在一起,并在页面的左上角添加一个搜索框。
当您使用“raco docs”时,您会看到这一点。
现在我想使用 scribble 作为文档工具来生成我的独立文档。
但是当我使用 scribble --htmls demo.scribble 时,它不能在页面的左上角有一个搜索框。
如何添加搜索框让我的文档具有搜索能力?
有一种方法可以做到这一点,但遗憾的是,目前它并不是特别令人愉快。如果您希望我们做得更好,请提交一个关于您希望如何做到这一点的问题(或者如果您有野心,我猜是拉取请求)。(另外,如果它确实得到改进,请有人更新这个答案。)
scribble
遗憾的是,您不能使用命令行应用程序(也不能使用)呈现带有搜索框的涂鸦页面raco scribble
。相反,您需要使用 scribble 的render
函数html-render-mixin
来呈现您的文档。一旦你克服了编写自己的脚本来渲染文档的困难,它就相当简单了。
生成的类html-render-mixin
有一个(从 Racket 6.5 开始没有记录,我将为 Racket 6.6 添加文档)字段:search-box?
,默认为#f
. 您可以构建自己的渲染器 mixin 来扩展 html,但将搜索框更改为 #t。你可以这样做:
#lang racket
(require (prefix-in html: scribble/html-render))
(define (search:render-mixin %)
(class (html:render-mixin %)
(init [search-box? #t])
(super-new [search-box? search-box?])))
从那里,您可以使用 render-mixin 关键字参数直接将其传递给渲染函数:
(require "webpage.scrbl")
(render (list doc)
(list "webpage.html")
#:render-mixin search:render-mixin)
这里,webpage.scrbl
是您的文件的来源,webpage.html
也是您的目标位置。它们是列表,因此您可以同时渲染多个文件。
doc
变量来自webpage.scrbl
. (作为参考,涂鸦文件在编译时定义一个名为 的变量doc
,其中包含文档的内容。)
另外,请确保webpage.scrbl
以语言编写scribble/manual
: #lang scribble/manual
,否则您可能无法在此处找到搜索框。
当你运行这个文件时,webpage.html
会生成一个搜索框。当您输入并按回车键时,它将进入search/index.html
同一个文件夹,将您的搜索查询作为 http 参数传递。据我所知,Racket 目前没有导出它是如何构建内部搜索索引的,但是你可以pkgs/racket-index/scribblings/main/search.scrbl
在 repo 的源代码中找到它是如何做到的。如果您希望该搜索页面带有 scribble,请在 github 上打开一个问题。