Module:CountryData: Difference between revisions

// via Wikitext Extension for VSCode
// via Wikitext Extension for VSCode
Line 82: Line 82:
     -- Build the lookup table with pre-counted size
     -- Build the lookup table with pre-counted size
     for code, country in pairs(data.countries) do
     for code, country in pairs(data.countries) do
        local names_to_process = {}
       
         -- Add name field as primary display name
         -- Add name field as primary display name
         local displayName = country.name or country.canonical_name
         local displayName = country.name or country.canonical_name
         if displayName then
         if displayName then
             lookup[NormalizationText.normalizeText(displayName)] = code
             table.insert(names_to_process, displayName)
         end
         end
          
          
         -- Add canonical_name if different from name
         -- Add canonical_name if different from name
         if country.canonical_name and country.canonical_name ~= country.name then
         if country.canonical_name and country.canonical_name ~= country.name then
             lookup[NormalizationText.normalizeText(country.canonical_name)] = code
             table.insert(names_to_process, country.canonical_name)
         end
         end
          
          
         -- Add variations
         -- Add variations
         if country.variations and type(country.variations) == "table" then
         if country.variations and type(country.variations) == "table" then
            -- Use pairs instead of ipairs to handle both array and object structures
             for _, variation in pairs(country.variations) do
             for _, variation in pairs(country.variations) do
                 lookup[NormalizationText.normalizeText(variation)] = code
                 table.insert(names_to_process, variation)
            end
        end
 
        for _, name in ipairs(names_to_process) do
            local normalized = NormalizationText.normalizeText(name)
            lookup[normalized] = code
           
            local stripped = DiacriticNormalization.removeDiacritics(normalized)
            if stripped ~= normalized then
                lookup[stripped] = code
             end
             end
         end
         end
Line 244: Line 255:
     if code and data.countries[code] then
     if code and data.countries[code] then
         result = data.countries[code]
         result = data.countries[code]
    else
        -- Try with diacritics removed
        local stripped = DiacriticNormalization.removeDiacritics(normalized)
        if stripped ~= normalized then
            code = nameLookup[stripped]
            if code and data.countries[code] then
                result = data.countries[code]
            end
        end
     end
     end
      
      
Line 280: Line 282:
     -- Look up the code
     -- Look up the code
     local code = nameLookup[normalized]
     local code = nameLookup[normalized]
   
    if not code then
        -- Try with diacritics removed
        local stripped = DiacriticNormalization.removeDiacritics(normalized)
        if stripped ~= normalized then
            code = nameLookup[stripped]
        end
    end
      
      
     -- Cache the result (including nil)
     -- Cache the result (including nil)