Racket Scribble,如何添加搜索框?
Racket Scribble, How to add a searchbox?
我使用 scribble 生成了我的包裹文件。
而且raco会把我的证件和自己的证件整合在一起,
并在页面左上角添加一个搜索框。
你可以看到当你使用"raco docs"。
现在我想使用涂鸦作为文档工具来生成我的独立
文件。
但是当我使用 scribble --htmls demo.scribble 时,它不能有搜索框
在页面的左上角。
如何添加搜索框让我的文档具备搜索功能?
有一种方法可以做到这一点,但遗憾的是,它目前并不是特别令人愉快。如果您希望我们做得更好,请提交一份 issue(如果您有雄心壮志,我猜是拉取请求),说明您希望如何做到这一点。 (另外,如果确实有所改进,请有人更新此答案。)
遗憾的是,您无法使用 scribble
命令行应用程序(也不使用 raco scribble
)呈现带有搜索框的涂鸦页面。相反,您需要使用 scribble 的 render
function, with the html-render-mixin
来呈现您的文档。不过,一旦您克服了编写自己的脚本来呈现文档的困难,它就相当简单了。
html-render-mixin
生成的 class 有一个(自 Racket 6.5 起未记录,我将为 Racket 6.6 添加文档)字段:search-box?
,默认为 #f
.您可以构建自己的渲染器混合宏来扩展 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
。 (作为参考,scribble 文件在编译时会定义一个名为 doc
的变量,其中包含您的文档的内容。)
此外,请确保 webpage.scrbl
是用 scribble/manual
语言编写的:#lang scribble/manual
,否则您可能无法在那里找到搜索框。
当你运行这个文件时,webpage.html
会生成一个搜索框。当您输入并按回车键时,它将转到同一文件夹中的 search/index.html
,将您的搜索查询作为 http 参数传递。据我所知,Racket 目前没有导出它是如何构建内部搜索索引的,但你可以在 repo 的源代码中找到它是如何构建的:pkgs/racket-index/scribblings/main/search.scrbl
。如果您希望该搜索页面附带涂鸦,请在 github.
上提出问题
我使用 scribble 生成了我的包裹文件。
而且raco会把我的证件和自己的证件整合在一起, 并在页面左上角添加一个搜索框。
你可以看到当你使用"raco docs"。
现在我想使用涂鸦作为文档工具来生成我的独立 文件。
但是当我使用 scribble --htmls demo.scribble 时,它不能有搜索框 在页面的左上角。
如何添加搜索框让我的文档具备搜索功能?
有一种方法可以做到这一点,但遗憾的是,它目前并不是特别令人愉快。如果您希望我们做得更好,请提交一份 issue(如果您有雄心壮志,我猜是拉取请求),说明您希望如何做到这一点。 (另外,如果确实有所改进,请有人更新此答案。)
遗憾的是,您无法使用 scribble
命令行应用程序(也不使用 raco scribble
)呈现带有搜索框的涂鸦页面。相反,您需要使用 scribble 的 render
function, with the html-render-mixin
来呈现您的文档。不过,一旦您克服了编写自己的脚本来呈现文档的困难,它就相当简单了。
html-render-mixin
生成的 class 有一个(自 Racket 6.5 起未记录,我将为 Racket 6.6 添加文档)字段:search-box?
,默认为 #f
.您可以构建自己的渲染器混合宏来扩展 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
。 (作为参考,scribble 文件在编译时会定义一个名为 doc
的变量,其中包含您的文档的内容。)
此外,请确保 webpage.scrbl
是用 scribble/manual
语言编写的:#lang scribble/manual
,否则您可能无法在那里找到搜索框。
当你运行这个文件时,webpage.html
会生成一个搜索框。当您输入并按回车键时,它将转到同一文件夹中的 search/index.html
,将您的搜索查询作为 http 参数传递。据我所知,Racket 目前没有导出它是如何构建内部搜索索引的,但你可以在 repo 的源代码中找到它是如何构建的:pkgs/racket-index/scribblings/main/search.scrbl
。如果您希望该搜索页面附带涂鸦,请在 github.