OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library csslib.parser; | 5 library csslib.parser; |
6 | 6 |
7 import 'dart:math' as math; | 7 import 'dart:math' as math; |
8 | 8 |
9 import 'package:source_maps/span.dart' show SourceFile, Span, FileSpan; | 9 import 'package:source_maps/span.dart' show SourceFile, Span, FileSpan; |
10 | 10 |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 if (_maybeEat(TokenKind.COLON)) { | 563 if (_maybeEat(TokenKind.COLON)) { |
564 if (_peekIdentifier()) { | 564 if (_peekIdentifier()) { |
565 pseudoPage = identifier(); | 565 pseudoPage = identifier(); |
566 // TODO(terry): Normalize pseudoPage to lowercase. | 566 // TODO(terry): Normalize pseudoPage to lowercase. |
567 if (isChecked && | 567 if (isChecked && |
568 !(pseudoPage.name == 'left' || | 568 !(pseudoPage.name == 'left' || |
569 pseudoPage.name == 'right' || | 569 pseudoPage.name == 'right' || |
570 pseudoPage.name == 'first')) { | 570 pseudoPage.name == 'first')) { |
571 _warning("Pseudo page must be left, top or first", | 571 _warning("Pseudo page must be left, top or first", |
572 pseudoPage.span); | 572 pseudoPage.span); |
573 return; | 573 return null; |
574 } | 574 } |
575 } | 575 } |
576 } | 576 } |
577 | 577 |
578 String pseudoName = pseudoPage is Identifier ? pseudoPage.name : ''; | 578 String pseudoName = pseudoPage is Identifier ? pseudoPage.name : ''; |
579 String ident = name is Identifier ? name.name : ''; | 579 String ident = name is Identifier ? name.name : ''; |
580 return new PageDirective(ident, pseudoName, | 580 return new PageDirective(ident, pseudoName, |
581 processMarginsDeclarations(), _makeSpan(start)); | 581 processMarginsDeclarations(), _makeSpan(start)); |
582 | 582 |
583 case TokenKind.DIRECTIVE_CHARSET: | 583 case TokenKind.DIRECTIVE_CHARSET: |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 | 735 |
736 case TokenKind.DIRECTIVE_MIXIN: | 736 case TokenKind.DIRECTIVE_MIXIN: |
737 return processMixin(start); | 737 return processMixin(start); |
738 | 738 |
739 case TokenKind.DIRECTIVE_INCLUDE: | 739 case TokenKind.DIRECTIVE_INCLUDE: |
740 return processInclude( _makeSpan(start)); | 740 return processInclude( _makeSpan(start)); |
741 | 741 |
742 case TokenKind.DIRECTIVE_CONTENT: | 742 case TokenKind.DIRECTIVE_CONTENT: |
743 // TODO(terry): TBD | 743 // TODO(terry): TBD |
744 _warning("@content not implemented.", _makeSpan(start)); | 744 _warning("@content not implemented.", _makeSpan(start)); |
745 return; | 745 return null; |
746 } | 746 } |
| 747 return null; |
747 } | 748 } |
748 | 749 |
749 /** | 750 /** |
750 * Parse the mixin beginning token offset [start]. Returns a [MixinDefinition] | 751 * Parse the mixin beginning token offset [start]. Returns a [MixinDefinition] |
751 * node. | 752 * node. |
752 * | 753 * |
753 * Mixin grammar: | 754 * Mixin grammar: |
754 * | 755 * |
755 * @mixin IDENT [(args,...)] '{' | 756 * @mixin IDENT [(args,...)] '{' |
756 * [ruleset | property | directive]* | 757 * [ruleset | property | directive]* |
(...skipping 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1883 case _paddingPartLeft: | 1884 case _paddingPartLeft: |
1884 case _paddingPartTop: | 1885 case _paddingPartTop: |
1885 case _paddingPartRight: | 1886 case _paddingPartRight: |
1886 case _paddingPartBottom: | 1887 case _paddingPartBottom: |
1887 if (exprs.expressions.length > 0) { | 1888 if (exprs.expressions.length > 0) { |
1888 return processOneNumber(exprs, styleType); | 1889 return processOneNumber(exprs, styleType); |
1889 } | 1890 } |
1890 break; | 1891 break; |
1891 default: | 1892 default: |
1892 // Don't handle it. | 1893 // Don't handle it. |
1893 return; | 1894 return null; |
1894 } | 1895 } |
1895 } | 1896 } |
1896 | 1897 |
1897 // TODO(terry): Look at handling width of thin, thick, etc. any none numbers | 1898 // TODO(terry): Look at handling width of thin, thick, etc. any none numbers |
1898 // to convert to a number. | 1899 // to convert to a number. |
1899 processOneNumber(Expressions exprs, int part) { | 1900 processOneNumber(Expressions exprs, int part) { |
1900 var value = marginValue(exprs.expressions[0]); | 1901 var value = marginValue(exprs.expressions[0]); |
1901 if (value != null) { | 1902 if (value != null) { |
1902 switch (part) { | 1903 switch (part) { |
1903 case _marginPartLeft: | 1904 case _marginPartLeft: |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1972 left = right; | 1973 left = right; |
1973 bottom = marginValue(exprs.expressions[2]); | 1974 bottom = marginValue(exprs.expressions[2]); |
1974 break; | 1975 break; |
1975 case 4: | 1976 case 4: |
1976 top = marginValue(exprs.expressions[0]); | 1977 top = marginValue(exprs.expressions[0]); |
1977 right = marginValue(exprs.expressions[1]); | 1978 right = marginValue(exprs.expressions[1]); |
1978 bottom = marginValue(exprs.expressions[2]); | 1979 bottom = marginValue(exprs.expressions[2]); |
1979 left = marginValue(exprs.expressions[3]); | 1980 left = marginValue(exprs.expressions[3]); |
1980 break; | 1981 break; |
1981 default: | 1982 default: |
1982 return; | 1983 return null; |
1983 } | 1984 } |
1984 | 1985 |
1985 return new BoxEdge.clockwiseFromTop(top, right, bottom, left); | 1986 return new BoxEdge.clockwiseFromTop(top, right, bottom, left); |
1986 } | 1987 } |
1987 | 1988 |
1988 // TODO(terry): Need to handle auto. | 1989 // TODO(terry): Need to handle auto. |
1989 marginValue(var exprTerm) { | 1990 marginValue(var exprTerm) { |
1990 if (exprTerm is UnitTerm || exprTerm is NumberTerm) { | 1991 if (exprTerm is UnitTerm || exprTerm is NumberTerm) { |
1991 return exprTerm.value; | 1992 return exprTerm.value; |
1992 } | 1993 } |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2653 | 2654 |
2654 if (replace != null && result == null) { | 2655 if (replace != null && result == null) { |
2655 result = new StringBuffer(text.substring(0, i)); | 2656 result = new StringBuffer(text.substring(0, i)); |
2656 } | 2657 } |
2657 | 2658 |
2658 if (result != null) result.write(replace != null ? replace : text[i]); | 2659 if (result != null) result.write(replace != null ? replace : text[i]); |
2659 } | 2660 } |
2660 | 2661 |
2661 return result == null ? text : result.toString(); | 2662 return result == null ? text : result.toString(); |
2662 } | 2663 } |
OLD | NEW |