OSDN Git Service

add wp_imgswap2.py for new OSDN Magazine
[otptools/otptools.git] / otp_setref.py
1 #!/bin/env python
2 # -*- encoding: utf-8 -*-
3 #
4 # otp_imgswap.py : otp image tag swapper
5 #
6
7 import sys
8 import codecs
9 import re
10 import os.path
11 import hashlib
12
13 usage = """usage: %s <target file> <output_file>""" % (os.path.basename(sys.argv[0]),)
14
15 rex_fig_ref = re.compile(ur"""\*図{([A-Za-z0-9_]+)}""")
16 rex_fig_def = re.compile(ur"""^☆図{([A-Za-z0-9_]+)}""")
17 rex_table_ref = re.compile(ur"""\*表{([A-Za-z0-9_]+)}""")
18 rex_table_def = re.compile(ur"""^☆表{([A-Za-z0-9_]+)}""")
19 rex_list_ref = re.compile(ur"""\*リスト{([A-Za-z0-9_]+)}""")
20 rex_list_def = re.compile(ur"""^☆リスト{([A-Za-z0-9_]+)}""")
21
22 try:
23     in_f = codecs.open(sys.argv[1], "r", "utf_8" )
24     out_f = codecs.open(sys.argv[2], "w", "utf_8" )
25 except IndexError:
26     sys.exit(usage)
27
28 fig_count = 0
29 table_count = 0
30 list_count = 0
31 dict_fig = {}
32 dict_table = {}
33 dict_list = {}
34 # 1st scan
35 for line in in_f:
36     # figure
37     match = rex_fig_def.search(line)
38     if match:
39         id = match.group(1)
40         fig_count = fig_count + 1
41         dict_fig[id] = fig_count
42     # table
43     match = rex_table_def.search(line)
44     if match:
45         id = match.group(1)
46         table_count = table_count + 1
47         dict_table[id] = table_count
48     # list
49     match = rex_list_def.search(line)
50     if match:
51         id = match.group(1)
52         list_count = list_count + 1
53         dict_list[id] = list_count
54 in_f.close()
55
56 #create replace list
57 replace_keys = []
58 for item in dict_table:
59     key = u"*表{%s}" % (item,)
60     val = u"*表%d" % dict_table[item]
61     replace_keys.append((key, val))
62     key = u"☆表{%s}" % (item,)
63     val = u"☆表%d" % dict_table[item]
64     replace_keys.append((key, val))
65
66 for item in dict_list:
67     key = u"*リスト{%s}" % (item,)
68     val = u"*リスト%d" % dict_list[item]
69     replace_keys.append((key, val))
70     key = u"☆リスト{%s}" % (item,)
71     val = u"☆リスト%d" % dict_list[item]
72     replace_keys.append((key, val))
73
74 for item in dict_fig:
75     key = u"*図{%s}" % (item,)
76     val = u"*図%d" % dict_fig[item]
77     replace_keys.append((key, val))
78     key = u"☆図{%s}" % (item,)
79     val = u"☆図%d" % dict_fig[item]
80     replace_keys.append((key, val))
81
82
83 # 2nd scan
84 in_f = codecs.open(sys.argv[1], "r", "utf_8" )
85 for line in in_f:
86     for (key, val) in replace_keys:
87         line = line.replace(key, val)
88
89     if rex_fig_ref.search(line):
90        match = rex_fig_ref.search(line)
91        for group in match.groups():
92            print "fig %s isn't defined." % (group,)
93     if rex_list_ref.search(line):
94        match = rex_list_ref.search(line)
95        for group in match.groups():
96            print "list %s isn't defined." % (group,)
97     if rex_table_ref.search(line):
98        match = rex_table_ref.search(line)
99        for group in match.groups():
100            print "table %s isn't defined." % (group,)
101
102     if (re.search(ur"""^☆include<(.*)>$""", line)):
103         fn = re.search(ur"""^☆include<(.*)>$""", line).group(1)
104         enc = "utf_8"
105         if re.search(r":.*$", fn):
106             enc = re.search(r":(.*)$", fn).group(1)
107             fn = re.search(r"^(.*):", fn).group(1)
108         if os.path.isfile(fn):
109             fo = codecs.open(fn, "r", enc )
110             content = fo.read()
111             print >> out_f, content
112             fo.close()
113         else:
114             print "include: not found: %s" % fn
115         continue
116
117     print >> out_f, line,
118
119 print "fig: %d, table: %d, list:%d." % (fig_count, table_count, list_count)