summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcss/stylesheet.h2
-rw-r--r--src/stylesheet.c96
2 files changed, 79 insertions, 19 deletions
diff --git a/include/libcss/stylesheet.h b/include/libcss/stylesheet.h
index a3ff0a6..2f433a6 100644
--- a/include/libcss/stylesheet.h
+++ b/include/libcss/stylesheet.h
@@ -27,6 +27,8 @@ css_error css_stylesheet_append_data(css_stylesheet *sheet,
const uint8_t *data, size_t len);
css_error css_stylesheet_data_done(css_stylesheet *sheet);
+/** \todo Need api for setting/clearing disabled flag */
+
css_error css_stylesheet_get_url(css_stylesheet *sheet, const char **url);
css_error css_stylesheet_get_title(css_stylesheet *sheet, const char **title);
css_error css_stylesheet_get_origin(css_stylesheet *sheet, css_origin *origin);
diff --git a/src/stylesheet.c b/src/stylesheet.c
index ef981d5..159c7a0 100644
--- a/src/stylesheet.c
+++ b/src/stylesheet.c
@@ -28,16 +28,52 @@ css_stylesheet *css_stylesheet_create(const char *url, const char *title,
css_import_handler import_callback, void *import_pw,
css_alloc alloc, void *alloc_pw)
{
- UNUSED(url);
- UNUSED(title);
- UNUSED(origin);
- UNUSED(media);
- UNUSED(import_callback);
- UNUSED(import_pw);
- UNUSED(alloc);
- UNUSED(alloc_pw);
-
- return NULL;
+ css_stylesheet *sheet;
+ size_t len;
+
+ if (url == NULL || alloc == NULL)
+ return NULL;
+
+ sheet = alloc(NULL, sizeof(css_stylesheet), alloc_pw);
+ if (sheet == NULL)
+ return NULL;
+
+ memset(sheet, 0, sizeof(css_stylesheet));
+
+ /** \todo need a parser instance */
+ /** \todo need way of letting client select language level */
+
+ /** \todo create selector hash */
+
+ len = strlen(url) + 1;
+ sheet->url = alloc(NULL, len, alloc_pw);
+ if (sheet->url == NULL) {
+ alloc(sheet, 0, alloc_pw);
+ return NULL;
+ }
+ memcpy(sheet->url, url, len);
+
+ if (title != NULL) {
+ len = strlen(title) + 1;
+ sheet->title = alloc(NULL, len, alloc_pw);
+ if (sheet->title == NULL) {
+ alloc(sheet->url, 0, alloc_pw);
+ alloc(sheet, 0, alloc_pw);
+ return NULL;
+ }
+ memcpy(sheet->title, title, len);
+ }
+
+ sheet->origin = origin;
+ sheet->media = media;
+
+ sheet->import = import_callback;
+ sheet->import_pw = import_pw;
+
+ sheet->alloc = alloc;
+ sheet->pw = alloc_pw;
+
+ return sheet;
}
/**
@@ -47,7 +83,17 @@ css_stylesheet *css_stylesheet_create(const char *url, const char *title,
*/
void css_stylesheet_destroy(css_stylesheet *sheet)
{
- UNUSED(sheet);
+ if (sheet == NULL)
+ return;
+
+ if (sheet->title != NULL)
+ sheet->alloc(sheet->title, 0, sheet->pw);
+
+ sheet->alloc(sheet->url, 0, sheet->pw);
+
+ /** \todo destroy selector hash + other data */
+
+ sheet->alloc(sheet, 0, sheet->pw);
}
/**
@@ -65,6 +111,8 @@ css_error css_stylesheet_append_data(css_stylesheet *sheet,
UNUSED(data);
UNUSED(len);
+ /** \todo parse data */
+
return CSS_OK;
}
@@ -78,6 +126,8 @@ css_error css_stylesheet_data_done(css_stylesheet *sheet)
{
UNUSED(sheet);
+ /** \todo flag completion to the parser */
+
return CSS_OK;
}
@@ -90,8 +140,10 @@ css_error css_stylesheet_data_done(css_stylesheet *sheet)
*/
css_error css_stylesheet_get_url(css_stylesheet *sheet, const char **url)
{
- UNUSED(sheet);
- UNUSED(url);
+ if (sheet == NULL || url == NULL)
+ return CSS_BADPARM;
+
+ *url = sheet->url;
return CSS_OK;
}
@@ -105,8 +157,10 @@ css_error css_stylesheet_get_url(css_stylesheet *sheet, const char **url)
*/
css_error css_stylesheet_get_title(css_stylesheet *sheet, const char **title)
{
- UNUSED(sheet);
- UNUSED(title);
+ if (sheet == NULL || title == NULL)
+ return CSS_BADPARM;
+
+ *title = sheet->title;
return CSS_OK;
}
@@ -120,8 +174,10 @@ css_error css_stylesheet_get_title(css_stylesheet *sheet, const char **title)
*/
css_error css_stylesheet_get_origin(css_stylesheet *sheet, css_origin *origin)
{
- UNUSED(sheet);
- UNUSED(origin);
+ if (sheet == NULL || origin == NULL)
+ return CSS_BADPARM;
+
+ *origin = sheet->origin;
return CSS_OK;
}
@@ -135,8 +191,10 @@ css_error css_stylesheet_get_origin(css_stylesheet *sheet, css_origin *origin)
*/
css_error css_stylesheet_get_media(css_stylesheet *sheet, uint32_t *media)
{
- UNUSED(sheet);
- UNUSED(media);
+ if (sheet == NULL || media == NULL)
+ return CSS_BADPARM;
+
+ *media = sheet->media;
return CSS_OK;
}