kramdown-rfc2629 1.6.26 → 1.6.27

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd317f54435256ae6bf63de8753a3f544b63caa1922cadf008f550f242071a48
4
- data.tar.gz: f5c44616bf9debf61856c692c61125da531d966e8f33331fce936ea6efbac6fd
3
+ metadata.gz: 7debb198a9e9bf5c199901337cdaa69059c72345a83c18092aaa24bbc1b533b7
4
+ data.tar.gz: c321ce924e845f46ded79a23b1ffbc8bee52e6fb6352ec49e332b94fd63e8b1e
5
5
  SHA512:
6
- metadata.gz: f895cbca96c9bccca39afb5fbd83b6815ecfcb1a43b9287f7a1bb28de4cc765543cc8f2e9b62564bb71c03efc7651d70b5a5ad68f913888d0657ee8605244546
7
- data.tar.gz: a73cb2f7a94d14e7d08593ff2562f9f1cd52aaab969ccf025af66452ebae22ff8a7cb8c52551c1fde43ac5604011c1363ab501ce251a0094264bcadbb3798c55
6
+ metadata.gz: 36ea96fc6d606198c451fc2fab24cf50a8472a099380c5ff82b6326aa924e55b3a3e51b9180210dd4caf97e57a8aad0c6652e12c8cd05d814b32b5511f969e25
7
+ data.tar.gz: 025bc51c6061f60e258f512a0a5c10710da45083408a16135ffa6d4f234e412cabc8b17e8ce98bd913ccfb5c97869a02084400d9c9917df3e49b08c7a2016c6a
data/bin/echars CHANGED
@@ -3,6 +3,19 @@ require 'unicode/name'
3
3
  require 'unicode/scripts'
4
4
  require 'unicode/blocks'
5
5
  require 'json'
6
+ require 'differ'
7
+ module Differ
8
+ module Format
9
+ module Color
10
+ class << self
11
+ def as_change(change) # monkey patch
12
+ as_insert(change) << "\n" << as_delete(change)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
6
19
 
7
20
  def readable(c)
8
21
  j = c.to_json
@@ -13,27 +26,43 @@ def readable(c)
13
26
  end
14
27
  end
15
28
 
16
- hist = Hash.new(0)
17
- ARGF.read.each_char do |c|
18
- hist[c] += 1 unless c.ord.between?(32, 126)
19
- end
20
- hist.delete("\n")
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)
29
+ def explain(s)
30
+ ret = ''
31
+ hist = Hash.new(0)
32
+ s.each_char do |c|
33
+ hist[c] += 1 unless c.ord.between?(32, 126)
25
34
  end
26
- if scripts.size == 1
27
- puts "*** #{block} (#{scripts.join})"
28
- else
29
- puts "*** #{block}"
30
- end
31
- l.each do |c|
32
- s = "#{readable(c)}: U+#{"%04X %4d" % [c.ord, hist[c]]
35
+ hist.delete("\n")
36
+ hist.keys.sort.group_by {|c| Unicode::Blocks.block(c)}.each do |block, l|
37
+ scripts = Set[]
38
+ l.each do |c|
39
+ scripts << Unicode::Scripts.scripts(c)
40
+ end
41
+ ret << "*** #{block}"
42
+ ret << " (#{scripts.join})" if scripts.size == 1
43
+ ret << "\n"
44
+ l.each do |c|
45
+ ret << "#{readable(c)}: U+#{"%04X %4d" % [c.ord, hist[c]]
33
46
  } #{Unicode::Name.correct(c) ||
34
47
  Unicode::Name.label(c)
35
48
  }"
36
- s << " (#{Unicode::Scripts.scripts(c).join(", ")})" if scripts.size != 1
37
- puts s
49
+ ret << " (#{Unicode::Scripts.scripts(c).join(", ")})" if scripts.size != 1
50
+ ret << "\n"
51
+ end
38
52
  end
53
+ ret
54
+ end
55
+
56
+ s = ARGF.read
57
+ es = explain(s)
58
+ n = s.unicode_normalize
59
+ en = explain(n)
60
+ if es == en
61
+ puts es
62
+ else
63
+ puts "*** Warning: some characters are not normalized and are shown in red."
64
+ puts " ...showing a normalized variant (NFC) in green."
65
+ puts " Lack of normalization may or may not be a problem."
66
+ puts " (Characters may appear to be under wrong block heading.)"
67
+ puts Differ.diff_by_line(en, es).format_as(:color)
39
68
  end
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'kramdown-rfc2629'
3
- s.version = '1.6.26'
3
+ s.version = '1.6.27'
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.}
@@ -12,6 +12,7 @@ spec = Gem::Specification.new do |s|
12
12
  s.add_dependency('unicode-blocks', '~> 1.0')
