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.
- checksums.yaml +4 -4
- data/lib/cbeta/p5a_checker.rb +44 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2007fa55a92c4a68dc438764c107ffbc212bb3b6010a142cd461f6dd4b94836
|
4
|
+
data.tar.gz: 57268cdd51b3390c5e0d636d26d31a1f9893d7cdae9b4e5e8b42f95db0f544af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46e9830b7171683c4e43642c8eef1851e059cde4cb1696df85bb7fea7d48e4d28a1728975a9a8c36cdd3b6591f8b0d0290f74123bb29c44dee2d4a41425453a9
|
7
|
+
data.tar.gz: 36db93a0d3bc3794b248aa249bea059f53c4c176de4263b19f8abcf30799dd9a17b1323c28e9697645f511452e6b118d09a67279f8f1349a1b5e59dae98a76fe
|
data/lib/cbeta/p5a_checker.rb
CHANGED
@@ -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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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.
|
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.
|
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-
|
11
|
+
date: 2025-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: unihan2
|