From 41b963469c7748b2c71d05717e631864209f0bbd Mon Sep 17 00:00:00 2001 From: konn Date: Sat, 26 Jul 2008 13:57:24 +0000 Subject: [PATCH] * Added marquee tag with CSS for CHTML4.0 converter. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@3118 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_chtml40.c | 71 +++++++++++++++++++++----- test/chxj_chtml40/test_chxj_chtml40.c | 95 +++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 12 deletions(-) diff --git a/src/chxj_chtml40.c b/src/chxj_chtml40.c index 6024178b..9d0246a6 100644 --- a/src/chxj_chtml40.c +++ b/src/chxj_chtml40.c @@ -4296,7 +4296,11 @@ s_chtml40_start_marquee_tag(void *pdoc, Node *node) chtml40_t *chtml40 = GET_CHTML40(pdoc); Doc *doc = chtml40->doc; Attr *attr; - W_L("entryp)) { + css_prop_list_t *style = s_chtml40_push_and_get_now_style(pdoc, node, attr_style); + if (style) { + css_property_t *color_prop = chxj_css_get_property_value(doc, style, "color"); + css_property_t *cur; + for (cur = color_prop->next; cur != color_prop; cur = cur->next) { + if (cur->value && *cur->value) { + attr_color = apr_pstrdup(doc->pool, cur->value); + } + } + } + } + W_L(""); + + chtml40_flags_t *flg = (chtml40_flags_t *)apr_palloc(doc->pool, sizeof(chtml40_flags_t)); + memset(flg, 0, sizeof(*flg)); + if (attr_color) { + attr_color = chxj_css_rgb_func_to_value(doc->pool, attr_color); + W_L(""); + flg->with_font_flag = 1; + } + node->userData = (void *)flg; return chtml40->out; } @@ -4341,11 +4381,18 @@ s_chtml40_start_marquee_tag(void *pdoc, Node *node) * @return The conversion result is returned. */ static char * -s_chtml40_end_marquee_tag(void *pdoc, Node *UNUSED(child)) +s_chtml40_end_marquee_tag(void *pdoc, Node *node) { chtml40_t *chtml40 = GET_CHTML40(pdoc); - Doc *doc = chtml40->doc; + Doc *doc = chtml40->doc; + chtml40_flags_t *flg = (chtml40_flags_t *)node->userData; + if (flg && flg->with_font_flag) { + W_L(""); + } W_L(""); + if (IS_CSS_ON(chtml40->entryp)) { + chxj_css_pop_prop_list(chtml40->css_prop_stack); + } return chtml40->out; } diff --git a/test/chxj_chtml40/test_chxj_chtml40.c b/test/chxj_chtml40/test_chxj_chtml40.c index e7e02ef3..ca8b60cb 100644 --- a/test/chxj_chtml40/test_chxj_chtml40.c +++ b/test/chxj_chtml40/test_chxj_chtml40.c @@ -708,6 +708,9 @@ void test_chtml40_menu_tag_with_css_008(); void test_chtml40_blink_tag_with_css_001(); void test_chtml40_blink_tag_with_css_002(); + +void test_chtml40_marquee_tag_with_css_001(); +void test_chtml40_marquee_tag_with_css_002(); /* pend */ int @@ -1378,6 +1381,9 @@ main() CU_add_test(chtml40_suite, "test blink with css 001", test_chtml40_blink_tag_with_css_001); CU_add_test(chtml40_suite, "test blink with css 002", test_chtml40_blink_tag_with_css_002); + + CU_add_test(chtml40_suite, "test marquee with css 001", test_chtml40_marquee_tag_with_css_001); + CU_add_test(chtml40_suite, "test marquee with css 002", test_chtml40_marquee_tag_with_css_002); /* aend */ CU_basic_run_tests(); @@ -20884,6 +20890,95 @@ void test_chtml40_blink_tag_with_css_002() #undef TEST_STRING #undef RESULT_STRING } + + + + + + + +/*===========================================================================*/ +/* marquee tag with CSS */ +/*===========================================================================*/ +char *test_chxj_serf_get_marquee220(request_rec *r, apr_pool_t *ppool, const char *uri_path, int ss, apr_size_t *len) +{ + static char *css = "a:focus { display: none }\n" + "a:link { display: none }\n" + "a { display: none }\n" + "hr { display: none }\n" + "a:visited { display:none }\n" + "marquee { color: #ff0000 }\n"; + + *len = strlen(css); + call_check = 1; + return css; +} +void test_chtml40_marquee_tag_with_css_001() +{ +#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_get_marquee220; + 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_chtml40(&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 == 1); + + APR_TERM; +#undef TEST_STRING +#undef RESULT_STRING +} +void test_chtml40_marquee_tag_with_css_002() +{ +#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_get_marquee220; + 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_chtml40(&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 +} /* * vim:ts=2 et */ -- 2.11.0