class RDoc::Markup
RDoc::Markup
解析纯文本文件,并尝试将其分解为组成部分。 其中一些部分是高级别的:段落、逐字文本块、列表条目等。 其他部分发生在字符级别:一段粗体文本、代码字体中的单词。这种标记在精神上类似于 WikiWiki 网站上使用的标记,人们在其中使用一套简单的格式化规则来创建网页。
RDoc::Markup
和其他标记格式不进行输出格式化,这由 RDoc::Markup::Formatter 子类处理。
Markup
格式¶ ↑
RDoc
支持以下标记格式
-
rdoc
:RDoc
标记格式;请参阅RDoc::MarkupReference
。 -
markdown
:Markdown 指南中描述的markdown
标记格式;请参阅RDoc::Markdown
。 -
rd
:rd
标记格式;请参阅RDoc::RD
。 -
tomdoc
:TomDoc for Ruby 中描述的 TomDoc 格式;请参阅RDoc::TomDoc
。
您可以使用以下方法选择标记格式
- 每个项目
-
如果您使用 rake 构建文档,请使用
RDoc::Task#markup
。如果您手动构建文档,请运行
rdoc --markup your_favorite_format --write-options
并提交
.rdoc_options
并将其与您打包的 gem 一起发布。 - 每个文件
-
在文件顶部使用
:markup:
指令为文件的其余部分设置默认格式。 - 每个注释
-
在您想要以不同格式编写的注释顶部使用
:markup:
指令。
RDoc::Markup
¶ ↑
RDoc::Markup
在运行时是可扩展的:您可以添加新的标记元素,以便在 RDoc::Markup
解析的文档中识别它们。
RDoc::Markup
旨在成为一系列工具的基础,这些工具具有一个共同的要求,即应该以各种不同的输出格式和媒体呈现简单的纯文本。 可以预见,RDoc::Markup
可以作为格式化 RDoc
样式注释块、Wiki 条目和在线常见问题解答的基础。
概要¶ ↑
此代码将 input_string
转换为 HTML。 转换发生在 convert
方法中,因此您可以使用相同的 RDoc::Markup
转换器来转换多个输入字符串。
require 'rdoc' h = RDoc::Markup::ToHtml.new(RDoc::Options.new) puts h.convert(input_string)
您可以扩展 RDoc::Markup
解析器以识别新的标记序列,并添加正则表达式处理。 在这里,我们将 WikiWords 对解析器赋予意义,并使序列 {word} 和 <no>text…</no> 表示删除线文本。 然后,我们对 HTML 输出类进行子类化以处理这些
require 'rdoc' class WikiHtml < RDoc::Markup::ToHtml def handle_regexp_WIKIWORD(target) "<font color=red>" + target.text + "</font>" end end markup = RDoc::Markup.new markup.add_word_pair("{", "}", :STRIKE) markup.add_html("no", :STRIKE) markup.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD) wh = WikiHtml.new RDoc::Options.new, markup wh.add_tag(:STRIKE, "<strike>", "</strike>") puts "<body>#{wh.convert ARGF.read}</body>"
Encoding
¶ ↑
在 Encoding
支持可用的情况下,RDoc
将自动将所有文档转换为相同的输出编码。 可以通过 RDoc::Options#encoding
设置输出编码,默认为 Encoding.default_external
。
RDoc Markup
参考¶ ↑
属性
一个处理内联标记的 AttributeManager。
公共类方法
来源
# File lib/rdoc/markup.rb, line 151 def initialize attribute_manager = nil @attribute_manager = attribute_manager || RDoc::Markup::AttributeManager.new @output = nil end
获取一段文本,并使用各种启发式方法来确定其结构(段落、列表等)。 当我们识别出重要的块时,调用事件处理程序。
来源
# File lib/rdoc/markup.rb, line 121 def self.parse str RDoc::Markup::Parser.parse str rescue RDoc::Markup::Parser::Error => e $stderr.puts <<-EOF While parsing markup, RDoc encountered a #{e.class}: #{e} \tfrom #{e.backtrace.join "\n\tfrom "} ---8<--- #{text} ---8<--- RDoc #{RDoc::VERSION} Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} #{RUBY_RELEASE_DATE} Please file a bug report with the above information at: https://github.com/ruby/rdoc/issues EOF raise end
将 str
解析为 RDoc::Markup::Document。
公共实例方法
来源
# File lib/rdoc/markup.rb, line 168 def add_html(tag, name) @attribute_manager.add_html(tag, name) end
添加到被识别为常规标记的序列。
来源
# File lib/rdoc/markup.rb, line 180 def add_regexp_handling(pattern, name) @attribute_manager.add_regexp_handling(pattern, name) end
添加到其他内联序列。 例如,我们可以使用类似以下的内容添加 WikiWords
parser.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
每个 wiki 词都将呈现给输出格式化程序。
来源
# File lib/rdoc/markup.rb, line 161 def add_word_pair(start, stop, name) @attribute_manager.add_word_pair(start, stop, name) end
添加到用于向单个单词(例如 粗体)添加格式的序列。 匹配的条目将生成属性,输出格式化程序可以通过其 name
识别这些属性。
来源
# File lib/rdoc/markup.rb, line 188 def convert input, formatter document = case input when RDoc::Markup::Document then input else RDoc::Markup::Parser.parse input end document.accept formatter end
我们获取 input
,必要时进行解析,然后使用 Visitor 调用输出 formatter
以呈现结果。