class RDoc::CrossReference
RDoc::CrossReference
是一种可重用的创建名称交叉引用的方法。
常量
- ALL_CROSSREF_REGEXP
-
指定
--hyperlink-all
时使用的CROSSREF_REGEXP
版本。 - CLASS_REGEXP_STR
-
用于匹配类引用的正则表达式
-
可以在文本前面加上“\”来禁止交叉引用
-
可以在类名前面加上“::”来从顶层命名空间引用。
-
方法可以后跟括号(不建议)
-
- CROSSREF_REGEXP
-
匹配应该潜在生成交叉引用链接的文本的正则表达式会传递给 add_regexp_handling。请注意,这些表达式旨在拾取已被抑制交叉引用的文本,因为抑制字符会被触发的代码删除。
- METHOD_ARGS_REGEXP_STR
-
用于匹配方法参数的正则表达式。
- METHOD_ARG_REGEXP_STR
-
用于匹配单个方法参数的正则表达式。
- METHOD_REGEXP_STR
-
用于匹配方法引用的正则表达式。
请参阅
CLASS_REGEXP_STR
属性
公共类方法
源
# File lib/rdoc/cross_reference.rb, line 127 def initialize context @context = context @store = context.store @seen = {} end
允许基于给定的 context
(RDoc::Context) 创建交叉引用。
公共实例方法
源
# File lib/rdoc/cross_reference.rb, line 190 def resolve name, text return @seen[name] if @seen.include? name ref = case name when /^\\(#{CLASS_REGEXP_STR})$/o then @context.find_symbol $1 else @context.find_symbol name end ref = resolve_method name unless ref # Try a page name ref = @store.page name if not ref and name =~ /^[\w.]+$/ ref = nil if RDoc::Alias === ref # external alias, can't link to it out = if name == '\\' then name elsif name =~ /^\\/ then # we remove the \ only in front of what we know: # other backslashes are treated later, only outside of <tt> ref ? $' : name elsif ref then if ref.display? then ref else text end else text end @seen[name] = out out end
返回对 name
的引用。
如果找到引用且 name
没有文档记录,则将返回 text
。如果 name
被转义,则返回 name
。如果未找到 name
,则返回 text
。
源
# File lib/rdoc/cross_reference.rb, line 137 def resolve_method name ref = nil if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then type = $2 if '.' == type # will find either #method or ::method method = $3 else method = "#{type}#{$3}" end container = @context.find_symbol_module($1) elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then type = $1 if '.' == type method = $2 else method = "#{type}#{$2}" end container = @context else type = nil container = nil end if container then unless RDoc::TopLevel === container then if '.' == type then if 'new' == method then # AnyClassName.new will be class method ref = container.find_local_symbol method ref = container.find_ancestor_local_symbol method unless ref else ref = container.find_local_symbol "::#{method}" ref = container.find_ancestor_local_symbol "::#{method}" unless ref ref = container.find_local_symbol "##{method}" unless ref ref = container.find_ancestor_local_symbol "##{method}" unless ref end else ref = container.find_local_symbol method ref = container.find_ancestor_local_symbol method unless ref end end end ref end
返回对 name
的方法引用。