summaryrefslogtreecommitdiffstats
path: root/src/sp-style-elem.cpp
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2017-10-23 12:55:39 +0000
committerTavmjong Bah <tavmjong@free.fr>2017-10-23 12:55:39 +0000
commit7d6099e1503637df0505a2459b57b34dc291ad97 (patch)
tree8028405c3f895553bec3b47dbc4914ea8daf49ba /src/sp-style-elem.cpp
parentFix regression after r14761: handle size of selected nodes too big and sticky (diff)
downloadinkscape-7d6099e1503637df0505a2459b57b34dc291ad97.tar.gz
inkscape-7d6099e1503637df0505a2459b57b34dc291ad97.zip
Save decl list for 'font-face' rule. Micro-step in supporting rule.
Diffstat (limited to 'src/sp-style-elem.cpp')
-rw-r--r--src/sp-style-elem.cpp67
1 files changed, 48 insertions, 19 deletions
diff --git a/src/sp-style-elem.cpp b/src/sp-style-elem.cpp
index 1a3c194b9..2deaccad0 100644
--- a/src/sp-style-elem.cpp
+++ b/src/sp-style-elem.cpp
@@ -281,8 +281,10 @@ start_font_face_cb(CRDocHandler *a_handler,
static_cast<void *>(parse_tmp.currStmt), unsigned(parse_tmp.stmtType));
// fixme: Check whether we need to unref currStmt if non-NULL.
}
+ CRStatement *font_face_rule = cr_statement_new_at_font_face_rule (parse_tmp.stylesheet, NULL);
+ g_return_if_fail(font_face_rule && font_face_rule->type == AT_FONT_FACE_RULE_STMT);
parse_tmp.stmtType = FONT_FACE_STMT;
- parse_tmp.currStmt = NULL;
+ parse_tmp.currStmt = font_face_rule;
}
static void
@@ -291,12 +293,26 @@ end_font_face_cb(CRDocHandler *a_handler)
g_return_if_fail(a_handler->app_data != NULL);
ParseTmp &parse_tmp = *static_cast<ParseTmp *>(a_handler->app_data);
g_return_if_fail(parse_tmp.hasMagic());
- if (parse_tmp.stmtType != FONT_FACE_STMT || parse_tmp.currStmt != NULL) {
- g_warning("Expecting currStmt==NULL and stmtType==1 (FONT_FACE_STMT) at end of @font-face, but found currStmt=%p, stmtType=%u",
- static_cast<void *>(parse_tmp.currStmt), unsigned(parse_tmp.stmtType));
- // fixme: Check whether we need to unref currStmt if non-NULL.
- parse_tmp.currStmt = NULL;
+
+ CRStatement *const font_face_rule = parse_tmp.currStmt;
+ if (parse_tmp.stmtType == FONT_FACE_STMT
+ && font_face_rule
+ && font_face_rule->type == AT_FONT_FACE_RULE_STMT)
+ {
+ parse_tmp.stylesheet->statements = cr_statement_append(parse_tmp.stylesheet->statements,
+ font_face_rule);
+ } else {
+ g_warning("Found stmtType=%u, stmt=%p, stmt.type=%u.",
+ unsigned(parse_tmp.stmtType),
+ font_face_rule,
+ unsigned(font_face_rule->type));
}
+
+ std::cout << "end_font_face_cb: font face rule unsupported." << std::endl;
+ cr_declaration_dump (font_face_rule->kind.font_face_rule->decl_list, stdout, 2, TRUE);
+ printf ("\n");
+
+ parse_tmp.currStmt = NULL;
parse_tmp.stmtType = NO_STMT;
}
@@ -305,26 +321,38 @@ property_cb(CRDocHandler *const a_handler,
CRString *const a_name,
CRTerm *const a_value, gboolean const a_important)
{
+ // std::cout << "property_cb: Entrance: " << a_name->stryng->str << ": " << cr_term_to_string(a_value) << std::endl;
g_return_if_fail(a_handler && a_name);
g_return_if_fail(a_handler->app_data != NULL);
ParseTmp &parse_tmp = *static_cast<ParseTmp *>(a_handler->app_data);
g_return_if_fail(parse_tmp.hasMagic());
- if (parse_tmp.stmtType == FONT_FACE_STMT) {
- if (parse_tmp.currStmt != NULL) {
- g_warning("Found non-NULL currStmt %p though stmtType==FONT_FACE_STMT.", parse_tmp.currStmt);
- }
- /* We currently ignore @font-face descriptors. */
- return;
- }
+
CRStatement *const ruleset = parse_tmp.currStmt;
- g_return_if_fail(ruleset
- && ruleset->type == RULESET_STMT
- && parse_tmp.stmtType == NORMAL_RULESET_STMT);
- CRDeclaration *const decl = cr_declaration_new(ruleset, cr_string_dup(a_name), a_value);
+ g_return_if_fail(ruleset);
+
+ CRDeclaration *const decl = cr_declaration_new (ruleset, cr_string_dup(a_name), a_value);
g_return_if_fail(decl);
decl->important = a_important;
- CRStatus const append_status = cr_statement_ruleset_append_decl(ruleset, decl);
- g_return_if_fail(append_status == CR_OK);
+
+ switch (parse_tmp.stmtType) {
+
+ case NORMAL_RULESET_STMT: {
+ g_return_if_fail (ruleset->type == RULESET_STMT);
+ CRStatus const append_status = cr_statement_ruleset_append_decl (ruleset, decl);
+ g_return_if_fail (append_status == CR_OK);
+ break;
+ }
+ case FONT_FACE_STMT: {
+ g_return_if_fail (ruleset->type == AT_FONT_FACE_RULE_STMT);
+ CRDeclaration *new_decls = cr_declaration_append (ruleset->kind.font_face_rule->decl_list, decl);
+ g_return_if_fail (new_decls);
+ ruleset->kind.font_face_rule->decl_list = new_decls;
+ break;
+ }
+ default:
+ g_warning ("property_cb: Unhandled stmtType: %u", parse_tmp.stmtType);
+ return;
+ }
}
CRParser*
@@ -405,6 +433,7 @@ void SPStyleElem::read_content() {
// If style sheet has changed, we need to cascade the entire object tree, top down
// Get root, read style, loop through children
update_style_recursively( (SPObject *)document->getRoot() );
+ // cr_stylesheet_dump (document->style_sheet, stdout);
}
/**