# ldml2icu_supplemental.txt
#
# © 2016 and later: Unicode, Inc. and others.
#
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
# For terms of use, see http://www.unicode.org/copyright.html
#
# Used by SupplementalMapper.
# Data-driven file for mapping supplemental LDML paths to ICU paths.
# See ldml2icu_readme.txt for a detailed explanation of this file.

# Attribute value
%A=[^"']++
# Attribute value, no underscore
%B=[^"'_]++
# Word/Zone match
%W=[\s\w\-/]++
# Greedy word match
%G=[\s\w\-]+
# Number match
%N=[\d\.]++

# supplementalData.xml
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@tz="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $4)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@tz="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $4)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, Etc/UTC)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@tz="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $5)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $5)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@to-tz="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $5)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@tz="(%W)"][@to-tz="(%W)"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $5)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $6)
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@tz="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $5)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $5)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@to-tz="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $5)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@from="(%W)"][@to="(%W)"][@tz="(%W)"][@to-tz="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/from:intvector ; values=&date($3, from, $5)
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($4, to, $6)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@to="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($3, to, Etc/UTC)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/region[@iso3166="(%W)"]/currency[@iso4217="(%W)"][@to="(%W)"][@tz="(%W)"][@tender="false"]
     ; /CurrencyMap/$1/<FIFO>/id ; values=$2
     ; /CurrencyMap/$1/<FIFO>/to:intvector ; values=&date($3, to, $4)
     ; /CurrencyMap/$1/<FIFO>/tender ; values=false
//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"][@cashDigits="(%N)"][@cashRounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $4 $5
//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"][@cashRounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $2 $4
//supplementalData/currencyData/fractions/info[@iso4217="(%W)"][@digits="(%N)"][@rounding="(%N)"] ; /CurrencyMeta/$1:intvector ; values=$2 $3 $2 $3

//supplementalData/calendarPreferenceData/calendarPreference[@territories="(%A)"][@ordering="(%A)"] ; /calendarPreferenceData/$1    ; values=$2
//supplementalData/codeMappings/territoryCodes[@type="(%W)"][@numeric="(%N)"][@alpha3="(%W)"].* ; /codeMappings/<$1> ; values=$1 $2 $3

//supplementalData/codeMappings/currencyCodes[@type="(%W)"][@numeric="(%N)"].* ; /codeMappingsCurrency/<$1> ; values=$1 $2

//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@territories="(%W)"][@alt="secondary"]
     ; /languageData/$1/secondary/scripts ; values=$2
     ; /languageData/$1/secondary/territories ; values=$3
//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@alt="secondary"] ; /languageData/$1/secondary/scripts ; values=$2
//supplementalData/languageData/language[@type="(%W)"][@territories="(%G)"][@alt="secondary"] ; /languageData/$1/secondary/territories ; values=$2

//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"][@territories="(%W)"]
     ; /languageData/$1/primary/scripts ; values=$2
     ; /languageData/$1/primary/territories; values=$3
//supplementalData/languageData/language[@type="(%W)"][@scripts="(%W)"] ; /languageData/$1/primary/scripts ; values=$2
//supplementalData/languageData/language[@type="(%W)"][@territories="(%W)"] ; /languageData/$1/primary/territories ; values=$2

//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@status="deprecated"] ; /territoryContainment/deprecated/$1 ; values=$2
//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@status="grouping"] ; /territoryContainment/containedGroupings/$1 ; values=$2
//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"][@grouping="true"] ; /territoryContainment/grouping/$1 ; values=$2
//supplementalData/territoryContainment/group[@type="(%W)"][@contains="(%A)"]; /territoryContainment/$1 ; values=$2

//supplementalData/subdivisionContainment/subgroup[@type="(%W)"][@contains="(%A)"]; /subdivisionContainment/$1 ; values=$2
//supplementalData/subdivisionContainment/subgroup[@type="(%W)"][@subtype="(%W)"][@contains="(%A)"]; /subdivisionContainment/$1-$2 ; values=$3

//supplementalData/weekData/firstDay[@day="(%W)"][@territories="(%W)"](?:[@references="(?:%A)"])?[@alt="(%A)"] ; /weekData%$3/$2:intvector ; values=&day_number($1) ; fallback=/weekData/001:intvector[0]

//supplementalData/weekData/firstDay[@day="(%W)"][@territories="(%W)"]     ; /weekData/$2:intvector ; values=&day_number($1) ; fallback=/weekData/001:intvector[0]
//supplementalData/weekData/minDays[@count="(%N)"][@territories="(%W)"]    ; /weekData/$2:intvector ; values=$1 ; fallback=/weekData/001:intvector[1]
//supplementalData/weekData/weekendStart[@day="(%W)"][@territories="(%W)"] ; /weekData/$2:intvector ; values=&day_number($1) 0 ; fallback=/weekData/001:intvector[2] /weekData/001:intvector[3]
//supplementalData/weekData/weekendEnd[@day="(%W)"][@territories="(%W)"]   ; /weekData/$2:intvector ; values=&day_number($1) 86400000 ; fallback=/weekData/001:intvector[4] /weekData/001:intvector[5]

//supplementalData/weekData/weekOfPreference[@locales="(%A)"][@ordering="(%A)"] ; /weekOfPreference/$1    ; values=$2

//supplementalData/timeData/hours[@allowed="(%W)"][@preferred="(%W)"][@regions="(%W)"]
     ; /timeData/$3/allowed ; values=$1
     ; /timeData/$3/preferred ; values=$2

//supplementalData/measurementData/measurementSystem[@type="metric"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=0
//supplementalData/measurementData/measurementSystem[@type="US"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=1
//supplementalData/measurementData/measurementSystem[@type="UK"][@category="(%W)"][@territories="(%W)"] ; /measurementData/$2/MeasurementSystemCategory/$1:int ; values=2

//supplementalData/measurementData/measurementSystem[@type="metric"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=0
//supplementalData/measurementData/measurementSystem[@type="US"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=1
//supplementalData/measurementData/measurementSystem[@type="UK"][@territories="(%W)"] ; /measurementData/$1/MeasurementSystem:int ; values=2
//supplementalData/measurementData/paperSize[@type="A4"][@territories="(%W)"] ; /measurementData/$1/PaperSize:intvector ; values=297 210
//supplementalData/measurementData/paperSize[@type="US-Letter"][@territories="(%W)"] ; /measurementData/$1/PaperSize:intvector ; values=279 216

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@writingPercent="(%N)"][@populationPercent="(%N)"][@officialStatus="(%W)"](?:[@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/writingShareF:int ; values=&exp($6,-2)
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
    ; /territoryInfo/$1/$5/officialStatus ; values=$8

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@writingPercent="(%N)"][@populationPercent="(%N)"](?:[@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/writingShareF:int ; values=&exp($6,-2)
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@literacyPercent="(%N)"][@populationPercent="(%N)"][@officialStatus="(%W)"](?:[@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/literacyShareF:int ; values=&exp($6,-2)
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)
    ; /territoryInfo/$1/$5/officialStatus ; values=$8

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@literacyPercent="(%N)"][@populationPercent="(%N)"](?:[@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/literacyShareF:int ; values=&exp($6,-2)
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($7,-2)

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@populationPercent="(%N)"][@officialStatus="(%W)"](?:[@@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($6,-2)
    ; /territoryInfo/$1/$5/officialStatus ; values=$7

//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]/languagePopulation[@type="(%W)"][@populationPercent="(%N)"](?:[@references="%W"])?
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]
    ; /territoryInfo/$1/$5/populationShareF:int ; values=&exp($6,-2)

# This only exists right now for 'ZZ', which has no <languagePopulation> child elements.
//supplementalData/territoryInfo/territory[@type="(%W)"][@gdp="(%N)"][@literacyPercent="(%N)"][@population="(%N)"]
    ; /territoryInfo/$1/territoryF:intvector ; values=&exp($2) &exp($3,-2) &exp($4) ; base_xpath=//supplementalData/territoryInfo/territory[@type="$1"]

//supplementalData/calendarData/calendar[@type="(%W)"]/calendarSystem[@type="(%W)"] ; /calendarData/$1/system ; values=$2
//supplementalData/calendarData/calendar[@type="(%W)"]/inheritEras[@calendar="(%W)"] ; /calendarData/$1/inheritEras ; values=$2
//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%N)"][@(start|end)="(%A)"][@named="(%W)"]
    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)
    ; /calendarData/$1/eras/$2/named ; values=$5
//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%N)"][@(start|end)="(%A)"][@code="%A"][@aliases="%A"]
    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)
//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%N)"][@(start|end)="(%A)"][@code="%A"]
    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)
//supplementalData/calendarData/calendar[@type="(%W)"]/eras/era[@type="(%N)"][@(start|end)="(%A)"]
    ; /calendarData/$1/eras/$2/$3:intvector ; values=&ymd($4)

# units.xml

//supplementalData/unitIdComponents/unitIdComponent[@type="(%A)"][@values="(%A)"]
    ; /unitIdComponents/$1 ; values=$2

//supplementalData/unitPrefixes/unitPrefix[@type="(%W)"][@symbol="(%W)"][@power10="(%A)"]
    ; /unitPrefixes/$1/symbol ; values=$2
    ; /unitPrefixes/$1/power10 ; values=$3

//supplementalData/unitPrefixes/unitPrefix[@type="(%W)"][@symbol="(%W)"][@power2="(%A)"]
    ; /unitPrefixes/$1/symbol ; values=$2
    ; /unitPrefixes/$1/power2 ; values=$3

//supplementalData/unitConstants/unitConstant[@constant="(%W)"][@value="(%A)"](?:[@status="%W"])?
    ; /unitConstants/$1 ; values="$2"

//supplementalData/unitQuantities/unitQuantity[@baseUnit="(%W)"][@quantity="(%W)"](?:[@status="%W"])?
    ; /unitQuantities/<FIFO>/$1 ; values="$2"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values=1

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@factor="(%A)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values="$3"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@offset="(%A)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values=1
    ; /convertUnits/$1/offset ; values=$3

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@factor="(%A)"][@offset="(%A)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values="$3"
    ; /convertUnits/$1/offset ; values=$4

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@special="(%A)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/special ; values=$3

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@systems="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values=1
    ; /convertUnits/$1/systems ; values="$3"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@factor="(%A)"][@systems="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values="$3"
    ; /convertUnits/$1/systems ; values="$4"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@offset="(%A)"][@systems="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values=1
    ; /convertUnits/$1/offset ; values=$3
    ; /convertUnits/$1/systems ; values="$4"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@factor="(%A)"][@offset="(%A)"][@systems="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/factor ; values="$3"
    ; /convertUnits/$1/offset ; values=$4
    ; /convertUnits/$1/systems ; values="$5"

//supplementalData/convertUnits/convertUnit[@source="(%W)"][@baseUnit="(%W)"][@special="(%A)"][@systems="(%W)"]
    ; /convertUnits/$1/target ; values=$2
    ; /convertUnits/$1/special ; values=$3
    ; /convertUnits/$1/systems ; values="$4"

# note the following will go into metadata.txt, not units.txt
//supplementalData/metadata/alias/(unit|usage)Alias[@type="(%A)"][@replacement="(%A)"][@reason="(%A)"]
     ; /alias/$1/$2/reason ; values="$4"
     ; /alias/$1/$2/replacement ; values="$3"

# Quoting "$1" and "$2" in the output lets $3 expand space-separated regions: only the first unquoted output supports such expansion.
//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"]
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/unit

//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"][@geq="(%A)"]
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/unit
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/geq ; values=$4

//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"][@skeleton="(%A)"]
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/unit
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/skeleton ; values=$4

//supplementalData/unitPreferenceData/unitPreferences[@category="(%W)"][@usage="(%A)"]/unitPreference[@regions="(%A)"][@geq="(%A)"][@skeleton="(%A)"]
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/unit
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/geq ; values=$4
    ; /unitPreferenceData/"$1"/"$2"/$3/<FIFO>/skeleton ; values=$5

# grammaticalFeatures.xml

//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalCase[@values="(%A)"]
    ; /grammaticalData/features/$2/$1/case/_ ; values=$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalCase[@scope="(%A)"]
    ; /grammaticalData/features/$2/$1/case/$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalCase[@scope="(%A)"][@values="(%A)"]
    ; /grammaticalData/features/$2/$1/case/$3 ; values=$4

//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalGender[@values="(%A)"]
    ; /grammaticalData/features/$2/$1/gender/_ ; values=$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalGender[@scope="(%A)"]
    ; /grammaticalData/features/$2/$1/gender/$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalGender[@scope="(%A)"][@values="(%A)"]
    ; /grammaticalData/features/$2/$1/gender/$3 ; values=$4

//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalDefiniteness[@values="(%A)"]
    ; /grammaticalData/features/$2/$1/definiteness/_ ; values=$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalDefiniteness[@scope="(%A)"]
    ; /grammaticalData/features/$2/$1/definiteness/$3
//supplementalData/grammaticalData/grammaticalFeatures[@targets="(%A)"][@locales="(%A)"]/grammaticalDefiniteness[@scope="(%A)"][@values="(%A)"]
    ; /grammaticalData/features/$2/$1/definiteness/$3 ; values=$4

//supplementalData/grammaticalData/grammaticalDerivations[@locales="(%A)"]/deriveComponent[@feature="(%A)"][@structure="(%A)"][@value0="(%A)"][@value1="(%A)"]
    ; /grammaticalData/derivations/$1/component/$2/$3 ; values=$4 $5
//supplementalData/grammaticalData/grammaticalDerivations[@locales="(%A)"]/deriveCompound[@feature="(%A)"][@structure="(%A)"][@value="(%A)"]
    ; /grammaticalData/derivations/$1/compound/$2/$3 ; values=$4

# languageInfo.xml

//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/paradigmLocales[@locales="(%A)"] ; /languageMatchingInfo/$1/paradigmLocales ; values=$2
//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/matchVariable[@id="\$(%A)"][@value="(%A)"] ; /languageMatchingInfo/$1/matchVariable/$2 ; values=$3

//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@distance="(%N)"][@oneway="true"] ; /languageMatchingNew/$1/<FIFO> ; values=$2 $3 $4 1
//supplementalData/languageMatching/languageMatches[@type="(%B)_new"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@distance="(%N)"] ; /languageMatchingNew/$1/<FIFO> ; values=$2 $3 $4 0

//supplementalData/languageMatching/languageMatches[@type="(%B)"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@percent="(%N)"][@oneway="true"] ; /languageMatching/$1/<FIFO> ; values=$2 $3 $4 1
//supplementalData/languageMatching/languageMatches[@type="(%B)"]/languageMatch[@desired="(%A)"][@supported="(%A)"][@percent="(%N)"] ; /languageMatching/$1/<FIFO> ; values=$2 $3 $4 0

# likelySubtags.xml
//supplementalData/likelySubtags/likelySubtag[@from="(%A)"][@to="(%A)"][@origin="%A"] ; /$1 ; values=$2
//supplementalData/likelySubtags/likelySubtag[@from="(%A)"][@to="(%A)"] ; /$1 ; values=$2

# metaZones.xml - metaZones.txt
//supplementalData/metaZones/mapTimezones[@type="metazones"]/mapZone[@type="(%A)"][@other="(%W)"][@territory="(%W)"] ; /mapTimezones/$2/$3 ; values=$1
# if we just have metazone ID, we have a 1-element array with metazone ID
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$2
# if we also have from and/or to, then we have a 3-element array, with from/to (possibly default) as the 2nd/3rd elements
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$3 "$2" "9999-12-31 23:59"
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$4 "$2" "$3"
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$3 "1970-01-01 00:00" "$2"
# if we have stdOffset and dstOffset, then we have the same as above (metazone only or from and/or to) and currently just ignore the stdOffset and dstOffset
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<$2> ; values=$2
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<$2> ; values=$3 "$2" "9999-12-31 23:59"
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<$2> ; values=$4 "$2" "$3"
//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$3 "1970-01-01 00:00" "$2"
#
//supplementalData/metaZones/metazoneIds/metazoneId[@shortId="(%A)"][@longId="(%A)"][@deprecated="false"] ; /metazoneIds/$1 ; values=$2

//supplementalData/primaryZones/primaryZone[@iso3166="(%W)"] ; /primaryZones/$1 ; values={value}

# numberingSystems.txt
//supplementalData/numberingSystems/numberingSystem[@type="algorithmic"][@id="(%W)"][@rules="(%A)"]
     ; /numberingSystems/$1/algorithmic:int ; values=1
     ; /numberingSystems/$1/desc ; values=&algorithm($2)
     ; /numberingSystems/$1/radix:int ; values=10

//supplementalData/numberingSystems/numberingSystem[@type="numeric"][@id="(%W)"][@digits="(%A)"]
     ; /numberingSystems/$1/algorithmic:int ; values=0
     ; /numberingSystems/$1/desc ; values=$2
     ; /numberingSystems/$1/radix:int ; values=10

# windowsZones.txt
//supplementalData/windowsZones/mapTimezones/mapZone[@type="(%A)"][@other="(%A)"][@territory="(%W)"] ; /mapTimezones/"$2"/$3 ; values="$1"

# genderList.txt
//supplementalData/gender/personList[@type="(%W)"][@locales="(%W)"] ; /genderList/$2 ; values=$1

# locale info
//supplementalData/parentLocales[@component="(%A)"]/parentLocale[@parent="(%A)"][@locales="(%A)"] ; /parentLocales%$1/$2 ; values=$3
//supplementalData/parentLocales/parentLocale[@parent="(%A)"][@locales="(%A)"] ; /parentLocales/$1 ; values=$2

# personName formats
//supplementalData/personNamesDefaults/nameOrderLocalesDefault[@order="(%A)"] ; /personNamesDefaults/nameOrderLocalesDefault/$1 ; values={value}

# supplementalMetadata.xml (metadata.txt)
//supplementalData/metadata/defaultContent[@locales="(%A)"] ; /defaultContent ; values=$1
//supplementalData/metadata/alias/(language|script|territory|subdivision|variant)Alias[@type="(%A)"][@replacement="(%A)"][@reason="(%A)"]
     ; /alias/$1/$2/reason ; values="$4"
     ; /alias/$1/$2/replacement ; values="$3"
# Also note that there are paths in units.xml (above) like
# //supplementalData/metadata/alias/(unit|usage)Alias[@type="(%A)"]
# which will go into metadata.txt

# Region codes used by ICU's Region class
# Specify the value explicitly so that the LDMLConverter will split it.
//supplementalData/metadata/validity/variable[@type="choice"][@id="\$territory"] ; /regionCodes ; values={value}

# validity
//supplementalData/idValidity/id[@type="(%A)"][@idStatus="(%A)"] ; /idValidity/$1/$2 ; values={value}
