/*
+ * Copyright (C) 2005-2009 Atsushi Konno All rights reserved.
* Copyright (C) 2005 QSDN,Inc. All rights reserved.
- * Copyright (C) 2005 Atsushi Konno All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "mod_chxj.h"
#include "chxj_load_emoji_data.h"
-static char* s_load_emoji_set_tag( Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node);
-static char* s_set_emoji_data( Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node);
-static char* s_load_emoji_emoji_tag( Doc* doc, apr_pool_t* p, mod_chxj_config* conf, Node* node);
-static void s_emoji_add_to_tail( mod_chxj_config* conf, emoji_t* emoji);
-static char* s_load_emoji_no_tag( Doc* doc, apr_pool_t* p, emoji_t* em, Node* node);
+static char* s_load_emoji_set_tag(
+ Doc* doc,
+ apr_pool_t* p,
+ mod_chxj_config* conf,
+ Node* node);
+
+static char* s_set_emoji_data(
+ Doc* doc,
+ apr_pool_t* p,
+ mod_chxj_config* conf,
+ Node* node);
+
+static char* s_load_emoji_emoji_tag(
+ Doc* doc,
+ apr_pool_t* p,
+ mod_chxj_config* conf,
+ Node* node);
+
+static void s_emoji_add_to_tail(
+ mod_chxj_config* conf,
+ emoji_t* emoji);
+
+static char* s_load_emoji_no_tag(
+ Doc* doc,
+ apr_pool_t* p,
+ emoji_t* em,
+ Node* node);
+
static char* s_load_emoji_imode_tag( Doc* doc, apr_pool_t* p, emoji_t* em, Node* node);
+
static char* s_load_emoji_ezweb_tag( Doc* doc, apr_pool_t* p, emoji_t* em, Node* node);
+
static char* s_load_emoji_jphone_tag( Doc* doc, apr_pool_t* p, emoji_t* em, Node* node);
+
static char s_hexstring_to_byte(char* s);
conf->emoji = NULL;
conf->emoji_tail = NULL;
- if (rtn = s_set_emoji_data(doc, p, conf,qs_get_root(doc))
+ if ((rtn = s_set_emoji_data(doc, p, conf,qs_get_root(doc))) != NULL)
return rtn;
return NULL;
char* name = qs_get_node_name(doc, child);
if ((*name == 's' || *name == 'S') && strcasecmp(name, "set") == 0) {
- if (rtn = s_load_emoji_set_tag(doc, p, conf, child))
+ if ((rtn = s_load_emoji_set_tag(doc, p, conf, child)) != NULL)
return rtn;
}
}
case 'n':
case 'N':
if (strcasecmp(name, "no") == 0) {
- if (rtn = s_load_emoji_no_tag(doc, p, em, child))
+ if ((rtn = s_load_emoji_no_tag(doc, p, em, child)) != NULL)
return rtn;
}
break;
case 'i':
case 'I':
if (strcasecmp(name, "imode") == 0) {
- if (rtn = s_load_emoji_imode_tag(doc, p, em, child))
+ if ((rtn = s_load_emoji_imode_tag(doc, p, em, child)) != NULL)
return rtn;
}
break;
case 'e':
case 'E':
if (strcasecmp(name, "ezweb") == 0) {
- if (rtn = s_load_emoji_ezweb_tag(doc, p, em, child))
+ if ((rtn = s_load_emoji_ezweb_tag(doc, p, em, child)) != NULL)
return rtn;
}
break;
case 'j':
case 'J':
if (strcasecmp(name, "jphone") == 0) {
- if (rtn = s_load_emoji_jphone_tag(doc, p, em, child))
+ if ((rtn = s_load_emoji_jphone_tag(doc, p, em, child)) != NULL)
return rtn;
}
break;
{
Node* child;
-
- em->imode->hex1byte = 0;
- em->imode->hex2byte = 0;
- em->imode->string = NULL;
+ em->imode->hex1byte = 0;
+ em->imode->hex2byte = 0;
+ em->imode->string = NULL;
em->imode->description = NULL;
for (child = qs_get_child_node(doc, node);
child ;
- child = qs_get_next_node(doc, child))
- {
+ child = qs_get_next_node(doc, child)) {
+
char* name = qs_get_node_name(doc, child);
- if (strcasecmp(name, "hex1") == 0)
- {
- Node* hex1node = qs_get_child_node(doc, child);
- if (hex1node != NULL)
- {
- char* cname = qs_get_node_name(doc, hex1node);
- char* cvalue = qs_get_node_value(doc, hex1node);
- if (strcasecmp(cname, "text") == 0)
- {
- em->imode->hex1byte = s_hexstring_to_byte(cvalue);
+
+ switch (*name) {
+ case 'h':
+ case 'H':
+ if (strcasecmp(name, "hex1") == 0) {
+ Node* hex1node = qs_get_child_node(doc, child);
+ if (hex1node) {
+
+ char* cname = qs_get_node_name(doc, hex1node);
+ char* cvalue = qs_get_node_value(doc, hex1node);
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
+ em->imode->hex1byte = s_hexstring_to_byte(cvalue);
}
- }
- else
- {
- em->imode->hex1byte = 0;
- }
- }
- else
- if (strcasecmp(name, "hex2") == 0)
- {
- Node* hex2node = qs_get_child_node(doc, child);
- if (hex2node != NULL)
- {
- char* cname = qs_get_node_name(doc, hex2node);
- char* cvalue = qs_get_node_value(doc, hex2node);
- if (strcasecmp(cname, "text") == 0)
- {
- em->imode->hex2byte = s_hexstring_to_byte(cvalue);
+ else {
+ em->imode->hex1byte = 0;
}
}
else
- {
- em->imode->hex2byte = 0;
- }
- }
- else
- if (strcasecmp(name, "string") == 0)
- {
- Node* string_node = qs_get_child_node(doc, child);
- if (string_node != NULL)
- {
- char* cname = qs_get_node_name(doc, string_node);
- char* cvalue = qs_get_node_value(doc, string_node);
- if (strcasecmp(cname, "text") == 0)
- {
- em->imode->string = apr_pstrdup(p, cvalue);
+ if ((*name == 'h' || *name == 'H') && strcasecmp(name, "hex2") == 0) {
+ Node* hex2node = qs_get_child_node(doc, child);
+ if (hex2node) {
+ char* cname = qs_get_node_name(doc, hex2node);
+ char* cvalue = qs_get_node_value(doc, hex2node);
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
+ em->imode->hex2byte = s_hexstring_to_byte(cvalue);
+ }
+ else {
+ em->imode->hex2byte = 0;
}
}
- else
- {
- em->imode->string = apr_palloc(p, 1);
- em->imode->string[0] = 0;
- }
- }
- else
- if (strcasecmp(name, "description") == 0)
- {
- Node* description_node = qs_get_child_node(doc, child);
- if (description_node != NULL)
- {
- char* cname = qs_get_node_name(doc, description_node);
- char* cvalue = qs_get_node_value(doc, description_node);
- if (strcasecmp(cname, "text") == 0)
- {
- em->imode->description = apr_pstrdup(p, cvalue);
+ break;
+
+ case 's':
+ case 'S':
+ if (strcasecmp(name, "string") == 0) {
+ Node* string_node = qs_get_child_node(doc, child);
+
+ if (string_node) {
+ char* cname = qs_get_node_name(doc, string_node);
+ char* cvalue = qs_get_node_value(doc, string_node);
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
+ em->imode->string = apr_pstrdup(p, cvalue);
+ }
+ else {
+ em->imode->string = apr_palloc(p, 1);
+ em->imode->string[0] = 0;
}
}
- else
- {
- em->imode->description = apr_palloc(p, 1);
- em->imode->description[0] = 0;
+ break;
+
+ case 'd':
+ case 'D':
+ if (strcasecmp(name, "description") == 0) {
+ Node* description_node = qs_get_child_node(doc, child);
+
+ if (description_node) {
+ char* cname = qs_get_node_name(doc, description_node);
+ char* cvalue = qs_get_node_value(doc, description_node);
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
+ em->imode->description = apr_pstrdup(p, cvalue);
+ }
+ else {
+ em->imode->description = apr_palloc(p, 1);
+ em->imode->description[0] = 0;
+ }
}
+ break;
+
+ default:
+ break;
}
}
+
return NULL;
}
+
static char*
s_load_emoji_ezweb_tag(
- Doc* doc,
+ Doc* doc,
apr_pool_t* p,
- emoji_t* em,
- Node* node)
+ emoji_t* em,
+ Node* node)
{
Node* child;
for (child = qs_get_child_node(doc, node);
child ;
- child = qs_get_next_node(doc, child))
- {
+ child = qs_get_next_node(doc, child)) {
+
char* name = qs_get_node_name(doc, child);
- if (strcasecmp(name, "A") == 0)
- {
+
+ if ((*name == 'a' || *name == 'A') && strcasecmp(name, "A") == 0) {
+
Node* typeAnode = qs_get_child_node(doc, child);
- if (typeAnode != NULL)
- {
+ if (typeAnode) {
+
char* cname = qs_get_node_name(doc, typeAnode);
char* cvalue = qs_get_node_value(doc, typeAnode);
- if (strcasecmp(cname, "text") == 0)
- {
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
em->ezweb->typeA = apr_pstrdup(p,cvalue);
- }
}
- else
- {
+ else {
em->ezweb->typeA = apr_palloc(p, 1);
em->ezweb->typeA[0] = 0;
}
+
}
else
- if (strcasecmp(name, "B") == 0)
- {
+ if ((*name == 'b' || *name == 'B') && strcasecmp(name, "B") == 0) {
+
Node* typeBnode = qs_get_child_node(doc, child);
- if (typeBnode != NULL)
- {
+ if (typeBnode) {
+
char* cname = qs_get_node_name(doc, typeBnode);
char* cvalue = qs_get_node_value(doc, typeBnode);
- if (strcasecmp(cname, "text") == 0)
- {
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
em->ezweb->typeB = apr_pstrdup(p,cvalue);
- }
+
}
- else
- {
+ else {
em->ezweb->typeB = apr_palloc(p, 1);
em->ezweb->typeB[0] = 0;
}
}
else
- if (strcasecmp(name, "C") == 0)
- {
+ if ((*name == 'c' || *name == 'C') && strcasecmp(name, "C") == 0) {
+
Node* typeCnode = qs_get_child_node(doc, child);
- if (typeCnode != NULL)
- {
- char* cname = qs_get_node_name(doc, typeCnode);
+ if (typeCnode) {
+
+ char* cname = qs_get_node_name(doc, typeCnode);
char* cvalue = qs_get_node_value(doc, typeCnode);
- if (strcasecmp(cname, "text") == 0)
- {
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
em->ezweb->typeC = apr_pstrdup(p,cvalue);
- }
}
- else
- {
+ else {
em->ezweb->typeC = apr_palloc(p, 1);
em->ezweb->typeC[0] = 0;
}
}
else
- if (strcasecmp(name, "D") == 0)
- {
+ if ((*name == 'd' || *name == 'D') && strcasecmp(name, "D") == 0) {
+
Node* typeDnode = qs_get_child_node(doc, child);
- if (typeDnode != NULL)
- {
- char* cname = qs_get_node_name(doc, typeDnode);
+ if (typeDnode) {
+
+ char* cname = qs_get_node_name(doc, typeDnode);
char* cvalue = qs_get_node_value(doc, typeDnode);
- if (strcasecmp(cname, "text") == 0)
- {
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0)
em->ezweb->typeD = apr_pstrdup(p,cvalue);
- }
+
}
- else
- {
+ else {
em->ezweb->typeD = apr_palloc(p, 1);
em->ezweb->typeD[0] = 0;
}
}
}
+
return NULL;
}
+
static char*
s_load_emoji_jphone_tag(
- Doc* doc,
+ Doc* doc,
apr_pool_t* p,
- emoji_t* em,
- Node* node)
+ emoji_t* em,
+ Node* node)
{
Node* child;
for (child = qs_get_child_node(doc, node);
child ;
- child = qs_get_next_node(doc, child))
- {
+ child = qs_get_next_node(doc, child)) {
+
char* name = qs_get_node_name(doc, child);
- if (strcasecmp(name, "string") == 0)
- {
+
+ if ((*name == 's' || *name == 'S') && strcasecmp(name, "string") == 0) {
+
Node* stringnode = qs_get_child_node(doc, child);
- if (stringnode != NULL)
- {
- char* cname = qs_get_node_name(doc, stringnode);
+
+ if (stringnode) {
+
+ char* cname = qs_get_node_name(doc, stringnode);
char* cvalue = qs_get_node_value(doc, stringnode);
- if (strcasecmp(cname, "text") == 0)
- {
- int ii;
- int jj;
- char* tmp = apr_palloc(p, strlen(cvalue)+1);
+
+ if ((*cname == 't' || *cname == 'T') && strcasecmp(cname, "text") == 0) {
+ unsigned int ii;
+ int jj;
+ char* tmp;
+
+ tmp = apr_palloc(p, strlen(cvalue)+1);
memset(tmp, 0, strlen(cvalue)+1);
- for (jj=0,ii=0; ii< strlen(cvalue); ii++)
- {
- if (strncasecmp(&cvalue[ii] , ESCAPE_CHAR_LT, strlen(ESCAPE_CHAR_LT)) == 0)
- {
+ for (jj=0,ii=0; ii< strlen(cvalue); ii++) {
+ if (strncasecmp(&cvalue[ii] , ESCAPE_CHAR_LT, strlen(ESCAPE_CHAR_LT)) == 0) {
tmp[jj] = '<';
jj++;
ii += (strlen(ESCAPE_CHAR_LT) - 1);
}
else
- if (strncasecmp(&cvalue[ii] , ESCAPE_CHAR_GT, strlen(ESCAPE_CHAR_GT)) == 0)
- {
+ if (strncasecmp(&cvalue[ii] , ESCAPE_CHAR_GT, strlen(ESCAPE_CHAR_GT)) == 0) {
tmp[jj] = '>';
jj++;
ii += (strlen(ESCAPE_CHAR_GT) - 1);
}
- else
- {
+ else {
tmp[jj] = cvalue[ii];
jj++;
}
em->jphone->string = apr_pstrdup(p,tmp);
}
}
- else
- {
+ else {
em->jphone->string = apr_palloc(p, 1);
em->jphone->string[0] = 0;
}
}
}
+
return NULL;
}
+
+
static void
s_emoji_add_to_tail(
mod_chxj_config* conf,
- emoji_t* emoji)
+ emoji_t* emoji)
{
emoji->next = NULL;
+
if (conf->emoji == NULL) {
conf->emoji = emoji;
conf->emoji_tail = emoji;
}
conf->emoji_tail->next = emoji;
- conf->emoji_tail = emoji;
+ conf->emoji_tail = emoji;
}
+
+
static char
s_hexstring_to_byte(char* s)
{
- int len;
- int ii;
+ int len;
+ int ii;
char one_byte = 0;
len = strlen(s);
- for (ii=0; ii<len; ii++)
- {
- switch(s[ii])
- {
+
+ for (ii=0; ii<len; ii++) {
+ switch(s[ii]) {
case '1':
case '2':
case '3':
break;
}
}
+
return one_byte;
}
/*