blob: da2e79c7434bd836c9307d2466f2f1f4e475bbbf [file] [log] [blame]
def convert_package(package)
retval = ''
vals = package.split('.')
vals.each_with_index do |value, index|
retval << value
if index != vals.size - 1
if value =~ /^[a-z]/
retval << '/'
else
retval << '.'
end
end
end
return retval
end
def render_javadoc(context, text, url_only)
clz = text.strip
short = true
if not url_only
args = text.strip.split(' ', 2)
if args[0] == '-f'
short = false
clz = args[1]
elsif args[0] == '-c'
clz = args[1]
end
end
base = context.registers[:site].config['javadoc_base']
v = context.environments.first["page"]["javadoc_version"]
if v.nil?
v = context.registers[:site].config['javadoc_version']
end
clz_slash = convert_package(clz)
clz_name = clz.split('.').last
if not clz.start_with?('org.apache.accumulo.')
raise "Unknown package prefix for #{clz}"
end
# Default is accumulo-<module> but handle corner cases below
jmodule = 'accumulo-' + clz.split('.')[3]
if clz.start_with?('org.apache.accumulo.server')
jmodule = 'accumulo-server-base'
elsif clz.start_with?('org.apache.accumulo.hadoop.mapred')
jmodule = 'accumulo-hadoop-mapreduce'
elsif clz.start_with?('org.apache.accumulo.iteratortest')
jmodule = 'accumulo-iterator-test-harness'
end
if clz_slash.include? "#"
clz_only = convert_package(clz.split('#').first)
method = clz.split('#').last
url = "#{base}/#{jmodule}/#{v}/#{clz_only}.html##{method}"
elsif clz_name =~ /^[a-z]/
url = "#{base}/#{jmodule}/#{v}/#{clz_slash}/package-summary.html"
else
url = "#{base}/#{jmodule}/#{v}/#{clz_slash}.html"
end
if url_only
return url
end
if short
link_text = clz.split('.').last
else
link_text = clz
end
r = "[#{link_text}](#{url})"
return r
end
class JavadocLinkTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_javadoc(context, @text, false)
end
end
class JavadocUrlTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_javadoc(context, @text, true)
end
end
def render_prop(context, text, link)
args = text.split(' ')
type = 'server'
prop = args[0]
if args[0] == '-c'
type = 'client'
prop = args[1]
elsif args[0] == '-s'
type = 'server'
prop = args[1]
end
base = context.environments.first["page"]["docs_baseurl"]
if base.nil?
base = context.registers[:site].config['docs_baseurl']
end
prop_enc = prop.gsub('.\\*', '.*').gsub('.', '_').gsub('_*', '_prefix')
url = "#{base}/configuration/server-properties##{prop_enc}"
if type == 'client'
url = "#{base}/configuration/client-properties##{prop_enc}"
end
if link
return "[#{prop}](#{url})"
end
return url
end
class PropertyUrlTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_prop(context, @text, false)
end
end
class PropertyLinkTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_prop(context, @text, true)
end
end
def render_doc(context, text, link)
base = context.environments.first["page"]["docs_baseurl"]
if base.nil?
base = context.registers[:site].config['docs_baseurl']
end
url = "#{base}/#{@text}"
if not link
return url
end
page = @text.split('/').last
return "[#{page}](#{url})"
end
class DocLinkTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_doc(context, @text, true)
end
end
class DocUrlTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
return render_doc(context, @text, false)
end
end
class GitHubIssueTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
# TODO sanity check text
# TODO support optional pound char like #123
url = "https://github.com/apache/accumulo/issues/#{@text}"
return "[##{@text}](#{url})"
end
end
class JiraTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
# TODO sanity check text
# TODO accept number without ACCUMULO- prefix
url = "https://issues.apache.org/jira/browse/#{@text}"
return "[#{@text}](#{url})"
end
end
class GitHubCodeTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
@text = text
end
def render(context)
args = @text.split(' ')
path = args[0]
branch = context.environments.first["page"]["gh_branch"]
if branch.nil?
branch = context.registers[:site].config["gh_branch"]
end
if args[0] == '-b'
branch = args[1]
path = args[2]
end
file_name = path.split('/').last
url = "https://github.com/apache/accumulo/blob/#{branch}/#{path}"
return "[#{file_name}](#{url})"
end
end
Liquid::Template.register_tag('jlink', JavadocLinkTag)
Liquid::Template.register_tag('jurl', JavadocUrlTag)
Liquid::Template.register_tag('plink', PropertyLinkTag)
Liquid::Template.register_tag('purl', PropertyUrlTag)
Liquid::Template.register_tag('dlink', DocLinkTag)
Liquid::Template.register_tag('durl', DocUrlTag)
Liquid::Template.register_tag('ghi', GitHubIssueTag)
Liquid::Template.register_tag('ghc', GitHubCodeTag)
Liquid::Template.register_tag('jira', JiraTag)