Added first version of Syntax Highlighting. Commented out some tokens.
This commit is contained in:
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NonNls
|
||||
import javax.swing.Icon
|
||||
|
||||
@Suppress("unused")
|
||||
class M68kFileType private constructor() : LanguageFileType(M68kLanguage.INSTANCE, true) {
|
||||
class M68kFileType private constructor() : LanguageFileType(M68kLanguage.INSTANCE, false) {
|
||||
@NonNls
|
||||
override fun getName(): String {
|
||||
return "M68k Assembler"
|
||||
|
||||
@@ -136,14 +136,14 @@ HASH_COMMENT=([#;*].*+)
|
||||
"&" { return OP_BITWISE_AND; }
|
||||
"|" { return OP_BITWISE_OR; }
|
||||
"^" { return OP_BITWISE_XOR; }
|
||||
":" { return COLON; }
|
||||
";" { return SEMICOLON; }
|
||||
"[" { return SQUARE_L; }
|
||||
"]" { return SQUARE_R; }
|
||||
// ":" { return COLON; }
|
||||
// ";" { return SEMICOLON; }
|
||||
// "[" { return SQUARE_L; }
|
||||
// "]" { return SQUARE_R; }
|
||||
"(" { return ROUND_L; }
|
||||
")" { return ROUND_R; }
|
||||
"." { return DOT; }
|
||||
"$" { return DOLLAR; }
|
||||
// "." { return DOT; }
|
||||
// "$" { return DOLLAR; }
|
||||
"=" { return OP_ASSIGN; }
|
||||
"!" { return OP_UNARY_NOT; }
|
||||
"~" { return OP_UNARY_COMPL; }
|
||||
@@ -193,16 +193,16 @@ HASH_COMMENT=([#;*].*+)
|
||||
"&" { return OP_BITWISE_AND; }
|
||||
"|" { return OP_BITWISE_OR; }
|
||||
"^" { return OP_BITWISE_XOR; }
|
||||
":" { return COLON; }
|
||||
";" { return SEMICOLON; }
|
||||
"[" { return SQUARE_L; }
|
||||
"]" { return SQUARE_R; }
|
||||
// ":" { return COLON; }
|
||||
// ";" { return SEMICOLON; }
|
||||
// "[" { return SQUARE_L; }
|
||||
// "]" { return SQUARE_R; }
|
||||
"(" { return ROUND_L; }
|
||||
")" { return ROUND_R; }
|
||||
"," { return SEPARATOR; }
|
||||
"." { return DOT; }
|
||||
// "." { return DOT; }
|
||||
"#" { return HASH; }
|
||||
"$" { return DOLLAR; }
|
||||
// "$" { return DOLLAR; }
|
||||
"=" { return OP_ASSIGN; }
|
||||
"!" { return OP_UNARY_NOT; }
|
||||
"~" { return OP_UNARY_COMPL; }
|
||||
|
||||
@@ -30,84 +30,84 @@
|
||||
EOL = 'regexp:\R'
|
||||
WHITE_SPACE = 'regexp:\p{Blank}+'
|
||||
|
||||
EQU = 'equ'
|
||||
// EQU = 'equ'
|
||||
//
|
||||
// EVEN_TAG = 'even'
|
||||
// CNOP_TAG = 'cnop'
|
||||
// SECTION_TAG = 'section'
|
||||
//
|
||||
// INCLUDE_TAG = 'include'
|
||||
// INCBIN_TAG = 'incbin'
|
||||
//
|
||||
// IF_TAG = 'regexp:(if\p{Alpha}*)'
|
||||
// ELSE_TAG = 'else'
|
||||
// ENDC_TAG = 'endc'
|
||||
// MACRO_TAG = 'macro'
|
||||
// MACRO_END_TAG = 'endm'
|
||||
// REPT_TAG = 'rept'
|
||||
// REPT_END_TAG = 'endr'
|
||||
// FAIL_TAG = 'fail'
|
||||
// END_TAG = 'end'
|
||||
|
||||
EVEN_TAG = 'even'
|
||||
CNOP_TAG = 'cnop'
|
||||
SECTION_TAG = 'section'
|
||||
|
||||
INCLUDE_TAG = 'include'
|
||||
INCBIN_TAG = 'incbin'
|
||||
|
||||
IF_TAG = 'regexp:(if\p{Alpha}*)'
|
||||
ELSE_TAG = 'else'
|
||||
ENDC_TAG = 'endc'
|
||||
MACRO_TAG = 'macro'
|
||||
MACRO_END_TAG = 'endm'
|
||||
REPT_TAG = 'rept'
|
||||
REPT_END_TAG = 'endr'
|
||||
FAIL_TAG = 'fail'
|
||||
END_TAG = 'end'
|
||||
|
||||
AREG = 'regexp:((a[0-7])|sp)'
|
||||
DREG = 'regexp:(d[0-7])'
|
||||
PC = 'pc'
|
||||
REG_CCR = 'ccr'
|
||||
REG_SR = 'sr'
|
||||
REG_USP = 'usp'
|
||||
REG_VBR = 'vbr'
|
||||
// AREG = 'regexp:((a[0-7])|sp)'
|
||||
// DREG = 'regexp:(d[0-7])'
|
||||
// PC = 'pc'
|
||||
// REG_CCR = 'ccr'
|
||||
// REG_SR = 'sr'
|
||||
// REG_USP = 'usp'
|
||||
// REG_VBR = 'vbr'
|
||||
|
||||
// ASSIGNMENT = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)((\p{Blank}+equ\p{Blank})|=)'
|
||||
// LOCAL_LABEL_OC = 'regexp:(!(\p{Blank}+)\.(\p{Alpha}|_)(\p{Alnum}|_)*:?)|(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*\$:?)|((\p{Blank}*)?\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*\$:)|(\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Alpha}|_)(\p{Alnum}|_)*\$:)'
|
||||
// GLOBAL_LABEL_OC = 'regexp:(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*:?:?)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*::?)'
|
||||
|
||||
MNEMONIC = 'regexp:((\p{Alpha})+)'
|
||||
SYMBOL = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)'
|
||||
OPSIZE_BS = 'regexp:(\.[bs])'
|
||||
OPSIZE_WL = 'regexp:(\.[wl])'
|
||||
// MNEMONIC = 'regexp:((\p{Alpha})+)'
|
||||
// SYMBOL = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)'
|
||||
// OPSIZE_BS = 'regexp:(\.[bs])'
|
||||
// OPSIZE_WL = 'regexp:(\.[wl])'
|
||||
|
||||
BINARY = 'regexp:(%[01]+)'
|
||||
HEXADECIMAL = 'regexp:(\$[0-9a-f]+)'
|
||||
OCTAL = 'regexp:(@[0-7]+)'
|
||||
DECIMAL = 'regexp:([0-9]+)'
|
||||
// BINARY = 'regexp:(%[01]+)'
|
||||
// HEXADECIMAL = 'regexp:(\$[0-9a-f]+)'
|
||||
// OCTAL = 'regexp:(@[0-7]+)'
|
||||
// DECIMAL = 'regexp:([0-9]+)'
|
||||
|
||||
STRINGLIT = "regexp:(`([^`\\]|\\.)*`|'([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")|<([^`\\]|\\.)*>"
|
||||
// STRINGLIT = "regexp:(`([^`\\]|\\.)*`|'([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")|<([^`\\]|\\.)*>"
|
||||
|
||||
COLON = ':'
|
||||
SEMICOLON = ';'
|
||||
SQUARE_L = '['
|
||||
SQUARE_R = ']'
|
||||
ROUND_L = '('
|
||||
ROUND_R = ')'
|
||||
SEPARATOR = ','
|
||||
DOT = '.'
|
||||
HASH = '#'
|
||||
DOLLAR = '$'
|
||||
|
||||
OP_ASSIGN = '='
|
||||
|
||||
OP_UNARY_NOT = '!'
|
||||
OP_UNARY_COMPL = '~'
|
||||
|
||||
OP_PLUS = '+'
|
||||
OP_MINUS = '-'
|
||||
OP_AR_MUL = '*'
|
||||
OP_AR_DIV = '/'
|
||||
OP_AR_MOD = '%'
|
||||
OP_AR_SHIFT_L = '<<'
|
||||
OP_AR_SHIFT_R = '>>'
|
||||
OP_BITWISE_AND = '&'
|
||||
OP_BITWISE_OR = '|'
|
||||
OP_BITWISE_XOR = '^'
|
||||
OP_LOGICAL_AND = '&&'
|
||||
OP_LOGICAL_OR = '||'
|
||||
|
||||
OP_CMP_EQ = '=='
|
||||
OP_CMP_LT = '<'
|
||||
OP_CMP_GT = '>'
|
||||
OP_CMP_GT_EQ = '>='
|
||||
OP_CMP_LT_EQ = '<='
|
||||
OP_CMP_NOT_EQ = '!='
|
||||
// COLON = ':'
|
||||
// SEMICOLON = ';'
|
||||
// SQUARE_L = '['
|
||||
// SQUARE_R = ']'
|
||||
// ROUND_L = '('
|
||||
// ROUND_R = ')'
|
||||
// SEPARATOR = ','
|
||||
// DOT = '.'
|
||||
// HASH = '#'
|
||||
// DOLLAR = '$'
|
||||
//
|
||||
// OP_ASSIGN = '='
|
||||
//
|
||||
// OP_UNARY_NOT = '!'
|
||||
// OP_UNARY_COMPL = '~'
|
||||
//
|
||||
// OP_PLUS = '+'
|
||||
// OP_MINUS = '-'
|
||||
// OP_AR_MUL = '*'
|
||||
// OP_AR_DIV = '/'
|
||||
// OP_AR_MOD = '%'
|
||||
// OP_AR_SHIFT_L = '<<'
|
||||
// OP_AR_SHIFT_R = '>>'
|
||||
// OP_BITWISE_AND = '&'
|
||||
// OP_BITWISE_OR = '|'
|
||||
// OP_BITWISE_XOR = '^'
|
||||
// OP_LOGICAL_AND = '&&'
|
||||
// OP_LOGICAL_OR = '||'
|
||||
//
|
||||
// OP_CMP_EQ = '=='
|
||||
// OP_CMP_LT = '<'
|
||||
// OP_CMP_GT = '>'
|
||||
// OP_CMP_GT_EQ = '>='
|
||||
// OP_CMP_LT_EQ = '<='
|
||||
// OP_CMP_NOT_EQ = '!='
|
||||
// OP_CMP_NOT_EQ2 = '<>'
|
||||
|
||||
COMMENT = 'regexp:(\p{Blank}*?[;*].*+)'//|(!\s#+.*+)'
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
package de.platon42.intellij.plugins.m68k.syntax
|
||||
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter
|
||||
import com.intellij.openapi.options.colors.AttributesDescriptor
|
||||
import com.intellij.openapi.options.colors.ColorDescriptor
|
||||
import com.intellij.openapi.options.colors.ColorSettingsPage
|
||||
import com.intellij.openapi.util.NlsContexts.ConfigurableName
|
||||
import de.platon42.intellij.plugins.m68k.M68kIcons.FILE
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.AREG
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.BAD_CHARACTER
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.COMMENT
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DREG
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.GLOBAL_LABEL
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.KEYWORD
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.LOCAL_LABEL
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.MNEMONIC
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.NUMBER
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.PREPROCESSOR
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SEPARATOR
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SPECIAL_REG
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.STRING
|
||||
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.SYMBOL
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import javax.swing.Icon
|
||||
|
||||
class M68kColorSettingsPage : ColorSettingsPage {
|
||||
|
||||
override fun getIcon(): Icon {
|
||||
return FILE
|
||||
}
|
||||
|
||||
override fun getHighlighter(): SyntaxHighlighter {
|
||||
return M68kSyntaxHighlighter()
|
||||
}
|
||||
|
||||
@NonNls
|
||||
override fun getDemoText(): String {
|
||||
return """; This is an example assembly language program
|
||||
PIC_HEIGHT = 256
|
||||
|
||||
include "../includes/hardware/custom.i"
|
||||
|
||||
BLTHOGON MACRO
|
||||
move.w #DMAF_SETCLR|DMAF_BLITHOG,dmacon(a5)
|
||||
ENDM
|
||||
|
||||
demo_init ; global label
|
||||
PUSHM d0-d7/a0-a6 ; this is a macro
|
||||
lea pd_ModViewTable(a4),a0
|
||||
moveq.l #0,d0
|
||||
move.w #PIC_HEIGHT-1,d7
|
||||
.loop move.l d0,(a0)+ ; local label
|
||||
dbra d7,.loop
|
||||
POPM
|
||||
rts
|
||||
"""
|
||||
}
|
||||
|
||||
override fun getAdditionalHighlightingTagToDescriptorMap(): Map<String, TextAttributesKey>? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getAttributeDescriptors(): Array<AttributesDescriptor> {
|
||||
return DESCRIPTORS
|
||||
}
|
||||
|
||||
override fun getColorDescriptors(): Array<ColorDescriptor> {
|
||||
return ColorDescriptor.EMPTY_ARRAY
|
||||
}
|
||||
|
||||
override fun getDisplayName(): @ConfigurableName String {
|
||||
return "M68k Assembly"
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val DESCRIPTORS = arrayOf(
|
||||
AttributesDescriptor("SEPARATOR", SEPARATOR),
|
||||
AttributesDescriptor("GLOBAL_LABEL", GLOBAL_LABEL),
|
||||
AttributesDescriptor("LOCAL_LABEL", LOCAL_LABEL),
|
||||
AttributesDescriptor("SYMBOL", SYMBOL),
|
||||
AttributesDescriptor("MNEMONIC", MNEMONIC),
|
||||
AttributesDescriptor("KEYWORD", KEYWORD),
|
||||
AttributesDescriptor("PREPROCESSOR", PREPROCESSOR),
|
||||
AttributesDescriptor("STRING", STRING),
|
||||
AttributesDescriptor("NUMBER", NUMBER),
|
||||
AttributesDescriptor("AREG", AREG),
|
||||
AttributesDescriptor("DREG", DREG),
|
||||
AttributesDescriptor("SPECIAL_REG", SPECIAL_REG),
|
||||
AttributesDescriptor("COMMENT", COMMENT),
|
||||
AttributesDescriptor("BAD_CHARACTER", BAD_CHARACTER))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package de.platon42.intellij.plugins.m68k.syntax
|
||||
|
||||
import com.intellij.lexer.Lexer
|
||||
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors
|
||||
import com.intellij.openapi.editor.HighlighterColors
|
||||
import com.intellij.openapi.editor.colors.TextAttributesKey
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase
|
||||
import com.intellij.psi.TokenType
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import de.platon42.intellij.plugins.m68k.lexer.M68kLexer
|
||||
import de.platon42.intellij.plugins.m68k.psi.M68kTypes
|
||||
|
||||
class M68kSyntaxHighlighter : SyntaxHighlighterBase() {
|
||||
override fun getHighlightingLexer(): Lexer {
|
||||
return M68kLexer()
|
||||
}
|
||||
|
||||
override fun getTokenHighlights(tokenType: IElementType): Array<TextAttributesKey> {
|
||||
return when (tokenType) {
|
||||
M68kTypes.SEPARATOR -> arrayOf(SEPARATOR)
|
||||
M68kTypes.GLOBAL_LABEL_DEF, M68kTypes.GLOBAL_LABEL -> arrayOf(GLOBAL_LABEL)
|
||||
M68kTypes.LOCAL_LABEL_DEF, M68kTypes.LOCAL_LABEL_DEF -> arrayOf(LOCAL_LABEL)
|
||||
M68kTypes.SYMBOLDEF, M68kTypes.SYMBOL -> arrayOf(SYMBOL)
|
||||
M68kTypes.MNEMONIC, M68kTypes.ASM_OP -> arrayOf(MNEMONIC)
|
||||
M68kTypes.OPERAND_SIZE, M68kTypes.DATA_WIDTH, M68kTypes.ADDRESS_SIZE -> arrayOf(MNEMONIC)
|
||||
M68kTypes.ADDRESS_REGISTER, M68kTypes.AREG -> arrayOf(AREG)
|
||||
M68kTypes.DATA_REGISTER, M68kTypes.DREG -> arrayOf(DREG)
|
||||
M68kTypes.SPECIAL_REGISTER, M68kTypes.REG_USP, M68kTypes.REG_SR, M68kTypes.REG_CCR -> arrayOf(SPECIAL_REG)
|
||||
M68kTypes.PREPROCESSOR_DIRECTIVE -> arrayOf(PREPROCESSOR)
|
||||
M68kTypes.COMMENT -> arrayOf(COMMENT)
|
||||
M68kTypes.DECIMAL, M68kTypes.HEXADECIMAL, M68kTypes.OCTAL -> arrayOf(NUMBER)
|
||||
M68kTypes.STRINGLIT -> arrayOf(STRING)
|
||||
TokenType.BAD_CHARACTER -> arrayOf(BAD_CHARACTER)
|
||||
else -> emptyArray()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val SEPARATOR = TextAttributesKey.createTextAttributesKey("M68K_SEPARATOR", DefaultLanguageHighlighterColors.COMMA)
|
||||
val GLOBAL_LABEL = TextAttributesKey.createTextAttributesKey("M68K_LOCAL_LABEL", DefaultLanguageHighlighterColors.LOCAL_VARIABLE)
|
||||
val LOCAL_LABEL = TextAttributesKey.createTextAttributesKey("M68K_GLOBAL_LABEL", DefaultLanguageHighlighterColors.GLOBAL_VARIABLE)
|
||||
val SYMBOL = TextAttributesKey.createTextAttributesKey("M68K_SYMBOL", DefaultLanguageHighlighterColors.IDENTIFIER)
|
||||
val MNEMONIC = TextAttributesKey.createTextAttributesKey("M68K_MNEMONIC", DefaultLanguageHighlighterColors.FUNCTION_CALL)
|
||||
val KEYWORD = TextAttributesKey.createTextAttributesKey("M68K_KEYWORD", DefaultLanguageHighlighterColors.KEYWORD)
|
||||
val PREPROCESSOR = TextAttributesKey.createTextAttributesKey("M68K_PREPROCESSOR", DefaultLanguageHighlighterColors.KEYWORD)
|
||||
val STRING = TextAttributesKey.createTextAttributesKey("M68K_STRING", DefaultLanguageHighlighterColors.STRING)
|
||||
val NUMBER = TextAttributesKey.createTextAttributesKey("M68K_NUMBER", DefaultLanguageHighlighterColors.NUMBER)
|
||||
val AREG = TextAttributesKey.createTextAttributesKey("M68K_AREG", DefaultLanguageHighlighterColors.CONSTANT)
|
||||
val DREG = TextAttributesKey.createTextAttributesKey("M68K_DREG", DefaultLanguageHighlighterColors.CONSTANT)
|
||||
val SPECIAL_REG = TextAttributesKey.createTextAttributesKey("M68K_SPECIALREG", DefaultLanguageHighlighterColors.CONSTANT)
|
||||
val COMMENT = TextAttributesKey.createTextAttributesKey("M68K_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT)
|
||||
val BAD_CHARACTER = TextAttributesKey.createTextAttributesKey("M68K_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package de.platon42.intellij.plugins.m68k.syntax
|
||||
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
|
||||
class M68kSyntaxHighlighterFactory : SyntaxHighlighterFactory() {
|
||||
override fun getSyntaxHighlighter(project: Project?, virtualFile: VirtualFile?) = M68kSyntaxHighlighter()
|
||||
}
|
||||
Reference in New Issue
Block a user