{
  "name": "MET Base",
  "version": "1.0.0",
  "description": "MET: Grammaire de base pour SIGMET/AIRMET",
  "tokens": {
    "firId": {
      "pattern": "^[A-Z]{4}$",
      "category": "location",
      "description": "Indicateur OACI de la FIR/CTA"
    },
    "firIdArea": {
      "pattern": "^[A-Z]{4}$",
      "category": "location",
      "description": "Indicateur OACI de la zone FIR/CTA affectée"
    },
    "sequenceNumber": {
      "pattern": "^[A-Z]?\\d{1,3}$",
      "category": "identifier",
      "description": "Numéro de séquence [A-Z]n[n][n]"
    },
    "valid": {
      "pattern": "^VALID$",
      "category": "keyword",
      "description": "Mot-clé validité"
    },
    "validityPeriod": {
      "pattern": "^\\d{6}/\\d{6}$",
      "category": "datetime",
      "description": "Période de validité JJHHmm/JJHHmm",
      "placeholder": {
        "value": "0000/0000",
        "editable": [
          {
            "start": 0,
            "end": 2
          },
          {
            "start": 2,
            "end": 4
          },
          {
            "start": 5,
            "end": 7
          },
          {
            "start": 7,
            "end": 9
          }
        ]
      }
    },
    "mwoId": {
      "pattern": "^[A-Z]{4}-$",
      "category": "location",
      "description": "Indicateur MWO avec tiret",
      "placeholder": {
        "value": "AAAA-",
        "editable": [
          {
            "start": 0,
            "end": 4
          }
        ]
      }
    },
    "firName": {
      "pattern": "^[A-Z][A-Z\\s]{1,20}$",
      "category": "location",
      "description": "Nom de la FIR/CTA",
      "placeholder": {
        "value": "NOM",
        "editable": [
          {
            "start": 0,
            "end": 3
          }
        ]
      }
    },
    "fir": {
      "pattern": "^FIR$",
      "category": "keyword",
      "description": "Région d'information de vol"
    },
    "uir": {
      "pattern": "^UIR$",
      "category": "keyword",
      "description": "Région supérieure d'information"
    },
    "firUir": {
      "pattern": "^FIR/UIR$",
      "category": "keyword",
      "description": "FIR / UIR"
    },
    "cta": {
      "pattern": "^CTA$",
      "category": "keyword",
      "description": "Région de contrôle"
    },
    "firNumber": {
      "pattern": "^/\\d{1,2}$",
      "category": "identifier",
      "description": "Numéro de subdivision FIR"
    },
    "statusTest": {
      "pattern": "^TEST$",
      "category": "status",
      "description": "Indicateur message de test"
    },
    "statusExer": {
      "pattern": "^EXER$",
      "category": "status",
      "description": "Indicateur message d'exercice"
    },
    "cnl": {
      "pattern": "^CNL$",
      "category": "keyword",
      "description": "Mot-clé annulation"
    },
    "cnlSequence": {
      "pattern": "^[A-Z]?\\d{1,3}$",
      "category": "identifier",
      "description": "Numéro de séquence du message annulé"
    },
    "cnlValidity": {
      "pattern": "^\\d{6}/\\d{6}$",
      "category": "datetime",
      "description": "Période de validité du message annulé"
    },
    "obs": {
      "pattern": "^OBS$",
      "category": "keyword",
      "description": "Observé"
    },
    "fcst": {
      "pattern": "^FCST$",
      "category": "keyword",
      "description": "Prévu"
    },
    "at": {
      "pattern": "^AT$",
      "category": "keyword",
      "description": "Mot-clé AT"
    },
    "obsTime": {
      "pattern": "^\\d{4}Z$",
      "category": "datetime",
      "description": "Heure d'observation/prévision HHmmZ"
    },
    "coordinate": {
      "pattern": "^[NS]\\d{2,4}\\s[EW]\\d{3,5}$",
      "category": "location",
      "description": "Coordonnée géographique Nnn[nn] Ennn[nn] ou Snn[nn] Wnnn[nn]"
    },
    "coordinateSimple": {
      "pattern": "^[NS]\\d{2,4}$",
      "category": "location",
      "description": "Coordonnée latitude simple Nnn[nn] ou Snn[nn]"
    },
    "coordinateLon": {
      "pattern": "^[EW]\\d{3,5}$",
      "category": "location",
      "description": "Coordonnée longitude simple Ennn[nn] ou Wnnn[nn]"
    },
    "coordinateSeparator": {
      "pattern": "^-$",
      "category": "keyword",
      "description": "Séparateur de coordonnées"
    },
    "nOf": {
      "pattern": "^N OF$",
      "category": "keyword",
      "description": "Au nord de"
    },
    "sOf": {
      "pattern": "^S OF$",
      "category": "keyword",
      "description": "Au sud de"
    },
    "eOf": {
      "pattern": "^E OF$",
      "category": "keyword",
      "description": "À l'est de"
    },
    "wOf": {
      "pattern": "^W OF$",
      "category": "keyword",
      "description": "À l'ouest de"
    },
    "and": {
      "pattern": "^AND$",
      "category": "keyword",
      "description": "Conjonction ET"
    },
    "nOfLine": {
      "pattern": "^N OF LINE$",
      "category": "keyword",
      "description": "Au nord de la ligne"
    },
    "neOfLine": {
      "pattern": "^NE OF LINE$",
      "category": "keyword",
      "description": "Au nord-est de la ligne"
    },
    "eOfLine": {
      "pattern": "^E OF LINE$",
      "category": "keyword",
      "description": "À l'est de la ligne"
    },
    "seOfLine": {
      "pattern": "^SE OF LINE$",
      "category": "keyword",
      "description": "Au sud-est de la ligne"
    },
    "sOfLine": {
      "pattern": "^S OF LINE$",
      "category": "keyword",
      "description": "Au sud de la ligne"
    },
    "swOfLine": {
      "pattern": "^SW OF LINE$",
      "category": "keyword",
      "description": "Au sud-ouest de la ligne"
    },
    "wOfLine": {
      "pattern": "^W OF LINE$",
      "category": "keyword",
      "description": "À l'ouest de la ligne"
    },
    "nwOfLine": {
      "pattern": "^NW OF LINE$",
      "category": "keyword",
      "description": "Au nord-ouest de la ligne"
    },
    "wi": {
      "pattern": "^WI$",
      "category": "keyword",
      "description": "À l'intérieur (polygone)"
    },
    "aprxWideLine": {
      "pattern": "^APRX \\d{1,3}KM WID LINE BTN$",
      "category": "keyword",
      "description": "Largeur approximative du couloir en km"
    },
    "aprxWideLineNm": {
      "pattern": "^APRX \\d{1,3}NM WID LINE BTN$",
      "category": "keyword",
      "description": "Largeur approximative du couloir en nm"
    },
    "entireFir": {
      "pattern": "^ENTIRE FIR$",
      "category": "keyword",
      "description": "FIR entière"
    },
    "entireUir": {
      "pattern": "^ENTIRE UIR$",
      "category": "keyword",
      "description": "UIR entière"
    },
    "entireFirUir": {
      "pattern": "^ENTIRE FIR/UIR$",
      "category": "keyword",
      "description": "FIR/UIR entière"
    },
    "entireCta": {
      "pattern": "^ENTIRE CTA$",
      "category": "keyword",
      "description": "CTA entière"
    },
    "flightLevel": {
      "pattern": "^FL\\d{3}$",
      "category": "measurement",
      "description": "Niveau de vol FLnnn"
    },
    "sfcFl": {
      "pattern": "^SFC/FL\\d{3}$",
      "category": "measurement",
      "description": "Surface au niveau de vol"
    },
    "sfcAlt": {
      "pattern": "^SFC/\\d{4,5}(M|FT)$",
      "category": "measurement",
      "description": "Surface à l'altitude en mètres ou pieds"
    },
    "flRange": {
      "pattern": "^FL\\d{3}/\\d{3}$",
      "category": "measurement",
      "description": "Plage de niveaux de vol FLnnn/nnn"
    },
    "topFl": {
      "pattern": "^TOP FL\\d{3}$",
      "category": "measurement",
      "description": "Sommet niveau de vol"
    },
    "topAbvFl": {
      "pattern": "^TOP ABV FL\\d{3}$",
      "category": "measurement",
      "description": "Sommet au-dessus du niveau de vol"
    },
    "abvFl": {
      "pattern": "^ABV FL\\d{3}$",
      "category": "measurement",
      "description": "Au-dessus du niveau de vol"
    },
    "altRange": {
      "pattern": "^\\d{4,5}/\\d{4,5}(M|FT)$",
      "category": "measurement",
      "description": "Plage d'altitude en mètres ou pieds"
    },
    "altToFl": {
      "pattern": "^\\d{4,5}(M|FT)/FL\\d{3}$",
      "category": "measurement",
      "description": "Altitude au niveau de vol"
    },
    "movN": {
      "pattern": "^MOV N$",
      "category": "status",
      "description": "Se déplaçant vers le nord"
    },
    "movNne": {
      "pattern": "^MOV NNE$",
      "category": "status",
      "description": "Se déplaçant vers le nord-nord-est"
    },
    "movNe": {
      "pattern": "^MOV NE$",
      "category": "status",
      "description": "Se déplaçant vers le nord-est"
    },
    "movEne": {
      "pattern": "^MOV ENE$",
      "category": "status",
      "description": "Se déplaçant vers l'est-nord-est"
    },
    "movE": {
      "pattern": "^MOV E$",
      "category": "status",
      "description": "Se déplaçant vers l'est"
    },
    "movEse": {
      "pattern": "^MOV ESE$",
      "category": "status",
      "description": "Se déplaçant vers l'est-sud-est"
    },
    "movSe": {
      "pattern": "^MOV SE$",
      "category": "status",
      "description": "Se déplaçant vers le sud-est"
    },
    "movSse": {
      "pattern": "^MOV SSE$",
      "category": "status",
      "description": "Se déplaçant vers le sud-sud-est"
    },
    "movS": {
      "pattern": "^MOV S$",
      "category": "status",
      "description": "Se déplaçant vers le sud"
    },
    "movSsw": {
      "pattern": "^MOV SSW$",
      "category": "status",
      "description": "Se déplaçant vers le sud-sud-ouest"
    },
    "movSw": {
      "pattern": "^MOV SW$",
      "category": "status",
      "description": "Se déplaçant vers le sud-ouest"
    },
    "movWsw": {
      "pattern": "^MOV WSW$",
      "category": "status",
      "description": "Se déplaçant vers l'ouest-sud-ouest"
    },
    "movW": {
      "pattern": "^MOV W$",
      "category": "status",
      "description": "Se déplaçant vers l'ouest"
    },
    "movWnw": {
      "pattern": "^MOV WNW$",
      "category": "status",
      "description": "Se déplaçant vers l'ouest-nord-ouest"
    },
    "movNw": {
      "pattern": "^MOV NW$",
      "category": "status",
      "description": "Se déplaçant vers le nord-ouest"
    },
    "movNnw": {
      "pattern": "^MOV NNW$",
      "category": "status",
      "description": "Se déplaçant vers le nord-nord-ouest"
    },
    "speedKmh": {
      "pattern": "^\\d{1,3}KMH$",
      "category": "measurement",
      "description": "Vitesse en km/h"
    },
    "speedKt": {
      "pattern": "^\\d{1,3}KT$",
      "category": "measurement",
      "description": "Vitesse en nœuds"
    },
    "stnr": {
      "pattern": "^STNR$",
      "category": "status",
      "description": "Stationnaire"
    },
    "intsf": {
      "pattern": "^INTSF$",
      "category": "keyword",
      "description": "S'intensifiant"
    },
    "wkn": {
      "pattern": "^WKN$",
      "category": "keyword",
      "description": "S'affaiblissant"
    },
    "nc": {
      "pattern": "^NC$",
      "category": "keyword",
      "description": "Pas de changement"
    },
    "fcstAt": {
      "pattern": "^FCST AT$",
      "category": "keyword",
      "description": "Prévu à l'heure"
    },
    "fcstTime": {
      "pattern": "^\\d{4}Z$",
      "category": "datetime",
      "description": "Heure de prévision HHmmZ"
    }
  },
  "suggestions": {
    "items": {
      "sequenceNumber": [
        {
          "text": "1",
          "description": "Numéro de séquence [A-Z]n[n][n]",
          "editable": [
            {
              "start": 0,
              "end": 1
            }
          ]
        }
      ],
      "valid": [
        {
          "text": "VALID",
          "description": "Mot-clé validité"
        }
      ],
      "mwoId": [],
      "firName": [],
      "validityPeriod": [],
      "fir": [
        {
          "text": "FIR",
          "description": "Région d'information de vol"
        }
      ],
      "uir": [
        {
          "text": "UIR",
          "description": "Région supérieure d'information"
        }
      ],
      "firUir": [
        {
          "text": "FIR/UIR",
          "description": "FIR et UIR"
        }
      ],
      "cta": [
        {
          "text": "CTA",
          "description": "Région de contrôle"
        }
      ],
      "statusTest": [
        {
          "text": "TEST",
          "description": "Message de test"
        }
      ],
      "statusExer": [
        {
          "text": "EXER",
          "description": "Message d'exercice"
        }
      ],
      "cnl": [
        {
          "text": "CNL",
          "description": "Annuler"
        }
      ],
      "obs": [
        {
          "text": "OBS",
          "description": "Observé"
        }
      ],
      "fcst": [
        {
          "text": "FCST",
          "description": "Prévu"
        }
      ],
      "at": [
        {
          "text": "AT",
          "description": "À l'heure"
        }
      ],
      "obsTime": [
        {
          "text": "1200Z",
          "description": "Heure d'observation",
          "editable": [
            {
              "start": 0,
              "end": 4
            }
          ]
        }
      ],
      "entireFir": [
        {
          "text": "ENTIRE FIR",
          "description": "FIR entière"
        }
      ],
      "entireUir": [
        {
          "text": "ENTIRE UIR",
          "description": "UIR entière"
        }
      ],
      "entireFirUir": [
        {
          "text": "ENTIRE FIR/UIR",
          "description": "FIR/UIR entière"
        }
      ],
      "wi": [
        {
          "text": "WI",
          "description": "À l'intérieur du polygone"
        }
      ],
      "nOf": [
        {
          "text": "N OF",
          "description": "Au nord de"
        }
      ],
      "sOf": [
        {
          "text": "S OF",
          "description": "Au sud de"
        }
      ],
      "eOf": [
        {
          "text": "E OF",
          "description": "À l'est de"
        }
      ],
      "wOf": [
        {
          "text": "W OF",
          "description": "À l'ouest de"
        }
      ],
      "nOfLine": [
        {
          "text": "N OF LINE",
          "description": "Au nord de la ligne"
        }
      ],
      "neOfLine": [
        {
          "text": "NE OF LINE",
          "description": "Au nord-est de la ligne"
        }
      ],
      "sOfLine": [
        {
          "text": "S OF LINE",
          "description": "Au sud de la ligne"
        }
      ],
      "swOfLine": [
        {
          "text": "SW OF LINE",
          "description": "Au sud-ouest de la ligne"
        }
      ],
      "aprxWideLine": [
        {
          "text": "APRX 50KM WID LINE BTN",
          "description": "Couloir de 50km de large",
          "editable": [
            {
              "start": 5,
              "end": 7
            }
          ]
        }
      ],
      "coordinate": [
        {
          "text": "N4830 E00230",
          "description": "Exemple de coordonnée",
          "editable": [
            {
              "start": 0,
              "end": 12
            }
          ]
        }
      ],
      "coordinateSimple": [
        {
          "text": "N50",
          "description": "Latitude nord",
          "editable": [
            {
              "start": 1,
              "end": 3
            }
          ]
        }
      ],
      "coordinateLon": [
        {
          "text": "E010",
          "description": "Longitude est",
          "editable": [
            {
              "start": 1,
              "end": 4
            }
          ]
        }
      ],
      "and": [
        {
          "text": "AND",
          "description": "Et"
        }
      ],
      "flightLevel": [
        {
          "text": "FL100",
          "description": "Niveau de vol 100"
        },
        {
          "text": "FL150",
          "description": "Niveau de vol 150"
        },
        {
          "text": "FL180",
          "description": "Niveau de vol 180"
        },
        {
          "text": "FL250",
          "description": "Niveau de vol 250"
        }
      ],
      "sfcFl": [
        {
          "text": "SFC/FL100",
          "description": "Surface au FL100"
        },
        {
          "text": "SFC/FL150",
          "description": "Surface au FL150"
        }
      ],
      "flRange": [
        {
          "text": "FL050/150",
          "description": "FL050 au FL150",
          "editable": [
            {
              "start": 2,
              "end": 9
            }
          ]
        },
        {
          "text": "FL250/350",
          "description": "FL250 au FL350",
          "editable": [
            {
              "start": 2,
              "end": 9
            }
          ]
        }
      ],
      "topFl": [
        {
          "text": "TOP FL100",
          "description": "Sommet FL100"
        },
        {
          "text": "TOP FL390",
          "description": "Sommet FL390"
        }
      ],
      "abvFl": [
        {
          "text": "ABV FL250",
          "description": "Au-dessus du FL250"
        }
      ],
      "movN": [
        {
          "text": "MOV N",
          "description": "Se déplaçant vers le nord"
        }
      ],
      "movNe": [
        {
          "text": "MOV NE",
          "description": "Se déplaçant vers le nord-est"
        }
      ],
      "movE": [
        {
          "text": "MOV E",
          "description": "Se déplaçant vers l'est"
        }
      ],
      "movSe": [
        {
          "text": "MOV SE",
          "description": "Se déplaçant vers le sud-est"
        }
      ],
      "movS": [
        {
          "text": "MOV S",
          "description": "Se déplaçant vers le sud"
        }
      ],
      "movSw": [
        {
          "text": "MOV SW",
          "description": "Se déplaçant vers le sud-ouest"
        }
      ],
      "movW": [
        {
          "text": "MOV W",
          "description": "Se déplaçant vers l'ouest"
        }
      ],
      "movNw": [
        {
          "text": "MOV NW",
          "description": "Se déplaçant vers le nord-ouest"
        }
      ],
      "speedKmh": [
        {
          "text": "30KMH",
          "description": "30 km/h",
          "editable": [
            {
              "start": 0,
              "end": 2
            }
          ]
        }
      ],
      "speedKt": [
        {
          "text": "20KT",
          "description": "20 nœuds",
          "editable": [
            {
              "start": 0,
              "end": 2
            }
          ]
        }
      ],
      "stnr": [
        {
          "text": "STNR",
          "description": "Stationnaire"
        }
      ],
      "intsf": [
        {
          "text": "INTSF",
          "description": "S'intensifiant"
        }
      ],
      "wkn": [
        {
          "text": "WKN",
          "description": "S'affaiblissant"
        }
      ],
      "nc": [
        {
          "text": "NC",
          "description": "Pas de changement"
        }
      ],
      "fcstAt": [
        {
          "text": "FCST AT",
          "description": "Prévu à"
        }
      ],
      "fcstTime": [
        {
          "text": "1600Z",
          "description": "Heure de prévision",
          "editable": [
            {
              "start": 0,
              "end": 4
            }
          ]
        }
      ]
    },
    "after": {
      "sequenceNumber": [
        "valid"
      ],
      "valid": [
        "validityPeriod"
      ],
      "validityPeriod": [
        "mwoId"
      ],
      "mwoId": [
        "firName"
      ],
      "firName": [
        "fir",
        "uir",
        "firUir",
        "cta"
      ],
      "at": [
        "obsTime"
      ],
      "obsTime": [
        "entireFir",
        "entireUir",
        "wi",
        "nOf",
        "sOf",
        "eOf",
        "wOf",
        "nOfLine",
        "sOfLine",
        "aprxWideLine",
        "coordinate"
      ],
      "entireFir": [
        "flightLevel",
        "sfcFl",
        "flRange",
        "topFl",
        "abvFl",
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "entireUir": [
        "flightLevel",
        "sfcFl",
        "flRange",
        "topFl",
        "abvFl",
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "wi": [
        "coordinate"
      ],
      "coordinate": [
        "coordinate",
        "flightLevel",
        "sfcFl",
        "flRange",
        "topFl",
        "movNe",
        "movE",
        "stnr"
      ],
      "nOf": [
        "coordinateSimple"
      ],
      "sOf": [
        "coordinateSimple"
      ],
      "eOf": [
        "coordinateLon"
      ],
      "wOf": [
        "coordinateLon"
      ],
      "coordinateSimple": [
        "and",
        "flightLevel",
        "sfcFl",
        "flRange",
        "movNe",
        "stnr"
      ],
      "coordinateLon": [
        "and",
        "flightLevel",
        "sfcFl",
        "flRange",
        "movNe",
        "stnr"
      ],
      "and": [
        "nOf",
        "sOf",
        "eOf",
        "wOf"
      ],
      "nOfLine": [
        "coordinate"
      ],
      "sOfLine": [
        "coordinate"
      ],
      "neOfLine": [
        "coordinate"
      ],
      "swOfLine": [
        "coordinate"
      ],
      "aprxWideLine": [
        "coordinate"
      ],
      "aprxWideLineNm": [
        "coordinate"
      ],
      "flightLevel": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "sfcFl": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "flRange": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "topFl": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "topAbvFl": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "abvFl": [
        "movNe",
        "movE",
        "movSe",
        "movSw",
        "movW",
        "movNw",
        "stnr",
        "intsf",
        "wkn",
        "nc"
      ],
      "movN": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movNe": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movE": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movSe": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movS": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movSw": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movW": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "movNw": [
        "speedKmh",
        "speedKt",
        "intsf",
        "wkn",
        "nc"
      ],
      "speedKmh": [
        "intsf",
        "wkn",
        "nc"
      ],
      "speedKt": [
        "intsf",
        "wkn",
        "nc"
      ],
      "stnr": [
        "intsf",
        "wkn",
        "nc"
      ],
      "intsf": [
        "fcstAt"
      ],
      "wkn": [
        "fcstAt"
      ],
      "nc": [
        "fcstAt"
      ],
      "fcstAt": [
        "fcstTime"
      ],
      "fcstTime": [
        "entireFir",
        "wi",
        "nOf",
        "sOf",
        "coordinate"
      ]
    }
  }
}
