kramdown-rfc2629 1.6.24 → 1.6.26

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba33d9f40d0de90b356fe771cfc8b4dcafb576bf412d5229b0ec2de531fbcd5a
4
- data.tar.gz: 532cd2d8ac24eab2fb930198e4b57a6e8ec9fc5074b7dd5b418985784f5bd8b7
3
+ metadata.gz: fd317f54435256ae6bf63de8753a3f544b63caa1922cadf008f550f242071a48
4
+ data.tar.gz: f5c44616bf9debf61856c692c61125da531d966e8f33331fce936ea6efbac6fd
5
5
  SHA512:
6
- metadata.gz: ccda242ccfda63d8d166bfd386ff38ddfd16ad0b83ef969111317c4d5b1330af861815468c88eaa6c1940a85b24a601b8a531b075d210d81ef6b81c3993a26e0
7
- data.tar.gz: dd75cc152c578abc018321db4f840dc5fc7062cd42172aed2f40af7c276454d9ebecc7db085efd37fb751f0f9fa132764d3eb586f889f2a2f52aecf07b7a45cb
6
+ metadata.gz: f895cbca96c9bccca39afb5fbd83b6815ecfcb1a43b9287f7a1bb28de4cc765543cc8f2e9b62564bb71c03efc7651d70b5a5ad68f913888d0657ee8605244546
7
+ data.tar.gz: a73cb2f7a94d14e7d08593ff2562f9f1cd52aaab969ccf025af66452ebae22ff8a7cb8c52551c1fde43ac5604011c1363ab501ce251a0094264bcadbb3798c55
data/README.md CHANGED
@@ -33,7 +33,7 @@ To use kramdown-rfc, you'll need Ruby (at least version 2.3, but
33
33
  preferably a current version), and maybe
34
34
  [XML2RFC][] if you want to see the fruits of your work.
35
35
 
36
- kramdown-rfc mydraft.mkd >mydraft.xml
36
+ kramdown-rfc mydraft.md >mydraft.xml
37
37
  xml2rfc mydraft.xml
38
38
 
39
39
  (The most popular file name extension that IETF people have for
@@ -43,11 +43,11 @@ descriptions here, any extension such as .mkd will do, too.)
43
43
  A more brief interface for both calling kramdown-rfc and XML2RFC
44
44
  is provided by `kdrfc`:
45
45
 
46
- kdrfc mydraft.mkd
46
+ kdrfc mydraft.md
47
47
 
48
48
  `kdrfc` can also use a remote installation of XML2RFC if needed:
49
49
 
50
- kdrfc -r mydraft.mkd
50
+ kdrfc -r mydraft.md
51
51
 
52
52
  # Versions of RFCXML
53
53
 
data/bin/echars CHANGED
@@ -1,17 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'unicode/name'
3
+ require 'unicode/scripts'
4
+ require 'unicode/blocks'
5
+ require 'json'
6
+
7
+ def readable(c)
8
+ j = c.to_json
9
+ if j.size == 3
10
+ j[1...-1]
11
+ else
12
+ j
13
+ end
14
+ end
15
+
3
16
  hist = Hash.new(0)
4
17
  ARGF.read.each_char do |c|
5
18
  hist[c] += 1 unless c.ord.between?(32, 126)
6
19
  end
7
20
  hist.delete("\n")
8
- cl = "*** Latin"
9
- hist.keys.sort.partition {|c| c =~ /\A\p{Latin}\z/}.each do |l|
10
- puts cl unless l.empty?
21
+ hist.keys.sort.group_by {|c| Unicode::Blocks.block(c)}.each do |block, l|
22
+ scripts = Set[]
23
+ l.each do |c|
24
+ scripts << Unicode::Scripts.scripts(c)
25
+ end
26
+ if scripts.size == 1
27
+ puts "*** #{block} (#{scripts.join})"
28
+ else
29
+ puts "*** #{block}"
30
+ end
11
31
  l.each do |c|
12
- puts "#{c}: U+#{"%04X %4d" % [c.ord, hist[c]]
32
+ s = "#{readable(c)}: U+#{"%04X %4d" % [c.ord, hist[c]]
13
33
  } #{Unicode::Name.correct(c) ||
