From cfe728a784f1ce466b250be8772ea4873e23c622 Mon Sep 17 00:00:00 2001 From: konn Date: Tue, 3 Jun 2008 00:53:05 +0000 Subject: [PATCH] * temp commit. git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/sandbox@2703 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- include/chxj_apache.h | 1 + include/chxj_css.h | 1 + src/chxj_css.c | 53 +++++++++++++++++++++++++++++++++++++------ test/chxj_css/test_chxj_css.c | 26 +++++++++++++++++++++ 4 files changed, 74 insertions(+), 7 deletions(-) diff --git a/include/chxj_apache.h b/include/chxj_apache.h index 95c6125a..4830b5c5 100644 --- a/include/chxj_apache.h +++ b/include/chxj_apache.h @@ -69,6 +69,7 @@ typedef struct test_request_rec { ap_conf_vector_t *per_dir_config; apr_table_t *headers_in; apr_table_t *headers_out; + apr_table_t *err_headers_out; char *uri; char *args; char *hostname; diff --git a/include/chxj_css.h b/include/chxj_css.h index 4df604c6..3dc4b9b3 100644 --- a/include/chxj_css.h +++ b/include/chxj_css.h @@ -74,6 +74,7 @@ typedef struct __css_current_stylesheet_stack_t { #include "chxj_apache.h" extern css_stylesheet_t *chxj_css_parse_from_uri(request_rec *r, apr_pool_t *pool, css_stylesheet_t *old_stylesheet, const char *uri); extern void chxj_css_stylesheet_dump(css_stylesheet_t *stylesheet); +extern css_selector_t *chxj_css_find_selector(request_rec *r, apr_pool_t *pool, css_stylesheet_t *stylesheet, const char *tag_name, const char *class_name, const char *id); #endif /* * vim:ts=2 et diff --git a/src/chxj_css.c b/src/chxj_css.c index 7352d620..86b6d013 100644 --- a/src/chxj_css.c +++ b/src/chxj_css.c @@ -56,6 +56,12 @@ struct css_app_data { css_property_t property_head; struct css_already_import_stack imported_stack_head; }; + +/*===========================================================================*/ +/* */ +/* PROTOTYPE */ +/* */ +/*===========================================================================*/ static char *s_css_parser_get_charset(apr_pool_t *pool, const char *src, apr_size_t *next_pos); static void s_css_parser_from_uri_start_selector(CRDocHandler * a_this, CRSelector *a_selector_list); static void s_css_parser_from_uri_end_selector(CRDocHandler * a_this, CRSelector *a_selector_list); @@ -72,12 +78,52 @@ static int s_is_already_imported(struct css_already_import_stack *imported_stack static css_stylesheet_t *s_merge_stylesheet(apr_pool_t *pool, css_stylesheet_t *old_stylesheet, css_stylesheet_t *new_stylesheet); static void s_copy_already_import_stack(apr_pool_t *pool, struct css_already_import_stack *base, struct css_already_import_stack *imported_stack); +/** + * Data is acquired from url specified by using libserf. + * The acquired data is analyzed in the syntax and css_stylesheet_t is made. + * + * @param r request_rec + * @param pool pool + * @param old_stylesheet old stylesheet + * @param uri url + * + * @return css_stylesheet_t + */ css_stylesheet_t * chxj_css_parse_from_uri(request_rec *r, apr_pool_t *pool, css_stylesheet_t *old_stylesheet, const char *uri) { return s_chxj_css_parse_from_uri(r, pool, NULL, old_stylesheet, uri); } +/** + * find selector engine. + * @param r request_rec + * @param pool pool + * @param stylesheet Retrieval object. + * @param tag_name tag name. + * @param class_name class name. + * @param id id. + * @return css_selector_t if any. null if not found. + * + */ +css_selector_t * +chxj_css_find_selector(request_rec *r, apr_pool_t *pool, css_stylesheet_t *stylesheet, const char *tag_name, const char *class_name, const char *id) +{ + css_selector_t *sel = NULL; + css_selector_t *cur = NULL; + DBG(r, "start chxj_css_find_selector()"); + for (cur = stylesheet->selector_head.next; cur != &stylesheet->selector_head; cur = cur->next) { + DBG(r, "cur->name:[%s]", cur->name); + } + DBG(r, "end chxj_css_find_selector()"); + return sel; +} + +/*===========================================================================*/ +/* */ +/* STATIC */ +/* */ +/*===========================================================================*/ static css_stylesheet_t * s_chxj_css_parse_from_uri(request_rec *r, apr_pool_t *pool, struct css_already_import_stack *imported_stack, css_stylesheet_t *old_stylesheet, const char *uri) { @@ -599,13 +645,6 @@ css_stylesheet_t * chxj_css_parse_from_style_attribute(apr_pool_t *pool, css_stylesheet_t *old_stylesheet, const char *style_attribute_value) { -/*===========================================================================*/ -/* find selector */ -/*===========================================================================*/ -css_selector_t * -chxj_css_find_selector(apr_pool_t *pool, css_stylesheet_t *stylesheet, const char *tag_name, const char *class_name, const char *id) -{ -} /*===========================================================================*/ /* push/pop current_stylesheet_stack */ diff --git a/test/chxj_css/test_chxj_css.c b/test/chxj_css/test_chxj_css.c index 44d4e399..c6c30d59 100644 --- a/test/chxj_css/test_chxj_css.c +++ b/test/chxj_css/test_chxj_css.c @@ -29,6 +29,7 @@ void test_chxj_css_parse_from_uri_005(); void test_chxj_css_parse_from_uri_006(); void test_chxj_css_parse_from_uri_007(); void test_chxj_css_parse_from_uri_008(); +void test_chxj_css_parse_from_uri_009(); /* pend */ int @@ -46,6 +47,7 @@ main() CU_add_test(css_suite, "test css 006", test_chxj_css_parse_from_uri_006); CU_add_test(css_suite, "test css 007", test_chxj_css_parse_from_uri_007); CU_add_test(css_suite, "test css 008", test_chxj_css_parse_from_uri_008); + CU_add_test(css_suite, "test css 009", test_chxj_css_parse_from_uri_009); /* aend */ CU_basic_run_tests(); @@ -497,6 +499,30 @@ void test_chxj_css_parse_from_uri_008() APR_TERM; } + + + +char *test_chxj_serf_get009(request_rec *r, apr_pool_t *ppool, const char *uri_path) +{ + static char *css = "html { display: none }"; + + return css; +} +void test_chxj_css_parse_from_uri_009() +{ + css_stylesheet_t *ret; + css_selector_t *sel; + APR_INIT; + chxj_serf_get = test_chxj_serf_get009; + + apr_uri_parse(p, "http://localhost:888/abc", &r.parsed_uri); \ + + ret = chxj_css_parse_from_uri(&r, r.pool, NULL, "/hoge.css"); + CU_ASSERT(ret != NULL); + + sel = chxj_css_find_selector(&r, r.pool, ret, "html", NULL, NULL); + APR_TERM; +} /* * vim:ts=2 et */ -- 2.11.0