OSDN Git Service

Adds scripts for missing sw.
[dianzhuhui/script.git] / missing.rb
1 # -*- coding: utf-8 -*-
2 #  Daxuの抜けをチェックする
3
4 require 'yaml'
5 require 'erb'
6 require File.join(File.dirname(__FILE__), 'lib', 'sw_seals')
7 require File.join(File.dirname(__FILE__), 'lib', 'unicode')
8 require File.join(File.dirname(__FILE__), 'lib', 'tex_commands')
9
10 SOURCE_DIR = File.join(File.dirname(__FILE__), '..', 'yml', 'daxu')
11 TEMPLATE = File.join(File.dirname(__FILE__), 'lib', 'missing.rtex')
12 TARGET = File.join(File.dirname(__FILE__), 'missing.tex')
13 WORDINFO = "%04i「%s」(%s)"
14
15 class SealChecker
16  extend ERB::DefMethod
17   def_erb_method('render()', TEMPLATE)
18   def initialize
19     @count = 0
20     @previous_id = 0
21     @previous_wd = ''
22     @previous_sw = 0
23     @daxu_page = 0
24     @wordlist = Array.new
25     @unicode = UnicodeUtility.new
26     @sw_seals = SWSeals.new
27     @tex_commands = TeXCommands.new
28   end
29   def check(path)
30     chapter = File.basename(path)[0,4]
31     push_wordinfo(sprintf("\\subsubsection*{%s}", chapter))
32     YAML::parse_documents(File.open(path)) do |syck|
33       doc = syck.transform
34       doc.each do |wordinfo|
35         check_wordinfo(wordinfo)
36       end
37     end
38   end
39   def check_wordinfo(wordinfo)
40     id = wordinfo['id']
41     wd = wordinfo['wd']
42     sw = wordinfo['sw']
43     daxu = wordinfo['dx']
44     unless id == @previous_id + 1 then
45       @count += 1 
46       line1 = sprintf("%i>~%i頁:~", @count, daxu)
47       line2 = sprintf(WORDINFO, @previous_id, @previous_wd, @previous_sw)
48       line3 = sprintf("-" + WORDINFO + "\\hspace{2em}", id, wd, sw)
49       missing = '' # TODO
50       mssw = sprintf("%s", @previous_sw).to_i(16) if @previous_sw
51       (@previous_id+1 .. id-1).each do |msid|
52         if mssw then
53           mssw += 1 
54           (mswd, mssw2) = @sw_seals.next_main(mssw)
55           missing += sprintf("%s(%X)\\hspace{1em}", mswd, mssw2)
56         end
57       end
58       push_wordinfo(line1 + line2 + line3 + missing)
59     end
60     @previous_id = id
61     @previous_wd = wd
62     @previous_sw = sw
63     @daxu_page = daxu
64   end
65   def push_wordinfo(info)
66     einfo = @tex_commands.insert_extensions(info)
67     @wordlist.push(einfo)
68   end
69 end
70
71 checker = SealChecker.new
72 Dir.foreach(SOURCE_DIR) do |filename|
73   if filename =~ /^.*\.yml$/ then 
74 #    if filename =~ /^sw01.yml$/ then 
75     printf("\n> %s\n", filename)
76     checker.check(File.join(SOURCE_DIR, filename))
77   end
78 end
79 out = File.open(File.join(TARGET), "w")
80 out.print checker.render()