Module: KramdownRFC

Extended by:
Kramdown::Utils::Html
Defined in:
lib/kramdown-rfc/refxml.rb,
lib/kramdown-rfc/parameterset.rb

Defined Under Namespace

Classes: ParameterSet

Class Method Summary collapse

Class Method Details

.authorps_from_hash(au) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/kramdown-rfc/refxml.rb', line 40

def self.authorps_from_hash(au)
  aups = KramdownRFC::ParameterSet.new(au)
  if ins = aups[:ins]
    parts = ins.split('.').map(&:strip)
    aups.rest["initials"] = parts[0..-2].join('.') << '.'
    aups.rest["surname"] = parts[-1]
  end
  # hack ("heuristic for") initials and surname from name
  # -- only works for people with exactly one last name and uncomplicated first names
  if n = aups.rest["name"]
    n = n.split
    aups.rest["initials"] ||= n[0..-2].map(&:chr).join('.') << '.'
    aups.rest["surname"] ||= n[-1]
  end
  aups
end

.dateattrs(date) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/kramdown-rfc/refxml.rb', line 57

def self.dateattrs(date)
  begin
    case date
    when /\A\d\d\d\d\z/
      %{year="#{date}"}
    when Integer
      %{year="#{"%04d" % date}"}
    when String
      Date.parse("#{date}-01").strftime(%{year="%Y" month="%B"})
    when Date
      date.strftime(%{year="%Y" month="%B" day="%d"})
    when Array                  # this allows to explicitly give a string
      %{year="#{date.join(" ")}"}
    when nil
      %{year="n.d."}
    end

  rescue ArgumentError
    warn "*** Invalid date: #{date} -- use 2012, 2012-07, or 2012-07-28"
  end
end

.escattr(str) ⇒ Object



5
6
7
# File 'lib/kramdown-rfc/refxml.rb', line 5

def self.escattr(str)
  escape_html(str.to_s, :attribute)
end

.ref_to_xml(k, v) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/kramdown-rfc/refxml.rb', line 9

def self.ref_to_xml(k, v)
  vps = KramdownRFC::ParameterSet.new(v)
  erb = ERB.new <<-REFERB, nil, '-'
<reference anchor="<%= escattr(k) %>" <%= vps.attr("target") %>>
<front>
  <%= vps.ele("title") -%>

<% vps.arr("author", true, true) do |au|
 aups = authorps_from_hash(au)
 -%>
  <author <%=aups.attrs("initials", "surname", "fullname=name", "role")%>>
    <%= aups.ele("organization=org", aups.attr("abbrev=orgabbrev"), "") %>
  </author>
<%   aups.warn_if_leftovers  -%>
<% end -%>
  <date <%= dateattrs(vps[:date]) %>/>
</front>
<% vps.arr("seriesinfo", false) do |k, v| -%>
<seriesInfo name="<%=escattr(k)%>" value="<%=escattr(v)%>"/>
<% end -%>
<% vps.arr("format", false) do |k, v| -%>
<format type="<%=escattr(k)%>" target="<%=escattr(v)%>"/>
<% end -%>
<%= vps.ele("annotation=ann", nil, nil, true) -%>
</reference>
  REFERB
  ret = erb.result(binding)
  vps.warn_if_leftovers
  ret
end