syntax ini

list constant true false

state line-start
    char " \t\n" this
    char [ section
    char '#;' comment
    char = value error
    noeat text

state section ini.section
    char ] section-end ini.section
    char "\n" line-start error
    eat this

state section-end
    char "\n" line-start
    char # comment
    char " \t" this
    eat this error

state text
    char # comment
    char -b = key operator
    char -b -n "\n" text
    noeat line-start

state key
    recolor variable
    recolor operator 1
    noeat value

state value
    char \' single-quote
    char \" double-quote
    char -b a-z this
    # FIXME: does this highlight constants with trailing characters?
    inlist constant this constant
    char # comment
    char "\n" line-start
    eat this

state single-quote string
    char \' value string
    char "\n" line-start
    eat this

state double-quote string
    char \" value string
    char "\n" line-start
    eat this

state comment
    char "\n" line-start
    eat this