13
13
  s.add_dependency('unicode-scripts', '~> 1.0')
14
14
  s.add_dependency('net-http-persistent', '~> 4.0')
15
+ s.add_dependency('differ', '~>0.1')
15
16
  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)
16
17
  s.require_path = 'lib'
17
18
  s.executables = ['kramdown-rfc', 'kramdown-rfc2629', 'doilit', 'echars',
@@ -37,12 +37,63 @@ def process_mkd(input, output)
37
37
  end
38
38
  end
39
39
 
40
- def run_idnits(txt_fn)
40
+ def run_idnits(*args)
41
+ if @options.remote
42
+ run_idnits_remotely(*args)
43
+ else
44
+ run_idnits_locally(*args)
45
+ end
46
+ end
47
+
48
+ def run_idnits_locally(txt_fn)
49
+ warn "* running idnits locally in txt #{txt_fn}" if @options.verbose
41
50
  unless system("idnits", txt_fn)
42
- warn "*** problem #$? running idnits"
51
+ warn "*** problem #$? running idnits" if @options.verbose
52
+ warn "*** problem running idnits -- falling back to remote idnits processing"
53
+ run_idnits_remotely(txt_fn)
43
54
  end
44
55
  end
45
56
 
57
+ # curl -s https://author-tools.ietf.org/api/idnits -X POST -F file=@draft-ietf-core-comi.txt -F hidetext=true
58
+ IDNITS_WEBSERVICE = ENV["KRAMDOWN_IDNITS_WEBSERVICE"] ||
59
+ 'https://author-tools.ietf.org/api/idnits'
60
+
61
+ def run_idnits_remotely(txt_fn)
62
+ url = URI(IDNITS_WEBSERVICE)
63
+ req = Net::HTTP::Post.new(url)
64
+ form = [["file", File.open(txt_fn),
65
+ {filename: "input.txt",
66
+ content_type: "text/plain"}],
67
+ ["hidetext", "true"]]
68
+ diag = ["url/form: ", url, form].inspect
69
+ req.set_form(form, 'multipart/form-data')
70
+ warn "* requesting idnits at #{url}" if @options.verbose
71
+ t0 = Time.now
72
+ res = persistent_http.request(url, req)
73
+ warn "* elapsed time: #{Time.now - t0}" if @options.verbose
74
+ case res
75
+ when Net::HTTPBadRequest
76
+ result = checked_json(res.body)
77
+ raise IOError.new("*** Remote Error: #{result["error"]}")
78
+ when Net::HTTPOK
79
+ case res.content_type
80
+ when 'text/plain'
81
+ if res.body == ''
82
+ raise IOError.new("*** HTTP response is empty with status #{res.code}, not written")
83
+ end
84
+ puts res.body
85
+ else
86
+ warning = "*** HTTP response has unexpected content_type #{res.content_type} with status #{res.code}, #{diag}"
87
+ warning << "\n"
88
+ warning << res.body
89
+ raise IOError.new(warning)
90
+ end
91
+ else
92
+ raise IOError.new("*** HTTP response: #{res.code}, #{diag}")
93
+ end
94
+ end
95
+
96
+
46
97
  def process_xml(*args)
47
98
  if @options.remote
48
99
  process_xml_remotely(*args)
@@ -175,6 +226,8 @@ def process(fn)
175
226
  xml = "#$1.xml"
176
227
  process_mkd(fn, xml)
177
228
  process_the_xml(xml, $1) unless @options.xml_only
229
+ when /(.*)\.txt\z/
230
+ run_idnits(fn) if @options.idnits
178
231
  else
179
232
  raise ArgumentError.new("Unknown file type: #{fn}")
180
233
  end
@@ -260,6 +260,9 @@ module Kramdown
260
260
  if anchor = a.delete('href')
261
261
  a['target'] = ::Kramdown::Parser::RFC2629Kramdown.idref_cleanup(anchor)
262
262
  end
263
+ if lang = a.delete('lang-')
264
+ a['xml:lang'] = lang
265
+ end
263
266
  if av = a.delete('noabbrev') # pseudo attribute -> opts
264
267
  opts = opts.merge(noabbrev: TRUTHY[av]) # updated copy
265
268
  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.26
4
+ version: 1.6.27
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-03-05 00:00:00.000000000 Z
11
+ date: 2023-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '4.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: differ
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.1'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.1'
125
139
  description: |-
126
140
  An RFCXML (RFC 799x) generating backend for Thomas Leitner's
127
141
  "kramdown" markdown parser. Mostly useful for RFC writers.