cbeta 3.6.0 → 3.6.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cbeta/p5a_checker.rb +44 -12
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d57589aae785253515b3d2e73f7e5ee0f2267eb5cfd78ffc07a31cda853e0dc4
4
- data.tar.gz: 636713370e0c81c2b25121be8aa58f4d959eb24c0297f64d6a6300431848b805
3
+ metadata.gz: f2007fa55a92c4a68dc438764c107ffbc212bb3b6010a142cd461f6dd4b94836
4
+ data.tar.gz: 57268cdd51b3390c5e0d636d26d31a1f9893d7cdae9b4e5e8b42f95db0f544af
5
5
  SHA512:
6
- metadata.gz: de9137c36aad2f633b1b682d7b22a32d99d260b7e2d5a506bd404a2a13596098755884da9292dacf6692f9751b1744c9f8eccdd5aacc8670c66cadd0ab94a287
7
- data.tar.gz: 8885756792aeb5e473fbf4ffa638c03ba330156a10e7f800464146c93b81defb9a7b8ed5103c6b9cee010c6714b3e361eb1ae0e685dd9f94fc29eb9f2dab1fdc
6
+ metadata.gz: 46e9830b7171683c4e43642c8eef1851e059cde4cb1696df85bb7fea7d48e4d28a1728975a9a8c36cdd3b6591f8b0d0290f74123bb29c44dee2d4a41425453a9
7
+ data.tar.gz: 36db93a0d3bc3794b248aa249bea059f53c4c176de4263b19f8abcf30799dd9a17b1323c28e9697645f511452e6b118d09a67279f8f1349a1b5e59dae98a76fe
@@ -10,11 +10,11 @@ class CBETA::P5aChecker
10
10
  @xml_root = xml_root
11
11
  @figures = figures
12
12
  @log = log
13
+ @errors = ''
14
+ @g_errors = {}
13
15
  end
14
16
 
15
17
  def check
16
- @errors = ''
17
- @g_errors = {}
18
18
  puts "xml: #{@xml_root}"
19
19
  each_canon(@xml_root) do |c|
20
20
  @canon = c
@@ -22,6 +22,26 @@ class CBETA::P5aChecker
22
22
  handle_canon(path)
23
23
  end
24
24
 
25
+ display_errors
26
+ end
27
+
28
+ def check_file(fn)
29
+ handle_file(fn)
30
+ display_errors
31
+ end
32
+
33
+ private
34
+
35
+ include CbetaShare
36
+
37
+ def chk_text(node)
38
+ return if node.text.strip.empty?
39
+ if node.parent.name == 'div'
40
+ error "lb: #{@lb}, text: #{node.text.inspect}", type: "[E02] 文字直接出現在 div 下"
41
+ end
42
+ end
43
+
44
+ def display_errors
25
45
  @g_errors.keys.sort.each do |k|
26
46
  s = @g_errors[k].to_a.join(',')
27
47
  @errors << "#{k} 無缺字資料,出現於:#{s}\n"
@@ -37,16 +57,15 @@ class CBETA::P5aChecker
37
57
  puts "\n發現錯誤,請查看 #{@log}"
38
58
  end
39
59
  end
40
-
41
- private
42
60
 
43
- include CbetaShare
44
-
45
- def chk_text(node)
46
- return if node.text.strip.empty?
47
- if node.parent.name == 'div'
48
- error "lb: #{@lb}, text: #{node.text.inspect}", type: "[E02] 文字直接出現在 div 下"
61
+ def e_app(e)
62
+ if e['type'] == 'star'
63
+ n = e['corresp'].delete_prefix('#')
64
+ unless @notes.include?(n)
65
+ error "lb: #{@lb}, corresp: #{n}", type: "[E03] 星號校勘 app 沒有對應的 note"
66
+ end
49
67
  end
68
+ traverse(e)
50
69
  end
51
70
 
52
71
  def e_g(e)
@@ -86,6 +105,7 @@ class CBETA::P5aChecker
86
105
  unless e.key?('wit')
87
106
  error "lem 缺少 wit 屬性"
88
107
  end
108
+ traverse(e)
89
109
  end
90
110
 
91
111
  def e_rdg(e)
@@ -107,7 +127,7 @@ class CBETA::P5aChecker
107
127
  Dir.entries(folder).sort.each do |f|
108
128
  next if f.start_with? '.'
109
129
  @vol = f
110
- $stderr.puts @vol + ' '
130
+ $stderr.print "#{@vol} "
111
131
  path = File.join(folder, @vol)
112
132
  handle_vol(path)
113
133
  end
@@ -115,7 +135,8 @@ class CBETA::P5aChecker
115
135
 
116
136
  def handle_file(fn)
117
137
  @basename = File.basename(fn)
118
-
138
+ @canon ||= CBETA.get_canon_id_from_linehead(@basename)
139
+
119
140
  s = File.read(fn)
120
141
  if s.include? "\u200B"
121
142
  @errors << "#{@basename} 含有 U+200B Zero Width Space 字元\n"
@@ -125,6 +146,7 @@ class CBETA::P5aChecker
125
146
  if doc.errors.empty?
126
147
  doc.remove_namespaces!
127
148
  @lbs = Set.new
149
+ read_notes(doc)
128
150
  traverse(doc.root)
129
151
  else
130
152
  @errors << "錯誤: #{@basename} not well-formed\n"
@@ -133,6 +155,7 @@ class CBETA::P5aChecker
133
155
 
134
156
  def handle_node(e)
135
157
  case e.name
158
+ when 'app' then e_app(e)
136
159
  when 'g' then e_g(e)
137
160
  when 'graphic' then e_graphic(e)
138
161
  when 'lb' then e_lb(e)
@@ -149,6 +172,15 @@ class CBETA::P5aChecker
149
172
  handle_file(path)
150
173
  end
151
174
  end
175
+
176
+ def read_notes(doc)
177
+ @notes = Set.new
178
+ doc.xpath('//note').each do |e|
179
+ if e.key?('n')
180
+ @notes << e['n']
181
+ end
182
+ end
183
+ end
152
184
 
153
185
  def traverse(e)
154
186
  e.children.each { |c|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cbeta
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.0
4
+ version: 3.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ray Chou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-02 00:00:00.000000000 Z
11
+ date: 2025-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unihan2