kramdown-rfc2629 1.6.26 → 1.6.27

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: 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.