2010-09-17 1 views
4

Есть ли синтаксический анализатор. Net, который позволит мне разобрать css shorthand properties в их форму?Как я могу расширить CSS стенографические свойства программным путем?

Например, я хотел бы взять на себя следующее:

 #somediv{ 
      margin: 10px; 
      padding: 10px 20px; 
      border:5px solid #FFF; 
     } 

И перевести его на:

 #somediv{ 
      margin-top: 10px; 
      margin-right: 10px; 
      margin-bottom: 10px; 
      margin-left: 10px; 
      padding-top: 10px; 
      padding-right: 20px; 
      padding-bottom: 10px; 
      padding-left: 20px; 
      border-width: 5px; 
      border-style: solid; 
      border-color: #FFF; 
     } 

Вот очень хороший список всех различных свойств я бы нужно таким образом: http://www.dustindiaz.com/css-shorthand/

В идеале я хотел бы что-то в .Net, но если есть что-то на другом языке с открытым исходным кодом, я, вероятно, смогу его адаптировать.

Update

Не вдаваясь в излишние подробности, как именно то, что я пытаюсь сделать здесь является основной предпосылкой:

мне нужно взять несколько programmaticly документы CSS и объединить их, чтобы создать один окончательный набор CSS.

Так что, если документ 1 имеет:

p { padding: 10px;} 

А потом добавить в документ 2:

p { padding-left:20px;} 

В результате CSS должно быть:

p { padding-top: 10px; padding-right:10px; padding-bottom:10px; padding-left:20px;} 

Поскольку позже добавил документ перезаписывает одно свойство. Чтобы сделать это точно, мне нужно было бы взять каждый CSS и сначала разбивать каждое свойство на его самый низкий элемент.

+0

возможно дубликат [Есть CSS парсер для C#?] (Http://stackoverflow.com/questions/512720/is- там-a-css-parser-for-c) –

+0

да и нет, синтаксические анализаторы, предоставленные там, не делают такого расширения, и действительно, это единственная часть, которая мне нужна – brendan

+0

, поэтому, если у вас есть 2 документа, это происходит автоматически , Я до сих пор не понимаю, зачем вам нужен этот синтаксический анализатор. вы просто пытаетесь ударить все ваши файлы CSS в 1 окончательный файл? для сжатия или что-то еще? – Stefanvds

ответ

0

Не могли бы вы дать более подробную информацию о том, почему вы хотите это сделать?

И вы ищете для того, чтобы сделать правильный синтаксический с такими вещами как:

обивка: 10px 15px;

в

обивка-топ: 10px; padding-right: 15px; padding-bottom: 10px; padding-left: 15px;

+0

Вы можете проверить это: http: //www.codeproject. com/KB/recipes/CSSParser.aspx – jimplode

+0

Добавил небольшую информацию, чтобы ответить «зачем» мне нужно это для проекта, над которым я работаю. Благодаря! – brendan

+0

Кроме того, я использую части парсера Bone Soft CSS для других вещей, но он не делает свойство, которое мне нужно. – brendan

1

Т самым простым способом было бы использовать WebBrowserControl .NET вместе с MsHTML (IE Renderer), и это тоже самый надежный подход!

//Create the instance of new webbrowser control. 
     WebBrowser browser = new WebBrowser(); 

     //Navigate to the specified URL. 
     browser.Navigate(@"test.html"); 

     //Wait until the webpage gets loaded completely. 
     while (browser.ReadyState != WebBrowserReadyState.Complete) 
     { 
      Application.DoEvents(); 
     } 


     foreach (object divElement in 
      (browser.Document.GetElementsByTagName("div"))) 
     { 
      IHTMLCurrentStyle currentStyle = ((divElement as HtmlElement) 
       .DomElement as IHTMLElement2).currentStyle; 

      Console.WriteLine(currentStyle.marginLeft); 
      Console.WriteLine(currentStyle.marginRight); 

     } 

Примечание:

Для того, чтобы получить этот код работает вам нужно добавить ссылку на Microsoft.MSHTML.dll, которые можно найти на следующем месте.

с: {Program Files} \ microsoft.net \ Primary Interop Ассамблей \

+0

+1 - это была моя первая мысль, хотя я не уверен, насколько я доверяю IE-рендереру, чтобы интерпретировать CSS надежно. – Rob

+0

@ Rob Я считаю, что это, пожалуй, очень дешевое и надежное решение по сравнению с ручным разбором файлов html. –

+0

Я полностью согласен. Но как веб-разработчик, я воспользовался возможностью, чтобы сделать удар по соблюдению стандартами IE [истории]. – Rob

Смежные вопросы