kramdown-rfc2629 1.4.6 → 1.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/kramdown-rfc-cache-subseries-bibxml +120 -0
- data/bin/kramdown-rfc2629 +4 -0
- data/data/kramdown-rfc2629.erb +1 -1
- data/kramdown-rfc2629.gemspec +3 -2
- data/lib/kramdown-rfc2629.rb +17 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92b7379a1d7172926d1d84ccdc5c816821a0c62c838b597dbc4e92cac91cff0d
|
4
|
+
data.tar.gz: b501c48e3ff1bddaca7abec20125dc360de97f67076341d2b9812a3913cbf314
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ae6bd5ad655d1300c426b06b00c92a7f56c15636b990d3d0ee02e2cc2a0481a7900d002e6076baa467aa2b3dc309719bedff0fd9e85912f083e85b0a9ef332c
|
7
|
+
data.tar.gz: c5cce63d97840efc638bd14240f6652955bb291c46cc038426bb8209c2b65725c14ee3db850954e8ba1bf5f23781f44d388c5d9984be38a4a0f55e63eaef6b1f
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# prerequisite:
|
3
|
+
# gem install net-http-persistent
|
4
|
+
#
|
5
|
+
# generates referencegroup files for BCP and STD series (like bibxml9)
|
6
|
+
# unfortunately, needs to re-fetch rfc-index.xml
|
7
|
+
# uses pretty slow built-in XML parser, so it will take a while even on regen
|
8
|
+
#
|
9
|
+
# uses ENV["KRAMDOWN_REFCACHEDIR"] for where you want to have your bibxml9 data
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'rexml/document'
|
13
|
+
require 'fileutils'
|
14
|
+
|
15
|
+
begin
|
16
|
+
require 'net/http/persistent'
|
17
|
+
rescue
|
18
|
+
warn "*** please install net-http-persistent:"
|
19
|
+
warn " gem install net-http-persistent"
|
20
|
+
warn "(prefix by sudo only if required)."
|
21
|
+
exit 72 # EX_OSFILE
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
TARGET_DIR = ENV["KRAMDOWN_REFCACHEDIR"] || (
|
26
|
+
path = File.expand_path("~/.cache/xml2rfc")
|
27
|
+
warn "*** set environment variable KRAMDOWN_REFCACHEDIR to #{path} to actually use the cache"
|
28
|
+
path
|
29
|
+
)
|
30
|
+
|
31
|
+
FileUtils.mkdir_p(TARGET_DIR)
|
32
|
+
FileUtils.chdir(TARGET_DIR)
|
33
|
+
|
34
|
+
$http = Net::HTTP::Persistent.new name: 'subseries'
|
35
|
+
|
36
|
+
KRAMDOWN_PERSISTENT_VERBOSE = true
|
37
|
+
|
38
|
+
def get_and_write_resource_persistently(url, fn, age_verbose=false)
|
39
|
+
t1 = Time.now
|
40
|
+
response = $http.request(URI(url))
|
41
|
+
if response.code != "200"
|
42
|
+
raise "*** Status code #{response.code} while fetching #{url}"
|
43
|
+
else
|
44
|
+
File.write(fn, response.body)
|
45
|
+
end
|
46
|
+
t2 = Time.now
|
47
|
+
warn "#{url} -> #{fn} (#{"%.3f" % (t2 - t1)} s)" if KRAMDOWN_PERSISTENT_VERBOSE
|
48
|
+
if age_verbose
|
49
|
+
if age = response.get_fields("age")
|
50
|
+
warn "(working from a web cache, index is #{age.first} seconds stale)"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
CLEAR_RET = "\e[K\r" # XXX all the world is ECMA-48 (ISO 6429), no?
|
56
|
+
|
57
|
+
def noisy(name)
|
58
|
+
print "#{name}...#{CLEAR_RET}"
|
59
|
+
end
|
60
|
+
def clear_noise
|
61
|
+
print CLEAR_RET
|
62
|
+
end
|
63
|
+
|
64
|
+
def normalize_name(n)
|
65
|
+
n.sub(/([A-Z])0+/) {$1}
|
66
|
+
end
|
67
|
+
|
68
|
+
def regress_name(n)
|
69
|
+
n.sub(/([A-Z])(\d+)/) {"#$1#{"%04d" % $2.to_i}"}
|
70
|
+
end
|
71
|
+
|
72
|
+
def regress_name_dot(n)
|
73
|
+
n.sub(/([A-Z])(\d+)/) {"#$1.#{"%04d" % $2.to_i}"}
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_ref(rfcname)
|
77
|
+
name = "reference.#{regress_name_dot(rfcname)}.xml"
|
78
|
+
begin
|
79
|
+
file = File.read(name) # no age check
|
80
|
+
rescue Errno::ENOENT
|
81
|
+
get_and_write_resource_persistently("https://www.rfc-editor.org/refs/bibxml/" << name, name)
|
82
|
+
file = File.read(name)
|
83
|
+
end
|
84
|
+
d = REXML::Document.new(file)
|
85
|
+
d.xml_decl.nowrite
|
86
|
+
"<!-- #{name} -->\n" << d.to_s.lstrip
|
87
|
+
end
|
88
|
+
|
89
|
+
def create_bib(series, subname, rfcnames)
|
90
|
+
p [series, subname, rfcnames]
|
91
|
+
subname_norm = normalize_name(subname)
|
92
|
+
refs = %{<?xml version='1.0' encoding='UTF-8'?>\n}
|
93
|
+
refs << %{<referencegroup anchor='#{subname_norm}' target='https://www.rfc-editor.org/info/#{subname_norm.downcase}'>\n}
|
94
|
+
refs << rfcnames.map {|x| get_ref(x)}.join
|
95
|
+
refs << "</referencegroup>\n"
|
96
|
+
File.write("reference.#{regress_name_dot(subname)}.xml", refs)
|
97
|
+
end
|
98
|
+
|
99
|
+
def handle_sub(series, entry)
|
100
|
+
ids = entry.get_elements("doc-id")
|
101
|
+
warn "** ids #{ids} #{entry}" unless ids.size == 1
|
102
|
+
subname = ids.first.text
|
103
|
+
isalso = entry.get_elements("is-also")
|
104
|
+
if isalso.size == 1
|
105
|
+
rfcs = isalso.first.get_elements("doc-id")
|
106
|
+
if rfcs.size > 0
|
107
|
+
rfcnames = rfcs.map {|r| r.text}
|
108
|
+
create_bib(series, subname, rfcnames)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
RFCINDEX_SOURCE = "https://www.rfc-editor.org/rfc/rfc-index.xml"
|
114
|
+
RFCINDEX_COPY = File.basename(RFCINDEX_SOURCE)
|
115
|
+
|
116
|
+
get_and_write_resource_persistently(RFCINDEX_SOURCE, RFCINDEX_COPY, true) unless ENV["KRAMDOWN_DONT_REFRESH_RFCINDEX"]
|
117
|
+
|
118
|
+
doc = REXML::Document.new(File.read(RFCINDEX_COPY))
|
119
|
+
REXML::XPath.each(doc.root, "/rfc-index/bcp-entry") { |e| handle_sub("BCP", e) }
|
120
|
+
REXML::XPath.each(doc.root, "/rfc-index/std-entry") { |e| handle_sub("STD", e) }
|
data/bin/kramdown-rfc2629
CHANGED
@@ -269,6 +269,10 @@ def bibtagsys(bib, anchor=nil, stand_alone=true)
|
|
269
269
|
rfc4d = "%04d" % $1.to_i
|
270
270
|
[bib.upcase,
|
271
271
|
"#{XML_RESOURCE_ORG_PREFIX}/bibxml/reference.RFC.#{rfc4d}.xml"]
|
272
|
+
elsif $options.v3 && bib =~ /\A(bcp|std)(\d+)/i
|
273
|
+
n4d = "%04d" % $2.to_i
|
274
|
+
[bib.upcase,
|
275
|
+
"#{XML_RESOURCE_ORG_PREFIX}/bibxml-rfcsubseries-new/reference.#{$1.upcase}.#{n4d}.xml"]
|
272
276
|
elsif bib =~ /\A([-A-Z0-9]+)\./ &&
|
273
277
|
(xro = Kramdown::Converter::Rfc2629::XML_RESOURCE_ORG_MAP[$1])
|
274
278
|
dir, _ttl, rewrite_anchor = xro
|
data/data/kramdown-rfc2629.erb
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
<name>Contributors</name>
|
101
101
|
<% else -%>
|
102
102
|
<section anchor="contributors" numbered="false" title="Contributors">
|
103
|
-
<% warn "***
|
103
|
+
<% warn "*** To use YAML contributors, use --v3 (kdrfc -3)" if consec -%>
|
104
104
|
<% end -%>
|
105
105
|
<%= sh -%>
|
106
106
|
<% if $options.v3 && consec
|
data/kramdown-rfc2629.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'kramdown-rfc2629'
|
3
|
-
s.version = '1.4.
|
3
|
+
s.version = '1.4.7'
|
4
4
|
s.summary = "Kramdown extension for generating RFC 7749 XML."
|
5
5
|
s.description = %{An RFC7749 (XML2RFC) generating backend for Thomas Leitner's
|
6
6
|
"kramdown" markdown parser. Mostly useful for RFC writers.}
|
@@ -10,7 +10,8 @@ spec = Gem::Specification.new do |s|
|
|
10
10
|
s.files = Dir['lib/**/*.rb'] + %w(README.md LICENSE kramdown-rfc2629.gemspec bin/kdrfc bin/kramdown-rfc2629 bin/doilit bin/kramdown-rfc-extract-markdown data/kramdown-rfc2629.erb data/encoding-fallbacks.txt data/math.json)
|
11
11
|
s.require_path = 'lib'
|
12
12
|
s.executables = ['kramdown-rfc2629', 'doilit', 'kramdown-rfc-extract-markdown',
|
13
|
-
'kdrfc', 'kramdown-rfc-cache-i-d-bibxml'
|
13
|
+
'kdrfc', 'kramdown-rfc-cache-i-d-bibxml',
|
14
|
+
'kramdown-rfc-cache-subseries-bibxml']
|
14
15
|
s.required_ruby_version = '>= 2.3.0'
|
15
16
|
# s.requirements = 'wget'
|
16
17
|
# s.has_rdoc = true
|
data/lib/kramdown-rfc2629.rb
CHANGED
@@ -833,13 +833,27 @@ COLORS
|
|
833
833
|
end
|
834
834
|
end
|
835
835
|
|
836
|
+
def self.bcp_std_ref(t, n)
|
837
|
+
warn "*** #{t} anchors not supported in v2 format" unless $options.v3
|
838
|
+
[name = "reference.#{t}.#{"%04d" % n.to_i}.xml",
|
839
|
+
"#{XML_RESOURCE_ORG_PREFIX}/bibxml-rfcsubseries-new/#{name}"] # FOR NOW
|
840
|
+
end
|
841
|
+
|
836
842
|
# [subdirectory name, cache ttl in seconds, does it provide for ?anchor=]
|
837
843
|
XML_RESOURCE_ORG_MAP = {
|
838
844
|
"RFC" => ["bibxml", 86400*7, false,
|
839
|
-
->(fn, n){ "
|
845
|
+
->(fn, n){ [name = "reference.RFC.#{"%04d" % n.to_i}.xml",
|
846
|
+
"https://www.rfc-editor.org/refs/bibxml/#{name}"] }
|
840
847
|
],
|
841
848
|
"I-D" => ["bibxml3", false, false,
|
842
|
-
->(fn, n){
|
849
|
+
->(fn, n){ [fn,
|
850
|
+
"https://datatracker.ietf.org/doc/bibxml3/draft-#{n.sub(/\Adraft-/, '')}/xml"] }
|
851
|
+
],
|
852
|
+
"BCP" => ["bibxml-rfcsubseries", 86400*7, false,
|
853
|
+
->(fn, n){ Rfc2629::bcp_std_ref("BCP", n) }
|
854
|
+
],
|
855
|
+
"STD" => ["bibxml-rfcsubseries", 86400*7, false,
|
856
|
+
->(fn, n){ Rfc2629::bcp_std_ref("STD", n) }
|
843
857
|
],
|
844
858
|
"W3C" => "bibxml4",
|
845
859
|
"3GPP" => "bibxml5",
|
@@ -890,7 +904,7 @@ COLORS
|
|
890
904
|
ttl ||= KRAMDOWN_REFCACHETTL # everything but RFCs might change a lot
|
891
905
|
puts "*** Huh: #{fn}" unless sub
|
892
906
|
if altproc && !KRAMDOWN_USE_TOOLS_SERVER
|
893
|
-
url = altproc.call(fn, n)
|
907
|
+
fn, url = altproc.call(fn, n)
|
894
908
|
else
|
895
909
|
url = "#{XML_RESOURCE_ORG_PREFIX}/#{sub}/#{fn}"
|
896
910
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-rfc2629
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -62,6 +62,7 @@ executables:
|
|
62
62
|
- kramdown-rfc-extract-markdown
|
63
63
|
- kdrfc
|
64
64
|
- kramdown-rfc-cache-i-d-bibxml
|
65
|
+
- kramdown-rfc-cache-subseries-bibxml
|
65
66
|
extensions: []
|
66
67
|
extra_rdoc_files: []
|
67
68
|
files:
|
@@ -70,6 +71,7 @@ files:
|
|
70
71
|
- bin/doilit
|
71
72
|
- bin/kdrfc
|
72
73
|
- bin/kramdown-rfc-cache-i-d-bibxml
|
74
|
+
- bin/kramdown-rfc-cache-subseries-bibxml
|
73
75
|
- bin/kramdown-rfc-extract-markdown
|
74
76
|
- bin/kramdown-rfc2629
|
75
77
|
- data/encoding-fallbacks.txt
|