2009-02-04 22 views
58

Mi programa necesita analizar archivos css en un formato de objeto en memoria. ¿Algún consejo sobre cómo debe hacerse esto?¿Hay un analizador de CSS para C#?

+17

No entiendo por qué se cerró esta pregunta. Tiene muchos votos de personas que aparentemente se preguntan lo mismo. El hecho de que diferentes personas puedan tener opiniones diferentes sobre la mejor solución, qué gran lugar para hacer una lista de esas opiniones para los demás con la misma pregunta. –

+3

@JonathanWood: estoy totalmente de acuerdo, pero la política es que las recomendaciones de herramientas no están relacionadas con el tema, y ​​está pidiendo una recomendación de herramienta. Entonces cerrarlo es apropiado, incluso si es frustrante. – Bobson

+0

He vuelto a escribir la pregunta para que se pueda volver a abrir – Softlion

Respuesta

26

ExCSS (compatible con CSS2.1 y CSS3) en GitHub: https://github.com/TylerBrinks/ExCSS.

que es una versión más reciente del proyecto de artículo código: http://www.codeproject.com/KB/recipes/CSSParser.aspx

+0

desearía analizar la consulta de medios en un modelo de objetos. no es particularmente difícil hacerlo, pero todo lo que le da es una cadena –

+1

funciona, pero encontró varias cosas que no puede analizar: 'calc (50vw - 23em)' se convierte en 'calc (50vw = 23em)'/' 3rem' se convierte en '3' /' índice z: 2147483647' se convierte en 'z-index: 2.147484E + 09' /' * display: none' se convierte en 'display: none' –

+1

Tampoco maneja' @ -ms-viewport 'return' {System.Collections.Generic.List \ '1 [ExCSS.RuleSet]}' en salida. –

0

Here puede encontrar otra especialmente para C# con fuente de muestra.

+0

esto utiliza expresiones regulares que simplemente no va a cortarlo para css complejo –

1

Escribí uno, usando la gramática especificada en la especificación CSS 2.1. También he lanzado ahora: para más detalles, ver http://www.modeltext.com/css/

+1

Cool. ¿Está disponible para el resto de nosotros para probar/comprar? –

+0

Enviar correo electrónico: mi ID de Gmail es "cwellsx". – ChrisW

+0

@ Jørn Está disponible ahora. – ChrisW

6

Hay un archivo de gramática de CSS para GoldParser:

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

GoldParser es fácil incluir en un proyecto de C#, y genera un analizador LALR reales - no un hack de expresiones regulares.

+0

Analizador LALR - no algunos regex Información en su sitio "Las gramáticas GOLD se basan en la forma y las expresiones regulares de Backus-Naur" – Justin

+0

Buen punto, las expresiones regulares son geniales. Hacer rodar un analizador a mano no es –

+0

Esta es una versión muy simplificada de la gramática de CSS. En su lugar, porté la gramática de referencia CSS (desde la especificación CSS 2.1) para trabajar con el analizador GOLD ... y escribí un ensamblado C# para implementar el resto (use la salida del analizador para calcular el estilo de un elemento en un DOM, usando la especificación de reglas, herencia, valores predeterminados, etc.). – ChrisW

3

¿Has probado el one featured in JsonFx? Está escrito en C#, analiza la sintaxis de CSS3 y se distribuye bajo una licencia de estilo MIT.

+2

Parece el mejor de un grupo malo (recursión usando sentencias 'goto' - ouch) – briantyler

+4

@B:' goto' es una excelente manera de * evitar * la recursión, ya que evita volver a ingresar a una función. Es una gran alternativa para arriesgar un desbordamiento de pila cuando tiene un número potencialmente alto de iteraciones. – Triynko

+2

¿Qué pasa con la recursión? –