14
- Unicode::Name.label(c)}"
34
+ Unicode::Name.label(c)
35
+ }"
36
+ s << " (#{Unicode::Scripts.scripts(c).join(", ")})" if scripts.size != 1
37
+ puts s
15
38
  end
16
- cl = "*** Non-Latin"
17
39
  end
data/bin/kdrfc CHANGED
@@ -10,7 +10,7 @@ kdrfc.options.txt = true # default
10
10
 
11
11
  op = OptionParser.new do |opts|
12
12
  opts.banner = <<BANNER
13
- Usage: kdrfc [options] file.md|file.mkd|file.xml
13
+ Usage: kdrfc [options] file.md|file.xml
14
14
  Version: #{KDRFC_VERSION}
15
15
  BANNER
16
16
  opts.on("-V", "--version", "Show version and exit") do |v|
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'kramdown-rfc2629'
3
- s.version = '1.6.24'
3
+ s.version = '1.6.26'
4
4
  s.summary = "Kramdown extension for generating RFCXML (RFC 799x)."
5
5
  s.description = %{An RFCXML (RFC 799x) generating backend for Thomas Leitner's
6
6
  "kramdown" markdown parser. Mostly useful for RFC writers.}
@@ -9,6 +9,9 @@ spec = Gem::Specification.new do |s|
9
9
  s.add_dependency('certified', '~> 1.0')
10
10
  s.add_dependency('json_pure', '~> 2.0')
11
11
  s.add_dependency('unicode-name', '~> 1.0')
12
+ s.add_dependency('unicode-blocks', '~> 1.0')
13
+ s.add_dependency('unicode-scripts', '~> 1.0')
14
+ s.add_dependency('net-http-persistent', '~> 4.0')
12
15
  s.files = Dir['lib/**/*.rb'] + %w(README.md LICENSE kramdown-rfc2629.gemspec bin/kdrfc bin/kramdown-rfc bin/kramdown-rfc2629 bin/doilit bin/echars bin/kramdown-rfc-extract-markdown data/kramdown-rfc2629.erb data/encoding-fallbacks.txt data/math.json bin/kramdown-rfc-cache-subseries-bibxml bin/kramdown-rfc-autolink-iref-cleanup bin/de-gfm)
13
16
  s.require_path = 'lib'
