Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(core): update the CSS parser #482

Merged
merged 4 commits into from
Jan 9, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/angular/styles/chars.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* tslint:disable */

/**
* @license
* Copyright Google Inc. All Rights Reserved.
Expand Down Expand Up @@ -73,17 +75,17 @@ export const $AT = 64;
export const $BT = 96;

export function isWhitespace(code: number): boolean {
return (code >= $TAB && code <= $SPACE) || (code === $NBSP);
return (code >= $TAB && code <= $SPACE) || code == $NBSP;
}

export function isDigit(code: number): boolean {
return $0 <= code && code <= $9;
}

export function isAsciiLetter(code: number): boolean {
return code >= $a && code <= $z || code >= $A && code <= $Z;
return (code >= $a && code <= $z) || (code >= $A && code <= $Z);
}

export function isAsciiHexDigit(code: number): boolean {
return code >= $a && code <= $f || code >= $A && code <= $F || isDigit(code);
return (code >= $a && code <= $f) || (code >= $A && code <= $F) || isDigit(code);
}
90 changes: 61 additions & 29 deletions src/angular/styles/cssAst.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
* found in the LICENSE file at https://angular.io/license
*/

import {ParseLocation, ParseSourceSpan} from './parseUtil';
import { ParseLocation, ParseSourceSpan } from './parseUtil';

import {CssToken, CssTokenType} from './cssLexer';
import { CssToken, CssTokenType } from './cssLexer';

export enum BlockType {
Import,
Expand Down Expand Up @@ -47,26 +47,37 @@ export interface CssAstVisitor {

export abstract class CssAst {
constructor(public location: ParseSourceSpan) {}
get start(): ParseLocation { return this.location.start; }
get end(): ParseLocation { return this.location.end; }
get start(): ParseLocation {
return this.location.start;
}
get end(): ParseLocation {
return this.location.end;
}
abstract visit(visitor: CssAstVisitor, context?: any): any;
}

export class CssStyleValueAst extends CssAst {
constructor(location: ParseSourceSpan, public tokens: CssToken[], public strValue: string) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any { return visitor.visitCssValue(this); }
visit(visitor: CssAstVisitor, context?: any): any {
return visitor.visitCssValue(this);
}
}

export abstract class CssRuleAst extends CssAst {
constructor(location: ParseSourceSpan) { super(location); }
constructor(location: ParseSourceSpan) {
super(location);
}
}

export class CssBlockRuleAst extends CssRuleAst {
constructor(
public location: ParseSourceSpan, public type: BlockType, public block: CssBlockAst,
public name: CssToken = null) {
public location: ParseSourceSpan,
public type: BlockType,
public block: CssBlockAst,
public name: CssToken | null = null
) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
Expand Down Expand Up @@ -94,23 +105,29 @@ export class CssKeyframeDefinitionAst extends CssBlockRuleAst {

export class CssBlockDefinitionRuleAst extends CssBlockRuleAst {
constructor(
location: ParseSourceSpan, public strValue: string, type: BlockType,
public query: CssAtRulePredicateAst, block: CssBlockAst) {
location: ParseSourceSpan,
public strValue: string,
type: BlockType,
public query: CssAtRulePredicateAst,
block: CssBlockAst
) {
super(location, type, block);
var firstCssToken: CssToken = query.tokens[0];
const firstCssToken: CssToken = query.tokens[0];
this.name = new CssToken(
firstCssToken.index, firstCssToken.column, firstCssToken.line, CssTokenType.Identifier,
this.strValue);
firstCssToken.index,
firstCssToken.column,
firstCssToken.line,
CssTokenType.Identifier,
this.strValue
);
}
visit(visitor: CssAstVisitor, context?: any): any {
return visitor.visitCssBlock(this.block, context);
}
}

export class CssMediaQueryRuleAst extends CssBlockDefinitionRuleAst {
constructor(
location: ParseSourceSpan, strValue: string, query: CssAtRulePredicateAst,
block: CssBlockAst) {
constructor(location: ParseSourceSpan, strValue: string, query: CssAtRulePredicateAst, block: CssBlockAst) {
super(location, strValue, BlockType.MediaQuery, query, block);
}
visit(visitor: CssAstVisitor, context?: any): any {
Expand Down Expand Up @@ -149,8 +166,7 @@ export class CssSelectorRuleAst extends CssBlockRuleAst {
}

export class CssDefinitionAst extends CssAst {
constructor(
location: ParseSourceSpan, public property: CssToken, public value: CssStyleValueAst) {
constructor(location: ParseSourceSpan, public property: CssToken, public value: CssStyleValueAst) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
Expand All @@ -159,7 +175,9 @@ export class CssDefinitionAst extends CssAst {
}

export abstract class CssSelectorPartAst extends CssAst {
constructor(location: ParseSourceSpan) { super(location); }
constructor(location: ParseSourceSpan) {
super(location);
}
}

export class CssSelectorAst extends CssSelectorPartAst {
Expand All @@ -175,8 +193,12 @@ export class CssSelectorAst extends CssSelectorPartAst {

export class CssSimpleSelectorAst extends CssSelectorPartAst {
constructor(
location: ParseSourceSpan, public tokens: CssToken[], public strValue: string,
public pseudoSelectors: CssPseudoSelectorAst[], public operator: CssToken) {
location: ParseSourceSpan,
public tokens: CssToken[],
public strValue: string,
public pseudoSelectors: CssPseudoSelectorAst[],
public operator: CssToken
) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
Expand All @@ -186,8 +208,12 @@ export class CssSimpleSelectorAst extends CssSelectorPartAst {

export class CssPseudoSelectorAst extends CssSelectorPartAst {
constructor(
location: ParseSourceSpan, public strValue: string, public name: string,
public tokens: CssToken[], public innerSelectors: CssSelectorAst[]) {
location: ParseSourceSpan,
public strValue: string,
public name: string,
public tokens: CssToken[],
public innerSelectors: CssSelectorAst[]
) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
Expand All @@ -196,8 +222,12 @@ export class CssPseudoSelectorAst extends CssSelectorPartAst {
}

export class CssBlockAst extends CssAst {
constructor(location: ParseSourceSpan, public entries: CssAst[]) { super(location); }
visit(visitor: CssAstVisitor, context?: any): any { return visitor.visitCssBlock(this, context); }
constructor(location: ParseSourceSpan, public entries: CssAst[]) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
return visitor.visitCssBlock(this, context);
}
}

/*
Expand All @@ -214,7 +244,9 @@ export class CssStylesBlockAst extends CssBlockAst {
}

export class CssStyleSheetAst extends CssAst {
constructor(location: ParseSourceSpan, public rules: CssAst[]) { super(location); }
constructor(location: ParseSourceSpan, public rules: CssAst[]) {
super(location);
}
visit(visitor: CssAstVisitor, context?: any): any {
return visitor.visitCssStyleSheet(this, context);
}
Expand All @@ -239,9 +271,9 @@ export class CssUnknownTokenListAst extends CssRuleAst {
}

export function mergeTokens(tokens: CssToken[], separator: string = ''): CssToken {
var mainToken = tokens[0];
var str = mainToken.strValue;
for (var i = 1; i < tokens.length; i++) {
const mainToken = tokens[0];
let str = mainToken.strValue;
for (let i = 1; i < tokens.length; i++) {
str += separator + tokens[i].strValue;
}

Expand Down