xcodeproj 0.3.0

xcodeproj reader and parser.
Documentation
file    = { SOI ~ "// !$*UTF8*$!" ~ object ~ EOI }
object  = { "{" ~ field ~ (field)* ~ "}" | "{" ~ "}" }
field   = { key  ~ "=" ~ value ~ ";" }

key     = { uuid | ident | string  }
value   = {
     array
    | object
    | string
    | bool
    | kind
    | number
    | uuid
    | ident
}

array   = { "(" ~ value ~ ("," ~ value)* ~ ","? ~ ")" | "(" ~ ")" }
bool    = { (^"YES" | ^"NO") ~ !"_" ~ !ASCII_ALPHANUMERIC }
number  = @{ ASCII_DIGIT+ ~ ("." ~ ASCII_DIGIT+)* ~ !ASCII_ALPHA }
string  = @{ "\"" ~ INNER_STRING ~ "\"" }
ident   = @{
  (ASCII_ALPHA | ASCII_DIGIT | ("." | "/")* ~ ASCII_ALPHA{2}) ~ (ASCII_ALPHA | ASCII_DIGIT | "_" | "." | "/")*
}
uuid    = @{
  (ASCII_ALPHA{1} | ASCII_DIGIT{1}) ~ ASCII_ALPHANUMERIC{23} ~ !(ASCII_ALPHA | ".")
}
kind    = @{
     "PBXBuildFile"
    | "PBXFileReference"
    | "PBXLegacyTarget"
    | "PBXNativeTarget"
    | "PBXAggregateTarget"
    | "PBXProject"
    | "PBXGroup"
    | "PBXHeadersBuildPhase"
    | "PBXFrameworksBuildPhase"
    | "XCConfigurationList"
    | "PBXResourcesBuildPhase"
    | "PBXShellScriptBuildPhase"
    | "PBXSourcesBuildPhase"
    | "PBXTargetDependency"
    | "PBXVariantGroup"
    | "XCBuildConfiguration"
    | "PBXCopyFilesBuildPhase"
    | "PBXContainerItemProxy"
    | "XCVersionGroup"
    | "PBXRezBuildPhase"
    | "PBXBuildRule"
    | "XCRemoteSwiftPackageReference"
    | "XCSwiftPackageProductDependency"
}


escape  = @{ "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | unicode) }
unicode = @{ "u" ~ (ASCII_HEX_DIGIT{4} | ASCII_HEX_DIGIT{3} ~ ASCII_ALPHA) }

INNER_STRING   = _{ (!("\"" | "\\") ~ ANY)* ~ (escape ~ INNER_STRING)? }
WHITESPACE = _{ " " | "\t" | "\r" | "\n" | ("\\" ~ unicode) }
COMMENT = _{ "/*" ~ (!"*/" ~ ANY)* ~ "*/" }