From c62ea95e12d2f617ece3022b46eddcb1f7048c82 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Wed, 4 Dec 2019 11:47:10 +0800 Subject: [PATCH] fix: handle not well-formatted icon data input --- scripts/generate-file-icon-index.js | 115 ++++++++++++++------------ src/assets/icons/file-icons-index.csv | 8 +- 2 files changed, 66 insertions(+), 57 deletions(-) diff --git a/scripts/generate-file-icon-index.js b/scripts/generate-file-icon-index.js index a3fe1b3..3c36d2f 100644 --- a/scripts/generate-file-icon-index.js +++ b/scripts/generate-file-icon-index.js @@ -1,62 +1,71 @@ const languageIds = require('./language-id-ext.json') -const records = [] +function generateCSV() { + const records = [] -document.body - .querySelector('table') - .querySelectorAll('tbody tr') - .forEach(tr => { - const [name, id, dark, light] = Array.from(tr.querySelectorAll('td')) - const exts = [] - const names = [] - id.innerHTML - .replace(/|<\/sub>/g, '') - .split(', ') - .map(part => { - const match = part.match(/<(\w+)>(.*?)<\/\1>/) - if (match) { - const [, tag, content] = match - if (tag === 'strong') { - // filenames in bold - names.push(content) - } else if (tag === 'code') { - // language ids in code block - const map = Object.values(languageIds).find(({ ids }) => - (Array.isArray(ids) ? ids : [ids]).includes(content), - ) - if (map && map.exts) exts.push(map.exts) - } else { - console.warn(`Found unrecognized format`, part) // unknown + document.body + .querySelector('table') + .querySelectorAll('tbody tr') + .forEach(tr => { + const [name, id, dark, light] = Array.from(tr.querySelectorAll('td')) + const exts = [] + const names = [] + id.innerHTML + .replace(/|<\/sub>/g, '') + .split(', ') + .map(part => { + const tags = part.match(/<(\w+)>(.*?)<\/\1>/g) + if (tags) { + tags.forEach(subPart => { + const match = subPart.match(/<(\w+)>(.*?)<\/\1>/) + if (match) { + const [, tag, content] = match + if (tag === 'strong') { + // filenames in bold + names.push(content) + } else if (tag === 'code') { + // language ids in code block + const map = Object.values(languageIds).find(({ ids }) => + (Array.isArray(ids) ? ids : [ids]).includes(content), + ) + if (map && map.exts) exts.push(map.exts) + } else { + console.warn(`Found unrecognized format`, subPart, tag) // unknown + } + } + }) + } else if (part) { + // extensions are in regular fonts + exts.push(part.replace(/^\./, '')) } - } else if (part) { - // extensions are in regular fonts - exts.push(part.replace(/^\./, '')) - } + }) + records.push({ + name: name.innerText, + exts, + names, + icon: getSrc(dark.querySelector('img')) || getSrc(light.querySelector('img')), }) - records.push({ - name: name.innerText, - exts, - names, - icon: getSrc(dark.querySelector('img')) || getSrc(light.querySelector('img')), }) - }) -function getSrc(img) { - return img && img.src + function getSrc(img) { + return img && img.src + } + + const prepend = 'https://github.com/vscode-icons/vscode-icons/raw/master/icons/file_type_' + const append = '.svg?sanitize=true' + const separator = ':' + const csv = records + .map(({ name, names, exts, icon }) => + [ + name, + names.join(separator), + exts.join(separator), + // icon.replace(prepend, '').replace(append, ''), // assumption: name is equal to this + ].join(','), + ) + .join('\n') + + return csv } -const prepend = 'https://github.com/vscode-icons/vscode-icons/raw/master/icons/file_type_' -const append = '.svg?sanitize=true' -const separator = ':' -const csv = records - .map(({ name, names, exts, icon }) => - [ - name, - names.join(separator), - exts.join(separator), - // icon.replace(prepend, '').replace(append, ''), // assumption: name is equal to this - ].join(','), - ) - .join('\n') - -console.log(csv) +console.log(generateCSV()) diff --git a/src/assets/icons/file-icons-index.csv b/src/assets/icons/file-icons-index.csv index 91d3c08..553de50 100644 --- a/src/assets/icons/file-icons-index.csv +++ b/src/assets/icons/file-icons-index.csv @@ -171,8 +171,8 @@ delphi,,pas:pas django,,djt:html:html dlang,,d:d:d:d diff,,diff -docker,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerignore -docker2,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerignore +docker,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerfile:dockerignore +docker2,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerfile:dockerignore dockertest,docker-compose.test.yml, dockertest2,docker-compose.test.yml, docpad,,eco @@ -399,7 +399,7 @@ nodemon,nodemon.json, npm,.npmignore:.npmrc:package.json:package-lock.json:npm-shrinkwrap.json, nsi,,nsi:nsi:nsi:nsi nsri,.nsrirc:.nsriignore:.nsrirc.js:.nsrirc.json:.nsrirc.yaml:.nsrirc.yml:.nsrirc.config.js, -nsri-integrity,.integrity.json,,nsri-integrity +nsri-integrity,.integrity.json, nuget,,nupkg:nuspec:psmdcp nunjucks,,nunj:njs:nunjucks nuxt,nuxt.config.js:nuxt.config.ts, @@ -612,7 +612,7 @@ volt,,volt vscode,.vscodeignore:launch.json:tasks.json:vscodeignore.json, vscode2,.vscodeignore:launch.json:tasks.json:vscodeignore.json, vscode3,.vscodeignore:launch.json:tasks.json:vscodeignore.json, -vscode-insiders,.vscodeignore:launch.json:tasks.json:vscodeignore.json,,vscode-insiders +vscode-insiders,.vscodeignore:launch.json:tasks.json:vscodeignore.json, vsix,,vsix vsixmanifest,,vsixmanifest vue,,vue