Racket Scribble,如何添加搜索框?

时间:2016-05-15 03:45:37

标签: racket scribble

我用scribble生成我的包文件。

raco会将我的douments与球拍自己的文件整合在一起, 并在页面的topleft上添加一个搜索框。

当您使用“raco docs”时,您可以看到。

现在我想用scribble作为文档工具来生成我的独立 文档。

但是当我使用scribble --htmls demo.scribble时,它不能有搜索框 在页面的顶部。

如何添加搜索框以让我的文档具有搜索功能?

1 个答案:

答案 0 :(得分:2)

有一种方法可以做到这一点,但遗憾的是,它目前并不特别令人愉快。如果您希望我们做得更好,请提交一份issue(或者,如果您有野心勃勃的话,请提出拉动请求),了解您希望如何做到这一点。 (如果它确实得到改善,有人请更新这个答案。)

可悲的是,您无法使用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关键字参数直接将其传递给render函数:

(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。当您输入并按Enter键时,它将转到同一文件夹中的search/index.html,将您的搜索查询作为http参数传递。据我所知,Racket目前不会导出它如何构建内部搜索索引,但你可以在repo的源代码中找到它是如何做到的:pkgs/racket-index/scribblings/main/search.scrbl。如果您希望该搜索页面附带涂鸦,请在github上打开一个问题。