tom 0.0.1

Yet another format-preserving TOML parser/manipulator.
Documentation
DOC@[0; 40)
  ENTRY@[0; 6)
    KEY@[0; 1)
      BARE_KEY@[0; 1) "a"
    WHITESPACE@[1; 2)
    EQ@[2; 3) "="
    WHITESPACE@[3; 4)
    VALUE@[4; 6)
      DICT@[4; 6)
        L_CURLY@[4; 5) "{"
        R_CURLY@[5; 6) "}"
  WHITESPACE@[6; 7)
  ENTRY@[7; 18)
    KEY@[7; 8)
      BARE_KEY@[7; 8) "b"
    WHITESPACE@[8; 9)
    EQ@[9; 10) "="
    WHITESPACE@[10; 11)
    VALUE@[11; 18)
      DICT@[11; 18)
        L_CURLY@[11; 12) "{"
        ENTRY@[12; 17)
          KEY@[12; 15)
            BARE_KEY@[12; 15) "foo"
          EQ@[15; 16) "="
          VALUE@[16; 17)
            NUMBER@[16; 17) "1"
        R_CURLY@[17; 18) "}"
  WHITESPACE@[18; 19)
  ENTRY@[19; 31)
    KEY@[19; 20)
      BARE_KEY@[19; 20) "c"
    WHITESPACE@[20; 21)
    EQ@[21; 22) "="
    WHITESPACE@[22; 23)
    VALUE@[23; 31)
      DICT@[23; 31)
        L_CURLY@[23; 24) "{"
        ENTRY@[24; 29)
          KEY@[24; 27)
            BARE_KEY@[24; 27) "foo"
          EQ@[27; 28) "="
          VALUE@[28; 29)
            NUMBER@[28; 29) "1"
        COMMA@[29; 30) ","
        R_CURLY@[30; 31) "}"
  WHITESPACE@[31; 32)
  ENTRY@[32; 40)
    KEY@[32; 33)
      BARE_KEY@[32; 33) "d"
    WHITESPACE@[33; 34)
    EQ@[34; 35) "="
    WHITESPACE@[35; 36)
    VALUE@[36; 40)
      DICT@[36; 40)
        L_CURLY@[36; 37) "{"
        ENTRY@[37; 40)
          KEY@[37; 38)
            ERROR@[37; 38)
              COMMA@[37; 38) ","
          ERROR@[38; 39)
            R_CURLY@[38; 39) "}"
          WHITESPACE@[39; 40)
          KEY@[40; 40)
          VALUE@[40; 40)

error@[37; 38) ",": expected a key
error@[38; 39) "}": expected `.`
error@[39; 40) "\n": expected a key
error@[39; 40) "\n": expected `=`
error@[39; 40) "\n": expected a value
error@[39; 40) "\n": expected `,`
error@[39; 40) "\n": expected `}`
error@[37; 40) ",}\n": newlines are forbidden in entries