14
17
  s.executables = ['kramdown-rfc', 'kramdown-rfc2629', 'doilit', 'echars',
@@ -490,7 +490,7 @@ require 'ostruct'
490
490
  $options ||= OpenStruct.new
491
491
  op = OptionParser.new do |opts|
492
492
  opts.banner = <<BANNER
493
- Usage: kramdown-rfc2629 [options] file.md|file.mkd > file.xml
493
+ Usage: kramdown-rfc2629 [options] [file.md] > file.xml
494
494
  Version: #{KDRFC_VERSION}
495
495
  BANNER
496
496
  opts.on("-V", "--version", "Show version and exit") do |v|
@@ -1,7 +1,9 @@
1
1
  require 'uri'
2
2
  require 'net/http'
3
+ require 'net/http/persistent'
3
4
  require 'open3'
4
5
  require 'ostruct'
6
+ require 'json'
5
7
 
6
8
  module KramdownRFC
7
9
 
@@ -65,50 +67,78 @@ def process_xml_locally(input, output, *flags)
65
67
  end
66
68
  end
67
69
 
70
+ # curl https://author-tools.ietf.org/api/render/text -X POST -F "file=@..."
68
71
  XML2RFC_WEBSERVICE = ENV["KRAMDOWN_XML2RFC_WEBSERVICE"] ||
69
- 'http://xml2rfc.tools.ietf.org/cgi-bin/xml2rfc-dev.cgi'
72
+ 'https://author-tools.ietf.org/api/render/'
70
73
 
71
74
  MODE_AS_FORMAT = {
72
- nil => { # v2
73
- "--text" => "txt/ascii",
74
- "--html" => "html/ascii",
75
- },
76
- true => { # v3
77
- "--text" => "txt/v3ascii",
78
- "--html" => "html/v3ascii",
79
- "--v2v3" => "v3xml/ascii",
80
- }
75
+ "--text" => "text",
76
+ "--html" => "html",
77
+ "--v2v3" => "xml",
78
+ "--pdf" => "pdf",
81
79
  }
82
80
 
83
- # XXX move to author-tools@ietf.org API
81
+ def checked_json(t)
82
+ begin
83
+ JSON.load(t)
84
+ rescue => e
85
+ raise IOError.new("*** JSON result: #{e.detailed_message}, #{diag}")
86
+ end
87
+ end
88
+
89
+ def persistent_http
90
+ $http ||= Net::HTTP::Persistent.new name: 'kramdown-rfc'
91
+ end
92
+
84
93
  def process_xml_remotely(input, output, *flags)
85
- warn "* converting remotely from xml #{input} to txt #{output}" if @options.verbose
94
+
86
95
  format = flags[0] || "--text"
87
- # warn [:V3, @options.v3].inspect
88
- maf = MODE_AS_FORMAT[@options.v3][format]
96
+ warn "* converting remotely from xml #{input} to #{format} #{output}" if @options.verbose
97
+ maf = MODE_AS_FORMAT[format]
89
98
  unless maf
90
- raise ArgumentError.new("*** don't know how to convert remotely from xml #{input} to txt #{output}")
99
+ raise ArgumentError.new("*** don't know how to convert remotely from xml #{input} to #{format} #{output}")
91
100
  end
92
- url = URI(XML2RFC_WEBSERVICE)
101
+ url = URI(XML2RFC_WEBSERVICE + maf)
93
102
  req = Net::HTTP::Post.new(url)
94
- form = [["modeAsFormat", maf],
95
- ["type", "binary"],
96
- ["input", File.open(input),
103
+ form = [["file", File.open(input),
97
104
  {filename: "input.xml",
98
105
  content_type: "text/plain"}]]
99
106
  diag = ["url/form: ", url, form].inspect
100
107
  req.set_form(form, 'multipart/form-data')
101
- res = Net::HTTP::start(url.hostname, url.port,
102
- :use_ssl => url.scheme == 'https' ) {|http|
103
- http.request(req)
104
- }
108
+ warn "* requesting at #{url}" if @options.verbose
109
+ t0 = Time.now
110
+ res = persistent_http.request(url, req)
111
+ warn "* elapsed time: #{Time.now - t0}" if @options.verbose
105
112
  case res
113
+ when Net::HTTPBadRequest
114
+ result = checked_json(res.body)
115
+ raise IOError.new("*** Remote Error: #{result["error"]}")
106
116
  when Net::HTTPOK
107
117
  case res.content_type
108
- when 'application/octet-stream'
118
+ when 'application/json'
109
119
  if res.body == ''
110
120
  raise IOError.new("*** HTTP response is empty with status #{res.code}, not written")
111
121
  end
122
+ # warn "* res.body #{res.body}" if @options.verbose
123
+ result = checked_json(res.body)
124
+ if logs = result["logs"]
125
+ if errors = logs["errors"]
126
+ errors.each do |err|
127
+ warn("*** Error: #{err}")
128
+ end
129
+ end
130
+ if warnings = logs["warnings"]
131
+ warnings.each do |w|
132
+ warn("** Warning: #{w}")
133
+ end
134
+ end
135
+ end
136
+ raise IOError.new("*** No useful result from remote") unless result["url"]
137
+ res = persistent_http.request(URI(result["url"]))
138
+ warn "* result content type #{res.content_type}" if @options.verbose
139
+ if res.body == ''
140
+ raise IOError.new("*** Second HTTP response is empty with status #{res.code}, not written")
141
+ end
112
142
  File.open(output, "w") do |fo|
113
143
  fo.print(res.body)
114
144
  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.6.24
4
+ version: 1.6.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-22 00:00:00.000000000 Z
11
+ date: 2023-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -80,6 +80,48 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: unicode-blocks
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: unicode-scripts
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: net-http-persistent
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.0'
83
125
  description: |-
84
126
  An RFCXML (RFC 799x) generating backend for Thomas Leitner's
85
127
  "kramdown" markdown parser. Mostly useful for RFC writers.
@@ -143,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
185
  - !ruby/object:Gem::Version
144
186
  version: '0'
145
187
  requirements: []
146
- rubygems_version: 3.4.2
188
+ rubygems_version: 3.4.6
147
189
  signing_key:
148
190
  specification_version: 4
149
191
  summary: Kramdown extension for generating RFCXML (RFC 799x).