var getInfoFromLanguage = (uri, info) => { log.debug("Parsing info from language"); var pattern = /ko-language\/([a-z0-9+#\-_\. ]*)\??(?:size=(\d*)|$)/i; var match = uri.match(pattern); if ( ! match) return false; info.language = match[1]; if (match.length == 3 && match[2]) info.size = match[2]; var preset = getPreset(info.language); if (preset) { log.debug("Matched Preset: " + info.language); info.ext = preset.ext; info.color = preset.color; } else // Get file extension from file associations { log.debug("Matching using file association"); var langPatterns = {}; langSvc.patternsFromLanguageName(info.language, langPatterns, {}); if (langPatterns && langPatterns.value && langPatterns.value.length) { log.debug("Using file association for ext"); info.ext = langPatterns.value[0].replace(/^\*\./, '') .split('.').pop() .substr(0,3).toUpperCase(); } else { log.debug("Using language name for ext"); info.ext = info.language.substr(0,3).toUpperCase(); } log.debug("Generating color based on language"); info.color = randomColor({luminosity: 'light'}, info.language); } return info; }
var getInfo = (uri, namespace) => { log.debug("Parsing info"); var url = sdkUrl.URL(uri); var params = sdkQuery.parse(url.search.substr(1)); var preset = getPreset("Unknown"); var info = { ext: "?", language: "Unknown", size: params.size || 14, color: preset ? preset.color : randomColor({luminosity: 'dark'},"Unknown") }; if (namespace == "language") return getInfoFromLanguage(uri, info); log.debug("Parsing info from ext"); var pattern = /(.*\.([a-z0-9]*)).*?(?:size=(\d*)|$)/i; var match = uri.match(pattern); if ( ! match) return info; var ext = match[2]; info.ext = match[2].substr(0,3).toUpperCase(); if (match.length == 4) info.size = match[3]; var lang = langSvc.suggestLanguageForFile(match[1]); if (lang) { log.debug("Found related language: " + lang); info.language = lang; var preset = getPreset(info.language); if (preset) { log.debug("Using preset for color and ext"); info.color = preset.color; info.ext = preset.ext; } else { log.debug("Generating color based on language"); info.color = randomColor({luminosity: 'dark'},info.language); } } else { log.debug("Could not find related language"); var extMapping = getExtMapping(ext); if (extMapping) { log.debug("Setting ext and color using ext mapping"); info.ext = extMapping.ext.toUpperCase(); info.color = extMapping.color; } else if (isColorWhitelisted(ext)) { log.debug("Ext is color whitelisted, generating color based on ext"); info.color = randomColor({luminosity: 'dark'},info.ext); } } return info; }