import { LexerEvent } from "./LexerEvent";
import { Lexer } from "./Lexer";
import { LexerQuery } from "./LexerQuery";
import { ElementType } from "../../dom/ElementType";
import { ElementAttribute } from "../../dom/ElementAttribute";
export class HighlightedHTML
{
static readonly codeToken = new ElementType( "code-token" );
static readonly type = new ElementAttribute( "type" );
static createLexerStyles( lexer:Lexer, prefixSelector:string = "", styles:string="" )
{
let matchers = lexer.matchers;
for ( let i = 0; i < matchers.length; i++ )
{
let matcher = matchers[ i ];
let hue = 360 - i / matchers.length * 360;
let style = `\n${prefixSelector}code-token-${matcher.type}{ color: hsl(${hue}, 60%, 60%)}`;
styles += style;
}
return styles;
}
static tokenize( query:LexerQuery )
{
let htmlTags = query.tokens.map(
t=>
{
if ( t.isDone || t.isError )
{
return "";
}
let rawValue = t.getMatch( query.source );
let textNode = document.createTextNode( rawValue );
let wrapper = document.createElement( "div" );
wrapper.appendChild( textNode );
let escapedText = wrapper.innerHTML;
return `
${htmlTags.join( "" )}` return html; } }