OSDN Git Service

fixed various gtk3 deprecation warnings
[eb123/eb123.git] / src / hook.c
1
2 #include "defs.h"
3
4 #include "hook.h"
5
6 static EB_Error_Code hook_text(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv);
7 static EB_Error_Code hook_wave(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv);
8 static EB_Error_Code hook_mpeg(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv);
9
10 static EB_Hook hooks_text[] = {
11     {EB_HOOK_SET_INDENT,            hook_text},
12     {EB_HOOK_NEWLINE,               hook_text},
13     {EB_HOOK_NARROW_FONT,           hook_text},
14     {EB_HOOK_WIDE_FONT,             hook_text},
15     {EB_HOOK_BEGIN_REFERENCE,       hook_text},
16     {EB_HOOK_END_REFERENCE,         hook_text},
17     {EB_HOOK_BEGIN_CANDIDATE,       hook_text},
18     {EB_HOOK_END_CANDIDATE_LEAF,    hook_text},
19     {EB_HOOK_END_CANDIDATE_GROUP,   hook_text},
20     {EB_HOOK_BEGIN_COLOR_BMP,       hook_text},
21     {EB_HOOK_BEGIN_COLOR_JPEG,      hook_text},
22     {EB_HOOK_END_COLOR_GRAPHIC,     hook_text},
23     {EB_HOOK_BEGIN_MONO_GRAPHIC,    hook_text},
24     {EB_HOOK_END_MONO_GRAPHIC,      hook_text},
25     {EB_HOOK_BEGIN_GRAY_GRAPHIC,    hook_text},
26     {EB_HOOK_END_GRAY_GRAPHIC,      hook_text},
27     {EB_HOOK_BEGIN_WAVE,            hook_wave},
28     {EB_HOOK_END_WAVE,              hook_wave},
29     {EB_HOOK_BEGIN_MPEG,            hook_mpeg},
30     {EB_HOOK_END_MPEG,              hook_mpeg},
31     {EB_HOOK_BEGIN_SUPERSCRIPT,     hook_text},
32     {EB_HOOK_END_SUPERSCRIPT,       hook_text},
33     {EB_HOOK_BEGIN_SUBSCRIPT,       hook_text},
34     {EB_HOOK_END_SUBSCRIPT,         hook_text},
35     {EB_HOOK_BEGIN_EMPHASIS,        hook_text},
36     {EB_HOOK_END_EMPHASIS,          hook_text},
37     {EB_HOOK_BEGIN_KEYWORD,         hook_text},
38     {EB_HOOK_END_KEYWORD,           hook_text},
39     {EB_HOOK_BEGIN_DECORATION,      hook_text},
40     {EB_HOOK_END_DECORATION,        hook_text},
41     {EB_HOOK_NULL, NULL},
42 };
43
44
45 static EB_Hook hooks_heading[] = {
46     {EB_HOOK_NEWLINE,               hook_text},
47     {EB_HOOK_NARROW_FONT,           hook_text},
48     {EB_HOOK_WIDE_FONT,             hook_text},
49     {EB_HOOK_NARROW_JISX0208,       eb_hook_euc_to_ascii},
50     {EB_HOOK_BEGIN_SUPERSCRIPT,     hook_text},
51     {EB_HOOK_END_SUPERSCRIPT,       hook_text},
52     {EB_HOOK_BEGIN_SUBSCRIPT,       hook_text},
53     {EB_HOOK_END_SUBSCRIPT,         hook_text},
54     {EB_HOOK_NULL, NULL},
55 };
56
57 static EB_Hook hooks_candidate[] = {
58     {EB_HOOK_NARROW_FONT,           hook_text},
59     {EB_HOOK_WIDE_FONT,             hook_text},
60     {EB_HOOK_BEGIN_CANDIDATE,       hook_text},
61     {EB_HOOK_END_CANDIDATE_LEAF,    hook_text},
62     {EB_HOOK_END_CANDIDATE_GROUP,   hook_text},
63   {EB_HOOK_NULL, NULL},
64 };
65
66 static EB_Error_Code hook_text(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv)
67 {
68     char text[128];
69     if(code == EB_HOOK_NARROW_FONT)
70         sprintf(text, "<gaiji code=h%04x>", argv[0]);
71     else if(code == EB_HOOK_WIDE_FONT)
72         sprintf(text, "<gaiji code=z%04x>", argv[0]);
73     else if(code == EB_HOOK_SET_INDENT)
74         sprintf(text, "<indent position=%d>", argv[1]);
75     else if(code == EB_HOOK_NEWLINE)
76         sprintf(text, "\n");
77     else if(code == EB_HOOK_BEGIN_REFERENCE)
78         sprintf(text, "<reference>");
79     else if(code == EB_HOOK_END_REFERENCE)
80         sprintf(text, "</reference page=0x%x offset=0x%x>", argv[1], argv[2]);
81     else if(code == EB_HOOK_BEGIN_CANDIDATE)
82         sprintf(text, "<candidate>");
83     else if(code == EB_HOOK_END_CANDIDATE_LEAF)
84         sprintf(text, "</candidate>");
85     else if(code == EB_HOOK_END_CANDIDATE_GROUP)
86         sprintf(text, "</candidate page=0x%x offset=0x%x>", argv[1], argv[2]);
87     else if(code == EB_HOOK_BEGIN_SUPERSCRIPT)
88         sprintf (text, "<sup>");
89     else if(code == EB_HOOK_END_SUPERSCRIPT)
90         sprintf(text, "</sup>");
91     else if(code == EB_HOOK_BEGIN_SUBSCRIPT)
92         sprintf(text, "<sub>");
93     else if(code == EB_HOOK_END_SUBSCRIPT)
94         sprintf(text, "</sub>");
95     else if(code == EB_HOOK_BEGIN_EMPHASIS)
96         sprintf(text, "<emphasis>");
97     else if(code == EB_HOOK_END_EMPHASIS)
98         sprintf(text, "</emphasis>");
99     else if(code == EB_HOOK_BEGIN_KEYWORD)
100         sprintf(text, "<keyword argv1=%x>", argv[1]);
101     else if(code == EB_HOOK_END_KEYWORD)
102         sprintf(text, "</keyword>");
103     else if(code == EB_HOOK_BEGIN_DECORATION)
104         sprintf(text, "<modification method=%d>", argv[1]);
105     else if(code == EB_HOOK_END_DECORATION)
106         sprintf(text, "</modification>");
107     else if(code == EB_HOOK_BEGIN_COLOR_JPEG)
108         sprintf(text, "<jpeg page=0x%x offset=0x%x>", argv[2], argv[3]);
109     else if(code == EB_HOOK_BEGIN_COLOR_BMP)
110         sprintf(text, "<bmp page=0x%x offset=0x%x>", argv[2], argv[3]);
111     else if(code == EB_HOOK_BEGIN_MONO_GRAPHIC)
112         sprintf(text, "<mono width=%d height=%d>", argv[3], argv[2]);
113     else if(code == EB_HOOK_END_MONO_GRAPHIC)
114         sprintf (text, "</mono page=0x%x offset=0x%x>", argv[1], argv[2]);
115     else if(code == EB_HOOK_BEGIN_GRAY_GRAPHIC)
116         sprintf (text, "<gray page=0x%x offset=0x%x>", argv[2], argv[3]);
117     else
118         return EB_SUCCESS;
119     eb_write_text_string(book, text);
120     return EB_SUCCESS;
121 }
122
123 /*
124  * Hook for a reference to WAVE sound data.
125  */
126 static EB_Error_Code hook_wave(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv)
127 {
128     off_t start_location, end_location;
129     gint data_size;
130     gchar text[64];
131
132     /*
133      * Set binary context.
134      */
135     start_location = (off_t)(argv[2] - 1) * EB_SIZE_PAGE + argv[3];
136     end_location   = (off_t)(argv[4] - 1) * EB_SIZE_PAGE + argv[5];
137     data_size = end_location - start_location;
138     switch (code)
139     {
140     case EB_HOOK_BEGIN_WAVE:
141         eb_write_text_string(book, "<wave>");
142         break;
143     case EB_HOOK_END_WAVE:
144         sprintf (text, "</wave page=0x%x offset=0x%x size=%d>", argv[2], argv[3], data_size);
145         eb_write_text_string(book, text);
146         break;
147     }
148     return EB_SUCCESS;
149 }
150
151
152 /*
153  * Hook for a reference to MPEG sound data.
154  */
155 static EB_Error_Code hook_mpeg(EB_Book *book, EB_Appendix *appendix, void *container, EB_Hook_Code code, int argc, const unsigned int *argv)
156 {
157     char file_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1], text[256];
158
159     switch (code)
160     {
161     case EB_HOOK_BEGIN_MPEG:
162         break;
163     case EB_HOOK_END_MPEG:
164         if (eb_compose_movie_file_name(argv + 2, file_name) != EB_SUCCESS)
165             return EB_SUCCESS;
166         sprintf(text, "<mpeg filename=%s>", file_name);
167         eb_write_text_string(book, text);
168         break;
169     }
170     return EB_SUCCESS;
171 }
172
173 EB_Error_Code hooksets_init()
174 {
175     EB_Error_Code error_code;
176
177     eb_initialize_hookset(&hooksets.text);
178     error_code = eb_set_hooks(&hooksets.text, hooks_text);
179     if(error_code != EB_SUCCESS)
180     {
181         LOG(LOG_ERROR, "Failed to set hooksets.text) : %s\n", eb_error_message(error_code));
182         return 1;
183     }
184     eb_initialize_hookset(&hooksets.heading);
185     error_code = eb_set_hooks (&hooksets.heading, hooks_heading);
186     if(error_code != EB_SUCCESS)
187     {
188         LOG(LOG_ERROR, "Failed to set hooksets.heading) : %s\n", eb_error_message(error_code));
189         return 1;
190     }
191     eb_initialize_hookset(&hooksets.candidate);
192     error_code = eb_set_hooks(&hooksets.candidate, hooks_candidate);
193     if(error_code != EB_SUCCESS)
194     {
195         LOG(LOG_ERROR, "Failed to set hooksets.candidate) : %s\n", eb_error_message(error_code));
196         return 1;
197     }
198     return EB_SUCCESS;
199 }
200
201 void hooksets_finalize()
202 {
203     eb_finalize_hookset(&hooksets.text);
204     eb_finalize_hookset(&hooksets.heading);
205     eb_finalize_hookset(&hooksets.candidate);
206 }
207