【问题标题】:Racket Scribble, How to add a searchbox?Racket Scribble,如何添加搜索框?
【发布时间】:2016-09-11 02:06:12
【问题描述】:

我使用 scribble 来生成我的包裹文档。

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

您可以在使用“raco docs”时看到这一点。

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

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

如何添加搜索框让我的文档具备搜索能力?

【问题讨论】:

标签: racket scribble


【解决方案1】:

有一种方法可以做到这一点,但遗憾的是,目前它并不是特别令人愉快。如果您希望我们做得更好,请提交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 关键字参数直接将其传递给渲染函数:

(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。如果您希望该搜索页面带有 scribble,请在 github 上打开一个问题。

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多