From 22696b806c9a22b4c057e180370e6ce9c4d672a4 Mon Sep 17 00:00:00 2001 From: konn Date: Mon, 14 Jul 2008 08:00:27 +0000 Subject: [PATCH] * Added h5 tag with CSS for SoftBank XHTML converter. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2923 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_jxhtml.c | 58 +++++-- test/chxj_jxhtml/test_chxj_jxhtml.c | 313 +++++++++++++++++++++++++++++++++--- 2 files changed, 329 insertions(+), 42 deletions(-) diff --git a/src/chxj_jxhtml.c b/src/chxj_jxhtml.c index 4a898a4f..fd65e2ff 100644 --- a/src/chxj_jxhtml.c +++ b/src/chxj_jxhtml.c @@ -3433,7 +3433,7 @@ s_jxhtml_start_h4_tag(void *pdoc, Node *node) } W_L("doc; @@ -3501,17 +3502,41 @@ s_jxhtml_start_h5_tag(void *pdoc, Node *node) char *value = qs_get_attr_value(doc,attr); if (STRCASEEQ('a','A',"align", name)) { if (value && (STRCASEEQ('l','L',"left",value) || STRCASEEQ('r','R',"right",value) || STRCASEEQ('c','C',"center",value))) { - jxhtml->h5_align_flag++; - align = apr_pstrdup(doc->buf.pool, value); - break; + attr_align = value; } } + else if (STRCASEEQ('s','S',"style",name) && value && *value) { + attr_style = value; + } } - if (align) { - W_L("
"); + if (IS_CSS_ON(jxhtml->entryp)) { + css_prop_list_t *style = s_jxhtml_push_and_get_now_style(pdoc, node, attr_style); + if (style) { + css_property_t *list_style_type_prop = chxj_css_get_property_value(doc, style, "text-align"); + css_property_t *cur; + for (cur = list_style_type_prop->next; cur != list_style_type_prop; cur = cur->next) { + if (STRCASEEQ('l','L',"left", cur->value)) { + attr_align = apr_pstrdup(doc->pool, "left"); + } + else if (STRCASEEQ('c','C',"center",cur->value)) { + attr_align = apr_pstrdup(doc->pool, "center"); + } + else if (STRCASEEQ('r','R',"right",cur->value)) { + attr_align = apr_pstrdup(doc->pool, "right"); + } + } + } } + W_L(""); + return jxhtml->out; } @@ -3535,10 +3560,11 @@ s_jxhtml_end_h5_tag(void *pdoc, Node *UNUSED(child)) doc = jxhtml->doc; r = doc->r; - if (jxhtml->h5_align_flag) { - jxhtml->h5_align_flag--; - W_L("
"); + W_L(""); + if (IS_CSS_ON(jxhtml->entryp)) { + chxj_css_pop_prop_list(jxhtml->css_prop_stack); } + return jxhtml->out; } diff --git a/test/chxj_jxhtml/test_chxj_jxhtml.c b/test/chxj_jxhtml/test_chxj_jxhtml.c index 79ec5a77..9dccd605 100644 --- a/test/chxj_jxhtml/test_chxj_jxhtml.c +++ b/test/chxj_jxhtml/test_chxj_jxhtml.c @@ -600,6 +600,13 @@ void test_jxhtml_h4_tag_with_css_003(); void test_jxhtml_h4_tag_with_css_004(); void test_jxhtml_h4_tag_with_css_005(); void test_jxhtml_h4_tag_with_css_006(); + +void test_jxhtml_h5_tag_with_css_001(); +void test_jxhtml_h5_tag_with_css_002(); +void test_jxhtml_h5_tag_with_css_003(); +void test_jxhtml_h5_tag_with_css_004(); +void test_jxhtml_h5_tag_with_css_005(); +void test_jxhtml_h5_tag_with_css_006(); /* pend */ int @@ -1247,6 +1254,13 @@ main() CU_add_test(jxhtml_suite, "test h4 with css 004", test_jxhtml_h4_tag_with_css_004); CU_add_test(jxhtml_suite, "test h4 with css 005", test_jxhtml_h4_tag_with_css_005); CU_add_test(jxhtml_suite, "test h4 with css 006", test_jxhtml_h4_tag_with_css_006); + + CU_add_test(jxhtml_suite, "test h5 with css 001", test_jxhtml_h5_tag_with_css_001); + CU_add_test(jxhtml_suite, "test h5 with css 002", test_jxhtml_h5_tag_with_css_002); + CU_add_test(jxhtml_suite, "test h5 with css 003", test_jxhtml_h5_tag_with_css_003); + CU_add_test(jxhtml_suite, "test h5 with css 004", test_jxhtml_h5_tag_with_css_004); + CU_add_test(jxhtml_suite, "test h5 with css 005", test_jxhtml_h5_tag_with_css_005); + CU_add_test(jxhtml_suite, "test h5 with css 006", test_jxhtml_h5_tag_with_css_006); /* aend */ CU_basic_run_tests(); @@ -4615,7 +4629,7 @@ void test_jxhtml_h3_tag_010() void test_jxhtml_h4_tag_001() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4645,7 +4659,7 @@ void test_jxhtml_h4_tag_001() void test_jxhtml_h4_tag_002() { #define TEST_STRING "

abc

" -#define RESULT_STRING "
abc
" +#define RESULT_STRING "
abc
" char *ret; char *tmp; device_table spec; @@ -4675,7 +4689,7 @@ void test_jxhtml_h4_tag_002() void test_jxhtml_h4_tag_003() { #define TEST_STRING "

亀さん

" -#define RESULT_STRING "
亀さん
" +#define RESULT_STRING "
亀さん
" char *ret; char *tmp; device_table spec; @@ -4705,7 +4719,7 @@ void test_jxhtml_h4_tag_003() void test_jxhtml_h4_tag_004() { #define TEST_STRING "

ハンカク

" -#define RESULT_STRING "
ハンカク
" +#define RESULT_STRING "
ハンカク
" char *ret; char *tmp; device_table spec; @@ -4735,7 +4749,7 @@ void test_jxhtml_h4_tag_004() void test_jxhtml_h4_tag_005() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4765,7 +4779,7 @@ void test_jxhtml_h4_tag_005() void test_jxhtml_h4_tag_006() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4795,7 +4809,7 @@ void test_jxhtml_h4_tag_006() void test_jxhtml_h4_tag_007() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4825,7 +4839,7 @@ void test_jxhtml_h4_tag_007() void test_jxhtml_h4_tag_008() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4855,7 +4869,7 @@ void test_jxhtml_h4_tag_008() void test_jxhtml_h4_tag_009() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4885,7 +4899,7 @@ void test_jxhtml_h4_tag_009() void test_jxhtml_h4_tag_010() { #define TEST_STRING "

" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4918,7 +4932,7 @@ void test_jxhtml_h4_tag_010() void test_jxhtml_h5_tag_001() { #define TEST_STRING "
" -#define RESULT_STRING "\n" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -4948,7 +4962,7 @@ void test_jxhtml_h5_tag_001() void test_jxhtml_h5_tag_002() { #define TEST_STRING "
abc
" -#define RESULT_STRING "abc" +#define RESULT_STRING "
abc
" char *ret; char *tmp; device_table spec; @@ -4978,7 +4992,7 @@ void test_jxhtml_h5_tag_002() void test_jxhtml_h5_tag_003() { #define TEST_STRING "
亀さん
" -#define RESULT_STRING "亀さん" +#define RESULT_STRING "
亀さん
" char *ret; char *tmp; device_table spec; @@ -5008,7 +5022,7 @@ void test_jxhtml_h5_tag_003() void test_jxhtml_h5_tag_004() { #define TEST_STRING "
ハンカク
" -#define RESULT_STRING "ハンカク" +#define RESULT_STRING "
ハンカク
" char *ret; char *tmp; device_table spec; @@ -5038,7 +5052,7 @@ void test_jxhtml_h5_tag_004() void test_jxhtml_h5_tag_005() { #define TEST_STRING "
" -#define RESULT_STRING "\n" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -5068,7 +5082,7 @@ void test_jxhtml_h5_tag_005() void test_jxhtml_h5_tag_006() { #define TEST_STRING "
" -#define RESULT_STRING "\n" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -5098,7 +5112,7 @@ void test_jxhtml_h5_tag_006() void test_jxhtml_h5_tag_007() { #define TEST_STRING "
" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -5128,7 +5142,7 @@ void test_jxhtml_h5_tag_007() void test_jxhtml_h5_tag_008() { #define TEST_STRING "
" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -5158,7 +5172,7 @@ void test_jxhtml_h5_tag_008() void test_jxhtml_h5_tag_009() { #define TEST_STRING "
" -#define RESULT_STRING "
" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -5188,7 +5202,7 @@ void test_jxhtml_h5_tag_009() void test_jxhtml_h5_tag_010() { #define TEST_STRING "
" -#define RESULT_STRING "\n" +#define RESULT_STRING "
" char *ret; char *tmp; device_table spec; @@ -17237,7 +17251,7 @@ void test_jxhtml_h4_tag_with_css_001() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17283,7 +17297,7 @@ void test_jxhtml_h4_tag_with_css_002() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17329,7 +17343,7 @@ void test_jxhtml_h4_tag_with_css_003() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17363,7 +17377,7 @@ void test_jxhtml_h4_tag_with_css_004() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17397,7 +17411,7 @@ void test_jxhtml_h4_tag_with_css_005() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17431,7 +17445,7 @@ void test_jxhtml_h4_tag_with_css_006() #define TEST_STRING "" \ "

あいう

" #define RESULT_STRING "" \ - "
あいう
" + "
あいう
" char *ret; char *tmp; device_table spec; @@ -17462,6 +17476,253 @@ void test_jxhtml_h4_tag_with_css_006() #undef TEST_STRING #undef RESULT_STRING } + + +/*===========================================================================*/ +/* h5 tag with CSS */ +/*===========================================================================*/ +char *test_chxj_serf_get052(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" + "h5 { text-align: right }\n"; + *len = strlen(css); + call_check = 1; + return css; +} +void test_jxhtml_h5_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_get052; + 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 == 1); + + APR_TERM; +#undef TEST_STRING +#undef RESULT_STRING +} +char *test_chxj_serf_get053(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" + "h5 { text-align: center }\n"; + *len = strlen(css); + call_check = 1; + return css; +} +void test_jxhtml_h5_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_get053; + 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 == 1); + + APR_TERM; +#undef TEST_STRING +#undef RESULT_STRING +} +char *test_chxj_serf_get054(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" + "h5 { text-align: right }\n"; + *len = strlen(css); + call_check = 1; + return css; +} +void test_jxhtml_h5_tag_with_css_003() +{ +#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_get054; + 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 == 1); + + APR_TERM; +#undef TEST_STRING +#undef RESULT_STRING +} +void test_jxhtml_h5_tag_with_css_004() +{ +#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_get054; + 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_h5_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_get054; + 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_h5_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_get054; + 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, "actual:[%s]\n", ret); + fprintf(stderr, "expect:[%s]\n", RESULT_STRING); + 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