2009-02-04 15 views
58

Il mio programma deve analizzare i file css in un formato di oggetto in memoria. Qualche consiglio su come dovrebbe essere fatto?Esiste un parser CSS per C#?

+17

Non capisco perché questa domanda è stata chiusa. Ha un sacco di voti da persone che apparentemente si stanno chiedendo la stessa cosa. Solo perché persone diverse potrebbero avere opinioni diverse sulla soluzione migliore, che posto ideale per elencare quelle opinioni per gli altri con la stessa domanda. –

+3

@JonathanWood - Sono completamente d'accordo, ma la politica è che le raccomandazioni sugli strumenti sono fuori tema e chiede una raccomandazione sugli strumenti. Quindi chiuderlo è appropriato, anche se frustrante. – Bobson

+0

Ho riavviato la domanda in modo che possa essere riaperta – Softlion

risposta

26

ExCSS (supporta CSS2.1 e CSS3) su GitHub: https://github.com/TylerBrinks/ExCSS.

che è una versione più recente di questo articolo del progetto di codice: http://www.codeproject.com/KB/recipes/CSSParser.aspx

+0

desidera che analizzi la query multimediale in un modello a oggetti. non è particolarmente difficile da fare, ma tutto ciò che ti dà è una stringa –

+1

funziona, ma ha trovato un numero di cose che non può analizzare: 'calc (50vw - 23em)' diventa 'calc (50vw = 23em)'/' 3rem' diventa '3' /' z-index: 2147483647' diventa 'z-index: 2.147484E + 09' /' * display: none' diventa 'display: none' –

+1

Inoltre non gestisce' @ -ms-viewport 'return' {System.Collections.Generic.List \ '1 [ExCSS.RuleSet]}' in uscita. –

0

Here è possibile trovare un altro in particolare per C# con sorgente di esempio.

+0

questo usa espressioni regolari che non lo taglieranno per css complessi –

1

Ho scritto uno, utilizzando la grammatica specificata nella specifica CSS 2.1. Ho anche rilasciato subito: per i dettagli, vedi http://www.modeltext.com/css/

+1

Cool. È disponibile per il resto di noi per provare/acquistare? –

+0

Invia email: il mio ID gmail è "cwellsx". – ChrisW

+0

@ Jørn È disponibile ora. – ChrisW

6

C'è un file di grammatica CSS per GoldParser:

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

GoldParser è facile da inserire in un progetto C#, e genera un vero e proprio parser LALR - Non un po 'di regex hack.

+0

parser LALR - non un po 'regex Informazioni sul sito "Le grammatiche GOLD si basano sul modulo Backus-Naur e sulle espressioni regolari" – Justin

+0

Buon punto, le regex sono interessanti. Rollare un parser a mano non è –

+0

Questa è una versione molto semplificata della grammatica CSS. Invece ho portato il grammatico di riferimento CSS (dalla specifica CSS 2.1) per lavorare con il parser GOLD ... e ho scritto un assembly C# per implementare il resto di esso (usa l'output parser per calcolare lo stile per un elemento in un DOM, usando la specificità della regola, l'ereditarietà, i valori predefiniti, ecc.). – ChrisW

3

Hai provato il one featured in JsonFx? È scritto in C#, analizza la sintassi CSS3 ed è distribuito sotto una licenza in stile MIT.

+2

Sembra il meglio di un brutto gruppo (ricorsione usando le istruzioni 'goto' - ahi) – briantyler

+4

@B:' goto' è un ottimo modo per * evitare * la ricorsione, perché evita di reinserire una funzione. È un'ottima alternativa al rischio di un overflow dello stack quando si dispone di un numero potenzialmente elevato di iterazioni. – Triynko

+2

Cosa c'è di sbagliato con la ricorsione? –