From 0f04aaf8e3a770f70fad31c94158799c2c325399 Mon Sep 17 00:00:00 2001 From: konn Date: Mon, 7 Jul 2008 14:06:00 +0000 Subject: [PATCH] * Added TEXTAREA with -wap-input-format using style attribute and Added test code of it for SoftBank XHTML converter. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2825 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_jxhtml.c | 28 +++++-- test/chxj_jxhtml/test_chxj_jxhtml.c | 153 ++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+), 5 deletions(-) diff --git a/src/chxj_jxhtml.c b/src/chxj_jxhtml.c index e63cb6d5..a47fa041 100644 --- a/src/chxj_jxhtml.c +++ b/src/chxj_jxhtml.c @@ -124,8 +124,8 @@ static void s_init_jxhtml(jxhtml_t *jxhtml, Doc *doc, request_rec *r, device_ta 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); @@ -2461,6 +2461,7 @@ s_jxhtml_start_textarea_tag(void *pdoc, Node *node) char *attr_rows = NULL; char *attr_cols = NULL; char *attr_istyle = NULL; + char *attr_style = NULL; jxhtml = GET_JXHTML(pdoc); @@ -2488,9 +2489,12 @@ s_jxhtml_start_textarea_tag(void *pdoc, Node *node) 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; @@ -3571,7 +3575,7 @@ s_jxhtml_link_tag(void *pdoc, Node *node) 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; @@ -3588,13 +3592,20 @@ s_jxhtml_push_and_get_now_style(void *pdoc, Node *node) } 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; @@ -3610,6 +3621,13 @@ s_jxhtml_nopush_and_get_now_style(void *pdoc, Node *node) 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; } diff --git a/test/chxj_jxhtml/test_chxj_jxhtml.c b/test/chxj_jxhtml/test_chxj_jxhtml.c index 200c8881..565757ca 100644 --- a/test/chxj_jxhtml/test_chxj_jxhtml.c +++ b/test/chxj_jxhtml/test_chxj_jxhtml.c @@ -523,6 +523,11 @@ void test_jxhtml_textarea_tag_with_css_001(); 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 @@ -1094,6 +1099,11 @@ main() 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(); @@ -14572,6 +14582,149 @@ fprintf(stderr, "actual:[%s]\n", ret); #undef TEST_STRING #undef RESULT_STRING } + + +/******************************************************************************/ +/* TEXTAREA with style attribute */ +/******************************************************************************/ +void test_jxhtml_textarea_tag_with_css_005() +{ +#define TEST_STRING "" \ + "" +#define RESULT_STRING "
" + 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 "" \ + "" +#define RESULT_STRING "
" + 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 "" \ + "" +#define RESULT_STRING "
" + 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 "" \ + "" +#define RESULT_STRING "
" + 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 */ -- 2.11.0