static int s_jxhtml_search_emoji(jxhtml_t *jxhtml, char *txt, char **rslt);
static char *s_jxhtml_istyle_to_mode(apr_pool_t *p, const char *s);
-static css_prop_list_t *s_jxhtml_nopush_and_get_now_style(void *pdoc, Node *node);
-static css_prop_list_t *s_jxhtml_push_and_get_now_style(void *pdoc, Node *node);
+static css_prop_list_t *s_jxhtml_nopush_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value);
+static css_prop_list_t *s_jxhtml_push_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value);
char *attr_rows = NULL;
char *attr_cols = NULL;
char *attr_istyle = NULL;
+ char *attr_style = NULL;
jxhtml = GET_JXHTML(pdoc);
else if (STRCASEEQ('c','C',"cols", name) && value && *value) {
attr_cols = value;
}
+ else if (STRCASEEQ('s','S',"style", name) && value && *value) {
+ attr_style = value;
+ }
}
if (IS_CSS_ON(jxhtml->entryp)) {
- css_prop_list_t *style = s_jxhtml_nopush_and_get_now_style(pdoc, node);
+ css_prop_list_t *style = s_jxhtml_nopush_and_get_now_style(pdoc, node, attr_style);
if (style) {
css_property_t *wap_input_format = chxj_css_get_property_value(doc, style, "-wap-input-format");
css_property_t *cur;
static css_prop_list_t *
-s_jxhtml_push_and_get_now_style(void *pdoc, Node *node)
+s_jxhtml_push_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value)
{
jxhtml_t *jxhtml = GET_JXHTML(pdoc);
Doc *doc = jxhtml->doc;
}
chxj_css_push_prop_list(jxhtml->css_prop_stack, dup_css);
last_css = chxj_css_get_last_prop_list(jxhtml->css_prop_stack);
+
+ if (style_attr_value) {
+ css_stylesheet_t *ssheet = chxj_css_parse_style_attr(doc, NULL, apr_pstrdup(doc->pool, node->name), NULL, NULL, apr_pstrdup(doc->pool, style_attr_value));
+ if (ssheet) {
+ chxj_css_prop_list_merge_property(doc, last_css, ssheet->selector_head.next);
+ }
+ }
}
return last_css;
}
static css_prop_list_t *
-s_jxhtml_nopush_and_get_now_style(void *pdoc, Node *node)
+s_jxhtml_nopush_and_get_now_style(void *pdoc, Node *node, const char *style_attr_value)
{
jxhtml_t *jxhtml = GET_JXHTML(pdoc);
Doc *doc = jxhtml->doc;
chxj_css_prop_list_merge_property(doc, dup_css, selector);
}
last_css = dup_css;
+
+ if (style_attr_value) {
+ css_stylesheet_t *ssheet = chxj_css_parse_style_attr(doc, NULL, apr_pstrdup(doc->pool, node->name), NULL, NULL, apr_pstrdup(doc->pool, style_attr_value));
+ if (ssheet) {
+ chxj_css_prop_list_merge_property(doc, last_css, ssheet->selector_head.next);
+ }
+ }
}
return last_css;
}
void test_jxhtml_textarea_tag_with_css_002();
void test_jxhtml_textarea_tag_with_css_003();
void test_jxhtml_textarea_tag_with_css_004();
+
+void test_jxhtml_textarea_tag_with_css_005();
+void test_jxhtml_textarea_tag_with_css_006();
+void test_jxhtml_textarea_tag_with_css_007();
+void test_jxhtml_textarea_tag_with_css_008();
/* pend */
int
CU_add_test(jxhtml_suite, "test textarea with css 002", test_jxhtml_textarea_tag_with_css_002);
CU_add_test(jxhtml_suite, "test textarea with css 003", test_jxhtml_textarea_tag_with_css_003);
CU_add_test(jxhtml_suite, "test textarea with css 004", test_jxhtml_textarea_tag_with_css_004);
+
+ CU_add_test(jxhtml_suite, "test textarea with css 005", test_jxhtml_textarea_tag_with_css_005);
+ CU_add_test(jxhtml_suite, "test textarea with css 006", test_jxhtml_textarea_tag_with_css_006);
+ CU_add_test(jxhtml_suite, "test textarea with css 007", test_jxhtml_textarea_tag_with_css_007);
+ CU_add_test(jxhtml_suite, "test textarea with css 008", test_jxhtml_textarea_tag_with_css_008);
/* aend */
CU_basic_run_tests();
#undef TEST_STRING
#undef RESULT_STRING
}
+
+
+/******************************************************************************/
+/* TEXTAREA with style attribute */
+/******************************************************************************/
+void test_jxhtml_textarea_tag_with_css_005()
+{
+#define TEST_STRING "<html><head>" \
+ "</head><body><textarea style=\"-wap-input-format: "*<ja:h>"\"></textarea></body></html>"
+#define RESULT_STRING "<?xml version='1.0' encoding='Shift_JIS' ?><!DOCTYPE html PUBLIC \"-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN\" \"html-basic10-plus.dtd\"><html><head></head><body><div><textarea mode=\"hiragana\"></textarea></div></body></html>"
+ char *ret;
+ char *tmp;
+ device_table spec;
+ chxjconvrule_entry entry;
+ cookie_t cookie;
+ apr_size_t destlen;
+ APR_INIT;
+ chxj_serf_get = test_chxj_serf_get004;
+ call_check = 0;
+
+ COOKIE_INIT(cookie);
+
+ SPEC_INIT(spec);
+ destlen = sizeof(TEST_STRING)-1;
+ entry.action |= CONVRULE_CSS_ON_BIT;
+
+ tmp = chxj_encoding(&r, TEST_STRING, &destlen);
+ ret = chxj_convert_jxhtml(&r, &spec, tmp, destlen, &destlen, &entry, &cookie);
+ ret = chxj_rencoding(&r, ret, &destlen);
+ CU_ASSERT(ret != NULL);
+ CU_ASSERT(strcmp(RESULT_STRING, ret) == 0);
+ CU_ASSERT(destlen == sizeof(RESULT_STRING)-1);
+ CU_ASSERT(call_check == 0);
+
+ APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+void test_jxhtml_textarea_tag_with_css_006()
+{
+#define TEST_STRING "<html><head>" \
+ "</head><body><textarea style=\"-wap-input-format: "*<ja:hk>"\"></textarea></body></html>"
+#define RESULT_STRING "<?xml version='1.0' encoding='Shift_JIS' ?><!DOCTYPE html PUBLIC \"-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN\" \"html-basic10-plus.dtd\"><html><head></head><body><div><textarea mode=\"hankakukana\"></textarea></div></body></html>"
+ char *ret;
+ char *tmp;
+ device_table spec;
+ chxjconvrule_entry entry;
+ cookie_t cookie;
+ apr_size_t destlen;
+ APR_INIT;
+ chxj_serf_get = test_chxj_serf_get005;
+ call_check = 0;
+
+ COOKIE_INIT(cookie);
+
+ SPEC_INIT(spec);
+ destlen = sizeof(TEST_STRING)-1;
+ entry.action |= CONVRULE_CSS_ON_BIT;
+
+ tmp = chxj_encoding(&r, TEST_STRING, &destlen);
+ ret = chxj_convert_jxhtml(&r, &spec, tmp, destlen, &destlen, &entry, &cookie);
+ ret = chxj_rencoding(&r, ret, &destlen);
+ CU_ASSERT(ret != NULL);
+ CU_ASSERT(strcmp(RESULT_STRING, ret) == 0);
+ CU_ASSERT(destlen == sizeof(RESULT_STRING)-1);
+ CU_ASSERT(call_check == 0);
+ fprintf(stderr, "expect:[%s]\n", RESULT_STRING);
+ fprintf(stderr, "actual:[%s]\n", ret);
+
+ APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+
+void test_jxhtml_textarea_tag_with_css_007()
+{
+#define TEST_STRING "<html><head>" \
+ "</head><body><textarea style=\"-wap-input-format: "*<ja:en>";\"></textarea></body></html>"
+#define RESULT_STRING "<?xml version='1.0' encoding='Shift_JIS' ?><!DOCTYPE html PUBLIC \"-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN\" \"html-basic10-plus.dtd\"><html><head></head><body><div><textarea mode=\"alphabet\"></textarea></div></body></html>"
+ char *ret;
+ char *tmp;
+ device_table spec;
+ chxjconvrule_entry entry;
+ cookie_t cookie;
+ apr_size_t destlen;
+ APR_INIT;
+ chxj_serf_get = test_chxj_serf_get006;
+ call_check = 0;
+
+ COOKIE_INIT(cookie);
+
+ SPEC_INIT(spec);
+ destlen = sizeof(TEST_STRING)-1;
+ entry.action |= CONVRULE_CSS_ON_BIT;
+
+ tmp = chxj_encoding(&r, TEST_STRING, &destlen);
+ ret = chxj_convert_jxhtml(&r, &spec, tmp, destlen, &destlen, &entry, &cookie);
+ ret = chxj_rencoding(&r, ret, &destlen);
+ CU_ASSERT(ret != NULL);
+ CU_ASSERT(strcmp(RESULT_STRING, ret) == 0);
+ CU_ASSERT(destlen == sizeof(RESULT_STRING)-1);
+ CU_ASSERT(call_check == 0);
+
+ APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
+
+void test_jxhtml_textarea_tag_with_css_008()
+{
+#define TEST_STRING "<html><head>" \
+ "</head><body><textarea style=\"-wap-input-format: "*<ja:n>";\"></textarea></body></html>"
+#define RESULT_STRING "<?xml version='1.0' encoding='Shift_JIS' ?><!DOCTYPE html PUBLIC \"-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN\" \"html-basic10-plus.dtd\"><html><head></head><body><div><textarea mode=\"numeric\"></textarea></div></body></html>"
+ char *ret;
+ char *tmp;
+ device_table spec;
+ chxjconvrule_entry entry;
+ cookie_t cookie;
+ apr_size_t destlen;
+ APR_INIT;
+ chxj_serf_get = test_chxj_serf_get007;
+ call_check = 0;
+
+ COOKIE_INIT(cookie);
+
+ SPEC_INIT(spec);
+ destlen = sizeof(TEST_STRING)-1;
+ entry.action |= CONVRULE_CSS_ON_BIT;
+
+ tmp = chxj_encoding(&r, TEST_STRING, &destlen);
+ ret = chxj_convert_jxhtml(&r, &spec, tmp, destlen, &destlen, &entry, &cookie);
+ ret = chxj_rencoding(&r, ret, &destlen);
+fprintf(stderr, "expect:[%s]\n", RESULT_STRING);
+fprintf(stderr, "actual:[%s]\n", ret);
+ CU_ASSERT(ret != NULL);
+ CU_ASSERT(strcmp(RESULT_STRING, ret) == 0);
+ CU_ASSERT(destlen == sizeof(RESULT_STRING)-1);
+ CU_ASSERT(call_check == 0);
+
+ APR_TERM;
+#undef TEST_STRING
+#undef RESULT_STRING
+}
/*
* vim:ts=2 et
*/