kramdown-rfc2629 1.4.6 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|