function mergeBrands() {
    buildReverseIndex(brands);
    checkBrands();

    console.log('\nmerging brands');
    console.time(colors.green('brands merged'));

    // Create/update entries
    // First, entries in namesKeep (i.e. counted entries)
    Object.keys(keep).forEach(k => {
        if (rIndex[k] || ambiguous[k]) return;

        let obj = brands[k];
        let parts = k.split('|', 2);
        let tag = parts[0].split('/', 2);
        let key = tag[0];
        let value = tag[1];
        let name = parts[1];

        if (!obj) {   // a new entry!
            obj = { tags: {} };
            brands[k] = obj;

            // assign default tags - new entries
            obj.tags.brand = name;
            obj.tags.name = name;
            obj.tags[key] = value;
        }
    });


    // now process all brands
    Object.keys(brands).forEach(k => {
        let obj = brands[k];
        let parts = k.split('|', 2);
        let tag = parts[0].split('/', 2);
        let key = tag[0];
        let value = tag[1];
        let name = parts[1];

        // assign default tags - new or existing entries
        if (key === 'amenity' && value === 'cafe') {
            if (!obj.tags.takeaway) obj.tags.takeaway = 'yes';
            if (!obj.tags.cuisine) obj.tags.cuisine = 'coffee_shop';
        } else if (key === 'amenity' && value === 'fast_food') {
            if (!obj.tags.takeaway) obj.tags.takeaway = 'yes';
        } else if (key === 'amenity' && value === 'pharmacy') {
            if (!obj.tags.healthcare) obj.tags.healthcare = 'pharmacy';
        }

        // Force `countryCode`, and duplicate `name:xx` and `brand:xx` tags
        // if the name can only be reasonably read in one country.
        // https://www.regular-expressions.info/unicode.html
        if (/[\u0590-\u05FF]/.test(name)) {          // Hebrew
            obj.countryCodes = ['il'];
            // note: old ISO 639-1 lang code for Hebrew was `iw`, now `he`
            if (obj.tags.name) { obj.tags['name:he'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:he'] = obj.tags.brand; }
        } else if (/[\u0E00-\u0E7F]/.test(name)) {   // Thai
            obj.countryCodes = ['th'];
            if (obj.tags.name) { obj.tags['name:th'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:th'] = obj.tags.brand; }
        } else if (/[\u1000-\u109F]/.test(name)) {   // Myanmar
            obj.countryCodes = ['mm'];
            if (obj.tags.name) { obj.tags['name:my'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:my'] = obj.tags.brand; }
        } else if (/[\u1100-\u11FF]/.test(name)) {   // Hangul
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\u1700-\u171F]/.test(name)) {   // Tagalog
            obj.countryCodes = ['ph'];
            if (obj.tags.name) { obj.tags['name:tl'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:tl'] = obj.tags.brand; }
        } else if (/[\u3040-\u30FF]/.test(name)) {   // Hirgana or Katakana
            obj.countryCodes = ['jp'];
            if (obj.tags.name) { obj.tags['name:ja'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ja'] = obj.tags.brand; }
        } else if (/[\u3130-\u318F]/.test(name)) {   // Hangul
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\uA960-\uA97F]/.test(name)) {   // Hangul
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\uAC00-\uD7AF]/.test(name)) {   // Hangul
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        }

        brands[k] = sort(brands[k])

     });

    console.timeEnd(colors.green('brands merged'));
}
function mergeBrands() {
    buildReverseIndex(brands);
    checkBrands();

    console.log('\nmerging brands');
    console.time(colors.green('brands merged'));

    
    
    Object.keys(keep).forEach(k => {
        if (rIndex[k] || ambiguous[k]) return;

        let obj = brands[k];
        let parts = k.split('|', 2);
        let tag = parts[0].split('/', 2);
        let key = tag[0];
        let value = tag[1];
        let name = parts[1];

        if (!obj) {   
            obj = { tags: {} };
            brands[k] = obj;

            
            obj.tags.brand = name;
            obj.tags.name = name;
            obj.tags[key] = value;
        }
    });


    
    Object.keys(brands).forEach(k => {
        let obj = brands[k];
        let parts = k.split('|', 2);
        let tag = parts[0].split('/', 2);
        let key = tag[0];
        let value = tag[1];
        let name = parts[1];

        
        if (key === 'amenity' && value === 'cafe') {
            if (!obj.tags.takeaway) obj.tags.takeaway = 'yes';
            if (!obj.tags.cuisine) obj.tags.cuisine = 'coffee_shop';
        } else if (key === 'amenity' && value === 'fast_food') {
            if (!obj.tags.takeaway) obj.tags.takeaway = 'yes';
        } else if (key === 'amenity' && value === 'pharmacy') {
            if (!obj.tags.healthcare) obj.tags.healthcare = 'pharmacy';
        }

        
        
        
        if (/[\u0590-\u05FF]/.test(name)) {          
            obj.countryCodes = ['il'];
            
            if (obj.tags.name) { obj.tags['name:he'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:he'] = obj.tags.brand; }
        } else if (/[\u0E00-\u0E7F]/.test(name)) {   
            obj.countryCodes = ['th'];
            if (obj.tags.name) { obj.tags['name:th'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:th'] = obj.tags.brand; }
        } else if (/[\u1000-\u109F]/.test(name)) {   
            obj.countryCodes = ['mm'];
            if (obj.tags.name) { obj.tags['name:my'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:my'] = obj.tags.brand; }
        } else if (/[\u1100-\u11FF]/.test(name)) {   
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\u1700-\u171F]/.test(name)) {   
            obj.countryCodes = ['ph'];
            if (obj.tags.name) { obj.tags['name:tl'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:tl'] = obj.tags.brand; }
        } else if (/[\u3040-\u30FF]/.test(name)) {   
            obj.countryCodes = ['jp'];
            if (obj.tags.name) { obj.tags['name:ja'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ja'] = obj.tags.brand; }
        } else if (/[\u3130-\u318F]/.test(name)) {   
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\uA960-\uA97F]/.test(name)) {   
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        } else if (/[\uAC00-\uD7AF]/.test(name)) {   
            obj.countryCodes = ['kr'];
            if (obj.tags.name) { obj.tags['name:ko'] = obj.tags.name; }
            if (obj.tags.brand) { obj.tags['brand:ko'] = obj.tags.brand; }
        }

        brands[k] = sort(brands[k])

     });

    console.timeEnd(colors.green('brands merged'));
}
function mergeBrands ( ) { buildReverseIndex ( brands ) ; checkBrands ( ) ; console . log ( '\nmerging brands' ) ; console . time ( colors . green ( 'brands merged' ) ) ; // Create/update entries // First, entries in namesKeep (i.e. counted entries) Object . keys ( keep ) . forEach ( k => { if ( rIndex [ k ] || ambiguous [ k ] ) return ; let obj = brands [ k ] ; let parts = k . split ( '|' , 2 ) ; let tag = parts [ 0 ] . split ( '/' , 2 ) ; let key = tag [ 0 ] ; let value = tag [ 1 ] ; let name = parts [ 1 ] ; if ( ! obj ) { // a new entry! obj = { tags : { } } ; brands [ k ] = obj ; // assign default tags - new entries obj . tags . brand = name ; obj . tags . name = name ; obj . tags [ key ] = value ; } } ) ; // now process all brands Object . keys ( brands ) . forEach ( k => { let obj = brands [ k ] ; let parts = k . split ( '|' , 2 ) ; let tag = parts [ 0 ] . split ( '/' , 2 ) ; let key = tag [ 0 ] ; let value = tag [ 1 ] ; let name = parts [ 1 ] ; // assign default tags - new or existing entries if ( key === 'amenity' && value === 'cafe' ) { if ( ! obj . tags . takeaway ) obj . tags . takeaway = 'yes' ; if ( ! obj . tags . cuisine ) obj . tags . cuisine = 'coffee_shop' ; } else if ( key === 'amenity' && value === 'fast_food' ) { if ( ! obj . tags . takeaway ) obj . tags . takeaway = 'yes' ; } else if ( key === 'amenity' && value === 'pharmacy' ) { if ( ! obj . tags . healthcare ) obj . tags . healthcare = 'pharmacy' ; } // Force `countryCode`, and duplicate `name:xx` and `brand:xx` tags // if the name can only be reasonably read in one country. // https://www.regular-expressions.info/unicode.html if ( / [\u0590-\u05FF] / . test ( name ) ) { // Hebrew obj . countryCodes = [ 'il' ] ; // note: old ISO 639-1 lang code for Hebrew was `iw`, now `he` if ( obj . tags . name ) { obj . tags [ 'name:he' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:he' ] = obj . tags . brand ; } } else if ( / [\u0E00-\u0E7F] / . test ( name ) ) { // Thai obj . countryCodes = [ 'th' ] ; if ( obj . tags . name ) { obj . tags [ 'name:th' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:th' ] = obj . tags . brand ; } } else if ( / [\u1000-\u109F] / . test ( name ) ) { // Myanmar obj . countryCodes = [ 'mm' ] ; if ( obj . tags . name ) { obj . tags [ 'name:my' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:my' ] = obj . tags . brand ; } } else if ( / [\u1100-\u11FF] / . test ( name ) ) { // Hangul obj . countryCodes = [ 'kr' ] ; if ( obj . tags . name ) { obj . tags [ 'name:ko' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:ko' ] = obj . tags . brand ; } } else if ( / [\u1700-\u171F] / . test ( name ) ) { // Tagalog obj . countryCodes = [ 'ph' ] ; if ( obj . tags . name ) { obj . tags [ 'name:tl' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:tl' ] = obj . tags . brand ; } } else if ( / [\u3040-\u30FF] / . test ( name ) ) { // Hirgana or Katakana obj . countryCodes = [ 'jp' ] ; if ( obj . tags . name ) { obj . tags [ 'name:ja' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:ja' ] = obj . tags . brand ; } } else if ( / [\u3130-\u318F] / . test ( name ) ) { // Hangul obj . countryCodes = [ 'kr' ] ; if ( obj . tags . name ) { obj . tags [ 'name:ko' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:ko' ] = obj . tags . brand ; } } else if ( / [\uA960-\uA97F] / . test ( name ) ) { // Hangul obj . countryCodes = [ 'kr' ] ; if ( obj . tags . name ) { obj . tags [ 'name:ko' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:ko' ] = obj . tags . brand ; } } else if ( / [\uAC00-\uD7AF] / . test ( name ) ) { // Hangul obj . countryCodes = [ 'kr' ] ; if ( obj . tags . name ) { obj . tags [ 'name:ko' ] = obj . tags . name ; } if ( obj . tags . brand ) { obj . tags [ 'brand:ko' ] = obj . tags . brand ; } } brands [ k ] = sort ( brands [ k ] ) } ) ; console . timeEnd ( colors . green ( 'brands merged' ) ) ; }
mergeBrands() takes the brand names we are keeping and updates the files under `/brands/**/*.json`
mergeBrands () takes the brand names we are keeping and updates the files under / brands / ** / * . json