# Parser

To use this language, use the class "language-parser".

## Comments

    $foo[bar] # Some comment

## Variables and functions

    @navigation[]
    $sections[^table::load[sections.cfg]]
    $sections.uri

## Literals

    $foo(3+$bar)
    ^switch[$sMode]{
    	^case[def]{$result(true)}
    }
    ^if(in "/news/"){}

## Escape sequences

    ^^
    ^"
    ^;

## Embedded in markup

    <nav>
    	<ul>
    	^sections.menu{
    		<li>
    			<a href="$sections.uri">$sections.name</a>
    		</li>
    	}
    	</ul>
    </nav>

## Full example

    @CLASS
    MyTable

    @create[uParam]
    ^switch[$uParam.CLASS_NAME]{
       ^case[string;void]{$t[^table::create{$uParam}]}
       ^case[table;MyTable]{$t[^table::create[$uParam]]}
       ^case[DEFAULT]{^throw[MyTable;Unsupported type $uParam.CLASS_NAME]}
    }

    # method will return value in different calling contexts
    @GET[sMode]
    ^switch[$sMode]{
       ^case[table]{$result[$t]}
       ^case[bool]{$result($t!=0)}
       ^case[def]{$result(true)}
       ^case[expression;double]{$result($t)}
       ^case[DEFAULT]{^throw[MyTable;Unsupported mode '$sMode']}
    }

    # method will handle access to the "columns"
    @GET_DEFAULT[sName]
    $result[$t.$sName]

    # wrappers for all existing methods are required
    @count[]
    ^t.count[]

    @menu[jCode;sSeparator]
    ^t.menu{$jCode}[$sSeparator]

    # new functionality
    @remove[iOffset;iLimit]
    $iLimit(^iLimit.int(0))
    $t[^t.select(^t.offset[]<$iOffset || ^t.offset[]>=$iOffset+$iLimit)]

## Known failures

There are certain edge cases where Prism will fail. There are always such cases in every regex-based syntax highlighter. However, Prism dares to be open and honest about them. If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug.

### Comment-like substrings

    ("fo #o")

### Tag-like substrings

    ("fo<div>o")

### Code block starting with a comment

    # Doesn't work
    # Does work

     # Does work when prefixed with a space

### Comments inside expressions break literals and operators

    ^if(
        $age>=4  # not too young
        && $age<=80  # and not too old
    )