# Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html#License
#
# Copyright (C) 2006-2009, Google, International Business Machines Corporation and others. All Rights Reserved.
# Regex for recognizing RFC 4646 well-formed tags
# http://www.rfc-editor.org/rfc/rfc4646.txt
# http://tools.ietf.org/html/draft-ietf-ltru-4646bis-21

# The structure requires no forward references, so it reverses the order.
# It uses Java/Perl syntax instead of the old ABNF
# The uppercase comments are fragments copied from RFC 4646

# Note: the tool requires that any real "=" or "#" or ";" in the regex be escaped.

$alpha  = [a-z] ;   # ALPHA
$digit  = [0-9] ;   # DIGIT
$alphanum   = [a-z 0-9] ;   # ALPHA / DIGIT
$x  = x ;   # private use singleton
$singleton = [a-w y-z] ; # other singleton
$s  = [-_] ; # separator -- lenient parsers will use [-_] -- strict will use [-]

# Now do the components. The structure is slightly different to allow for capturing the right components.
# The notation (?:....) is a non-capturing version of (...): so the "?:" can be deleted if someone doesn't care about capturing.

$language   = $alpha{2,8} | $alpha{2,3} $s $alpha{3};
            
   # ABNF (2*3ALPHA) / 4ALPHA / 5*8ALPHA  --- note: because of how | works in regex, don't use $alpha{2,3} | $alpha{4,8} 
   # We don't have to have the general case of extlang, because there can be only one extlang (except for zh-min-nan).

# Note: extlang invalid in Unicode language tags

$script = $alpha{4} ;   # 4ALPHA 

$region = $alpha{2} | $digit{3} ;    # 2ALPHA / 3DIGIT

$variant    = (?: $alphanum{5,8} | $digit $alphanum{3} ) ;  # 5*8alphanum / (DIGIT 3alphanum)

$extension  = $singleton (?: $s $alphanum{2,8} )+ ; # singleton 1*("-" (2*8alphanum))

$privateUse = $x (?: $s $alphanum{1,8} )+ ; # "x" 1*("-" (1*8alphanum))

# Define certain legacy language tags (marked as “Type: grandfathered” in BCP 47),
# since otherwise the regex is pretty useless.
# Since these are limited, this is safe even later changes to the registry --
# the only oddity is that it might change the type of the tag, and thus
# the results from the capturing groups.
# http://www.iana.org/assignments/language-subtag-registry
# Note that these have to be compared case insensitively, requiring (?i) below.

$legacy  = en $s GB $s oed
      | i $s (?: ami | bnn | default | enochian | hak | klingon | lux | mingo | navajo | pwn | tao | tay | tsu )
      | no $s (?: bok | nyn )
      | sgn $s (?: BE $s (?: fr | nl) | CH $s de )
      | zh $s min $s nan;

# old:         | zh $s (?: cmn (?: $s Hans | $s Hant )? | gan | min (?: $s nan)? | wuu | yue );
# For well-formedness, we don't need the ones that would otherwise pass.
# For validity, they need to be checked.

# $legacyWellFormed = (?:
#         art $s lojban
#     | cel $s gaulish
#     | zh $s (?: guoyu | hakka | xiang )
# );

# Unicode locales: but we are shifting to a compatible form
# $keyvalue = (?: $alphanum+ \= $alphanum+);
# $keywords = ($keyvalue (?: \; $keyvalue)*);

# We separate items that we want to capture as a single group

$variantList   = $variant (?: $s $variant )* ; # special for multiples
$extensionList = $extension (?: $s $extension )* ;   # special for multiples

$langtag = (?: ( $language )
      (?: $s ( $script ) )? 40%
      (?: $s ( $region ) )? 40%
      (?: $s ( $variantList ) )? 10%
      (?: $s ( $extensionList ) )? 5%
      (?: $s ( $privateUse ) )? 5%);

# Here is the final breakdown, with capturing groups for each of these components
# The variants, extensions, legacy, and private-use may have interior '-'
 
$root = (?i) # case-insensitive
  (?:
      $langtag 90%
    | ( $privateUse ) 5%
    | ( $legacy ) 5%)
#    (?: \@ $keywords )? 5%
    ;
