Skip to content

Commit

Permalink
add TokenStylingDefaultRule.match
Browse files Browse the repository at this point in the history
  • Loading branch information
aeschli committed Jan 17, 2020
1 parent b6e7eaa commit fd13e44
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 25 deletions.
48 changes: 27 additions & 21 deletions src/vs/platform/theme/common/tokenClassificationRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,13 @@ export interface TokenStyleDefaults {
}

export interface TokenStylingDefaultRule {
classification: TokenClassification;
matchScore: number;
match(classification: TokenClassification): number;
selector: TokenClassification;
defaults: TokenStyleDefaults;
}

export interface TokenStylingRule {
classification: TokenClassification;
matchScore: number;
match(classification: TokenClassification): number;
value: TokenStyle;
}

Expand Down Expand Up @@ -276,16 +275,35 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry {
return { type: tokenTypeDesc.num, modifiers: allModifierBits };
}

public getTokenStylingRule(classification: TokenClassification, value: TokenStyle): TokenStylingRule {
return { classification, matchScore: getTokenStylingScore(classification), value };

private newMatcher(selector: TokenClassification) {
const score = getTokenStylingScore(selector);
return (classification: TokenClassification) => {
const selectorType = selector.type;
if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) {
return -1;
}
const selectorModifier = selector.modifiers;
if ((classification.modifiers & selectorModifier) !== selectorModifier) {
return -1;
}
return score;
};
}

public registerTokenStyleDefault(classification: TokenClassification, defaults: TokenStyleDefaults): void {
this.tokenStylingDefaultRules.push({ classification, matchScore: getTokenStylingScore(classification), defaults });
public getTokenStylingRule(selector: TokenClassification, value: TokenStyle): TokenStylingRule {
return {
match: this.newMatcher(selector),
value
};
}

public registerTokenStyleDefault(selector: TokenClassification, defaults: TokenStyleDefaults): void {
this.tokenStylingDefaultRules.push({ selector, match: this.newMatcher(selector), defaults });
}

public deregisterTokenStyleDefault(classification: TokenClassification): void {
this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.classification.type === classification.type && r.classification.modifiers === classification.modifiers));
this.tokenStylingDefaultRules = this.tokenStylingDefaultRules.filter(r => !(r.selector.type === classification.type && r.selector.modifiers === classification.modifiers));
}

public deregisterTokenType(id: string): void {
Expand Down Expand Up @@ -330,18 +348,6 @@ class TokenClassificationRegistry implements ITokenClassificationRegistry {

}

export function matchTokenStylingRule(themeSelector: TokenStylingRule | TokenStylingDefaultRule, classification: TokenClassification): number {
const selectorType = themeSelector.classification.type;
if (selectorType !== TOKEN_TYPE_WILDCARD_NUM && selectorType !== classification.type) {
return -1;
}
const selectorModifier = themeSelector.classification.modifiers;
if ((classification.modifiers & selectorModifier) !== selectorModifier) {
return -1;
}
return themeSelector.matchScore;
}


const tokenClassificationRegistry = new TokenClassificationRegistry();
platform.Registry.add(Extensions.TokenClassificationContribution, tokenClassificationRegistry);
Expand Down
8 changes: 4 additions & 4 deletions src/vs/workbench/services/themes/common/colorThemeData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { getParseErrorMessage } from 'vs/base/common/jsonErrorMessages';
import { URI } from 'vs/base/common/uri';
import { parse as parsePList } from 'vs/workbench/services/themes/common/plistParser';
import { startsWith } from 'vs/base/common/strings';
import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue, matchTokenStylingRule } from 'vs/platform/theme/common/tokenClassificationRegistry';
import { TokenStyle, TokenClassification, ProbeScope, TokenStylingRule, getTokenClassificationRegistry, TokenStyleValue } from 'vs/platform/theme/common/tokenClassificationRegistry';
import { MatcherWithPriority, Matcher, createMatchers } from 'vs/workbench/services/themes/common/textMateScopeMatcher';
import { IExtensionResourceLoaderService } from 'vs/workbench/services/extensionResourceLoader/common/extensionResourceLoader';
import { FontStyle, ColorId, MetadataConsts } from 'vs/editor/common/modes';
Expand Down Expand Up @@ -153,7 +153,7 @@ export class ColorThemeData implements IColorTheme {
}
if (this.tokenStylingRules === undefined) {
for (const rule of tokenClassificationRegistry.getTokenStylingDefaultRules()) {
const matchScore = matchTokenStylingRule(rule, classification);
const matchScore = rule.match(classification);
if (matchScore >= 0) {
let style: TokenStyle | undefined;
if (rule.defaults.scopesToProbe) {
Expand All @@ -169,14 +169,14 @@ export class ColorThemeData implements IColorTheme {
}
} else {
for (const rule of this.tokenStylingRules) {
const matchScore = matchTokenStylingRule(rule, classification);
const matchScore = rule.match(classification);
if (matchScore >= 0) {
_processStyle(matchScore, rule.value);
}
}
}
for (const rule of this.customTokenStylingRules) {
const matchScore = matchTokenStylingRule(rule, classification);
const matchScore = rule.match(classification);
if (matchScore >= 0) {
_processStyle(matchScore, rule.value);
}
Expand Down

0 comments on commit fd13e44

Please sign in to comment.