OSDN Git Service

* change writting.
[modchxj/mod_chxj.git] / include / mod_chxj.h
1 /*
2  * Copyright (C) 2005 QSDN,Inc. All rights reserved.
3  * Copyright (C) 2005 Atsushi Konno All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #ifndef __MOD_CHXJ_H__
18 #define __MOD_CHXJ_H__
19
20 #if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE)
21 #define AP_NEED_SET_MUTEX_PERMS
22 #endif
23
24
25 #include <string.h>
26
27 #include "httpd.h"
28 #include "http_config.h"
29 #include "http_protocol.h"
30 #include "http_request.h"
31 #include "http_log.h"
32 #include "ap_config.h"
33 #include "apr_strings.h"
34 #include "apr_buckets.h"
35 #include "apr_lib.h"
36 #include "apr_tables.h"
37 #include "apr_dso.h"
38 #include "apr_general.h"
39 #include "apr_pools.h"
40 #include "util_filter.h"
41
42 #if defined(AP_NEED_SET_MUTEX_PERMS)
43 #  include "unixd.h"
44 #endif
45
46 #include "qs_ignore_sp.h"
47 #include "qs_log.h"
48 #include "qs_malloc.h"
49 #include "qs_parse_attr.h"
50 #include "qs_parse_file.h"
51 #include "qs_parse_string.h"
52 #include "qs_parse_tag.h"
53
54 #ifndef __CONFIG_H__
55 #define __CONFIG_H__
56
57 #undef PACKAGE_NAME
58 #undef PACKAGE_STRING
59 #undef PACKAGE_TARNAME
60 #undef PACKAGE_VERSION
61
62 #include "config.h"
63 #endif
64 #ifdef HAVE_AP_REGEX_H
65 #  include "ap_regex.h"
66 #else
67 #  include "pcreposix.h"
68 #  include "pcre.h"
69 #  if !defined(AP_REG_ASSERT)
70 #    define AP_REG_ASSERT   REG_ASSERT
71 #  endif
72 #  if !defined(AP_REG_BADBR)
73 #    define AP_REG_BADBR    REG_BADBR
74 #  endif
75 #  if !defined(AP_REG_BADPAT)
76 #    define AP_REG_BADPAT   REG_BADPAT
77 #  endif
78 #  if !defined(AP_REG_BADRPT)
79 #    define AP_REG_BADRPT   REG_BADRPT
80 #  endif
81 #  if !defined(AP_REG_EBRACE)
82 #    define AP_REG_EBRACE   REG_EBRACE
83 #  endif
84 #  if !defined(AP_REG_EBRACK)
85 #    define AP_REG_EBRACK   REG_EBRACK
86 #  endif
87 #  if !defined(AP_REG_ECOLLATE)
88 #    define AP_REG_ECOLLATE REG_ECOLLATE
89 #  endif
90 #  if !defined(AP_REG_ECTYPE)
91 #    define AP_REG_ECTYPE   REG_ECTYPE
92 #  endif
93 #  if !defined(AP_REG_EESCAPE)
94 #    define AP_REG_EESCAPE  REG_EESCAPE
95 #  endif
96 #  if !defined(AP_REG_EMPTY)
97 #    define AP_REG_EMPTY    REG_EMPTY
98 #  endif
99 #  if !defined(AP_REG_EPAREN)
100 #    define AP_REG_EPAREN   REG_EPAREN
101 #  endif
102 #  if !defined(AP_REG_ERANGE)
103 #    define AP_REG_ERANGE   REG_ERANGE
104 #  endif
105 #  if !defined(AP_REG_ESIZE)
106 #    define AP_REG_ESIZE    REG_ESIZE
107 #  endif
108 #  if !defined(AP_REG_ESPACE)
109 #    define AP_REG_ESPACE   REG_ESPACE
110 #  endif
111 #  if !defined(AP_REG_ESUBREG)
112 #    define AP_REG_ESUBREG  REG_ESUBREG
113 #  endif
114 #  if !defined(AP_REG_INVARG)
115 #    define AP_REG_INVARG   REG_INVARG
116 #  endif
117 #  if !defined(AP_REG_NOMATCH)
118 #    define AP_REG_NOMATCH  REG_NOMATCH
119 #  endif
120
121 #  if !defined(AP_REG_ICASE)
122 #    define AP_REG_ICASE    REG_ICASE
123 #  endif
124 #  if !defined(AP_REG_NEWLINE)
125 #    define AP_REG_NEWLINE  REG_NEWLINE
126 #  endif
127 #  if !defined(AP_REG_NOTBOL)
128 #    define AP_REG_NOTBOL   REG_NOTBOL
129 #  endif
130 #  if !defined(AP_REG_NOTEOL)
131 #    define AP_REG_NOTEOL   REG_NOTEOL
132 #  endif
133
134 #  if !defined(AP_REG_EXTENDED)
135 #    define AP_REG_EXTENDED REG_EXTENDED
136 #  endif
137 #  if !defined(AP_REG_NOSUB)
138 #    define AP_REG_NOSUB    REG_NOSUB
139 #  endif
140
141 #  define ap_regex_t      regex_t
142 #  define ap_regmatch_t   regmatch_t
143 #endif
144
145
146
147
148 #ifdef HAVE_APR_GLOBAL_MUTEX_H
149 #  include "apr_global_mutex.h"
150 #endif
151
152 #ifdef HAVE_APR_SHM_H
153 #  include "apr_shm.h"
154 #endif
155
156
157 typedef struct _imode_emoji_t {
158   char  hex1byte;
159   char  hex2byte;
160   char* string;
161   char *description;
162 } imode_emoji_t;
163
164 typedef struct _ezweb_emoji_t {
165   char* typeA;
166   char* typeB;
167   char* typeC;
168   char* typeD;
169 } ezweb_emoji_t;
170
171 typedef struct _jphone_emoji_t {
172   char* string;
173 } jphone_emoji_t;
174
175 typedef struct _emoji_t {
176   struct _emoji_t* next;
177   int no;
178   imode_emoji_t* imode;
179   ezweb_emoji_t* ezweb;
180   jphone_emoji_t* jphone;
181 } emoji_t;
182
183 typedef struct _chxjconvrule_entry {
184   char       *pattern;
185   ap_regex_t *regexp;
186   int        flags;
187   int        action;
188   char       *encoding;
189   int        pc_flag;
190   char       *user_agent;
191 } chxjconvrule_entry;
192
193 typedef struct {
194   char* (*start_tag_handler)(void* doc, Node* node); 
195   char* (*end_tag_handler)(void* doc, Node* node); 
196 } tag_handler;
197
198 #include "chxj_specified_device.h"
199
200 typedef struct {
201   spec_type    type; 
202   tag_handler* handler;
203 } tag_handlers;
204
205 typedef enum {
206   tagHTML = 0,
207   tagMETA,  
208   tagTEXTAREA,
209   tagP,
210   tagPRE,
211   tagUL,
212   tagLI,
213   tagOL,
214   tagH1,
215   tagH2,
216   tagH3,
217   tagH4,
218   tagH5,
219   tagH6,
220   tagHEAD,
221   tagTITLE,
222   tagBASE,
223   tagBODY,
224   tagA,
225   tagBR,
226   tagTABLE,
227   tagTR,
228   tagTD,
229   tagTBODY,
230   tagFONT,
231   tagFORM,
232   tagINPUT,
233   tagCENTER,
234   tagHR,
235   tagIMG,
236   tagSELECT,
237   tagOPTION,
238   tagDIV,
239   tagCHXJIF,  
240   tagNOBR,  
241   tagSMALL,  
242   tagSTYLE,  
243   tagSPAN,  
244   tagTEXT,  
245   tagTH,  
246   tagB,
247   tagFIELDSET,
248 } tag_type;
249
250 typedef struct {
251   int                   image;
252
253   char*                 device_data_file;
254   char*                 emoji_data_file;
255
256   char*                 image_cache_dir;
257   char*                 image_copyright;
258   device_table_list*    devices;
259   emoji_t*              emoji;
260   emoji_t*              emoji_tail;
261   char*                 server_side_encoding;
262
263   char*                 dir; /* for LOG */
264
265   apr_array_header_t   *convrules;
266
267 } mod_chxj_config;
268
269
270 #define CONVRULE_ENGINE_ON_BIT        (0x00000001)
271 #define CONVRULE_ENGINE_OFF_BIT       (0x00000002)
272 #define CONVRULE_COOKIE_ON_BIT        (0x00000004)
273
274 #define CONVRULE_ENGINE_ON_CMD        "EngineOn"
275 #define CONVRULE_ENGINE_OFF_CMD       "EngineOff"
276 #define CONVRULE_COOKIE_ON_CMD        "CookieOn"
277 #define CONVRULE_COOKIE_OFF_CMD       "CookieOff"
278
279
280 #define CONVRULE_FLAG_NOTMATCH        (0x00000001)
281
282 #define CONVRULE_PC_FLAG_ON_CMD       "PC"
283
284 #define CONVRULE_PC_FLAG_ON_BIT       (0x00000001)
285 #define CONVRULE_PC_FLAG_OFF_BIT      (0x00000002)
286
287 typedef struct {
288   apr_global_mutex_t* cookie_db_lock;
289 } mod_chxj_global_config;
290
291 typedef struct {
292   unsigned int len;
293
294   apr_bucket_brigade *bb;
295
296   char* buffer;
297 } mod_chxj_ctx;
298
299 #include "chxj_tag_util.h"
300
301 #define CHXJ_MOD_CONFIG_KEY   "chxj_module_key"
302
303 #define HTTP_USER_AGENT       "User-Agent"
304 #define CHXJ_HTTP_USER_AGENT  "CHXJ_HTTP_USER_AGENT"
305
306 module AP_MODULE_DECLARE_DATA chxj_module;
307
308 #define CHXJ_IMG_ON     (1)
309 #define CHXJ_IMG_OFF    (0)
310
311
312 #define DBG(X,Y)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(request_rec*)(X),(Y))
313 #define DBG1(X,Y,Za)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za))
314 #define DBG2(X,Y,Za,Zb)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb))
315 #define DBG3(X,Y,Za,Zb,Zc)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc))
316 #define DBG4(X,Y,Za,Zb,Zc,Zd)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc),(Zd))
317 #define DBG5(X,Y,Za,Zb,Zc,Zd,Ze)  ap_log_rerror(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc),(Zd),(Ze))
318 #define SDBG(X,Y)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y))
319 #define SDBG1(X,Y,Za)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za))
320 #define SDBG2(X,Y,Za,Zb)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb))
321 #define SDBG3(X,Y,Za,Zb,Zc)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc))
322 #define SDBG4(X,Y,Za,Zb,Zc,Zd)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc),(Zd))
323 #define SDBG5(X,Y,Za,Zb,Zc,Zd,Ze)  ap_log_error(APLOG_MARK,APLOG_DEBUG,0,(X),(Y),(Za),(Zb),(Zc),(Zd),(Ze))
324 #define ERR(X,Y)  ap_log_rerror(APLOG_MARK,APLOG_ERR,0,(X),(Y))
325 #define ERR1(X,Y,Za)  ap_log_rerror(APLOG_MARK,APLOG_ERR,0,(X),(Y),(Za))
326 #define ERR2(X,Y,Za,Zb)  ap_log_rerror(APLOG_MARK,APLOG_ERR,0,(X),(Y),(Za),(Zb))
327 #define SERR(X,Y)  ap_log_error(APLOG_MARK,APLOG_ERR,0,(X),(Y))
328 #define SERR1(X,Y,Za)  ap_log_error(APLOG_MARK,APLOG_ERR,0,(X),(Y),(Za))
329 #define SERR2(X,Y,Za,Zb)  ap_log_error(APLOG_MARK,APLOG_ERR,0,(X),(Y),(Za),(Zb))
330
331 extern tag_handlers chxj_tag_handlers[];
332 extern tag_handler chtml10_handler[];
333 extern tag_handler chtml20_handler[];
334 extern tag_handler chtml30_handler[];
335 extern tag_handler xhtml_handler[];
336 extern tag_handler hdml_handler[];
337 extern tag_handler jhtml_handler[];
338
339 extern char* chxj_node_exchange( 
340   device_table* spec,
341   request_rec*  r,
342   void*         pdoc,
343   Doc*          doc,
344   Node*         node,
345   int           indent
346 );
347
348
349
350 #endif
351 /*
352  * vim:ts=2 et
353  */