static string Render(Model.Declaration dec) { StringBuilder txt = new StringBuilder(); txt.AppendFormat("{0}: <span class=\"expression\">{1}</span>{2}", dec.Name, Render(dec.Expression), dec.Important ? " !important" : ""); return(txt.ToString()); }
void declaration(out Model.Declaration dec) { dec = new Model.Declaration(); Model.Expression exp = null; string ident = ""; if (la.kind == 24) { Get(); dec.Name += "-"; } identity(out ident); dec.Name += ident; while (la.kind == 4) { Get(); } Expect(43); while (la.kind == 4) { Get(); } expr(out exp); dec.Expression = exp; while (la.kind == 4) { Get(); } if (la.kind == 44) { Get(); while (la.kind == 4) { Get(); } Expect(45); dec.Important = true; while (la.kind == 4) { Get(); } } }
void declaration(out Model.Declaration dec) { dec = new Model.Declaration(); Model.Expression exp = null; string ident = ""; if (la.kind == 24) { Get(); dec.Name += "-"; } identity(out ident); dec.Name += ident; while (la.kind == 4) { Get(); } Expect(43); while (la.kind == 4) { Get(); } expr(out exp); dec.Expression = exp; while (la.kind == 4) { Get(); } if (la.kind == 44) { Get(); while (la.kind == 4) { Get(); } Expect(45); dec.Important = true; while (la.kind == 4) { Get(); } } }
void directive(out Model.Directive dir) { dir = new Model.Directive(); Model.Declaration dec = null; Model.RuleSet rset = null; Model.Expression exp = null; Model.Directive dr = null; string ident = null; Model.Medium m; Expect(23); dir.Name = "@"; if (la.kind == 24) { Get(); dir.Name += "-"; } identity(out ident); dir.Name += ident; switch (dir.Name.ToLower()) { case "@media": dir.Type = Model.DirectiveType.Media; break; case "@import": dir.Type = Model.DirectiveType.Import; break; case "@charset": dir.Type = Model.DirectiveType.Charset; break; case "@page": dir.Type = Model.DirectiveType.Page; break; case "@font-face": dir.Type = Model.DirectiveType.FontFace; break; case "@namespace": dir.Type = Model.DirectiveType.Namespace; break; default: dir.Type = Model.DirectiveType.Other; break; } while (la.kind == 4) { Get(); } if (StartOf(4)) { if (StartOf(5)) { medium(out m); dir.Mediums.Add(m); while (la.kind == 4) { Get(); } while (la.kind == 25) { Get(); while (la.kind == 4) { Get(); } medium(out m); dir.Mediums.Add(m); while (la.kind == 4) { Get(); } } } else { expr(out exp); dir.Expression = exp; while (la.kind == 4) { Get(); } } } if (la.kind == 26) { Get(); while (la.kind == 4) { Get(); } if (StartOf(6)) { while (StartOf(1)) { if (dir.Type == Model.DirectiveType.Page || dir.Type == Model.DirectiveType.FontFace) { declaration(out dec); dir.Declarations.Add(dec); while (la.kind == 4) { Get(); } while (la.kind == 27) { Get(); while (la.kind == 4) { Get(); } if (la.val.Equals("}")) { Get(); return; } declaration(out dec); dir.Declarations.Add(dec); while (la.kind == 4) { Get(); } } if (la.kind == 27) { Get(); while (la.kind == 4) { Get(); } } } else if (StartOf(2)) { ruleset(out rset); dir.RuleSets.Add(rset); while (la.kind == 4) { Get(); } } else { directive(out dr); dir.Directives.Add(dr); while (la.kind == 4) { Get(); } } } } Expect(28); while (la.kind == 4) { Get(); } } else if (la.kind == 27) { Get(); while (la.kind == 4) { Get(); } } else { SynErr(50); } }
void ruleset(out Model.RuleSet rset) { rset = new Model.RuleSet(); Model.Selector sel = null; Model.Declaration dec = null; selector(out sel); rset.Selectors.Add(sel); while (la.kind == 4) { Get(); } while (la.kind == 25) { Get(); while (la.kind == 4) { Get(); } selector(out sel); rset.Selectors.Add(sel); while (la.kind == 4) { Get(); } } Expect(26); while (la.kind == 4) { Get(); } if (StartOf(3)) { declaration(out dec); rset.Declarations.Add(dec); while (la.kind == 4) { Get(); } while (la.kind == 27) { Get(); while (la.kind == 4) { Get(); } if (la.val.Equals("}")) { Get(); return; } declaration(out dec); rset.Declarations.Add(dec); while (la.kind == 4) { Get(); } } if (la.kind == 27) { Get(); while (la.kind == 4) { Get(); } } } Expect(28); while (la.kind == 4) { Get(); } }