blob: 8e6b77e7cc2b9fc2e56b175d74fa6e27456aaf35 [file] [log] [blame]
package com.intellij.lang.properties.parsing;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;
%%
%class _PropertiesLexer
%implements FlexLexer
%unicode
%function advance
%type IElementType
%eof{ return;
%eof}
CRLF= \n | \r | \r\n
WHITE_SPACE_CHAR=[\ \n\r\t\f]
VALUE_CHARACTER=[^\n\r\f\\] | "\\"{CRLF} | "\\".
END_OF_LINE_COMMENT=("#"|"!")[^\r\n]*
KEY_SEPARATOR=[\ \t]*[:=][\ \t]* | [\ \t]+
KEY_CHARACTER=[^:=\ \n\r\t\f\\] | "\\"{CRLF} | "\\".
%state IN_VALUE
%state IN_KEY_VALUE_SEPARATOR
%%
<YYINITIAL> {END_OF_LINE_COMMENT} { yybegin(YYINITIAL); return PropertiesTokenTypes.END_OF_LINE_COMMENT; }
<YYINITIAL> {KEY_CHARACTER}+ { yybegin(IN_KEY_VALUE_SEPARATOR); return PropertiesTokenTypes.KEY_CHARACTERS; }
<IN_KEY_VALUE_SEPARATOR> {KEY_SEPARATOR} { yybegin(IN_VALUE); return PropertiesTokenTypes.KEY_VALUE_SEPARATOR; }
<IN_VALUE> {VALUE_CHARACTER}+ { yybegin(YYINITIAL); return PropertiesTokenTypes.VALUE_CHARACTERS; }
<IN_KEY_VALUE_SEPARATOR> {CRLF}{WHITE_SPACE_CHAR}* { yybegin(YYINITIAL); return PropertiesTokenTypes.WHITE_SPACE; }
<IN_VALUE> {CRLF}{WHITE_SPACE_CHAR}* { yybegin(YYINITIAL); return PropertiesTokenTypes.WHITE_SPACE; }
{WHITE_SPACE_CHAR}+ { return PropertiesTokenTypes.WHITE_SPACE; }
. { return PropertiesTokenTypes.BAD_CHARACTER; }