Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> css parser, Подскажите 
:(
    Опции темы
AlDev
Дата 28.12.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



Всем привет, подскажите плиз, как обработать css и получить из него описания стилей?

т.е. например на входе:
Код

.testClassName {
  param: value;
  param1: value;
}

на выходе имя класса и ассоциативный массив параметров:

className = ".testClassName";
params["param"] = "value";
params["param1"] = "value";

Только простейший css, как в примере.

Заранее благодарен.
PM MAIL WWW ICQ YIM MSN   Вверх
-=Ustas=-
Дата 28.12.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 6
Всего: 69



AlDev, наваял тебе элементарный примерчик, если что, то дополнишь под свои нужды smile
Код

<?php

function parser_css( &$in_string )
{
    $_CSS = array();
    
    preg_match_all( '#((?:\.|[\w-0-9]+\.)[\w-0-9]+)\s+\{(.*?)\}#is', $in_string, $matches );
    
    if ( isset( $matches[1] ) ) {
        $size = sizeof( $matches[1] );
        
        for ( $i = 0; $i < $size; $i++ ) {
            
            $matches[1][ $i ] = trim( $matches[1][ $i ] ) ;
            $pos = strpos($matches[1][ $i ], '.' );
            
            if ( $pos === 0 ) {
                
                $matches[1][ $i ] = substr( $matches[1][ $i ], 1 );
            } else {
            
                $tmp = explode( '.', $matches[1][ $i ] );
                
                $element          = $tmp[0];                
                $matches[1][ $i ] = $tmp[1];
            }
            
            $_CSS[ $matches[1][ $i ] ] = array();
            if ( isset( $element ) ) {
                $_CSS[ $matches[1][ $i ] ]['element'] = $element;
            }
            
            if ( isset( $matches[2][ $i ] ) ) {
                $matches[2][ $i ] = trim( $matches[2][ $i ] );
                preg_match_all( '#([0-9\w-]+)\s?\:\s?([0-9\w-]+)\;#is', $matches[2][ $i ], $submatches );
                
                if ( isset( $submatches[1] ) ) {
                    
                    $subsize = sizeof( $submatches[1] );
                    
                    for ( $j = 0; $j < $subsize; $j++ ) {
                        
                        $_CSS[ $matches[1][ $i ] ]['params'][ trim( $submatches[1][ $j ] ) ] = trim( $submatches[2][ $j ] );
                    }
                }
            }
            
        }
    }
    
    return $_CSS;
}

$string = '
.testClassName {
  param : value;
  param1: value;
}
.testClassName2 {
  param: value;
  param1: value;
}

div.testClassName3 {
  param: value;
  param1: value;
}';

$css = parser_css( $string );

echo '<pre>';
print_r($css);

?>


Добавлено @ 12:12 
Т.е. на входе имеем
Код

.testClassName {
  param : value;
  param1: value;
}
.testClassName2 {
  param: value;
  param1: value;
}

div.testClassName3 {
  param: value;
  param1: value;
}


На выходе имеем массив
Код

Array
(
    [testClassName] => Array
        (
            [params] => Array
                (
                    [param] => value
                    [param1] => value
                )

        )

    [testClassName2] => Array
        (
            [params] => Array
                (
                    [param] => value
                    [param1] => value
                )

        )

    [testClassName3] => Array
        (
            [element] => div
            [params] => Array
                (
                    [param] => value
                    [param1] => value
                )

        )

)




--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 28.12.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Для подсветке кода, вытаскивания всего, использовал такой паттерн:
Код
"#(\/\*.*?\*\/)|(&lt;!--.+?--&gt;)|([A-Z]*(\#|\.)[A-Z0-9\-_]+)|(hover|active|link|visited|after)|([A-Z\-|]+\s*:\s*[^\{]+?(;|\}|$))|(@{0,1}[A-Z0-9]+(\s|,|\{|\:))#is"


PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.