2009-02-04 15 views
58

Mój program musi przeanalizować pliki css do formatu obiektu w pamięci. Wszelkie porady, jak to zrobić?Czy istnieje parser CSS dla C#?

+17

Nie rozumiem, dlaczego to pytanie zostało zamknięte. Ma wiele głosów od ludzi, którzy najwyraźniej zastanawiają się nad tym samym. Tylko dlatego, że różne osoby mogą mieć różne opinie na temat najlepszego rozwiązania, co jest świetnym miejscem do wypisywania tych opinii dla innych z tym samym pytaniem. –

+3

@JonathanWood - Całkowicie się zgadzam, ale zasady są takie, że zalecenia dotyczące narzędzi nie są tematem i proszą o rekomendację narzędzia. Zamknięcie jest właściwe, nawet jeśli jest frustrujące. – Bobson

+0

Odtworzyłem ponownie pytanie, aby można je było ponownie otworzyć: – Softlion

Odpowiedz

26

ExCSS (obsługuje CSS2.1 i CSS3) na GitHub: https://github.com/TylerBrinks/ExCSS.

Która jest nowsza wersja artykułu Kod projektu: http://www.codeproject.com/KB/recipes/CSSParser.aspx

+0

życzyłby sobie, aby przeanalizował zapytanie o media do modelu obiektowego. nie jest to szczególnie trudne, ale wszystko, co daje, to ciąg znaków: –

+1

to działa, ale znalazło się wiele rzeczy, których nie może przeanalizować: 'calc (50vw - 23em)' staje się 'calc (50vw = 23em)'/' 3rem' zmienia się w '3' /' z-index: 2147483647' zmienia się na 'z-index: 2.147484E + 09' /' * display: none' zmienia się na 'display: none' –

+1

Nie obsługuje on również' @ -ms-viewport 'return' {System.Collections.Generic.List \' 1 [ExCSS.RuleSet]} 'na wyjściu. –

0

Here można znaleźć inny specjalnie dla C# ze źródłem próbki.

+0

to używa wyrażeń regularnych, które po prostu nie będzie go wyciąć dla złożonego css –

1

Napisałem jeden, używając gramatyki określonej w specyfikacji CSS 2.1. Mam również wydany teraz: szczegóły patrz http://www.modeltext.com/css/

+1

Cool. Czy jest dostępna dla reszty z nas, aby spróbować/kupić? –

+0

Wyślij wiadomość e-mail: mój identyfikator gmail to "cwellsx". – ChrisW

+0

@ Jørn Jest już dostępny. – ChrisW

6

istnieje plik gramatyki CSS dla GoldParser:

http://goldparser.org/grammars/files/css.zip

GoldParser jest łatwe do uwzględnienia w projekcie C# i generuje rzeczywisty lalr - nie jakiś hak regex.

+0

Parser LALR - nie jakiś regex Informacje na temat ich strony "Gramatyki GOLD oparte są na formie Backusa-Naura i wyrażeniach regularnych" – Justin

+0

Dobra rada, regularne wyrażenia są fajne. Ręczne toczenie parsera nie jest –

+0

To jest bardzo uproszczona wersja gramatyki CSS. Zamiast tego przeportowałem gramaturę odniesienia CSS (ze specyfikacji CSS 2.1), aby pracować z parserem GOLD ... i napisałem zespół C#, aby zaimplementować resztę (użyj wyjścia parsera do obliczenia stylu dla elementu w DOM, przy użyciu specyfiki reguły, dziedziczenia, wartości domyślnych itp.). – ChrisW

3

Czy próbowałeś one featured in JsonFx? Jest napisany w języku C#, analizuje składnię CSS3 i jest dystrybuowany w ramach licencji stylu MIT.

+2

Wygląda jak najlepszy złej wiązki (rekursja za pomocą instrukcji 'goto' - ouch) – briantyler

+4

@B:' goto' to świetny sposób na * uniknięcie * rekursji, ponieważ unika ponownego wczytywania funkcji. Jest to świetna alternatywa dla ryzyka przepełnienia stosu, gdy masz potencjalnie dużą liczbę iteracji. – Triynko

+2

Co jest nie tak z rekursją? –