Changeset 15818 for lang/actionscript

Show
Ignore:
Timestamp:
07/15/08 01:20:04 (4 months ago)
Author:
gyuque
Message:

supported universal selectors

Location:
lang/actionscript/ascss/src
Files:
1 added
8 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/ascss/src/KyotoDemo.as

    r15769 r15818  
    55        import flash.geom.*; 
    66        import flash.text.*; 
     7        import flash.utils.*; 
    78        import css.*; 
    89        import cssdom.*; 
     
    3536 
    3637                private var mDocument:XMLDocument; 
     38                private var mPrevMatchedDocument:XMLDocument = null; 
     39                private var mStyleSheet:StyleList; 
    3740 
    3841                function KyotoDemo() 
     
    9598                        removeChild(tx); 
    9699                        addChild(tx); 
     100                        tx.width = 300; 
     101                        tx.height = 300; 
    97102                        tx.textColor = 0xffffff; 
    98103                        onXMLChanged(null); 
     
    134139                private function onCSSChanged(e:Event):void 
    135140                { 
     141                        mStyleSheet = null; 
    136142                        clearCSSError(); 
    137143                        var parser:ASCSS = new ASCSS(mCSSField.text, new DebugOutProxy(this)); 
    138144                        parser.parse(); 
    139145                        createSelectorMarkers(parser.sheet); 
     146                        mStyleSheet = parser.sheet; 
    140147                        showSelectorMarkers(); 
     148 
     149                        doMatching(); 
    141150                } 
    142151 
     
    147156                        try{ 
    148157                                mDocument = new XMLDocument(mXMLField.text); 
     158                                XMLElementWrapper.createFor(mDocument.root, mDocument); 
    149159                        } catch(e:Error) { 
    150160                                outXMLError(e.toString()); 
     
    152162 
    153163                        showElementMarkers(); 
     164 
     165                        doMatching(); 
    154166                } 
    155167 
     
    243255                        } 
    244256                } 
     257 
     258                private function doMatching():void 
     259                { 
     260                        STDOUT.cls(); 
     261                        if (!mDocument || !mStyleSheet) return; 
     262 
     263                        var list:Array = mDocument.elementMetadatas; 
     264 
     265                        var sel:CSSStyleSelector; 
     266 
     267                        mDocument.clearStyleSheets(); 
     268                        mDocument.appendStyleSheet(mStyleSheet as css.StyleSheet); 
     269                        sel = mDocument.createStyleSelector() 
     270                        if (!sel) 
     271                                return; 
     272                        mPrevMatchedDocument = mDocument; 
     273                        for each(var md:ElementData in list) 
     274                        { 
     275                                var elem:IASCSSElement = md.wrapper; 
     276                                sel.initElementAndPseudoState(elem); 
     277                                sel.initForStyleResolve(elem, null); 
     278 
     279                                var authorStyle:CSSRuleSet = sel.authorStyle; 
     280                                var indexes:Array = [-1, -1]; 
     281 
     282                                sel.matchRules(authorStyle, indexes); 
     283                                if (!sel.matchedRulesIsEmpty) 
     284                                { 
     285                                        for each(var rd:CSSRuleData in sel.matchedRulesList) 
     286                                        { 
     287                                                STDOUT.puts(rd.selector.dump()); 
     288                                        } 
     289                                } 
     290                        } 
     291                } 
    245292        } 
    246293} 
  • lang/actionscript/ascss/src/css/ASCSS.asy

    r15768 r15818  
    15851585                appendStyleObject(rule); 
    15861586                rule.selector = sel; 
     1587                sel._owner = rule; 
    15871588                rule.declaration = new CSSMutableStyleDeclaration(rule, mParsedProperties); 
    15881589        } 
  • lang/actionscript/ascss/src/css/CSSRuleSet.as

    r10854 r15818  
    44        { 
    55                private var mRuleCount:uint = 0; 
     6                private var mUniversalRules:CSSRuleDataList; 
    67 
    78                private var m_idRules:Object    = {}; 
     
    2021                public function getTagRules(key:String):CSSRuleDataList { 
    2122                        return m_tagRules[key] as CSSRuleDataList; 
     23                } 
     24 
     25                public function getUniversalRules():CSSRuleDataList { 
     26                        return mUniversalRules as CSSRuleDataList; 
    2227                } 
    2328 
     
    6469                                return; 
    6570                        } 
     71                        else 
     72                        { 
     73                                // Just put it in the universal rule set. 
     74                                if (!mUniversalRules) 
     75                                        mUniversalRules = new CSSRuleDataList(mRuleCount++, rule, sel); 
     76                                else 
     77                                        mUniversalRules.append(mRuleCount++, rule, sel); 
     78                        } 
    6679                } 
    6780 
  • lang/actionscript/ascss/src/css/CSSSelector.as

    r10979 r15818  
    159159                } 
    160160 
     161                private var mOwner:CSSStyleRule; 
     162 
    161163                function CSSSelector() 
    162164                { 
     
    168170                        m_relation = Descendant; 
    169171                        mPseudoType = PseudoNotParsed; 
     172                } 
     173 
     174                public function set _owner(r:CSSStyleRule):void 
     175                { 
     176                        mOwner = r; 
     177                } 
     178 
     179                public function get _owner():CSSStyleRule 
     180                { 
     181                        return mOwner; 
    170182                } 
    171183 
  • lang/actionscript/ascss/src/css/CSSStyleSelector.as

    r15743 r15818  
    292292 
    293293                        matchRulesForList(rules.getTagRules(mElement.localName), aRuleIndexes); 
     294                        matchRulesForList(rules.getUniversalRules(), aRuleIndexes); 
    294295 
    295296                        // If we didn't match any rules, we're done. 
     
    318319                } 
    319320 
     321                public function get matchedRulesList():Array 
     322                { 
     323                        return mMatchedRules; 
     324                } 
     325 
    320326                public function matchRulesForList(rules:CSSRuleDataList, aRuleIndexes:Array /* first, last */):void 
    321327                { 
     
    328334                                const localName:String         = mElement.localName; 
    329335                                const selectorLocalName:String = d.selector.m_tag.localName; 
    330  
    331336                                if ((localName == selectorLocalName || selectorLocalName == '*') && checkSelector1(d.selector)) 
    332337                                { 
  • lang/actionscript/ascss/src/cssdom/XMLElementWrapper.as

    r11241 r15818  
    22{ 
    33        import css.*; 
     4        import flash.utils.*; 
    45 
    5         public class XMLElementWrapper implements IASCSSStyledElement, IASCSSDocument 
     6        public class XMLElementWrapper implements IASCSSStyledElement 
    67        { 
    78                private var m_usesSiblingRules:Boolean; 
     
    1920                private var mMappedElementSheet:CSSStyleSheet; 
    2021                private var mStyleSelector:CSSStyleSelector; 
     22                private var mRenderStyle:RenderStyle; 
    2123 
    2224                function XMLElementWrapper(x:XML, d:IASCSSDocument) 
     
    2830                        mClassNames = new ClassNames(); 
    2931                        readClassNames(x.attribute("class")[0]); 
     32                } 
     33 
     34                public function get renderStyle():RenderStyle 
     35                { 
     36                        return mRenderStyle; 
     37                } 
     38 
     39                public function get hovered():Boolean 
     40                { 
     41                        return false; 
    3042                } 
    3143 
     
    4658                { 
    4759                        var wrapper:XMLElementWrapper = new XMLElementWrapper(x, d); 
     60/* 
    4861                        if (d == null) 
    4962                        { 
     
    5265                                wrapper.mStyleSheets = new StyleSheetList(wrapper); 
    5366                        } 
    54  
     67*/ 
    5568                        var len:uint = x.children().length(); 
    5669                        for (var i:uint = 0;i < len;i++) 
     
    7083 
    7184                        return wrapper; 
     85                } 
     86 
     87                public function appendChild(e:IASCSSElement):void 
     88                { 
     89                        if (!mChildren) 
     90                                mChildren = []; 
     91 
     92                        mChildren.push(e); 
    7293                } 
    7394 
     
    124145                        return mDoc; 
    125146                } 
    126  
     147/* 
    127148                public function setUsesSiblingRules(b:Boolean):void 
    128149                { 
     
    165186                        mStyleSheets.add(s); 
    166187                } 
     188*/ 
    167189        } 
    168190} 
  • lang/actionscript/ascss/src/kyotodemo/XMLDocument.as

    r15769 r15818  
    11package kyotodemo 
    22{ 
    3         public class XMLDocument 
     3        import cssdom.*; 
     4        import css.*; 
     5 
     6        public class XMLDocument implements IASCSSDocument 
    47        { 
    58                private var mMetadatas:Array; 
     
    710                private var mSource:String; 
    811                private var mLineNo:int; 
     12 
     13                private var mStyleSheets:StyleSheetList; 
     14                private var mMappedElementSheet:CSSStyleSheet; 
     15                private var mStyleSelector:CSSStyleSelector; 
     16                // for parser 
     17                private var m_usesSiblingRules:Boolean; 
     18                private var m_usesDescendantRules:Boolean; 
     19                private var m_usesFirstLineRules:Boolean; 
     20 
    921                function XMLDocument(src:String) 
    1022                { 
     23                        mStyleSheets = new StyleSheetList(this); 
    1124                        mSource = src; 
    1225                        mMetadatas = []; 
     
    1629                        mXML = new XML(src); 
    1730 
    18                         STDOUT.cls(); 
    19  
    2031                        var pre:Object = /^[^<]+/.exec(src); 
    2132                        mLineNo = pre ? countBreaks(pre[0]) : 0; 
    2233                        checkLineno(mXML); 
     34                } 
     35 
     36                public function get root():XML 
     37                { 
     38                        return mXML; 
    2339                } 
    2440 
     
    2844                } 
    2945 
    30                 private function checkLineno(x:XML, nest:int = 0):void 
     46                private function checkLineno(x:XML, nest:int = 0, parent:ElementData = null):void 
    3147                { 
    3248                        var md:ElementData = null; 
     
    3955                                md = new ElementData(); 
    4056                                md.x = x; 
     57                                md.wrapper = new XMLElementWrapper(x, this); 
    4158                                md.nest = nest; 
    4259                                md.lineno = mLineNo; 
    4360                                mMetadatas.push(md); 
     61 
     62                                if (parent && parent.wrapper) { 
     63                                        parent.wrapper.appendChild(md.wrapper); 
     64                                        md.wrapper.parent = parent.wrapper; 
     65                                } 
    4466                        } 
    4567 
     
    4769                        for each(var ch:XML in list) 
    4870                        { 
    49                                 checkLineno(ch, nest + 1); 
     71                                checkLineno(ch, nest + 1, md); 
    5072                        } 
    5173 
     
    6991                        return c; 
    7092                } 
     93 
     94                // Document interface 
     95                public function isHTMLDocument():Boolean 
     96                { 
     97                        return false; 
     98                } 
     99 
     100                public function get inCompatMode():Boolean 
     101                { 
     102                        return true; 
     103                } 
     104 
     105                public function setUsesSiblingRules(b:Boolean):void 
     106                { 
     107                        m_usesSiblingRules = b; 
     108                } 
     109 
     110                public function setUsesDescendantRules(b:Boolean):void 
     111                { 
     112                        m_usesDescendantRules = b; 
     113                } 
     114 
     115                public function setUsesFirstLineRules(b:Boolean):void 
     116                { 
     117                        m_usesFirstLineRules = b; 
     118                } 
     119 
     120                public function createStyleSelector():CSSStyleSelector 
     121                { 
     122                        mStyleSelector = new CSSStyleSelector(this, userStyleSheet, mStyleSheets, mMappedElementSheet, !inCompatMode, true); 
     123                        return mStyleSelector; 
     124                } 
     125 
     126                public function get userStyleSheet():String 
     127                { 
     128                        return null; 
     129                } 
     130 
     131                public function getElementById(id:String):IASCSSElement 
     132                { 
     133                        return null; // not needed for this demo 
     134                } 
     135 
     136                public function appendStyleSheet(s:StyleSheet):void 
     137                { 
     138                        mStyleSelector = null; 
     139                        mStyleSheets.add(s); 
     140                } 
     141 
     142                public function clearStyleSheets():void 
     143                { 
     144                        mStyleSelector = null; 
     145                        mStyleSheets = new StyleSheetList(this); 
     146                } 
    71147        } 
    72148}