return 0;
}
+char *
+chxj_chtml10_emoji_only_converter(request_rec *r, const char *src, apr_size_t len)
+{
+ apr_size_t ii;
+ Doc doc;
+ chtml10_t __chtml10;
+ chtml10_t *chtml10;
+ char one_byte[2];
+ char two_byte[3];
+ apr_pool_t *pool;
+
+ chtml10 = &__chtml10;
+
+ DBG(r, "REQ[%X] start chxj_chtml10_emoji_eonly_converter()", (apr_size_t)(unsigned int)r);
+ memset(doc, 0, sizeof(Doc));
+ memset(chtml10, 0, sizeof(chtml10_t));
+
+ doc->r = r;
+ chtml10->doc = doc;
+ chtml10->spec = spec;
+ chtml10->out = qs_alloc_zero_byte_string(r->pool);
+ chtml10->conf = chxj_get_module_config(r->per_dir_config, &chxj_module);
+ chtml10->doc->parse_mode = PARSE_MODE_CHTML;
+
+ apr_pool_create(&pool, r->pool);
+
+ chxj_buffered_write_init(pool, &doc.buf);
+
+ for (ii=0; ii<len; ii++) {
+ char *out;
+ int rtn;
+
+ rtn = s_chtml10_search_emoji(chtml10, &src[ii], &out);
+ if (rtn) {
+ W_V(out);
+ ii+=(rtn - 1);
+ continue;
+ }
+
+ if (is_sjis_kanji(src[ii])) {
+ two_byte[0] = src[ii+0];
+ two_byte[1] = src[ii+1];
+ two_byte[2] = 0;
+ W_V(two_byte);
+ ii++;
+ }
+ else {
+ one_byte[0] = src[ii+0];
+ one_Byte[1] = 0;
+ W_V(one_byte);
+ }
+ }
+
+ DBG(r, "REQ[%X] end chxj_chtml10_emoji_eonly_converter()", (apr_size_t)(unsigned int)r);
+ return chtml10->out;
+}
/**
* It is a handler who processes the HTML tag.
converter_t convert_routine[] = {
{
/* CHXJ_SPEC_UNKNOWN */
- .converter = NULL,
- .encoder = NULL,
+ .converter = NULL,
+ .encoder = NULL,
+ .emoji_only_converter = NULL,
},
{
/* CHXJ_SPEC_Chtml_1_0 */
- .converter = chxj_convert_chtml10,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml10,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml10_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_2_0 */
- .converter = chxj_convert_chtml20,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml20,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml20_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_3_0 */
- .converter = chxj_convert_chtml30,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml30,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml30_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_4_0 */
- .converter = chxj_convert_chtml40,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml40,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml40_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_5_0 */
- .converter = chxj_convert_chtml50,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml50,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml50_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_6_0 */
- .converter = chxj_convert_chtml50,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml50,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml50_emoji_only_converter,
},
{
/* CHXJ_SPEC_Chtml_7_0 */
- .converter = chxj_convert_chtml50,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_chtml50,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_chtml50_emoji_only_converter,
},
{
/* CHXJ_SPEC_XHtml_Mobile_1_0 */
- .converter = chxj_convert_xhtml_mobile_1_0,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_xhtml_mobile_1_0,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_xhtml_emoji_only_converter,
},
{
/* CHXJ_SPEC_Hdml */
- .converter = chxj_convert_hdml,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_hdml,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = NULL,
},
{
/* CHXJ_SPEC_Jhtml */
- .converter = chxj_convert_jhtml,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_jhtml,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_jhtml_emoji_only_converter,
},
{
/* CHXJ_SPEC_Jxhtml */
- .converter = chxj_convert_jxhtml,
- .encoder = chxj_encoding,
+ .converter = chxj_convert_jxhtml,
+ .encoder = chxj_encoding,
+ .emoji_only_converter = chxj_jxhtml_emoji_only_converter,
},
{
/* CHXJ_SPEC_HTML */
.converter = NULL,
.encoder = NULL,
+ .emoji_only_converter = NULL,
},
};
DBG(r, "REQ[%X] end chxj_headers_fixup() (no pattern)", (unsigned int)(apr_size_t)r);
return DECLINED;
}
- if (!entryp || !(entryp->action & CONVRULE_ENGINE_ON_BIT)) {
+ if (!(entryp->action & CONVRULE_ENGINE_ON_BIT)) {
DBG(r, "REQ[%X] end chxj_headers_fixup() (engine off)", (unsigned int)(apr_size_t)r);
return DECLINED;
}
+ if (entryp->action & CONVRULE_EMOJI_ONLY_BIT) {
+ DBG(r, "REQ[%X] end chxj_headers_fixup() (emoji only)", (unsigned int)(apr_size_t)r);
+ return DECLINED;
+ }
apr_table_setn(r->headers_in,
CHXJ_HTTP_USER_AGENT,
*src,
(apr_size_t *)len);
+ if (entryp->action & CONVRULE_EMOJI_ONLY_BIT) {
+ if (convert_routine[spec->html_spec_type].emoji_only_converter) {
+ if (tmp) {
+ dst = convert_routine[spec->html_spec_type].emoji_only_converter(r,tmp,*len);
+ }
+ else {
+ dst = convert_routine[spec->html_spec_type].emoji_only_converter(r,*src,*len);
+ }
+ if (dst != NULL) {
+ *len = strlen(dst);
+ }
+ else {
+ dst = apr_palloc(r->pool, 1);
+ *dst = 0;
+ *len = 0;
+ }
+ }
+ DBG(r, "REQ[%X] end of chxj_convert()(emoji only)", (unsigned int)(apr_size_t)r);
+ return dst;
+ }
+
if (convert_routine[spec->html_spec_type].converter) {
if (tmp)
dst = convert_routine[spec->html_spec_type].converter(r,
else
dst = convert_routine[spec->html_spec_type].converter(r,
spec,
- tmp,
+ *src,
*len,
len,
entryp,
if (strcasecmp(CONVRULE_ENGINE_OFF_CMD, action) == 0) {
newrule->action |= CONVRULE_ENGINE_OFF_BIT;
}
+ else
+ if (strcasecmp(CONVRULE_EMOJI_ONLY_CMD, action) == 0) {
+ newrule->action |= CONVRULE_EMOJI_ONLY_BIT;
+ }
break;
case 'C':