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);
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},
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},
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},
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)
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)
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]);
119 eb_write_text_string(book, text);
124 * Hook for a reference to WAVE sound data.
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)
128 off_t start_location, end_location;
133 * Set binary context.
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;
140 case EB_HOOK_BEGIN_WAVE:
141 eb_write_text_string(book, "<wave>");
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);
153 * Hook for a reference to MPEG sound data.
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)
157 char file_name[EB_MAX_DIRECTORY_NAME_LENGTH + 1], text[256];
161 case EB_HOOK_BEGIN_MPEG:
163 case EB_HOOK_END_MPEG:
164 if (eb_compose_movie_file_name(argv + 2, file_name) != EB_SUCCESS)
166 sprintf(text, "<mpeg filename=%s>", file_name);
167 eb_write_text_string(book, text);
173 EB_Error_Code hooksets_init()
175 EB_Error_Code error_code;
177 eb_initialize_hookset(&hooksets.text);
178 error_code = eb_set_hooks(&hooksets.text, hooks_text);
179 if(error_code != EB_SUCCESS)
181 LOG(LOG_ERROR, "Failed to set hooksets.text) : %s\n", eb_error_message(error_code));
184 eb_initialize_hookset(&hooksets.heading);
185 error_code = eb_set_hooks (&hooksets.heading, hooks_heading);
186 if(error_code != EB_SUCCESS)
188 LOG(LOG_ERROR, "Failed to set hooksets.heading) : %s\n", eb_error_message(error_code));
191 eb_initialize_hookset(&hooksets.candidate);
192 error_code = eb_set_hooks(&hooksets.candidate, hooks_candidate);
193 if(error_code != EB_SUCCESS)
195 LOG(LOG_ERROR, "Failed to set hooksets.candidate) : %s\n", eb_error_message(error_code));
201 void hooksets_finalize()
203 eb_finalize_hookset(&hooksets.text);
204 eb_finalize_hookset(&hooksets.heading);
205 eb_finalize_hookset(&hooksets.candidate);