Модераторы: SoWa
  

Поиск:

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


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


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

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



Парсинг css в ActionScript 3 проектах в runtime.

Проблемы:
1. Нет рантайм парсинга css  в принципе
2. В ActionScript проектах по неведомой причине запрещена работа с mx.style

Парсит простейший css вида
Код

.someClass {
  test:test1;
  test2:test2;
}

/** some comment **/
.someElseClass {
  bla:bla;
  asd:dsa;
}


Собсно код парсера:
Код

package com.z3labs.style
{
    import mx.utils.StringUtil;
    
    /**
     * Класс для обработки css
     * @version 0.1
     * @author Alex S Batsuev (AlDev)
     * @copyright by Z3Labs
     */
    public class CSSParser
    {
        /**
         * Обработать css из строки
         * @param String source
         */
        public static function parse(source:String):void {
            //уберем пробелы
            source = StringUtil.trim(removeComments(source));
            
            //получим блоки
            var blocks:Array = source.split('}');
            //убъем последний по понятным причинам :)
            blocks.pop();

            //обойдем блоки и выдерем из них стили
            for (var i:uint = 0;i<blocks.length;i++) {                
                //отделим селектор от основной части
                var definition_block:Array = blocks[i].split('{');
                //получим селектор
                var selector:String = definition_block[0];
                //создадим определение стиля с этим селектором
                var style:CSSStyleDeclaration = new CSSStyleDeclaration(selector);
                //получим все аттрибуты
                var attributesDefinitions:Array = definition_block[1].split(';');
                for (var j:uint = 0;j<attributesDefinitions.length;j++) {
                    //занесем аттрибуты в стиль
                    var definition:Array = attributesDefinitions[j].split(':');
                    style.setStyle(definition[0],definition[1]);
                }
                //запомним стиль
                StyleManager.setStyleDeclaration(selector,style);
            }
        }
        
        /**
         * Метод для удаления комментов из строки
         * @param String str
         * @return String
         * @private
         */
        private static function removeComments(str:String):String {
            return str.replace(/\/\*(\r|\n|.)*\*\//g,"");
        }
    }
}


И классы as3 для non-flex проектов (кто-то же думает о размерах swf =)) )
Код

package com.z3labs.style
{
    public class CSSStyleDeclaration
    {
        public var selector:String;
        
        private var props:Object;
        
        public function CSSStyleDeclaration(selector:String) {
            this.selector = selector;
        }
        
        public function setStyle(property:String, value:Object):void {
            props[property] = value;
        }
        
        public function getStyle(property:String):Object {
            return props[property];
        }
    }
}


Код

package com.z3labs.style
{
    public class StyleManager
    {
        private static var styles:Object = {};
        
        public static function setStyleDeclaration(selector:String, declaration:CSSStyleDeclaration):void {
            styles[selector] = declaration;
        }
        
        public static function getStyleDeclaration(selector:String):CSSStyleDeclaration {
            return styles[selector];
        }
    }
}



Собственно остальные прелести, как парсинг имени цвета, #RRGGBB его записи и прочее можно добавить без проблем, но мну лень писать.
PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




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


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

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