// Orca/M 65816 Assembler language specs
(

/****************************************************************************/
// MARK: Keywords
/****************************************************************************/

    {
        Identifier = "xcode.lang.asm.orcam.identifier";
        Syntax = {
            CaseSensitive = NO;
            StartChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_~";
            Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~";
            Type = "xcode.syntax.identifier";
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.keyword";
        Syntax = {
            CaseSensitive = NO;
            StartChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_~";
            Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~";
            Words = (
                "adc",
                "and",
                "asl",
                "bcc",
                "bcs",
                "beq",
                "bge",
                "bit",
                "blt",
                "bmi",
                "bne",
                "bpl",
                "bra",
                "brk",
                "brl",
                "bvc",
                "bvs",
                "clc",
                "cld",
                "cli",
                "clv",
                "cmp",
                "cop",
                "cpa",
                "cpx",
                "cpy",
                "dec",
                "dex",
                "dey",
                "eor",
                "inc",
                "inx",
                "iny",
                "jmp",
                "jsl",
                "jsr",
                "lda",
                "ldx",
                "ldy",
                "lsr",
                "mvn",
                "mvp",
                "nop",
                "ora",
                "pea",
                "pei",
                "per",
                "pha",
                "phb",
                "phd",
                "phk",
                "php",
                "phx",
                "phy",
                "pla",
                "plb",
                "pld",
                "plp",
                "plx",
                "ply",
                "rep",
                "rol",
                "ror",
                "rti",
                "rtl",
                "rts",
                "sbc",
                "sec",
                "sed",
                "sei",
                "sep",
                "sta",
                "stp",
                "stx",
                "sty",
                "stz",
                "tax",
                "tay",
                "tcd",
                "tcs",
                "tdc",
                "trb",
                "tsb",
                "tsc",
                "tsx",
                "txa",
                "txs",
                "txy",
                "tya",
                "tyx",
                "wai",
                "wdm",
                "xba",
                "xce",

                "absaddr",
                "align",
                "anop",
                "append",
                "case",
                "codechk",
                "copy",
                "data",
                "datachk",
                "dc",
                "direct",
                "ds",
                "dynchk",
                "eject",
                "end",
                "entry",
                "equ",
                "err",
                "expand",
                "gequ",
                "ieee",
                "instime",
                "keep",
                "kind",
                "list",
                "longa",
                "longi",
                "mem",
                "merr",
                "msb",
                "numsex",
                "obj",
                "objcase",
                "objend",
                "org",
                "printer",
                "private",
                "privdata",
                "rename",
                "setcom",
                "start",
                "symbol",
                "title",
                "using",
                "65c02",
                "65816",

                "actr",
                "ago",
                "aif",
                "ainput",
                "amid",
                "asearch",
                "gbla",
                "gblb",
                "gblc",
                "gen",
                "lcla",
                "lclb",
                "lclc",
                "macro",
                "mcopy",
                "mdrop",
                "mend",
                "mexit",
                "mload",
                "mnote",
                "seta",
                "setb",
                "setc",
                "trace",
            );
            Type = "xcode.syntax.keyword";
            AltType = "xcode.syntax.identifier";
        };
    },

/****************************************************************************/
// MARK: Simple Syntax Coloring
/****************************************************************************/

    {
        Identifier = "xcode.lang.asm.orcam";
        Description = "ORCAM Assembler Coloring";
        BasedOn = "xcode.lang.simpleColoring";
        IncludeInMenu = YES;
        Name = "Assembly (ORCAM)";
        Syntax = {
            Tokenizer = "xcode.lang.asm.orcam.lexer";
            IncludeRules = (
                "xcode.lang.asm.orcam.codeblock",
                "xcode.lang.asm.orcam.datablock",
            );
            Type = "xcode.syntax.plain";
        };
    },
    {
        Identifier = "xcode.lang.asm.orcam.lexer";
        Syntax = {
            IncludeRules = (
                "xcode.lang.asm.orcam.comment.semi",
                "xcode.lang.asm.orcam.comment.exclam",
                "xcode.lang.asm.orcam.comment.star",
                "xcode.lang.asm.orcam.comment.dot",
                "xcode.lang.string",
                "xcode.lang.character",
                "xcode.lang.number",
                "xcode.lang.asm.orcam.keyword",
                "xcode.lang.asm.orcam.identifier",
            );
        };
    },
    
    {
        Identifier = "xcode.lang.asm.orcam.comment.semi";
        Syntax = {
            StartAtBOL = YES;
            StartAtColumnZero = YES;
            Start = ";";
            End = "\n";
            IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark" );
            Type = "xcode.syntax.comment";
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.comment.exclam";
        Syntax = {
            StartAtBOL = YES;
            StartAtColumnZero = YES;
            Start = "!";
            End = "\n";
            IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark" );
            Type = "xcode.syntax.comment";
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.comment.star";
        Syntax = {
            StartAtBOL = YES;
            StartAtColumnZero = YES;
            Start = "*";
            End = "\n";
            IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark" );
            Type = "xcode.syntax.comment";
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.comment.dot";
        Syntax = {
            StartAtBOL = YES;
            StartAtColumnZero = YES;
            Start = ".";
            End = "\n";
            IncludeRules = ( "xcode.lang.url", "xcode.lang.url.mail", "xcode.lang.comment.mark" );
            Type = "xcode.syntax.comment";
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.codeblock";
        Syntax = {
            Tokenizer = "xcode.lang.asm.orcam.lexer";
            Start = "start";
            End = "end";
            Recursive = NO;
            Foldable = YES;
            Type = "xcode.syntax.definition.function";
            IncludeRules = (
            );
        };
    },

    {
        Identifier = "xcode.lang.asm.orcam.datablock";
        Syntax = {
            Tokenizer = "xcode.lang.asm.orcam.lexer";
            Start = "data";
            End = "end";
            Recursive = NO;
            Foldable = YES;
            Type = "xcode.syntax.definition.function";
            IncludeRules = (
            );
        };
    },
)
