(https://gaby.dev)",
"directories": {
"output": "dist",
"app": "prebuild-src"
@@ -54,19 +56,13 @@
"artifactName": "eDEX-UI-${os}-${arch}.${ext}",
"linux": {
"target": [
- {
- "target": "AppImage",
- "arch": [
- "x64",
- "ia32"
- ]
- }
+ "AppImage"
],
"category": "System",
"icon": "media/linuxIcons"
},
"appImage": {
- "artifactName": "eDEX-UI Linux (${arch}).AppImage"
+ "artifactName": "eDEX-UI-Linux-${arch}.AppImage"
},
"mac": {
"target": [
@@ -81,7 +77,7 @@
"icon": "media/icon.icns"
},
"dmg": {
- "artifactName": "eDEX-UI MacOS Image.dmg"
+ "artifactName": "eDEX-UI-macOS-${arch}.dmg"
},
"win": {
"target": [
@@ -96,20 +92,23 @@
"icon": "media/icon.ico"
},
"nsis": {
- "artifactName": "eDEX-UI Windows Installer.exe",
- "oneClick": true,
+ "artifactName": "eDEX-UI-Windows-${arch}.exe",
+ "oneClick": false,
+ "allowToChangeInstallationDirectory": true,
"deleteAppDataOnUninstall": true
}
},
"dependencies": {
- "clean-css": "4.2.1",
- "electron": "4.0.1",
- "electron-builder": "20.38.4",
- "electron-rebuild": "1.8.2",
- "node-abi": "2.5.1",
+ "clean-css": "5.2.1",
+ "electron": "^12.1.0",
+ "electron-builder": "^22.14.5",
+ "electron-rebuild": "^2.3.5",
+ "mime-types": "^2.1.33",
+ "node-abi": "2.30.1",
"node-json-minify": "1.0.0",
- "snyk": "^1.120.0",
- "uglify-es": "3.3.9"
+ "terser": "^5.9.0"
},
- "snyk": true
+ "optionalDependencies": {
+ "cson-parser": "4.0.9"
+ }
}
diff --git a/prebuild-minify.js b/prebuild-minify.js
index 5051f0bef..64cb0f14e 100644
--- a/prebuild-minify.js
+++ b/prebuild-minify.js
@@ -1,22 +1,26 @@
const fs = require("fs");
const path = require("path");
-const UglifyJS = require("uglify-es");
+const stdout = process.stdout;
+const UglifyJS = require("terser");
const CleanCSS = require("clean-css");
JSON.minify = require("node-json-minify");
-const writeMinified = (path, data) => {
- fs.writeFile(path, data, (err) => {
- if (err) {
- console.log(path+" - ❌");
- console.log("");
- console.log("");
- throw err;
- }
- console.log(path+" - ✓");
+function writeMinified(path, data) {
+ return new Promise((res, rej) => {
+ fs.writeFile(path, data, (err) => {
+ if (err) {
+ stdout.write(" - ❌\n\n\n", () => {
+ rej(err);
+ });
+ }
+ stdout.write(" - ✓\n", () => {
+ res();
+ });
+ });
});
-};
+}
-const recursiveMinify = (dirPath) => {
+async function recursiveMinify(dirPath) {
try { var files = fs.readdirSync(dirPath); }
catch(e) { return; }
if (files.length > 0) {
@@ -25,11 +29,14 @@ const recursiveMinify = (dirPath) => {
if (fs.statSync(filePath).isFile()) {
// Do not process grid.json because it's heavy and pre-minified, and themes and keyboard files to leave them in a human-readable state
- if (filePath.endsWith(".json")) return;
+ if (filePath.endsWith(".json") && !filePath.endsWith("icons.json")) return;
+ // See #446
+ if (filePath.endsWith("file-icons-match.js")) return;
+ await stdout.write(filePath.slice(filePath.indexOf('prebuild-src/')+13)+'...');
switch (filePath.split(".").pop()) {
case "js":
- let minified = UglifyJS.minify(fs.readFileSync(filePath, {encoding: "utf-8"}), {
+ let minified = await UglifyJS.minify(fs.readFileSync(filePath, {encoding: "utf-8"}), {
compress: {
dead_code: false,
unused: false,
@@ -41,42 +48,45 @@ const recursiveMinify = (dirPath) => {
}
});
if (!minified.error) {
- writeMinified(filePath, minified.code);
- break;
- }
- else {
- console.log(filePath+" - ❌");
- console.log("");
- console.log("");
+ await writeMinified(filePath, minified.code).catch(e => {
+ throw e;
+ });
+ } else {
+ stdout.write(" - ❌\n\n\n");
throw minified.error;
}
+ break;
case "css":
let output = new CleanCSS({level:2}).minify(fs.readFileSync(filePath, {encoding:"utf-8"}));
if (output.errors.length >= 1) {
- console.log(filePath+" - ❌");
- console.log("");
- console.log("");
+ stdout.write(" - ❌\n\n\n");
throw output.errors;
} else {
- writeMinified(filePath, output.styles);
- break;
+ await writeMinified(filePath, output.styles).catch(e => {
+ throw e;
+ });
}
+ break;
case "json":
+ let out;
try {
- writeMinified(filePath, JSON.minify(fs.readFileSync(filePath, {encoding:"utf-8"})));
- break;
+ out = JSON.minify(fs.readFileSync(filePath, {encoding:"utf-8"}));
} catch(err) {
- console.log(filePath+" - ❌");
- console.log("");
- console.log("");
+ stdout.write(" - ❌\n\n\n");
throw err;
}
+ await writeMinified(filePath, out).catch(e => {
+ throw e;
+ });
+ break;
+ default:
+ stdout.write("\n");
}
} else {
- recursiveMinify(filePath);
+ await recursiveMinify(filePath);
}
}
}
-};
+}
recursiveMinify(path.join(__dirname, "prebuild-src"));
diff --git a/src/_boot.js b/src/_boot.js
index 84e990050..638ebc9b2 100644
--- a/src/_boot.js
+++ b/src/_boot.js
@@ -3,7 +3,7 @@ const {app, BrowserWindow, dialog, shell} = require("electron");
process.on("uncaughtException", e => {
signale.fatal(e);
- dialog.showErrorBox("eEDEX-UI failed to launch", e.message || "Cannot retrieve error message.");
+ dialog.showErrorBox("eDEX-UI crashed", e.message || "Cannot retrieve error message.");
if (tty) {
tty.close();
}
@@ -30,11 +30,12 @@ if (!gotLock) {
signale.time("Startup");
const electron = require("electron");
+require('@electron/remote/main').initialize()
const ipc = electron.ipcMain;
const path = require("path");
const url = require("url");
const fs = require("fs");
-const clip = require("clipboardy");
+const which = require("which");
const Terminal = require("./classes/terminal.class.js").Terminal;
ipc.on("log", (e, type, content) => {
@@ -43,6 +44,8 @@ ipc.on("log", (e, type, content) => {
var win, tty, extraTtys;
const settingsFile = path.join(electron.app.getPath("userData"), "settings.json");
+const shortcutsFile = path.join(electron.app.getPath("userData"), "shortcuts.json");
+const lastWindowStateFile = path.join(electron.app.getPath("userData"), "lastWindowState.json");
const themesDir = path.join(electron.app.getPath("userData"), "themes");
const innerThemesDir = path.join(__dirname, "assets/themes");
const kblayoutsDir = path.join(electron.app.getPath("userData"), "keyboards");
@@ -55,6 +58,11 @@ const innerFontsDir = path.join(__dirname, "assets/fonts");
if (process.env.http_proxy) delete process.env.http_proxy;
if (process.env.https_proxy) delete process.env.https_proxy;
+// Bypass GPU acceleration blocklist, trading a bit of stability for a great deal of performance, mostly on Linux
+app.commandLine.appendSwitch("ignore-gpu-blocklist");
+app.commandLine.appendSwitch("enable-gpu-rasterization");
+app.commandLine.appendSwitch("enable-video-decode");
+
// Fix userData folder not setup on Windows
try {
fs.mkdirSync(electron.app.getPath("userData"));
@@ -66,21 +74,65 @@ try {
if (!fs.existsSync(settingsFile)) {
fs.writeFileSync(settingsFile, JSON.stringify({
shell: (process.platform === "win32") ? "powershell.exe" : "bash",
+ shellArgs: '',
cwd: electron.app.getPath("userData"),
keyboard: "en-US",
theme: "tron",
+ termFontSize: 15,
audio: true,
- extraAudio: false
- }, 4));
+ audioVolume: 1.0,
+ disableFeedbackAudio: false,
+ clockHours: 24,
+ pingAddr: "1.1.1.1",
+ port: 3000,
+ nointro: false,
+ nocursor: false,
+ forceFullscreen: true,
+ allowWindowed: false,
+ excludeThreadsFromToplist: true,
+ hideDotfiles: false,
+ fsListView: false,
+ experimentalGlobeFeatures: false,
+ experimentalFeatures: false
+ }, "", 4));
+ signale.info(`Default settings written to ${settingsFile}`);
+}
+// Create default shortcuts file
+if (!fs.existsSync(shortcutsFile)) {
+ fs.writeFileSync(shortcutsFile, JSON.stringify([
+ { type: "app", trigger: "Ctrl+Shift+C", action: "COPY", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+V", action: "PASTE", enabled: true },
+ { type: "app", trigger: "Ctrl+Tab", action: "NEXT_TAB", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+Tab", action: "PREVIOUS_TAB", enabled: true },
+ { type: "app", trigger: "Ctrl+X", action: "TAB_X", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+S", action: "SETTINGS", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+K", action: "SHORTCUTS", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+F", action: "FUZZY_SEARCH", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+L", action: "FS_LIST_VIEW", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+H", action: "FS_DOTFILES", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+P", action: "KB_PASSMODE", enabled: true },
+ { type: "app", trigger: "Ctrl+Shift+I", action: "DEV_DEBUG", enabled: false },
+ { type: "app", trigger: "Ctrl+Shift+F5", action: "DEV_RELOAD", enabled: true },
+ { type: "shell", trigger: "Ctrl+Shift+Alt+Space", action: "neofetch", linebreak: true, enabled: false }
+ ], "", 4));
+ signale.info(`Default keymap written to ${shortcutsFile}`);
+}
+//Create default window state file
+if(!fs.existsSync(lastWindowStateFile)) {
+ fs.writeFileSync(lastWindowStateFile, JSON.stringify({
+ useFullscreen: true
+ }, "", 4));
+ signale.info(`Default last window state written to ${lastWindowStateFile}`);
}
// Copy default themes & keyboard layouts & fonts
+signale.pending("Mirroring internal assets...");
try {
fs.mkdirSync(themesDir);
} catch(e) {
// Folder already exists
}
-fs.readdirSync(innerThemesDir).forEach((e) => {
+fs.readdirSync(innerThemesDir).forEach(e => {
fs.writeFileSync(path.join(themesDir, e), fs.readFileSync(path.join(innerThemesDir, e), {encoding:"utf-8"}));
});
try {
@@ -88,7 +140,7 @@ try {
} catch(e) {
// Folder already exists
}
-fs.readdirSync(innerKblayoutsDir).forEach((e) => {
+fs.readdirSync(innerKblayoutsDir).forEach(e => {
fs.writeFileSync(path.join(kblayoutsDir, e), fs.readFileSync(path.join(innerKblayoutsDir, e), {encoding:"utf-8"}));
});
try {
@@ -96,10 +148,24 @@ try {
} catch(e) {
// Folder already exists
}
-fs.readdirSync(innerFontsDir).forEach((e) => {
+fs.readdirSync(innerFontsDir).forEach(e => {
fs.writeFileSync(path.join(fontsDir, e), fs.readFileSync(path.join(innerFontsDir, e)));
});
+// Version history logging
+const versionHistoryPath = path.join(electron.app.getPath("userData"), "versions_log.json");
+var versionHistory = fs.existsSync(versionHistoryPath) ? require(versionHistoryPath) : {};
+var version = app.getVersion();
+if (typeof versionHistory[version] === "undefined") {
+ versionHistory[version] = {
+ firstSeen: Date.now(),
+ lastSeen: Date.now()
+ };
+} else {
+ versionHistory[version].lastSeen = Date.now();
+}
+fs.writeFileSync(versionHistoryPath, JSON.stringify(versionHistory, 0, 2), {encoding:"utf-8"});
+
function createWindow(settings) {
signale.info("Creating window...");
@@ -120,15 +186,18 @@ function createWindow(settings) {
show: false,
resizable: true,
movable: settings.allowWindowed || false,
- fullscreen: true,
+ fullscreen: settings.forceFullscreen || false,
autoHideMenuBar: true,
frame: settings.allowWindowed || false,
backgroundColor: '#000000',
webPreferences: {
devTools: true,
+ enableRemoteModule: true,
+ contextIsolation: false,
backgroundThrottling: false,
webSecurity: true,
nodeIntegration: true,
+ nodeIntegrationInSubFrames: false,
allowRunningInsecureContent: false,
experimentalFeatures: settings.experimentalFeatures || false
}
@@ -140,39 +209,44 @@ function createWindow(settings) {
slashes: true
}));
- win.once("ready-to-show", () => {
- signale.complete("Frontend window is up!");
- win.show();
- if (!settings.allowWindowed) {
- win.setResizable(false);
- }
- });
+ signale.complete("Frontend window created!");
+ win.show();
+ if (!settings.allowWindowed) {
+ win.setResizable(false);
+ } else if (!require(lastWindowStateFile)["useFullscreen"]) {
+ win.setFullScreen(false);
+ }
signale.watch("Waiting for frontend connection...");
}
-app.on('ready', () => {
+app.on('ready', async () => {
signale.pending(`Loading settings file...`);
let settings = require(settingsFile);
+ signale.pending(`Resolving shell path...`);
+ settings.shell = await which(settings.shell).catch(e => { throw(e) });
+ signale.info(`Shell found at ${settings.shell}`);
signale.success(`Settings loaded!`);
if (!require("fs").existsSync(settings.cwd)) throw new Error("Configured cwd path does not exist.");
- let customEnv;
-
// See #366
- if (process.platform === "darwin") {
- const shellEnv = require("shell-env");
- customEnv = shellEnv.sync();
- }
+ let cleanEnv = await require("shell-env")(settings.shell).catch(e => { throw e; });
+
+ Object.assign(cleanEnv, {
+ TERM: "xterm-256color",
+ COLORTERM: "truecolor",
+ TERM_PROGRAM: "eDEX-UI",
+ TERM_PROGRAM_VERSION: app.getVersion()
+ }, settings.env);
signale.pending(`Creating new terminal process on port ${settings.port || '3000'}`);
tty = new Terminal({
role: "server",
- shell: settings.shell.split(" ")[0],
- params: settings.shell.split(" ").splice(1),
+ shell: settings.shell,
+ params: settings.shellArgs || '',
cwd: settings.cwd,
- env: customEnv || settings.env,
+ env: cleanEnv,
port: settings.port || 3000
});
signale.success(`Terminal back-end initialized!`);
@@ -193,19 +267,6 @@ app.on('ready', () => {
signale.watch("Waiting for frontend connection...");
};
- // Clipboard backend access
- ipc.on("clipboard", (e, arg) => {
- switch(arg) {
- case "read":
- clip.read().then(text => {
- e.sender.send("clipboard-reply", text);
- });
- break;
- default:
- throw new Error("Illegal clipboard access request");
- }
- });
-
// Support for multithreaded systeminformation calls
signale.pending("Starting multithreaded calls controller...");
require("./_multithread.js");
@@ -237,10 +298,10 @@ app.on('ready', () => {
signale.pending(`Creating new TTY process on port ${port}`);
let term = new Terminal({
role: "server",
- shell: settings.shell.split(" ")[0],
- params: settings.shell.split(" ").splice(1),
+ shell: settings.shell,
+ params: settings.shellArgs || '',
cwd: tty.tty._cwd || settings.cwd,
- env: settings.env,
+ env: cleanEnv,
port: port
});
signale.success(`New terminal back-end initialized at ${port}`);
@@ -249,10 +310,10 @@ app.on('ready', () => {
term.wss.close();
signale.complete(`TTY exited at ${port}`, code, signal);
extraTtys[term.port] = null;
- delete term;
+ term = null;
};
- term.onopened = () => {
- signale.success(`TTY ${port} connected to frontend`);
+ term.onopened = pid => {
+ signale.success(`TTY ${port} connected to frontend (process PID ${pid})`);
};
term.onresized = () => {};
term.ondisconnected = () => {
@@ -260,7 +321,7 @@ app.on('ready', () => {
term.close();
term.wss.close();
extraTtys[term.port] = null;
- delete term;
+ term = null;
};
extraTtys[port] = term;
@@ -291,6 +352,7 @@ app.on('web-contents-created', (e, contents) => {
e.preventDefault();
shell.openExternal(url);
});
+
// Prevent loading something else than the UI
contents.on('will-navigate', (e, url) => {
if (url !== contents.getURL()) e.preventDefault();
diff --git a/src/_multithread.js b/src/_multithread.js
index 81097cd36..54d3f498e 100644
--- a/src/_multithread.js
+++ b/src/_multithread.js
@@ -4,7 +4,10 @@ if (cluster.isMaster) {
const electron = require("electron");
const ipc = electron.ipcMain;
const signale = require("signale");
- const numCPUs = require("os").cpus().length - 1; // Leave a core available for the renderer process
+ // Also, leave a core available for the renderer process
+ const osCPUs = require("os").cpus().length - 1;
+ // See #904
+ const numCPUs = (osCPUs > 7) ? 7 : osCPUs;
const si = require("systeminformation");
@@ -45,7 +48,7 @@ if (cluster.isMaster) {
return;
}
- if (args.length > 1) {
+ if (args.length > 1 || workers.length <= 0) {
si[type](...args).then(res => {
if (e.sender) {
e.sender.send("systeminformation-reply-"+id, res);
diff --git a/src/_renderer.js b/src/_renderer.js
index f02542612..e589dd6d4 100644
--- a/src/_renderer.js
+++ b/src/_renderer.js
@@ -3,7 +3,7 @@ window.eval = global.eval = function () {
throw new Error("eval() is disabled for security reasons.");
};
// Security helper :)
-window._escapeHtml = (text) => {
+window._escapeHtml = text => {
let map = {
'&': '&',
'<': '<',
@@ -13,9 +13,21 @@ window._escapeHtml = (text) => {
};
return text.replace(/[&<>"']/g, m => {return map[m];});
};
-window._purifyCSS = (str) => {
+window._encodePathURI = uri => {
+ return encodeURI(uri).replace(/#/g, "%23");
+};
+window._purifyCSS = str => {
+ if (typeof str === "undefined") return "";
+ if (typeof str !== "string") {
+ str = str.toString();
+ }
return str.replace(/[<]/g, "");
};
+window._delay = ms => {
+ return new Promise((resolve, reject) => {
+ setTimeout(resolve, ms);
+ });
+};
// Initiate basic error handling
window.onerror = (msg, path, line, col, error) => {
@@ -25,29 +37,39 @@ window.onerror = (msg, path, line, col, error) => {
const path = require("path");
const fs = require("fs");
const electron = require("electron");
+const remote = require("@electron/remote");
const ipc = electron.ipcRenderer;
-const settingsDir = electron.remote.app.getPath("userData");
+const settingsDir = remote.app.getPath("userData");
const themesDir = path.join(settingsDir, "themes");
const keyboardsDir = path.join(settingsDir, "keyboards");
const fontsDir = path.join(settingsDir, "fonts");
const settingsFile = path.join(settingsDir, "settings.json");
+const shortcutsFile = path.join(settingsDir, "shortcuts.json");
+const lastWindowStateFile = path.join(settingsDir, "lastWindowState.json");
// Load config
window.settings = require(settingsFile);
+window.shortcuts = require(shortcutsFile);
+window.lastWindowState = require(lastWindowStateFile);
// Load CLI parameters
-if (electron.remote.process.argv.includes("--nointro")) {
- window.settings.nointro = true;
+if (remote.process.argv.includes("--nointro")) {
+ window.settings.nointroOverride = true;
} else {
- window.settings.nointro = false;
+ window.settings.nointroOverride = false;
+}
+if (electron.remote.process.argv.includes("--nocursor")) {
+ window.settings.nocursorOverride = true;
+} else {
+ window.settings.nocursorOverride = false;
}
// Retrieve theme override (hotswitch)
ipc.once("getThemeOverride", (e, theme) => {
if (theme !== null) {
window.settings.theme = theme;
- window.settings.nointro = true;
+ window.settings.nointroOverride = true;
_loadTheme(require(path.join(themesDir, window.settings.theme+".json")));
} else {
_loadTheme(require(path.join(themesDir, window.settings.theme+".json")));
@@ -58,13 +80,13 @@ ipc.send("getThemeOverride");
ipc.once("getKbOverride", (e, layout) => {
if (layout !== null) {
window.settings.keyboard = layout;
- window.settings.nointro = true;
+ window.settings.nointroOverride = true;
}
});
ipc.send("getKbOverride");
// Load UI theme
-window._loadTheme = (theme) => {
+window._loadTheme = theme => {
if (document.querySelector("style.theming")) {
document.querySelector("style.theming").remove();
@@ -84,20 +106,30 @@ window._loadTheme = (theme) => {
document.querySelector("head").innerHTML += ``;
@@ -122,6 +154,52 @@ function initGraphicalErrorHandling() {
};
}
+function waitForFonts() {
+ return new Promise(resolve => {
+ if (document.readyState !== "complete" || document.fonts.status !== "loaded") {
+ document.addEventListener("readystatechange", () => {
+ if (document.readyState === "complete") {
+ if (document.fonts.status === "loaded") {
+ resolve();
+ } else {
+ document.fonts.onloadingdone = () => {
+ if (document.fonts.status === "loaded") resolve();
+ };
+ }
+ }
+ });
+ } else {
+ resolve();
+ }
+ });
+}
+
+// A proxy function used to add multithreading to systeminformation calls - see backend process manager @ _multithread.js
+function initSystemInformationProxy() {
+ const { nanoid } = require("nanoid/non-secure");
+
+ window.si = new Proxy({}, {
+ apply: () => {throw new Error("Cannot use sysinfo proxy directly as a function")},
+ set: () => {throw new Error("Cannot set a property on the sysinfo proxy")},
+ get: (target, prop, receiver) => {
+ return function(...args) {
+ let callback = (typeof args[args.length - 1] === "function") ? true : false;
+
+ return new Promise((resolve, reject) => {
+ let id = nanoid();
+ ipc.once("systeminformation-reply-"+id, (e, res) => {
+ if (callback) {
+ args[args.length - 1](res);
+ }
+ resolve(res);
+ });
+ ipc.send("systeminformation-call", prop, id, ...args);
+ });
+ };
+ }
+ });
+}
+
// Init audio
window.audioManager = new AudioManager();
@@ -129,27 +207,14 @@ window.audioManager = new AudioManager();
electron.remote.app.focus();
let i = 0;
-if (!window.settings.nointro) {
- displayLine();
-} else {
+if (window.settings.nointro || window.settings.nointroOverride) {
initGraphicalErrorHandling();
+ initSystemInformationProxy();
document.getElementById("boot_screen").remove();
document.body.setAttribute("class", "");
- if (document.readyState !== "complete" || document.fonts.status !== "loaded") {
- document.addEventListener("readystatechange", () => {
- if (document.readyState === "complete") {
- if (document.fonts.status === "loaded") {
- initUI();
- } else {
- document.fonts.onloadingdone = () => {
- if (document.fonts.status === "loaded") initUI();
- };
- }
- }
- });
- } else {
- initUI();
- }
+ waitForFonts().then(initUI);
+} else {
+ displayLine();
}
// Startup boot log
@@ -163,15 +228,15 @@ function displayLine() {
&& fs.readFileSync("/etc/os-release").toString().includes("arch");
}
- if (log[i] === undefined) {
- setTimeout(resumeInit, 300);
+ if (typeof log[i] === "undefined") {
+ setTimeout(displayTitleScreen, 300);
return;
}
if (log[i] === "Boot Complete") {
- window.audioManager.beep2.play();
+ window.audioManager.granted.play();
} else {
- window.audioManager.beep1.play();
+ window.audioManager.stdout.play();
}
bootScreen.innerHTML += log[i]+" ";
i++;
@@ -208,63 +273,79 @@ function displayLine() {
}
// Show "logo" and background grid
-function resumeInit() {
+async function displayTitleScreen() {
let bootScreen = document.getElementById("boot_screen");
+ if (bootScreen === null) {
+ bootScreen = document.createElement("section");
+ bootScreen.setAttribute("id", "boot_screen");
+ bootScreen.setAttribute("style", "z-index: 9999999");
+ document.body.appendChild(bootScreen);
+ }
bootScreen.innerHTML = "";
- setTimeout(() => {
- document.body.setAttribute("class", "");
- setTimeout(() => {
- document.body.setAttribute("class", "solidBackground");
- setTimeout(() => {
- document.body.setAttribute("class", "");
- }, 400);
- }, 200);
-
- window.audioManager.beep4.play();
- bootScreen.setAttribute("class", "center");
- bootScreen.innerHTML = "eDEX-UI ";
- let title = document.querySelector("section > h1");
-
- setTimeout(() => {
- title.setAttribute("style", `background-color: rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});border-bottom: 5px solid rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});`);
- setTimeout(() => {
- window.audioManager.intro.play();
- title.setAttribute("style", `border: 5px solid rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});`);
- setTimeout(() => {
- // Initiate graphical error display
- initGraphicalErrorHandling();
- if (document.readyState !== "complete" || document.fonts.status !== "loaded") {
- document.addEventListener("readystatechange", () => {
- if (document.readyState === "complete") {
- if (document.fonts.status === "loaded") {
- document.getElementById("boot_screen").remove();
- initUI();
- } else {
- document.fonts.onloadingdone = () => {
- if (document.fonts.status === "loaded") {
- document.getElementById("boot_screen").remove();
- initUI();
- }
- };
- }
- }
- });
- } else {
- document.getElementById("boot_screen").remove();
- initUI();
- }
- }, 1200);
- }, 600);
- }, 300);
- }, 400);
+ window.audioManager.theme.play();
+
+ await _delay(400);
+
+ document.body.setAttribute("class", "");
+ bootScreen.setAttribute("class", "center");
+ bootScreen.innerHTML = "eDEX-UI ";
+ let title = document.querySelector("section > h1");
+
+ await _delay(200);
+
+ document.body.setAttribute("class", "solidBackground");
+
+ await _delay(100);
+
+ title.setAttribute("style", `background-color: rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});border-bottom: 5px solid rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});`);
+
+ await _delay(300);
+
+ title.setAttribute("style", `border: 5px solid rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});`);
+
+ await _delay(100);
+
+ title.setAttribute("style", "");
+ title.setAttribute("class", "glitch");
+
+ await _delay(500);
+
+ document.body.setAttribute("class", "");
+ title.setAttribute("class", "");
+ title.setAttribute("style", `border: 5px solid rgb(${window.theme.r}, ${window.theme.g}, ${window.theme.b});`);
+
+ await _delay(1000);
+ if (window.term) {
+ bootScreen.remove();
+ return true;
+ }
+ initGraphicalErrorHandling();
+ initSystemInformationProxy();
+ waitForFonts().then(() => {
+ bootScreen.remove();
+ initUI();
+ });
+}
+
+// Returns the user's desired display name
+async function getDisplayName() {
+ let user = settings.username || null;
+ if (user)
+ return user;
+
+ try {
+ user = await require("username")();
+ } catch (e) {}
+
+ return user;
}
// Create the UI's html structure and initialize the terminal client and the keyboard
-function initUI() {
+async function initUI() {
document.body.innerHTML += `
-
+
@@ -272,84 +353,78 @@ function initUI() {
PANEL
NETWORK
`;
- setTimeout(() => {
- window.audioManager.scan.play();
- document.getElementById("main_shell").setAttribute("style", "height:0%;margin-bottom:30vh;");
- setTimeout(() => {
- document.getElementById("main_shell").setAttribute("style", "margin-bottom: 30vh;");
- document.querySelector("#main_shell > h3.title").setAttribute("style", "");
- setTimeout(() => {
- document.getElementById("main_shell").setAttribute("style", "opacity: 0;");
- document.body.innerHTML += `
-
- `;
- window.keyboard = new Keyboard({
- layout: path.join(keyboardsDir, settings.keyboard+".json"),
- container: "keyboard"
- });
- setTimeout(() => {
- document.getElementById("main_shell").setAttribute("style", "");
- setTimeout(() => {
- initGreeter();
- document.getElementById("filesystem").setAttribute("style", "");
- document.getElementById("keyboard").setAttribute("style", "");
- document.getElementById("keyboard").setAttribute("class", "animation_state_1");
- setTimeout(() => {
- document.getElementById("keyboard").setAttribute("class", "animation_state_1 animation_state_2");
- setTimeout(() => {
- document.getElementById("keyboard").setAttribute("class", "");
- initMods();
- }, 1100);
- }, 100);
- }, 270);
- }, 10);
- }, 700);
- }, 500);
- }, 10);
-}
+ await _delay(10);
-// A proxy function used to add multithreading to systeminformation calls - see backend process manager @ _multithread.js
-function initSystemInformationProxy() {
- const nanoid = require("nanoid/non-secure");
+ window.audioManager.expand.play();
+ document.getElementById("main_shell").setAttribute("style", "height:0%;margin-bottom:30vh;");
- window.si = new Proxy({}, {
- apply: () => {throw new Error("Cannot use sysinfo proxy directly as a function")},
- set: () => {throw new Error("Cannot set a property on the sysinfo proxy")},
- get: (target, prop, receiver) => {
- return function(...args) {
- let callback = (typeof args[0] === "function") ? true : false;
+ await _delay(500);
- return new Promise((resolve, reject) => {
- let id = nanoid();
- ipc.once("systeminformation-reply-"+id, (e, res) => {
- if (callback) {
- callback(res);
- }
- resolve(res);
- });
- ipc.send("systeminformation-call", prop, id, ...args);
- });
- };
+ document.getElementById("main_shell").setAttribute("style", "margin-bottom: 30vh;");
+ document.querySelector("#main_shell > h3.title").setAttribute("style", "");
+
+ await _delay(700);
+
+ document.getElementById("main_shell").setAttribute("style", "opacity: 0;");
+ document.body.innerHTML += `
+
+ `;
+ window.keyboard = new Keyboard({
+ layout: path.join(keyboardsDir, settings.keyboard+".json"),
+ container: "keyboard"
+ });
+
+ await _delay(10);
+
+ document.getElementById("main_shell").setAttribute("style", "");
+
+ await _delay(270);
+
+ let greeter = document.getElementById("main_shell_greeting");
+
+ getDisplayName().then(user => {
+ if (user) {
+ greeter.innerHTML += `Welcome back, ${user} `;
+ } else {
+ greeter.innerHTML += "Welcome back";
}
});
-}
-// Create the "mods" in each column
-function initMods() {
- window.mods = {};
+ greeter.setAttribute("style", "opacity: 1;");
- initSystemInformationProxy();
+ document.getElementById("filesystem").setAttribute("style", "");
+ document.getElementById("keyboard").setAttribute("style", "");
+ document.getElementById("keyboard").setAttribute("class", "animation_state_1");
+ window.audioManager.keyboard.play();
+
+ await _delay(100);
+
+ document.getElementById("keyboard").setAttribute("class", "animation_state_1 animation_state_2");
+ await _delay(1000);
+
+ greeter.setAttribute("style", "opacity: 0;");
+
+ await _delay(100);
+
+ document.getElementById("keyboard").setAttribute("class", "");
+
+ await _delay(400);
+
+ greeter.remove();
+
+ // Initialize modules
+ window.mods = {};
// Left column
window.mods.clock = new Clock("mod_column_left");
window.mods.sysinfo = new Sysinfo("mod_column_left");
+ window.mods.hardwareInspector = new HardwareInspector("mod_column_left");
window.mods.cpuinfo = new Cpuinfo("mod_column_left");
window.mods.ramwatcher = new RAMwatcher("mod_column_left");
window.mods.toplist = new Toplist("mod_column_left");
- window.mods.clipboardButtons = new ClipboardButtons("mod_column_left");
// Right column
window.mods.netstat = new Netstat("mod_column_right");
@@ -357,10 +432,9 @@ function initMods() {
window.mods.conninfo = new Conninfo("mod_column_right");
// Fade-in animations
- document.querySelectorAll(".mod_column").forEach((e) => {
+ document.querySelectorAll(".mod_column").forEach(e => {
e.setAttribute("class", "mod_column activated");
});
-
let i = 0;
let left = document.querySelectorAll("#mod_column_left > div");
let right = document.querySelectorAll("#mod_column_right > div");
@@ -368,6 +442,7 @@ function initMods() {
if (!left[i] && !right[i]) {
clearInterval(x);
} else {
+ window.audioManager.panels.play();
if (left[i]) {
left[i].setAttribute("style", "animation-play-state: running;");
}
@@ -377,80 +452,71 @@ function initMods() {
i++;
}
}, 500);
-}
-function initGreeter() {
- let shellContainer = document.getElementById("main_shell");
- let greeter = document.getElementById("main_shell_greeting");
+ await _delay(100);
- require("systeminformation").users()
- .then((userlist) => {
- greeter.innerHTML += `Welcome back, ${userlist[0].user} `;
- })
- .catch(() => {
- greeter.innerHTML += "Welcome back";
+ // Initialize the terminal
+ let shellContainer = document.getElementById("main_shell");
+ shellContainer.innerHTML += `
+
+ MAIN SHELL
+ EMPTY
+ EMPTY
+ EMPTY
+ EMPTY
+
+ `;
+ window.term = {
+ 0: new Terminal({
+ role: "client",
+ parentId: "terminal0",
+ port: window.settings.port || 3000
})
- .then(() => {
- greeter.setAttribute("style", "opacity: 1;");
- setTimeout(() => {
- greeter.setAttribute("style", "opacity: 0;");
- setTimeout(() => {
- greeter.remove();
- setTimeout(() => {
- shellContainer.innerHTML += `
-
- MAIN SHELL
- EMPTY
- EMPTY
- EMPTY
- EMPTY
-
- `;
- window.term = {
- 0: new Terminal({
- role: "client",
- parentId: "terminal0",
- port: window.settings.port || 3000
- })
- };
- window.currentTerm = 0;
- window.term[0].onprocesschange = p => {
- document.getElementById("shell_tab0").innerText = "MAIN - "+p;
- };
- // Prevent losing hardware keyboard focus on the terminal when using touch keyboard
- window.onmouseup = (e) => {
- if (window.keyboard.linkedToTerm) window.term[window.currentTerm].term.focus();
- };
- window.term[0].term.writeln("\033[1m"+`Welcome to eDEX-UI v${electron.remote.app.getVersion()} - Electron v${process.versions.electron}`+"\033[0m");
-
- window.fsDisp = new FilesystemDisplay({
- parentId: "filesystem"
- });
+ };
+ window.currentTerm = 0;
+ window.term[0].onprocesschange = p => {
+ document.getElementById("shell_tab0").innerHTML = `MAIN - ${p}
`;
+ };
+ // Prevent losing hardware keyboard focus on the terminal when using touch keyboard
+ window.onmouseup = e => {
+ if (window.keyboard.linkedToTerm) window.term[window.currentTerm].term.focus();
+ };
+ window.term[0].term.writeln("\033[1m"+`Welcome to eDEX-UI v${electron.remote.app.getVersion()} - Electron v${process.versions.electron}`+"\033[0m");
- setTimeout(() => {
- document.getElementById("filesystem").setAttribute("style", "opacity: 1;");
- window.updateCheck = new UpdateChecker();
- }, 300);
- }, 100);
- }, 500);
- }, 1100);
+ await _delay(100);
+
+ window.fsDisp = new FilesystemDisplay({
+ parentId: "filesystem"
});
+
+ await _delay(200);
+
+ document.getElementById("filesystem").setAttribute("style", "opacity: 1;");
+
+ // Resend terminal CWD to fsDisp if we're hot reloading
+ if (window.performance.navigation.type === 1) {
+ window.term[window.currentTerm].resendCWD();
+ }
+
+ await _delay(200);
+
+ window.updateCheck = new UpdateChecker();
}
-window.themeChanger = (theme) => {
+window.themeChanger = theme => {
ipc.send("setThemeOverride", theme);
setTimeout(() => {
window.location.reload(true);
}, 100);
};
-window.remakeKeyboard = (layout) => {
+window.remakeKeyboard = layout => {
document.getElementById("keyboard").innerHTML = "";
window.keyboard = new Keyboard({
layout: path.join(keyboardsDir, layout+".json" || settings.keyboard+".json"),
@@ -459,8 +525,8 @@ window.remakeKeyboard = (layout) => {
ipc.send("setKbOverride", layout);
};
-window.focusShellTab = (number) => {
- window.audioManager.beep2.play();
+window.focusShellTab = number => {
+ window.audioManager.folder.play();
if (number !== window.currentTerm && window.term[number]) {
window.currentTerm = number;
@@ -483,11 +549,11 @@ window.focusShellTab = (number) => {
} else if (number > 0 && number <= 4 && window.term[number] !== null && typeof window.term[number] !== "object") {
window.term[number] = null;
- document.getElementById("shell_tab"+number).innerText = "LOADING...";
+ document.getElementById("shell_tab"+number).innerHTML = "LOADING...
";
ipc.send("ttyspawn", "true");
ipc.once("ttyspawn-reply", (e, r) => {
if (r.startsWith("ERROR")) {
- document.getElementById("shell_tab"+number).innerText = "ERROR";
+ document.getElementById("shell_tab"+number).innerHTML = "ERROR
";
} else if (r.startsWith("SUCCESS")) {
let port = Number(r.substr(9));
@@ -499,17 +565,18 @@ window.focusShellTab = (number) => {
window.term[number].onclose = e => {
delete window.term[number].onprocesschange;
- document.getElementById("shell_tab"+number).innerText = "EMPTY";
+ document.getElementById("shell_tab"+number).innerHTML = "EMPTY
";
document.getElementById("terminal"+number).innerHTML = "";
+ window.term[number].term.dispose();
delete window.term[number];
- window.focusShellTab(0);
+ window.useAppShortcut("PREVIOUS_TAB");
};
window.term[number].onprocesschange = p => {
- document.getElementById("shell_tab"+number).innerText = `#${number+1} - ${p}`;
+ document.getElementById("shell_tab"+number).innerHTML = `#${number+1} - ${p}
`;
};
- document.getElementById("shell_tab"+number).innerText = "::"+port;
+ document.getElementById("shell_tab"+number).innerHTML = `::${port}
`;
setTimeout(() => {
window.focusShellTab(number);
}, 500);
@@ -519,9 +586,11 @@ window.focusShellTab = (number) => {
};
// Settings editor
-window.openSettings = () => {
+window.openSettings = async () => {
+ if (document.getElementById("settingsEditor")) return;
+
// Build lists of available keyboards, themes, monitors
- let keyboards, themes, monitors;
+ let keyboards, themes, monitors, ifaces;
fs.readdirSync(keyboardsDir).forEach(kb => {
if (!kb.endsWith(".json")) return;
kb = kb.replace(".json", "");
@@ -537,6 +606,10 @@ window.openSettings = () => {
for (let i = 0; i < electron.remote.screen.getAllDisplays().length; i++) {
if (i !== window.settings.monitor) monitors += `${i} `;
}
+ let nets = await window.si.networkInterfaces();
+ nets.forEach(net => {
+ if (net.iface !== window.mods.netstat.iface) ifaces += `${net.iface} `;
+ });
// Unlink the tactile keyboard from the terminal emulator to allow filling in the settings fields
window.keyboard.detach();
@@ -555,6 +628,11 @@ window.openSettings = () => {
The program to run as a terminal emulator
+
+ shellArgs
+ Arguments to pass to the shell
+
+
cwd
Working Directory to start in
@@ -565,6 +643,11 @@ window.openSettings = () => {
Custom shell environment override
+
+ username
+ Custom username to display at boot
+
+
keyboard
On-screen keyboard layout code
@@ -581,6 +664,11 @@ window.openSettings = () => {
${themes}
+
+ termFontSize
+ Size of the terminal text in pixels
+
+
audio
Activate audio sound effects
@@ -590,11 +678,16 @@ window.openSettings = () => {
- extraAudio
- Enable extra audio FX (requires audio: true)
-
+
+ disableFeedbackAudio
+ Disable recurring feedback sound FX (input/output, mostly)
+
+ ${window.settings.disableFeedbackAudio}
+ ${!window.settings.disableFeedbackAudio}
@@ -607,6 +700,13 @@ window.openSettings = () => {
IPv4 address to test Internet connectivity
+
+ clockHours
+ Clock format (12/24 hours)
+
+ ${(window.settings.clockHours === 12) ? "12" : "24"}
+ ${(window.settings.clockHours === 12) ? "24" : "12"}
+
monitor
Which monitor to spawn the UI in (defaults to primary display)
@@ -617,16 +717,27 @@ window.openSettings = () => {
nointro
- Skip the intro boot log and logo
+ Skip the intro boot log and logo${(window.settings.nointroOverride) ? " (Currently overridden by CLI flag)" : ""}
${window.settings.nointro}
${!window.settings.nointro}
+
+ nocursor
+ Hide the mouse cursor${(window.settings.nocursorOverride) ? " (Currently overridden by CLI flag)" : ""}
+
+ ${window.settings.nocursor}
+ ${!window.settings.nocursor}
+
+
iface
Override the interface used for network monitoring
-
+
+ ${window.mods.netstat.iface}
+ ${ifaces}
+
allowWindowed
@@ -637,11 +748,43 @@ window.openSettings = () => {
- excludeSelfFromToplist
- Exclude eDEX from top processes monitoring
-
- ${window.settings.excludeSelfFromToplist}
- ${!window.settings.excludeSelfFromToplist}
+ keepGeometry
+ Try to keep a 16:9 aspect ratio in windowed mode
+
+ ${(window.settings.keepGeometry === false) ? 'false' : 'true'}
+ ${(window.settings.keepGeometry === false) ? 'true' : 'false'}
+
+
+
+ excludeThreadsFromToplist
+ Display threads in the top processes list
+
+ ${window.settings.excludeThreadsFromToplist}
+ ${!window.settings.excludeThreadsFromToplist}
+
+
+
+ hideDotfiles
+ Hide files and directories starting with a dot in file display
+
+ ${window.settings.hideDotfiles}
+ ${!window.settings.hideDotfiles}
+
+
+
+ fsListView
+ Show files in a more detailed list instead of an icon grid
+
+ ${window.settings.fsListView}
+ ${!window.settings.fsListView}
+
+
+
+ experimentalGlobeFeatures
+ Toggle experimental features for the network globe
+
+ ${window.settings.experimentalGlobeFeatures}
+ ${!window.settings.experimentalGlobeFeatures}
@@ -656,7 +799,7 @@ window.openSettings = () => {
Loaded values from memory
`,
buttons: [
- {label: "Open in External Editor", action:`electron.shell.openExternal('file://${settingsFile}')`},
+ {label: "Open in External Editor", action:`electron.shell.openPath('${settingsFile}');electronWin.minimize();`},
{label: "Save to Disk", action: "window.writeSettingsFile()"},
{label: "Reload UI", action: "window.location.reload(true);"},
{label: "Restart eDEX", action: "electron.remote.app.relaunch();electron.remote.app.quit();"}
@@ -670,22 +813,39 @@ window.openSettings = () => {
});
};
+window.writeFile = (path) => {
+ fs.writeFile(path, document.getElementById("fileEdit").value, "utf-8", () => {
+ document.getElementById("fedit-status").innerHTML = "File saved. ";
+ });
+};
+
window.writeSettingsFile = () => {
window.settings = {
shell: document.getElementById("settingsEditor-shell").value,
+ shellArgs: document.getElementById("settingsEditor-shellArgs").value,
cwd: document.getElementById("settingsEditor-cwd").value,
env: document.getElementById("settingsEditor-env").value,
+ username: document.getElementById("settingsEditor-username").value,
keyboard: document.getElementById("settingsEditor-keyboard").value,
theme: document.getElementById("settingsEditor-theme").value,
+ termFontSize: Number(document.getElementById("settingsEditor-termFontSize").value),
audio: (document.getElementById("settingsEditor-audio").value === "true"),
- extraAudio: (document.getElementById("settingsEditor-extraAudio").value === "true"),
+ audioVolume: Number(document.getElementById("settingsEditor-audioVolume").value),
+ disableFeedbackAudio: (document.getElementById("settingsEditor-disableFeedbackAudio").value === "true"),
pingAddr: document.getElementById("settingsEditor-pingAddr").value,
+ clockHours: Number(document.getElementById("settingsEditor-clockHours").value),
port: Number(document.getElementById("settingsEditor-port").value),
monitor: Number(document.getElementById("settingsEditor-monitor").value),
nointro: (document.getElementById("settingsEditor-nointro").value === "true"),
+ nocursor: (document.getElementById("settingsEditor-nocursor").value === "true"),
iface: document.getElementById("settingsEditor-iface").value,
allowWindowed: (document.getElementById("settingsEditor-allowWindowed").value === "true"),
- excludeSelfFromToplist: (document.getElementById("settingsEditor-excludeSelfFromToplist").value === "true"),
+ forceFullscreen: window.settings.forceFullscreen,
+ keepGeometry: (document.getElementById("settingsEditor-keepGeometry").value === "true"),
+ excludeThreadsFromToplist: (document.getElementById("settingsEditor-excludeThreadsFromToplist").value === "true"),
+ hideDotfiles: (document.getElementById("settingsEditor-hideDotfiles").value === "true"),
+ fsListView: (document.getElementById("settingsEditor-fsListView").value === "true"),
+ experimentalGlobeFeatures: (document.getElementById("settingsEditor-experimentalGlobeFeatures").value === "true"),
experimentalFeatures: (document.getElementById("settingsEditor-experimentalFeatures").value === "true")
};
@@ -699,94 +859,225 @@ window.writeSettingsFile = () => {
document.getElementById("settingsEditorStatus").innerText = "New values written to settings.json file at "+new Date().toTimeString();
};
-// Global keyboard shortcuts
-const globalShortcut = electron.remote.globalShortcut;
-globalShortcut.unregisterAll();
+window.toggleFullScreen = () => {
+ let useFullscreen = (electronWin.isFullScreen() ? false : true);
+ electronWin.setFullScreen(useFullscreen);
-function registerKeyboardShortcuts() {
- // Open inspector
- globalShortcut.register("CommandOrControl+Shift+i", () => {
- electron.remote.getCurrentWindow().webContents.toggleDevTools();
+ //Update settings
+ window.lastWindowState["useFullscreen"] = useFullscreen;
+
+ fs.writeFileSync(lastWindowStateFile, JSON.stringify(window.lastWindowState, "", 4));
+};
+
+// Display available keyboard shortcuts and custom shortcuts helper
+window.openShortcutsHelp = () => {
+ if (document.getElementById("settingsEditor")) return;
+
+ const shortcutsDefinition = {
+ "COPY": "Copy selected buffer from the terminal.",
+ "PASTE": "Paste system clipboard to the terminal.",
+ "NEXT_TAB": "Switch to the next opened terminal tab (left to right order).",
+ "PREVIOUS_TAB": "Switch to the previous opened terminal tab (right to left order).",
+ "TAB_X": "Switch to terminal tab X , or create it if it hasn't been opened yet.",
+ "SETTINGS": "Open the settings editor.",
+ "SHORTCUTS": "List and edit available keyboard shortcuts.",
+ "FUZZY_SEARCH": "Search for entries in the current working directory.",
+ "FS_LIST_VIEW": "Toggle between list and grid view in the file browser.",
+ "FS_DOTFILES": "Toggle hidden files and directories in the file browser.",
+ "KB_PASSMODE": "Toggle the on-screen keyboard's \"Password Mode\", which allows you to safely type sensitive information even if your screen might be recorded (disable visual input feedback).",
+ "DEV_DEBUG": "Open Chromium Dev Tools, for debugging purposes.",
+ "DEV_RELOAD": "Trigger front-end hot reload."
+ };
+
+ let appList = "";
+ window.shortcuts.filter(e => e.type === "app").forEach(cut => {
+ let action = (cut.action.startsWith("TAB_")) ? "TAB_X" : cut.action;
+
+ appList += `
+ ${(cut.enabled) ? 'YES' : 'NO'}
+
+ ${shortcutsDefinition[action]}
+ `;
});
- // Open settings
- globalShortcut.register("CommandOrControl+Shift+s", () => {
- if (!document.getElementById("settingsEditor")) {
- window.openSettings();
- }
+ let customList = "";
+ window.shortcuts.filter(e => e.type === "shell").forEach(cut => {
+ customList += `
+ ${(cut.enabled) ? 'YES' : 'NO'}
+
+
+
+
+ Enter
+
+ `;
+ });
+
+ window.keyboard.detach();
+ new Modal({
+ type: "custom",
+ title: `Available Keyboard Shortcuts (v${electron.remote.app.getVersion()}) `,
+ html: `Using either the on-screen or a physical keyboard, you can use the following shortcuts:
+
+ Emulator shortcuts
+
+
+ Enabled
+ Trigger
+ Action
+
+ ${appList}
+
+
+
+
+ Custom command shortcuts
+
+
+ Enabled
+ Trigger
+ Command
+
+ ${customList}
+
+
+ `,
+ buttons: [
+ {label: "Open Shortcuts File", action:`electron.shell.openPath('${shortcutsFile}');electronWin.minimize();`},
+ {label: "Reload UI", action: "window.location.reload(true);"},
+ ]
+ }, () => {
+ window.keyboard.attach();
+ window.term[window.currentTerm].term.focus();
});
- // Copy and paste shortcuts
+ let wrap1 = document.getElementById('shortcutsHelpAccordeon1');
+ let wrap2 = document.getElementById('shortcutsHelpAccordeon2');
- if (process.platform === "darwin") {
- // See #342, we have an actual available key on macOS to do this
- globalShortcut.register("Command+C", () => {
- window.term[window.currentTerm].clipboard.copy();
- });
- globalShortcut.register("Command+V", () => {
- window.term[window.currentTerm].clipboard.paste();
- });
- } else {
- // Use Ctrl+shift on other OSs
- globalShortcut.register("Ctrl+Shift+C", () => {
+ wrap1.addEventListener('toggle', e => {
+ wrap2.open = !wrap1.open;
+ });
+
+ wrap2.addEventListener('toggle', e => {
+ wrap1.open = !wrap2.open;
+ });
+};
+
+window.useAppShortcut = action => {
+ switch(action) {
+ case "COPY":
window.term[window.currentTerm].clipboard.copy();
- });
- globalShortcut.register("Ctrl+Shift+V", () => {
+ return true;
+ case "PASTE":
window.term[window.currentTerm].clipboard.paste();
- });
+ return true;
+ case "NEXT_TAB":
+ if (window.term[window.currentTerm+1]) {
+ window.focusShellTab(window.currentTerm+1);
+ } else if (window.term[window.currentTerm+2]) {
+ window.focusShellTab(window.currentTerm+2);
+ } else if (window.term[window.currentTerm+3]) {
+ window.focusShellTab(window.currentTerm+3);
+ } else if (window.term[window.currentTerm+4]) {
+ window.focusShellTab(window.currentTerm+4);
+ } else {
+ window.focusShellTab(0);
+ }
+ return true;
+ case "PREVIOUS_TAB":
+ let i = window.currentTerm || 4;
+ if (window.term[i] && i !== window.currentTerm) {
+ window.focusShellTab(i);
+ } else if (window.term[i-1]) {
+ window.focusShellTab(i-1);
+ } else if (window.term[i-2]) {
+ window.focusShellTab(i-2);
+ } else if (window.term[i-3]) {
+ window.focusShellTab(i-3);
+ } else if (window.term[i-4]) {
+ window.focusShellTab(i-4);
+ }
+ return true;
+ case "TAB_1":
+ window.focusShellTab(0);
+ return true;
+ case "TAB_2":
+ window.focusShellTab(1);
+ return true;
+ case "TAB_3":
+ window.focusShellTab(2);
+ return true;
+ case "TAB_4":
+ window.focusShellTab(3);
+ return true;
+ case "TAB_5":
+ window.focusShellTab(4);
+ return true;
+ case "SETTINGS":
+ window.openSettings();
+ return true;
+ case "SHORTCUTS":
+ window.openShortcutsHelp();
+ return true;
+ case "FUZZY_SEARCH":
+ window.activeFuzzyFinder = new FuzzyFinder();
+ return true;
+ case "FS_LIST_VIEW":
+ window.fsDisp.toggleListview();
+ return true;
+ case "FS_DOTFILES":
+ window.fsDisp.toggleHidedotfiles();
+ return true;
+ case "KB_PASSMODE":
+ window.keyboard.togglePasswordMode();
+ return true;
+ case "DEV_DEBUG":
+ electron.remote.getCurrentWindow().webContents.toggleDevTools();
+ return true;
+ case "DEV_RELOAD":
+ window.location.reload(true);
+ return true;
+ default:
+ console.warn(`Unknown "${action}" app shortcut action`);
+ return false;
}
+};
- // Switch tabs
- // Next
- globalShortcut.register("CommandOrControl+Tab", () => {
- if (window.term[window.currentTerm+1]) {
- window.focusShellTab(window.currentTerm+1);
- } else if (window.term[window.currentTerm+2]) {
- window.focusShellTab(window.currentTerm+2);
- } else if (window.term[window.currentTerm+3]) {
- window.focusShellTab(window.currentTerm+3);
- } else if (window.term[window.currentTerm+4]) {
- window.focusShellTab(window.currentTerm+4);
+// Global keyboard shortcuts
+const globalShortcut = electron.remote.globalShortcut;
+globalShortcut.unregisterAll();
+
+window.registerKeyboardShortcuts = () => {
+ window.shortcuts.forEach(cut => {
+ if (!cut.enabled) return;
+
+ if (cut.type === "app") {
+ if (cut.action === "TAB_X") {
+ for (let i = 1; i <= 5; i++) {
+ let trigger = cut.trigger.replace("X", i);
+ let dfn = () => { window.useAppShortcut(`TAB_${i}`) };
+ globalShortcut.register(trigger, dfn);
+ }
+ } else {
+ globalShortcut.register(cut.trigger, () => {
+ window.useAppShortcut(cut.action);
+ });
+ }
+ } else if (cut.type === "shell") {
+ globalShortcut.register(cut.trigger, () => {
+ let fn = (cut.linebreak) ? "writelr" : "write";
+ window.term[window.currentTerm][fn](cut.action);
+ });
} else {
- window.focusShellTab(0);
- }
- });
- // Previous
- globalShortcut.register("CommandOrControl+Shift+Tab", () => {
- if (window.term[window.currentTerm-1]) {
- window.focusShellTab(window.currentTerm-1);
- } else if (window.term[window.currentTerm-2]) {
- window.focusShellTab(window.currentTerm-2);
- } else if (window.term[window.currentTerm-3]) {
- window.focusShellTab(window.currentTerm-3);
- } else if (window.term[window.currentTerm-4]) {
- window.focusShellTab(window.currentTerm-4);
- } else if (window.term[4]){
- window.focusShellTab(4);
+ console.warn(`${cut.trigger} has unknown type`);
}
});
- // By tab number
- globalShortcut.register("CommandOrControl+1", () => {
- window.focusShellTab(0);
- });
- globalShortcut.register("CommandOrControl+2", () => {
- window.focusShellTab(1);
- });
- globalShortcut.register("CommandOrControl+3", () => {
- window.focusShellTab(2);
- });
- globalShortcut.register("CommandOrControl+4", () => {
- window.focusShellTab(3);
- });
- globalShortcut.register("CommandOrControl+5", () => {
- window.focusShellTab(4);
- });
-}
-registerKeyboardShortcuts();
+};
+window.registerKeyboardShortcuts();
// See #361
window.addEventListener("focus", () => {
- registerKeyboardShortcuts();
+ window.registerKeyboardShortcuts();
});
window.addEventListener("blur", () => {
@@ -794,10 +1085,13 @@ window.addEventListener("blur", () => {
});
// Prevent showing menu, exiting fullscreen or app with keyboard shortcuts
-window.addEventListener("keydown", e => {
+document.addEventListener("keydown", e => {
if (e.key === "Alt") {
e.preventDefault();
}
+ if (e.code.startsWith("Alt") && e.ctrlKey && e.shiftKey) {
+ e.preventDefault();
+ }
if (e.key === "F11" && !settings.allowWindowed) {
e.preventDefault();
}
@@ -811,13 +1105,13 @@ window.addEventListener("keydown", e => {
// Fix #265
window.addEventListener("keyup", e => {
- if (e.key === "F4" && e.altKey === true) {
+ if (require("os").platform() === "win32" && e.key === "F4" && e.altKey === true) {
electron.remote.app.quit();
}
});
// Fix double-tap zoom on touchscreens
-require('electron').webFrame.setVisualZoomLevelLimits(1, 1);
+electron.webFrame.setVisualZoomLevelLimits(1, 1);
// Resize terminal with window
window.onresize = () => {
@@ -827,3 +1121,32 @@ window.onresize = () => {
}
}
};
+
+// See #413
+window.resizeTimeout = null;
+let electronWin = electron.remote.getCurrentWindow();
+electronWin.on("resize", () => {
+ if (settings.keepGeometry === false) return;
+ clearTimeout(window.resizeTimeout);
+ window.resizeTimeout = setTimeout(() => {
+ let win = electron.remote.getCurrentWindow();
+ if (win.isFullScreen()) return false;
+ if (win.isMaximized()) {
+ win.unmaximize();
+ win.setFullScreen(true);
+ return false;
+ }
+
+ let size = win.getSize();
+
+ if (size[0] >= size[1]) {
+ win.setSize(size[0], parseInt(size[0] * 9 / 16));
+ } else {
+ win.setSize(size[1], parseInt(size[1] * 9 / 16));
+ }
+ }, 100);
+});
+
+electronWin.on("leave-full-screen", () => {
+ electron.remote.getCurrentWindow().setSize(960, 540);
+});
diff --git a/src/assets/audio/alarm.wav b/src/assets/audio/alarm.wav
old mode 100755
new mode 100644
index 2aac4836a..30f7a4aa7
Binary files a/src/assets/audio/alarm.wav and b/src/assets/audio/alarm.wav differ
diff --git a/src/assets/audio/beep1.wav b/src/assets/audio/beep1.wav
deleted file mode 100644
index a1c428365..000000000
Binary files a/src/assets/audio/beep1.wav and /dev/null differ
diff --git a/src/assets/audio/beep2.wav b/src/assets/audio/beep2.wav
deleted file mode 100755
index 0c18121f4..000000000
Binary files a/src/assets/audio/beep2.wav and /dev/null differ
diff --git a/src/assets/audio/beep3.wav b/src/assets/audio/beep3.wav
deleted file mode 100644
index 7969e0730..000000000
Binary files a/src/assets/audio/beep3.wav and /dev/null differ
diff --git a/src/assets/audio/beep4.wav b/src/assets/audio/beep4.wav
deleted file mode 100755
index beb6371b1..000000000
Binary files a/src/assets/audio/beep4.wav and /dev/null differ
diff --git a/src/assets/audio/beep5.wav b/src/assets/audio/beep5.wav
deleted file mode 100755
index beb6371b1..000000000
Binary files a/src/assets/audio/beep5.wav and /dev/null differ
diff --git a/src/assets/audio/denied.wav b/src/assets/audio/denied.wav
new file mode 100644
index 000000000..223f6b96f
Binary files /dev/null and b/src/assets/audio/denied.wav differ
diff --git a/src/assets/audio/dismiss.wav b/src/assets/audio/dismiss.wav
deleted file mode 100755
index cf9261e75..000000000
Binary files a/src/assets/audio/dismiss.wav and /dev/null differ
diff --git a/src/assets/audio/error.wav b/src/assets/audio/error.wav
new file mode 100644
index 000000000..841104758
Binary files /dev/null and b/src/assets/audio/error.wav differ
diff --git a/src/assets/audio/expand.wav b/src/assets/audio/expand.wav
new file mode 100644
index 000000000..644e90eb9
Binary files /dev/null and b/src/assets/audio/expand.wav differ
diff --git a/src/assets/audio/folder.wav b/src/assets/audio/folder.wav
new file mode 100644
index 000000000..04386e9e7
Binary files /dev/null and b/src/assets/audio/folder.wav differ
diff --git a/src/assets/audio/granted.wav b/src/assets/audio/granted.wav
new file mode 100644
index 000000000..2afebbd78
Binary files /dev/null and b/src/assets/audio/granted.wav differ
diff --git a/src/assets/audio/info.wav b/src/assets/audio/info.wav
old mode 100755
new mode 100644
index 2be82bc69..ccdf9285a
Binary files a/src/assets/audio/info.wav and b/src/assets/audio/info.wav differ
diff --git a/src/assets/audio/intro.wav b/src/assets/audio/intro.wav
deleted file mode 100755
index f523651d0..000000000
Binary files a/src/assets/audio/intro.wav and /dev/null differ
diff --git a/src/assets/audio/keyboard.wav b/src/assets/audio/keyboard.wav
new file mode 100644
index 000000000..8d2236e5d
Binary files /dev/null and b/src/assets/audio/keyboard.wav differ
diff --git a/src/assets/audio/panels.wav b/src/assets/audio/panels.wav
new file mode 100644
index 000000000..33a936c0d
Binary files /dev/null and b/src/assets/audio/panels.wav differ
diff --git a/src/assets/audio/ping.wav b/src/assets/audio/ping.wav
deleted file mode 100755
index 03dc461af..000000000
Binary files a/src/assets/audio/ping.wav and /dev/null differ
diff --git a/src/assets/audio/pingFailed.wav b/src/assets/audio/pingFailed.wav
deleted file mode 100644
index 237179deb..000000000
Binary files a/src/assets/audio/pingFailed.wav and /dev/null differ
diff --git a/src/assets/audio/scan.wav b/src/assets/audio/scan.wav
old mode 100755
new mode 100644
index fbfdc56ea..01d98741d
Binary files a/src/assets/audio/scan.wav and b/src/assets/audio/scan.wav differ
diff --git a/src/assets/audio/stdin.wav b/src/assets/audio/stdin.wav
new file mode 100644
index 000000000..da709883b
Binary files /dev/null and b/src/assets/audio/stdin.wav differ
diff --git a/src/assets/audio/stdout.wav b/src/assets/audio/stdout.wav
new file mode 100644
index 000000000..9c1ee31a6
Binary files /dev/null and b/src/assets/audio/stdout.wav differ
diff --git a/src/assets/audio/theme.wav b/src/assets/audio/theme.wav
new file mode 100644
index 000000000..08a522a34
Binary files /dev/null and b/src/assets/audio/theme.wav differ
diff --git a/src/assets/css/boot_screen.css b/src/assets/css/boot_screen.css
index f16d08aa8..c79b4ddcd 100644
--- a/src/assets/css/boot_screen.css
+++ b/src/assets/css/boot_screen.css
@@ -30,4 +30,77 @@ section#boot_screen h1 {
padding-right: 2vh;
padding-left: 1.5vh;
background-color: transparent;
+
+ opacity: 0;
+ animation-name: fadeInTitle;
+ animation-duration: 300ms;
+ animation-timing-function: linear;
+ animation-fill-mode: forwards;
+ animation-iteration-count: 1;
+}
+
+section#boot_screen h1.glitch {
+ border: none;
+ color: transparent;
+}
+
+@keyframes fadeInTitle {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+section#boot_screen h1::before {
+ content: "eDEX-UI";
+ display: block;
+ transform: translateY(100%) translateX(-2%);
+ clip-path: polygon(100% 0%, 100% 40%, 0% 40%, 0% 0%);
+ color: rgba(var(--color_r), var(--color_g), var(--color_b), 0.8);
+
+ animation-name: derezzer_top;
+ animation-duration: 50ms;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate-reverse;
+ animation-play-state: paused;
+ height: 0px;
+ opacity: 0;
+}
+
+section#boot_screen h1.glitch::before {
+ height: auto;
+ opacity: 1;
+ animation-play-state: running;
+}
+
+@keyframes derezzer_top {
+ from {transform: translateY(100%) translateX(-1%);}
+ to {transform: translateY(100%) translateX(-5%);}
+}
+
+section#boot_screen h1::after {
+ content: "eDEX-UI";
+ display: block;
+ transform: translateY(-100%) translateX(2%);
+ clip-path: polygon(100% 40%, 100% 100%, 0% 100%, 0% 40%);
+ color: rgba(var(--color_r), var(--color_g), var(--color_b), 0.9);
+
+ animation-name: derezzer_bottom;
+ animation-duration: 50ms;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate-reverse;
+ animation-play-state: paused;
+ height: 0px;
+ opacity: 0;
+}
+
+section#boot_screen h1.glitch::after {
+ height: auto;
+ opacity: 1;
+ animation-play-state: running;
+}
+
+@keyframes derezzer_bottom {
+ from {transform: translateY(-100%) translateX(1%);}
+ to {transform: translateY(-100%) translateX(3%);}
}
diff --git a/src/assets/css/extra_ratios.css b/src/assets/css/extra_ratios.css
index 70588e11e..62004708c 100644
--- a/src/assets/css/extra_ratios.css
+++ b/src/assets/css/extra_ratios.css
@@ -86,7 +86,7 @@
}
}
-@media (aspect-ratio: 5/4) {
+@media (aspect-ratio: 5/4), (aspect-ratio: 4/3) {
section#filesystem {
display: none;
}
diff --git a/src/assets/css/filesystem.css b/src/assets/css/filesystem.css
index 411357a65..d8e198f0c 100644
--- a/src/assets/css/filesystem.css
+++ b/src/assets/css/filesystem.css
@@ -3,6 +3,7 @@ section#filesystem {
top: -0.925vh;
width: 43vw;
height: 30vh;
+ margin-right: 0.5vw;
opacity: 0;
transition: opacity .5s cubic-bezier(0.4, 0, 1, 1);
@@ -13,6 +14,10 @@ section#filesystem > h3.title {
padding-right: 0;
}
+section#filesystem.hideDotfiles > h3.title > p#fs_disp_title_dir::before {
+ content: "dotfiles hidden - ";
+}
+
h2#fs_disp_error {
font-weight: bold;
text-align: center;
@@ -67,10 +72,20 @@ div#fs_disp_container > *.hidden {
opacity: 0.7;
}
+section#filesystem.hideDotfiles > div#fs_disp_container > *.hidden {
+ display: none;
+}
+
div#fs_disp_container > * > svg {
width: 5vh;
}
+/* Add padding around non-edex icons */
+div#fs_disp_container > * > svg:not([viewBox="0 0 24 24"]) {
+ padding: 0.5vh;
+ box-sizing: border-box;
+}
+
div#fs_disp_container > * > h3 {
font-size: 1.3vh;
max-width: 100%;
@@ -83,18 +98,69 @@ div#fs_disp_container > * > h3 {
overflow: hidden;
}
+section#filesystem:not(.list-view) > div#fs_disp_container > div > h4 {
+ display: none;
+}
+
+div#fs_disp_container.disks > div > h4 {
+ display: none;
+}
+
+section#filesystem.list-view > div#fs_disp_container {
+ grid-template-columns: 1fr;
+ grid-auto-rows: 2vh;
+ grid-gap: 0.5vh;
+ padding-right: 0.5vh;
+}
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > * {
+ width: auto;
+ height: 2vh;
+ flex-direction: row;
+ justify-content: flex-start;
+}
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > svg {
+ height: 2vh;
+ margin: 0;
+ width: auto;
+ margin-right: 2%;
+}
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h3 {
+ max-height: unset;
+ padding-top: .2vh;
+ text-align: left;
+ width: 32%;
+}
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4 {
+ font-size: 1.3vh;
+ font-weight: normal;
+ padding-top: .2vh;
+ text-align: right;
+ overflow: hidden;
+}
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(1) { width: 15%; }
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(2) { width: 10%; }
+
+section#filesystem.list-view > div#fs_disp_container:not(.disks) > div > h4:nth-of-type(3) { width: 38%; }
+
div#fs_disp_container.disks {
display: flex;
align-items: center;
justify-content: space-evenly;
border: 0.4vh double rgba(var(--color_r), var(--color_g), var(--color_b), 0.8);
+ flex-wrap: wrap;
}
div#fs_disp_container.disks > * {
width: auto;
max-width: 8vw;
}
-div.fs_disp_showDisks > svg, div.fs_disp_up > svg {
+section#filesystem:not(.list-view) div.fs_disp_showDisks > svg, section#filesystem:not(.list-view) div.fs_disp_up > svg {
width: 4vh !important;
margin-bottom: 0.5vh;
margin-top: 0.5vh;
@@ -172,6 +238,16 @@ div#fs_space_bar > progress::after {
background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.8);
}
+div#fs_space_bar > progress:not([value])::after {
+ animation: space_bar_working 1.7s ease-in-out alternate infinite;
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 1);
+}
+
+@keyframes space_bar_working {
+ 0% { right: 0%; }
+ 100% { right: 70%; }
+}
+
div#fs_space_bar > progress::-webkit-progress-bar {
background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.4);
height: .7vh;
@@ -186,3 +262,27 @@ div#fs_space_bar > progress::-webkit-progress-value {
bottom: .7vh;
transition: width .5s cubic-bezier(0.4, 0, 1, 1);
}
+
+.pdf_container {
+ text-align: center;
+ background: var(--color_light_black);
+ color: rgb(var(--color_r), var(--color_g), var(--color_b));
+ border: 0.15vh solid rgb(var(--color_r), var(--color_g), var(--color_b));
+ padding: 0.4vh 0.2vh;
+ font-size: 1.4vh;
+ resize: none;
+ overflow: auto;
+ width: 50vw;
+ height: 50vh;
+}
+
+.pdf_options button {
+ width: 40px;
+ height: 40px;
+ padding: 5px;
+}
+
+.pdf_options span {
+ margin-left: 1.5vh;
+ font-size: 24px;
+}
\ No newline at end of file
diff --git a/src/assets/css/keyboard.css b/src/assets/css/keyboard.css
index 008ff581e..73b1dfbc4 100644
--- a/src/assets/css/keyboard.css
+++ b/src/assets/css/keyboard.css
@@ -2,11 +2,16 @@ section#keyboard {
display: flex;
flex-direction: column;
align-items: center;
- width: 56vw;
+ width: 55.5vw;
position: relative;
top: -0.925vh;
}
+section#keyboard[data-password-mode="true"] {
+ opacity: 0.5 !important;
+ cursor: none !important;
+}
+
div.keyboard_row {
display: flex;
flex-direction: row;
@@ -65,12 +70,12 @@ div.keyboard_key {
cursor: pointer;
}
-div.keyboard_key:active, div.keyboard_key.active {
+section#keyboard:not([data-password-mode="true"]) div.keyboard_key:active, section#keyboard:not([data-password-mode="true"]) div.keyboard_key.active {
border: 0.18vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.0);
background-color: rgba(var(--color_r), var(--color_g), var(--color_b), 1);
}
-div.keyboard_key.blink {
+section#keyboard:not([data-password-mode="true"]) div.keyboard_key.blink {
animation-name: blink;
animation-duration: .5s;
animation-iteration-count: infinite;
@@ -104,6 +109,14 @@ div.keyboard_row:last-child > .keyboard_key:nth-last-child(-n+3) > * {
font-size: 2.4vh;
}
+div.keyboard_key > svg {
+ width: calc(100% - 1vh);
+ height: calc(100% - 1vh);
+ top: .5vh !important;
+ opacity: 1 !important;
+ fill: rgb(var(--color_r), var(--color_g), var(--color_b));
+}
+
div.keyboard_key > *:not(h1) {
margin: 0vh;
font-size: 1.67vh;
diff --git a/src/assets/css/main.css b/src/assets/css/main.css
index 36231bcdc..8d1b33b89 100644
--- a/src/assets/css/main.css
+++ b/src/assets/css/main.css
@@ -6,7 +6,6 @@ html, body {
overflow: hidden;
}
body {
- cursor: default !important;
user-select: none !important;
padding-top: 1.85vh;
color: rgb(var(--color_r), var(--color_g), var(--color_b));
@@ -51,6 +50,7 @@ section > h3.title:first-child > p {
}
section > h3.title:first-child > p:last-child {
text-align: right;
+ white-space: nowrap;
}
section > h3.title:first-child::before {
content: "";
diff --git a/src/assets/css/main_shell.css b/src/assets/css/main_shell.css
index 5709f881b..18d8b4bef 100644
--- a/src/assets/css/main_shell.css
+++ b/src/assets/css/main_shell.css
@@ -2,8 +2,12 @@ section#main_shell {
width: 65%;
height: 60.3%;
padding: 0.74vh;
- border: 0.18vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
- border-radius: 0.278vh;
+ /* border: 0.18vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.5); */
+ /* border-radius: 0.278vh; */
+
+ --aug-border: 0.18vh;
+ --aug-border-bg: rgb(var(--color_r), var(--color_g), var(--color_b));
+ --aug-border-opacity: 0.5;
display: flex;
flex-direction: column;
@@ -11,7 +15,7 @@ section#main_shell {
justify-content: flex-start;
overflow: hidden;
- transition: width .5s cubic-bezier(0.4, 0, 1, 1), height .5s cubic-bezier(0.4, 0, 1, 1);
+ transition: width .5s cubic-bezier(0.85, 0.5, 0.85, 0.5), height .5s cubic-bezier(0.85, 0.5, 0.85, 0.5);
}
h1#main_shell_greeting {
@@ -68,6 +72,11 @@ ul#main_shell_tabs > li {
box-sizing: border-box;
background: var(--color_light_black);
+ transform: skewX(35deg);
+}
+ul#main_shell_tabs > li > p {
+ margin: 0;
+ transform: skewX(-35deg);
}
ul#main_shell_tabs > li:not(:first-child) {
border-left: 0.18vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
@@ -77,6 +86,8 @@ ul#main_shell_tabs > li.active {
background: rgb(var(--color_r), var(--color_g), var(--color_b));
color: var(--color_light_black);
font-weight: bold;
+ transform: skewX(35deg) scale(1.2);
+ z-index: -1;
}
div#main_shell_innercontainer, div#main_shell_innercontainer pre {
@@ -118,6 +129,7 @@ div#main_shell_innercontainer pre#terminal4 {
left: 0;
top: 0;
bottom: 0;
+ padding-bottom: 10px;
}
.xterm {
diff --git a/src/assets/css/media_player.css b/src/assets/css/media_player.css
new file mode 100644
index 000000000..7eb9dbebc
--- /dev/null
+++ b/src/assets/css/media_player.css
@@ -0,0 +1,97 @@
+.media_container[data-fullscreen=true] .media {
+ height: 95%;
+ width: 100%;
+ max-width: none;
+ max-height: none;
+}
+
+.media_controls {
+ border: 2px solid rgb(var(--color_r), var(--color_g), var(--color_b));
+ background: var(--color_light_black);
+}
+
+.media_controls>div {
+ text-align: center;
+ display: inline-block;
+ vertical-align: middle;
+ padding-left: 0.1em;
+ padding-right: 0.1em;
+}
+
+.media_controls .media_button {
+ font-size: 1.5em;
+ height: 1em;
+ width: 1em;
+}
+
+.media_controls .media_button:hover {
+ cursor: pointer;
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
+}
+
+.media_controls .media_time {
+ margin-right: 2vw;
+ width: 4vw;
+}
+
+.media_controls .volume_icon {
+ font-size: 1.5em;
+ height: 1em;
+ width: 1em;
+}
+
+.media_controls .volume {
+ height: 2vh;
+ z-index: 100;
+ width: 5vw;
+ cursor: pointer;
+}
+
+.media_controls .volume_bkg {
+ position: absolute;
+ border-style: solid;
+ border-width: 0 0 2vh 5vw;
+ border-color: transparent transparent rgba(var(--color_r), var(--color_g), var(--color_b), 0.7) transparent;
+}
+
+.media_controls .volume_bar {
+ position: absolute;
+ clip: rect(0px, 5vw, 2vh, 0px);
+ width: 5vw;
+ border-style: solid;
+ border-width: 0 0 2vh 5vw;
+ border-color: transparent transparent rgb(var(--color_r), var(--color_g), var(--color_b)) transparent;
+}
+
+.fs {
+ float: right;
+}
+
+.media_controls .progress_container {
+ min-width: 20vw;
+}
+
+.media_controls .progress {
+ display: block;
+ cursor: pointer;
+ width: 100%;
+ background-color: rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
+ height: 5px;
+}
+
+.media_controls .progress_bar {
+ width: 0%;
+ height: 100%;
+ display: block;
+ background-color: rgb(var(--color_r), var(--color_g), var(--color_b));
+}
+
+.fullscreen_hidden {
+ visibility: hidden;
+ opacity: 0;
+ transition: visibility 0s 2s, opacity 2s linear;
+}
+
+.volume_icon:hover {
+ cursor: pointer;
+}
diff --git a/src/assets/css/mod_clipboardButtons.css b/src/assets/css/mod_clipboardButtons.css
deleted file mode 100644
index f662bb976..000000000
--- a/src/assets/css/mod_clipboardButtons.css
+++ /dev/null
@@ -1,63 +0,0 @@
-div#mod_clipboardButtons {
- border-top: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
- font-family: var(--font_main_light);
- letter-spacing: 0.092vh;
- padding: 0.645vh 0vh;
- display: flex;
-}
-
-div#mod_clipboardButtons::before {
- content: "";
- border-left: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
- align-self: flex-start;
- position: relative;
- left: -0.092vh;
- top: -1.111vh;
- height: 0.833vh;
-}
-
-div#mod_clipboardButtons::after {
- content: "";
- border-right: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
- position: relative;
- right: -0.092vh;
- top: -1.111vh;
- height: 0.833vh;
-}
-
-div#mod_clipboardButtons_inner {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: space-evenly;
- flex-wrap: wrap;
- width: 100%;
-}
-
-div#mod_clipboardButtons h1 {
- font-size: 1.48vh;
- margin: 0vh;
- margin-bottom: -1vh;
- width: 98%;
-}
-
-div#mod_clipboardButtons_inner div {
- margin-top: 1.5vh;
- background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.1);
- height: 3.2vh;
- width: 42%;
- display: flex;
- align-items: center;
- justify-content: center;
- box-sizing: border-box;
- border: 2px solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
- border-radius: 2px;
- font-family: var(--font_main);
- font-weight: bold;
- font-size: 1.5vh;
- cursor: pointer;
-}
-
-div#mod_clipboardButtons_inner div:active {
- background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.8);
-}
diff --git a/src/assets/css/mod_clock.css b/src/assets/css/mod_clock.css
index 427a308cd..964277ba9 100644
--- a/src/assets/css/mod_clock.css
+++ b/src/assets/css/mod_clock.css
@@ -44,3 +44,7 @@ div#mod_clock em {
margin: 0vh 0.3vh;
width: 2.5vh;
}
+
+div#mod_clock.mod_clock_twelve h1 span:last-child {
+ font-size: 1.5vh;
+}
diff --git a/src/assets/css/mod_fuzzyFinder.css b/src/assets/css/mod_fuzzyFinder.css
new file mode 100644
index 000000000..dc4af21a4
--- /dev/null
+++ b/src/assets/css/mod_fuzzyFinder.css
@@ -0,0 +1,37 @@
+input#fuzzyFinder {
+ width: 100%;
+ background: var(--color_light_black);
+ color: rgb(var(--color_r), var(--color_g), var(--color_b));
+ border: 0.15vh solid rgb(var(--color_r), var(--color_g), var(--color_b));
+ padding: 0.4vh 0.2vh;
+ font-size: 1.4vh;
+ box-sizing: border-box;
+ margin-bottom: 1.5vh;
+}
+
+input#fuzzyFinder:active, input#fuzzyFinder:focus {
+ outline: none !important;
+ background: rgb(var(--color_r), var(--color_g), var(--color_b));
+ color: var(--color_light_black);
+}
+
+ul#fuzzyFinder-results {
+ padding: 0;
+}
+
+ul#fuzzyFinder-results li {
+ display: block;
+ min-width: 50vw;
+ font-family: var(--font_main);
+ background: var(--color_light_black);
+ color: rgb(var(--color_r), var(--color_g), var(--color_b));
+ height: 1.6vh;
+ font-size: 1.5vh;
+ padding: 0.2vh 0.4vh;
+ padding-top: 0.4vh;
+}
+
+ul#fuzzyFinder-results li.fuzzyFinderMatchSelected {
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.75);
+ color: var(--color_light_black);
+}
diff --git a/src/assets/css/mod_hardwareInspector.css b/src/assets/css/mod_hardwareInspector.css
new file mode 100644
index 000000000..84333e366
--- /dev/null
+++ b/src/assets/css/mod_hardwareInspector.css
@@ -0,0 +1,49 @@
+div#mod_hardwareInspector {
+ border-top: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
+ font-family: var(--font_main_light);
+ letter-spacing: 0.092vh;
+ padding: 0.645vh 0vh;
+ display: flex;
+}
+
+div#mod_hardwareInspector::before {
+ content: "";
+ border-left: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
+ align-self: flex-start;
+ position: relative;
+ left: -0.092vh;
+ top: -1.111vh;
+ height: 0.833vh;
+}
+
+div#mod_hardwareInspector::after {
+ content: "";
+ border-right: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
+ position: relative;
+ right: -0.092vh;
+ top: -1.111vh;
+ height: 0.833vh;
+}
+
+div#mod_hardwareInspector_inner {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-evenly;
+ flex-wrap: wrap;
+ width: 100%;
+}
+
+div#mod_hardwareInspector_inner > div {
+ text-align: left;
+}
+
+div#mod_hardwareInspector_inner > div > * {
+ font-size: 1.3vh;
+ line-height: 1.5vh;
+ margin: 0vh;
+}
+
+div#mod_hardwareInspector_inner > div > h2 {
+ opacity: 0.5;
+}
diff --git a/src/assets/css/mod_processlist.css b/src/assets/css/mod_processlist.css
new file mode 100644
index 000000000..de9b29bb3
--- /dev/null
+++ b/src/assets/css/mod_processlist.css
@@ -0,0 +1,52 @@
+table#processContainer {
+ display: block;
+ max-height: 60vh;
+ overflow: auto;
+}
+
+table#processContainer td.header {
+ font-weight: bold;
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.6);
+ color: var(--color_light_black);
+ text-align: center;
+}
+
+table#processContainer td.header:hover {
+ cursor: pointer;
+}
+
+table#processContainer td.pid {
+ width: 5vw;
+}
+
+table#processContainer td.name {
+ width: 12vw;
+}
+
+table#processContainer td.user {
+ width: 7vw;
+}
+
+table#processContainer td.cpu {
+ width: 3vw;
+ text-align: center;
+}
+
+table#processContainer td.mem{
+ width: 3vw;
+ text-align: center;
+
+}
+table#processContainer td.state {
+ width: 6vw;
+ text-align: center;
+}
+table#processContainer td.started {
+ width: 11vw;
+
+}
+
+table#processContainer td.runtime {
+ width: 5vw;
+}
+
diff --git a/src/assets/css/mod_ramwatcher.css b/src/assets/css/mod_ramwatcher.css
index b279e0c11..cbe8caa3d 100644
--- a/src/assets/css/mod_ramwatcher.css
+++ b/src/assets/css/mod_ramwatcher.css
@@ -78,3 +78,50 @@ div.mod_ramwatcher_point.available {
div.mod_ramwatcher_point.active {
opacity: 1;
}
+
+div#mod_ramwatcher_swapcontainer {
+ display: grid;
+ grid-template-columns: 15% 65% 20%;
+ padding-left: 0.5vh;
+ margin-bottom: 0.5vh;
+}
+
+div#mod_ramwatcher_swapcontainer h1 {
+ font-size: 1.3vh;
+ line-height: 1.5vh;
+ margin: 0vh;
+ align-self: center;
+}
+
+progress#mod_ramwatcher_swapbar {
+ width: 100%;
+ align-self: center;
+ -webkit-appearance: none;
+ border-right: .1vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.8);
+}
+
+progress#mod_ramwatcher_swapbar::-webkit-progress-bar {
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.4);
+ height: .25vh;
+ position: relative;
+ top: .55vh;
+}
+
+progress#mod_ramwatcher_swapbar::-webkit-progress-value {
+ background: rgb(var(--color_r), var(--color_g), var(--color_b));
+ height: .4vh;
+ transition: width .5s cubic-bezier(0.4, 0, 1, 1);
+ position: relative;
+ bottom: .4vh;
+}
+
+h3#mod_ramwatcher_swaptext {
+ font-style: normal;
+ font-size: 1.3vh;
+ line-height: 1.5vh;
+ opacity: 0.5;
+ margin: 0vh;
+ white-space: nowrap;
+ align-self: center;
+ text-align: right;
+}
diff --git a/src/assets/css/mod_toplist.css b/src/assets/css/mod_toplist.css
index 497dbbbe9..6bedf0ce9 100644
--- a/src/assets/css/mod_toplist.css
+++ b/src/assets/css/mod_toplist.css
@@ -17,6 +17,10 @@ div#mod_toplist::before {
height: 0.833vh;
}
+div#mod_toplist:hover {
+ cursor: pointer;
+}
+
div#mod_toplist::after {
content: "";
border-right: 0.092vh solid rgba(var(--color_r), var(--color_g), var(--color_b), 0.3);
diff --git a/src/assets/css/modal.css b/src/assets/css/modal.css
index 0f82c07e7..63e469796 100644
--- a/src/assets/css/modal.css
+++ b/src/assets/css/modal.css
@@ -1,9 +1,8 @@
div.modal_popup {
position: absolute;
- min-width: 30vw;
+ min-width: 38vh;
background: var(--color_light_black);
- border-color: rgb(var(--color_r), var(--color_g), var(--color_b));;
- border-radius: 0.278vh;
+ border-color: rgb(var(--color_r), var(--color_g), var(--color_b));
padding: 2vh;
padding-bottom: 0vh;
display: flex;
@@ -11,11 +10,34 @@ div.modal_popup {
align-items: flex-start;
justify-content: center;
cursor: default;
+
+ --aug-border: 0.2vh;
+ --aug-border-bg: rgb(var(--color_r), var(--color_g), var(--color_b));
+ --aug-inset: 5px;
+ --aug-inset-bg: var(--color_light_black);
+}
+
+div.modal_popup.error {
+ --aug-bl-height: 3vh;
+ --aug-bl-width: 30%;
+ border-top: 0.2vh solid var(--color_red);
+ border-bottom: 0.2vh solid transparent;
+ padding-bottom: 0.2vh;
+}
+div.modal_popup.warning {
+ --aug-b-width: 20%;
+ --aug-b-origin-x: 30%;
+ border-top: 0.2vh solid var(--color_yellow);
+ border-bottom: 0.2vh solid transparent;
+ padding-bottom: 0.2vh;
+}
+div.modal_popup.info {
+ --aug-border: 0.2vh;
}
-div.modal_popup.error {border-width: 0.7vh; border-style: double;}
-div.modal_popup.warning {border-width: 0.5vh; border-style: solid;}
-div.modal_popup.info {border-width: 0.2vh; border-style: solid;}
+div.modal_popup.focus {
+ z-index: 2500 !important;
+}
div.modal_popup.blink {
border: none;
@@ -84,28 +106,58 @@ div.modal_popup button {
}
div.modal_popup button:hover {
- background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.5)
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.5);
}
-/* Settings editor modal */
-table#settingsEditor, table#settingsEditor th, table#settingsEditor td {
+div.modal_popup table, div.modal_popup table th, div.modal_popup table td {
border: 0.15vh solid rgb(var(--color_r), var(--color_g), var(--color_b));
border-collapse: collapse;
}
-table#settingsEditor th, table#settingsEditor td {
+div.modal_popup table th, div.modal_popup table td {
padding: 0.3vh;
}
-table#settingsEditor th {
+div.modal_popup table th {
font-size: 2vh;
+ background: rgba(var(--color_r), var(--color_g), var(--color_b), 0.6);
+ color: var(--color_light_black);
}
-table#settingsEditor td {
+div.modal_popup table td {
font-size: 1.7vh;
}
-table#settingsEditor td input {
+div.modal_popup table#settingsEditor tbody {
+ display: block;
+ position: relative;
+ max-height: 60vh;
+ overflow: auto;
+}
+
+div.modal_popup table#settingsEditor tbody tr:first-child {
+ position: sticky;
+ top: 0px;
+}
+
+div.modal_popup table:not(#settingsEditor) td:first-child {
+ text-align: center;
+}
+
+div.modal_popup textarea {
+ background: var(--color_light_black);
+ color: rgb(var(--color_r), var(--color_g), var(--color_b));
+ border: 0.15vh solid rgb(var(--color_r), var(--color_g), var(--color_b));
+ padding: 0.4vh 0.2vh;
+ font-size: 1.4vh;
+ resize: none;
+}
+
+div.modal_popup textarea:active, div.modal_popup textarea:focus {
+ outline: none !important;
+}
+
+div.modal_popup td input {
width: 100%;
background: var(--color_light_black);
color: rgb(var(--color_r), var(--color_g), var(--color_b));
@@ -115,13 +167,22 @@ table#settingsEditor td input {
box-sizing: border-box;
}
-table#settingsEditor td input:active, table#settingsEditor td input:focus {
+div.modal_popup td input::placeholder {
+ color: rgb(var(--color_r), var(--color_g), var(--color_b));
+ opacity: 0.7;
+}
+
+div.modal_popup td input:active, div.modal_popup td input:focus {
outline: none !important;
background: rgb(var(--color_r), var(--color_g), var(--color_b));
color: var(--color_light_black);
}
-table#settingsEditor td select {
+div.modal_popup td input:active::placeholder, div.modal_popup td input:focus::placeholder {
+ color: var(--color_light_black);
+}
+
+div.modal_popup td select {
cursor: pointer;
width: 100%;
background: var(--color_light_black);
@@ -131,9 +192,60 @@ table#settingsEditor td select {
font-size: 1.4vh;
}
+div.modal_popup summary {
+ font-size: 1.9vh;
+ font-weight: normal;
+ outline: none !important;
+ cursor: pointer;
+}
+
+div.modal_popup summary+table {
+ margin-top: 1.5vh;
+}
+
+/* Settings editor modal */
+
h6#settingsEditorStatus {
margin: 0;
margin-top: 1vh;
font-size: 1.5vh;
font-style: italic;
}
+
+/* Keyboard shortcuts modal */
+
+table.shortcutsHelp td:nth-child(2) input {
+ border: none;
+}
+
+table.shortcutsHelp td:first-child {
+ word-spacing: .3vh;
+ font-weight: bold;
+ padding: .8vh;
+}
+
+table.shortcutsHelp td:nth-child(3) {
+ max-width: 40vw;
+}
+
+details#shortcutsHelpAccordeon2 table td:nth-child(3) {
+ display: flex;
+ align-items: center;
+}
+
+details#shortcutsHelpAccordeon2 table td:nth-child(3) input:first-child {
+ font-family: var(--font_mono);
+ min-width: 30vw;
+}
+
+details#shortcutsHelpAccordeon2 table td:nth-child(3) input[type="checkbox"] {
+ width: auto;
+}
+
+/* fsDisp media displayer */
+
+.fsDisp_mediaDisp {
+ max-width: 50vw;
+ max-height: 50vh;
+ outline: none !important;
+}
diff --git a/src/assets/fonts/fira_code.woff2 b/src/assets/fonts/fira_code.woff2
new file mode 100644
index 000000000..ab4728777
Binary files /dev/null and b/src/assets/fonts/fira_code.woff2 differ
diff --git a/src/assets/icons/file-icons.json b/src/assets/icons/file-icons.json
new file mode 100644
index 000000000..114751f65
--- /dev/null
+++ b/src/assets/icons/file-icons.json
@@ -0,0 +1,8322 @@
+{
+ "500px": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "accessible-icon": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "accusoft": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "acquisitions-incorporated": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "adn": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "adversal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "affiliatetheme": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "airbnb": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "algolia": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "alipay": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "amazon-pay": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "amazon": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "amilia": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "android": {
+ "width": 435,
+ "height": 512,
+ "svg": " "
+ },
+ "angellist": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "angrycreative": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "angular": {
+ "width": 484,
+ "height": 512,
+ "svg": " "
+ },
+ "app-store-ios": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "app-store": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "apper": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "apple-pay": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "apple": {
+ "width": 417,
+ "height": 512,
+ "svg": " "
+ },
+ "artstation": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "asymmetrik": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "atlassian": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "audible": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "autoprefixer": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "avianex": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "aviato": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "aws": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bandcamp": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "battle-net": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "behance-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "behance": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "bimobject": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "bitbucket": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "bitcoin": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bity": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "black-tie": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "blackberry": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "blogger-b": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "blogger": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "bluetooth-b": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "bluetooth": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "bootstrap": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "btc": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "buffer": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "buromobelexperte": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "buy-n-large": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "buysellads": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "canadian-maple-leaf": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-amazon-pay": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-amex": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-apple-pay": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-diners-club": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-discover": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-jcb": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-mastercard": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-paypal": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-stripe": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "cc-visa": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "centercode": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "centos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chrome": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chromecast": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cloudflare": {
+ "width": 640,
+ "height": 512,
+ "svg": ""
+ },
+ "cloudscale": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "cloudsmith": {
+ "width": 332,
+ "height": 512,
+ "svg": " "
+ },
+ "cloudversify": {
+ "width": 616,
+ "height": 512,
+ "svg": " "
+ },
+ "codepen": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codiepie": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "confluence": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "connectdevelop": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "contao": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cotton-bureau": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cpanel": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-by": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-nc-eu": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-nc-jp": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-nc": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-nd": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-pd-alt": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-pd": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-remix": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-sa": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-sampling-plus": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-sampling": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-share": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons-zero": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "creative-commons": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "critical-role": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "css3-alt": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "css3": {
+ "width": 452,
+ "height": 512,
+ "svg": " "
+ },
+ "cuttlefish": {
+ "width": 440,
+ "height": 512,
+ "svg": " "
+ },
+ "d-and-d-beyond": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "d-and-d": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "dailymotion": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "dashcube": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "deezer": {
+ "width": 576,
+ "height": 512,
+ "svg": ""
+ },
+ "delicious": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "deploydog": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "deskpro": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "dev": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "deviantart": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "dhl": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "diaspora": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "digg": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "digital-ocean": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "discord": {
+ "width": 640,
+ "height": 512,
+ "svg": ""
+ },
+ "discourse": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "dochub": {
+ "width": 416,
+ "height": 512,
+ "svg": " "
+ },
+ "docker": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "draft2digital": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "dribbble-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "dribbble": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dropbox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "drupal": {
+ "width": 447.8739929,
+ "height": 512,
+ "svg": " "
+ },
+ "dyalog": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "earlybirds": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "ebay": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "edge-legacy": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "edge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "elementor": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "ello": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "ember": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "empire": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "envira": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "erlang": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ethereum": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "etsy": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "evernote": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "expeditedssl": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "facebook-f": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "facebook-messenger": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "facebook-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "facebook": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fantasy-flight-games": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fedex": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "fedora": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "figma": {
+ "width": 340,
+ "height": 512,
+ "svg": " "
+ },
+ "firefox-browser": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "firefox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "first-order-alt": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "first-order": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "firstdraft": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "flickr": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "flipboard": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "fly": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "font-awesome-alt": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "font-awesome-flag": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "font-awesome-logo-full": {
+ "width": 3992,
+ "height": 512,
+ "svg": " "
+ },
+ "font-awesome": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "fonticons-fi": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "fonticons": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "fort-awesome-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fort-awesome": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "forumbee": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "foursquare": {
+ "width": 368,
+ "height": 512,
+ "svg": " "
+ },
+ "free-code-camp": {
+ "width": 576,
+ "height": 512,
+ "svg": ""
+ },
+ "freebsd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fulcrum": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "galactic-republic": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "galactic-senate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "get-pocket": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "gg-circle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gg": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "git-alt": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "git-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "git": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "github-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "github-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "github": {
+ "width": "64",
+ "height": "64",
+ "svg": "\n \n"
+ },
+ "gitkraken": {
+ "width": 592,
+ "height": 512,
+ "svg": " "
+ },
+ "gitlab": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "gitter": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "glide-g": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "glide": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gofore": {
+ "width": 400,
+ "height": 512,
+ "svg": " "
+ },
+ "goodreads-g": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "goodreads": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "google-drive": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "google-pay": {
+ "width": 640,
+ "height": 512,
+ "svg": ""
+ },
+ "google-play": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "google-plus-g": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "google-plus-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "google-plus": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "google-wallet": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "google": {
+ "width": 481,
+ "height": 512,
+ "svg": ""
+ },
+ "gratipay": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "grav": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gripfire": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "grunt": {
+ "width": 383,
+ "height": 512,
+ "svg": " "
+ },
+ "guilded": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "gulp": {
+ "width": 230,
+ "height": 512,
+ "svg": " "
+ },
+ "hacker-news-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "hacker-news": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "hackerrank": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hips": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "hire-a-helper": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hive": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "hooli": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "hornbill": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hotjar": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "houzz": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "html5": {
+ "width": 451,
+ "height": 512,
+ "svg": " "
+ },
+ "hubspot": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ideal": {
+ "width": 576,
+ "height": 512,
+ "svg": ""
+ },
+ "imdb": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "innosoft": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "instagram-square": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "instagram": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "instalod": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "intercom": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "internet-explorer": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "invision": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "ioxhost": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "itch-io": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "itunes-note": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "itunes": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "java": {
+ "width": 374,
+ "height": 512,
+ "svg": " "
+ },
+ "jedi-order": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "jenkins": {
+ "width": 371,
+ "height": 512,
+ "svg": " "
+ },
+ "jira": {
+ "width": 388,
+ "height": 512,
+ "svg": " "
+ },
+ "joget": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "joomla": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "js-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "js": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "jsfiddle": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "kaggle": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "keybase": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "keycdn": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kickstarter-k": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "kickstarter": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "korvue": {
+ "width": 446,
+ "height": 512,
+ "svg": " "
+ },
+ "laravel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lastfm-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "lastfm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "leanpub": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "less": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "line": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "linkedin-in": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "linkedin": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "linode": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "linux": {
+ "width": 436,
+ "height": 512,
+ "svg": " "
+ },
+ "lyft": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "magento": {
+ "width": 436,
+ "height": 512,
+ "svg": " "
+ },
+ "mailchimp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mandalorian": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "markdown": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mastodon": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "maxcdn": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mdb": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "medapps": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "medium-m": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "medium": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "medrt": {
+ "width": 544,
+ "height": 512,
+ "svg": " "
+ },
+ "meetup": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "megaport": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "mendeley": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "microblog": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "microsoft": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "mix": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "mixcloud": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "mixer": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "mizuni": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "modx": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "monero": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "napster": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "neos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nimblr": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "node-js": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "node": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "npm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ns8": {
+ "width": 640,
+ "height": 512,
+ "svg": ""
+ },
+ "nutritionix": {
+ "width": 400,
+ "height": 512,
+ "svg": " "
+ },
+ "octopus-deploy": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "odnoklassniki-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "odnoklassniki": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "old-republic": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "opencart": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "openid": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "opera": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "optin-monster": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "orcid": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "osi": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "page4": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "pagelines": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "palfed": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "patreon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "paypal": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "penny-arcade": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "perbyte": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "periscope": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "phabricator": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "phoenix-framework": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "phoenix-squadron": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "php": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pied-piper-alt": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "pied-piper-hat": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "pied-piper-pp": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "pied-piper-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "pied-piper": {
+ "width": 480,
+ "height": 512,
+ "svg": ""
+ },
+ "pinterest-p": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "pinterest-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "pinterest": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "playstation": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "product-hunt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pushed": {
+ "width": 432,
+ "height": 512,
+ "svg": " "
+ },
+ "python": {
+ "width": 492,
+ "height": 512,
+ "svg": " "
+ },
+ "qq": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "quinscape": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "quora": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "r-project": {
+ "width": 581,
+ "height": 512,
+ "svg": " "
+ },
+ "raspberry-pi": {
+ "width": 401,
+ "height": 512,
+ "svg": " "
+ },
+ "ravelry": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "react": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reacteurope": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "readme": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "rebel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "red-river": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "reddit-alien": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reddit-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "reddit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "redhat": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "renren": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "replyd": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "researchgate": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "resolving": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "rev": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "rocketchat": {
+ "width": 576,
+ "height": 512,
+ "svg": ""
+ },
+ "rockrms": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "rust": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "safari": {
+ "width": 461,
+ "height": 512,
+ "svg": " "
+ },
+ "salesforce": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "sass": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "schlix": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "scribd": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "searchengin": {
+ "width": 460,
+ "height": 512,
+ "svg": " "
+ },
+ "sellcast": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "sellsy": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "servicestack": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "shirtsinbulk": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "shopify": {
+ "width": 452,
+ "height": 512,
+ "svg": " "
+ },
+ "shopware": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "simplybuilt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sistrix": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "sith": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "sketch": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "skyatlas": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "skype": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "slack-hash": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "slack": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "slideshare": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snapchat-ghost": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snapchat-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "snapchat": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "soundcloud": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "sourcetree": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "speakap": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "speaker-deck": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "spotify": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "squarespace": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stack-exchange": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "stack-overflow": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "stackpath": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "staylinked": {
+ "width": 440,
+ "height": 512,
+ "svg": " "
+ },
+ "steam-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "steam-symbol": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "steam": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "sticker-mule": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "strava": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "stripe-s": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "stripe": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "studiovinari": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stumbleupon-circle": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "stumbleupon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "superpowers": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "supple": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "suse": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "swift": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "symfony": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "teamspeak": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "telegram-plane": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "telegram": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "tencent-weibo": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "the-red-yeti": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "themeco": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "themeisle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "think-peaks": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "tiktok": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "trade-federation": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "trello": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tripadvisor": {
+ "width": 576,
+ "height": 512,
+ "svg": ""
+ },
+ "tumblr-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "tumblr": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "twitch": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "twitter-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "twitter": {
+ "width": "64",
+ "height": "64",
+ "svg": "\n \n"
+ },
+ "typo3": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "uber": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "ubuntu": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "uikit": {
+ "width": 443,
+ "height": 512,
+ "svg": " "
+ },
+ "umbraco": {
+ "width": 510,
+ "height": 512,
+ "svg": " "
+ },
+ "uncharted": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "uniregistry": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "unity": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "unsplash": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "untappd": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "ups": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "usb": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "usps": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "ussunnah": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vaadin": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "viacoin": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "viadeo-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "viadeo": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "viber": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vimeo-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "vimeo-v": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "vimeo": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "vine": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "vk": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "vnv": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "vuejs": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "watchman-monitoring": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "waze": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "weebly": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "weibo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "weixin": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "whatsapp-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "whatsapp": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "whmcs": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "wikipedia-w": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "windows": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "wix": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wizards-of-the-coast": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "wodu": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "wolf-pack-battalion": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wordpress-simple": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wordpress": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wpbeginner": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wpexplorer": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wpforms": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "wpressr": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "xbox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xing-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "xing": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "y-combinator": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "yahoo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yammer": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yandex-international": {
+ "width": 320,
+ "height": 512,
+ "svg": " "
+ },
+ "yandex": {
+ "width": 256,
+ "height": 512,
+ "svg": ""
+ },
+ "yarn": {
+ "width": 477,
+ "height": 512,
+ "svg": ""
+ },
+ "yelp": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "yoast": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "youtube-square": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "youtube": {
+ "width": 576,
+ "height": 512,
+ "svg": " "
+ },
+ "zhihu": {
+ "width": 640,
+ "height": 512,
+ "svg": " "
+ },
+ "1c-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "1c": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "3d-model": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "3ds-max": {
+ "width": 512,
+ "height": 502,
+ "svg": " "
+ },
+ "4d": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "a+": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "abap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "abif": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "agc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "amd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ampl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "antlr": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "api-blueprint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "apiextractor": {
+ "width": 435,
+ "height": 512,
+ "svg": " "
+ },
+ "apl-old": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "apl": {
+ "width": 481,
+ "height": 512,
+ "svg": " "
+ },
+ "arm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ats": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "att": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "avr": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "acre": {
+ "width": 444,
+ "height": 512,
+ "svg": " "
+ },
+ "actionscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ada": {
+ "width": 512,
+ "height": 583,
+ "svg": ""
+ },
+ "adobe-acrobat": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-aftereffects": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-animate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-audition": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-bridge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-characteranimator": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-creativecloud": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-dimension": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-dreamweaver": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-flash": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-fuse": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-illustrator": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-incopy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-indesign": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-lightroom": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-mediaencoder": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-photoshop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-prelude": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-premiere": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-premiererush": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe-xd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adobe": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "adonisjs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "aeternity": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "affectscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "affinitydesigner": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "agda": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "akka": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "alacritty-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "alacritty": {
+ "width": 449,
+ "height": 512,
+ "svg": " "
+ },
+ "alex": {
+ "width": 264,
+ "height": 512,
+ "svg": " "
+ },
+ "alloy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "alpine-linux": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "amigaos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "amusewiki": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "analytica": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "angelscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "animestudio": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ansible-alt": {
+ "width": 469,
+ "height": 512,
+ "svg": " "
+ },
+ "ansible": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "antwar": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "anyscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "apache-ant": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "apollo": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "appveyor": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "arc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "arch-linux": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "arduino": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "arttext": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "arttext4": {
+ "width": 432,
+ "height": 512,
+ "svg": " "
+ },
+ "asciidoc": {
+ "width": 439,
+ "height": 512,
+ "svg": " "
+ },
+ "asciidoctor": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "assembly-agc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-amd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-arm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-att": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-avr": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-generic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-hitachi": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-intel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-motorola": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-powerpc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-riscv": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-sparc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-vax": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "assembly-zilog": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "asymptote-alt": {
+ "width": 476,
+ "height": 512,
+ "svg": " "
+ },
+ "asymptote": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "atoum": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "audacity": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "augeas": {
+ "width": 372,
+ "height": 512,
+ "svg": " "
+ },
+ "aurelia": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "autohotkey": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "autoit": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "automator": {
+ "width": 474,
+ "height": 512,
+ "svg": " "
+ },
+ "avro": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "awk": {
+ "width": 491,
+ "height": 512,
+ "svg": " "
+ },
+ "azure-pipelines": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bem": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bnf": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "byond": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "babel": {
+ "width": 422,
+ "height": 512,
+ "svg": " "
+ },
+ "ballerina": {
+ "width": 283,
+ "height": 512,
+ "svg": " "
+ },
+ "bazaar": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "bazel-old": {
+ "width": 355,
+ "height": 512,
+ "svg": " "
+ },
+ "bazel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "behat": {
+ "width": 385,
+ "height": 512,
+ "svg": ""
+ },
+ "bibtex": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "bikeshed": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "biml": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bintray": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "binder": {
+ "width": 401,
+ "height": 512,
+ "svg": " "
+ },
+ "bison": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "blender": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "blitzbasic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bloc": {
+ "width": 428,
+ "height": 512,
+ "svg": " "
+ },
+ "bluespec": {
+ "width": 402,
+ "height": 512,
+ "svg": " "
+ },
+ "boo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bors": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "bosque": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "brainfuck": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "brakeman": {
+ "width": 334,
+ "height": 512,
+ "svg": " "
+ },
+ "bro": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "broccoli": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "brotli-old": {
+ "width": 374,
+ "height": 512,
+ "svg": " "
+ },
+ "brotli": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "browserslist": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "browsersync": {
+ "width": 360,
+ "height": 512,
+ "svg": " "
+ },
+ "brunch": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "buck": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "build-boot": {
+ "width": 356,
+ "height": 512,
+ "svg": " "
+ },
+ "buildkite": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bundler": {
+ "width": 481,
+ "height": 512,
+ "svg": " "
+ },
+ "c#-script": {
+ "width": 459,
+ "height": 512,
+ "svg": " "
+ },
+ "c#": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "c++": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "casc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cdf": {
+ "width": 494,
+ "height": 512,
+ "svg": " "
+ },
+ "ckeditor": {
+ "width": 464,
+ "height": 512,
+ "svg": " "
+ },
+ "clips": {
+ "width": 417,
+ "height": 512,
+ "svg": " "
+ },
+ "cnab": {
+ "width": 470,
+ "height": 512,
+ "svg": " "
+ },
+ "cobol": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cpan": {
+ "width": 496,
+ "height": 512,
+ "svg": " "
+ },
+ "csound": {
+ "width": 508,
+ "height": 512,
+ "svg": " "
+ },
+ "cvs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cwl": {
+ "width": 150,
+ "height": 512,
+ "svg": " "
+ },
+ "cabal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "caddy-old": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "caddy": {
+ "width": 507,
+ "height": 512,
+ "svg": " "
+ },
+ "caffe": {
+ "width": 469,
+ "height": 512,
+ "svg": " "
+ },
+ "caffe2": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "cairo": {
+ "width": 396,
+ "height": 512,
+ "svg": " "
+ },
+ "cake": {
+ "width": 456,
+ "height": 512,
+ "svg": " "
+ },
+ "cakephp-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cakephp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cakefile": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "calva": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "carthage": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ceylon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chai": {
+ "width": 444,
+ "height": 512,
+ "svg": " "
+ },
+ "chapel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chartjs": {
+ "width": 444,
+ "height": 512,
+ "svg": " "
+ },
+ "cheetah3d": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chef": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chocolatey": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "chuck": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "circleci": {
+ "width": 505,
+ "height": 512,
+ "svg": " "
+ },
+ "cirru": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "clarion": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "clean": {
+ "width": 319,
+ "height": 512,
+ "svg": " "
+ },
+ "click": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "clojurejs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "closuretemplate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cloudfoundry": {
+ "width": 343,
+ "height": 512,
+ "svg": " "
+ },
+ "cmake": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "conll": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cocoapods": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codacy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "code-climate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codekit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codemeta": {
+ "width": 436,
+ "height": 512,
+ "svg": " "
+ },
+ "codemirror": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codeship": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "codecov": {
+ "width": 468,
+ "height": 512,
+ "svg": ""
+ },
+ "coldfusion": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "commitlint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "commitizen": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "common-lisp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "component-pascal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "composer": {
+ "width": 393,
+ "height": 512,
+ "svg": " "
+ },
+ "conan": {
+ "width": 481,
+ "height": 512,
+ "svg": " "
+ },
+ "conda": {
+ "width": 445,
+ "height": 512,
+ "svg": " "
+ },
+ "config-coffeescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-go": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-haskell": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-js": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-perl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-python": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-react": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-ruby": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-rust": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "config-typescript": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "config": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coq": {
+ "width": 342,
+ "height": 512,
+ "svg": " "
+ },
+ "cordova": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coreldraw-alt": {
+ "width": 371,
+ "height": 512,
+ "svg": " "
+ },
+ "coreldraw": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coveralls": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cpcdosc+": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "crafttweaker": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "creole": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "crowdin": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "crystal": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "cubit": {
+ "width": 440,
+ "height": 512,
+ "svg": " "
+ },
+ "cucumber": {
+ "width": 435,
+ "height": 512,
+ "svg": " "
+ },
+ "cuneiform": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "curl-lang": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "curry": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "cython": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "d3": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dna": {
+ "width": 506,
+ "height": 512,
+ "svg": " "
+ },
+ "dom": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dosbox-alt": {
+ "width": 456,
+ "height": 512,
+ "svg": " "
+ },
+ "dosbox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dvc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dafny": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "darcs-patch": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dashboard": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dataweave": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "default": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "delphi": {
+ "width": 440,
+ "height": 512,
+ "svg": " "
+ },
+ "deno": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dependabot": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "devcontainer": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "devicetree": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dhall": {
+ "width": 243,
+ "height": 512,
+ "svg": " "
+ },
+ "dia": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "diff": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "digdag": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "docbook": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "docpad": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "doclets": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "docz": {
+ "width": 511.9989929,
+ "height": 511.9989929,
+ "svg": " "
+ },
+ "dogescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "donejs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "doxygen": {
+ "width": 438,
+ "height": 512,
+ "svg": ""
+ },
+ "dragonflybsd": {
+ "width": 441,
+ "height": 512,
+ "svg": " "
+ },
+ "dragula": {
+ "width": 438,
+ "height": 512,
+ "svg": " "
+ },
+ "drone": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dub": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dylib": {
+ "width": 503,
+ "height": 512,
+ "svg": " "
+ },
+ "e": {
+ "width": 406,
+ "height": 512,
+ "svg": ""
+ },
+ "eclipse-lang": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ejs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "eq": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "esdoc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "eslint-old": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "eslint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "eagle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "easybuild": {
+ "width": 355,
+ "height": 512,
+ "svg": " "
+ },
+ "ecere": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "editorconfig": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "eiffel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "electron": {
+ "width": 474,
+ "height": 512,
+ "svg": " "
+ },
+ "elementaryos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "elm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "emacs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "emberscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ensime": {
+ "width": 450,
+ "height": 512,
+ "svg": " "
+ },
+ "expo": {
+ "width": 457,
+ "height": 512,
+ "svg": " "
+ },
+ "fbx": {
+ "width": 388,
+ "height": 512,
+ "svg": ""
+ },
+ "ffmpeg": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fossa": {
+ "width": 438,
+ "height": 512,
+ "svg": " "
+ },
+ "fabfile": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fabric": {
+ "width": 476,
+ "height": 512,
+ "svg": " "
+ },
+ "factor": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "falcon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fancy": {
+ "width": 341,
+ "height": 512,
+ "svg": " "
+ },
+ "fantom": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fauna": {
+ "width": 416,
+ "height": 512,
+ "svg": " "
+ },
+ "faust": {
+ "width": 442,
+ "height": 512,
+ "svg": " "
+ },
+ "fexl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fiddle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "finaldraft": {
+ "width": 331,
+ "height": 512,
+ "svg": " "
+ },
+ "finder": {
+ "width": 465,
+ "height": 512,
+ "svg": ""
+ },
+ "firebase-bolt": {
+ "width": 272,
+ "height": 512,
+ "svg": " "
+ },
+ "firebase": {
+ "width": 411,
+ "height": 512,
+ "svg": " "
+ },
+ "flask": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "floobits": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "flow": {
+ "width": 413,
+ "height": 512,
+ "svg": " "
+ },
+ "flutter": {
+ "width": 416,
+ "height": 512,
+ "svg": " "
+ },
+ "flux": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "font-bitmap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "font-outline": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "font": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "fontforge": {
+ "width": 450,
+ "height": 512,
+ "svg": " "
+ },
+ "fortherecord": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fork": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "fortran": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "fossil": {
+ "width": 449,
+ "height": 512,
+ "svg": " "
+ },
+ "fountain": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "franca": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "freedos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "freedesktop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "freemarker": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "freemat": {
+ "width": 489,
+ "height": 512,
+ "svg": " "
+ },
+ "frege": {
+ "width": 441,
+ "height": 512,
+ "svg": ""
+ },
+ "fuelux": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fusebox": {
+ "width": 490,
+ "height": 512,
+ "svg": " "
+ },
+ "futhark": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gams": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gauss": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gdb": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gf": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gimp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gn": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "gnu": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "galaxy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "galen": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gamemaker": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gatsby": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "genstat": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "genshi": {
+ "width": 310,
+ "height": 512,
+ "svg": " "
+ },
+ "gentoo": {
+ "width": 489,
+ "height": 512,
+ "svg": " "
+ },
+ "ghostscript": {
+ "width": 410,
+ "height": 512,
+ "svg": " "
+ },
+ "gitpod": {
+ "width": 444,
+ "height": 512,
+ "svg": " "
+ },
+ "glade": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "glyphs": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "gnuplot": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "go-old": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "go": {
+ "width": 376,
+ "height": 512,
+ "svg": " "
+ },
+ "goreleaser": {
+ "width": 391,
+ "height": 512,
+ "svg": " "
+ },
+ "godot": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "golo": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "gosu": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gradle": {
+ "width": 509,
+ "height": 512,
+ "svg": " "
+ },
+ "graphql-codegenerator": {
+ "width": 393,
+ "height": 512,
+ "svg": " "
+ },
+ "graphql": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "graphviz": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "grapher": {
+ "width": 487,
+ "height": 512,
+ "svg": " "
+ },
+ "graphite": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gravit-designer": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "greenkeeper": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "gridsome": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "groovy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hie": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hjson": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hack": {
+ "width": 350,
+ "height": 512,
+ "svg": " "
+ },
+ "haml": {
+ "width": 396,
+ "height": 512,
+ "svg": " "
+ },
+ "harbour": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hashicorp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "haxe": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "haxedevelop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "helix": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "hewlettpackard": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hitachi": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "homebrew": {
+ "width": 397,
+ "height": 512,
+ "svg": " "
+ },
+ "hop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hoplon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "houdini": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "houndci": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "hugo": {
+ "width": 456,
+ "height": 512,
+ "svg": " "
+ },
+ "husky": {
+ "width": 487,
+ "height": 512,
+ "svg": " "
+ },
+ "hy": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hygen": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hyper": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "icu": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "idl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "igor-pro": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "icomoon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "idris": {
+ "width": 279,
+ "height": 512,
+ "svg": " "
+ },
+ "image": {
+ "width": 439,
+ "height": 512,
+ "svg": " "
+ },
+ "imba-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "imba-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "imba": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "imgbot": {
+ "width": 360,
+ "height": 512,
+ "svg": " "
+ },
+ "influxdata": {
+ "width": 504,
+ "height": 512,
+ "svg": " "
+ },
+ "inform7": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ink": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "inkscape": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "innosetup": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "intel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "io": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ioke": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "ionic-project": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "isabelle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "istanbul": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "j": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "json": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "json-2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "json-ld1": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "json-ld2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "json5": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jsx-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jsx-atom": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jsx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jade": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "jakefile": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "janet": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "jasmine": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jest": {
+ "width": 450,
+ "height": 512,
+ "svg": " "
+ },
+ "jinja": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jison": {
+ "width": 473,
+ "height": 512,
+ "svg": " "
+ },
+ "jolie": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jsonnet": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "julia": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "junos": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "jupyter": {
+ "width": 376,
+ "height": 512,
+ "svg": " "
+ },
+ "knime": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "krl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kaitai": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "karma": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "keynote": {
+ "width": 434,
+ "height": 512,
+ "svg": " "
+ },
+ "khronos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kicad": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kibo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kitchenci": {
+ "width": 476,
+ "height": 512,
+ "svg": " "
+ },
+ "kivy": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "knockout": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "kotlin": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kubernetes": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kusto-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kusto": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lfe": {
+ "width": 434,
+ "height": 512,
+ "svg": " "
+ },
+ "lgtm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "linqpad": {
+ "width": 485,
+ "height": 512,
+ "svg": " "
+ },
+ "llvm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lolcode": {
+ "width": 411,
+ "height": 512,
+ "svg": " "
+ },
+ "lsl": {
+ "width": 377,
+ "height": 512,
+ "svg": " "
+ },
+ "latex": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "labview": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lark": {
+ "width": 497,
+ "height": 512,
+ "svg": " "
+ },
+ "lasso": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "latino": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "leaflet": {
+ "width": 460,
+ "height": 512,
+ "svg": " "
+ },
+ "lean": {
+ "width": 315,
+ "height": 512,
+ "svg": " "
+ },
+ "lefthook-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lefthook": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "leiningen": {
+ "width": 305,
+ "height": 512,
+ "svg": " "
+ },
+ "lektor": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lerna": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lex-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "lex": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "lightwave": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lighthouse": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lilypond": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lime": {
+ "width": 405,
+ "height": 512,
+ "svg": " "
+ },
+ "lisp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "livescript": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "logtalk": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "lookml": {
+ "width": 329,
+ "height": 512,
+ "svg": " "
+ },
+ "lua": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "matlab": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mdx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "melpa": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mjml": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ms-dos": {
+ "width": 408,
+ "height": 512,
+ "svg": " "
+ },
+ "macvim": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "macaulay2": {
+ "width": 388,
+ "height": 512,
+ "svg": " "
+ },
+ "magit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mako": {
+ "width": 338,
+ "height": 512,
+ "svg": ""
+ },
+ "manjaro": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "manpage": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mapbox": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "markdownlint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "marko": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "mathjax": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mathematica": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "matroska": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "max": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "maya": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "mediawiki": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mercurial": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mercury": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mermaid": {
+ "width": 367,
+ "height": 512,
+ "svg": ""
+ },
+ "meson-old": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "meson": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "metapost": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "metal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "meteor": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "microsoft-access": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-excel": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-infopath": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-lync": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-onenote": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-outlook": {
+ "width": 507,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-powerpoint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-project": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-publisher": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-visio": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "microsoft-word": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "minecraft": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "minizinc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mirah": {
+ "width": 311,
+ "height": 512,
+ "svg": ""
+ },
+ "miranda": {
+ "width": 300,
+ "height": 512,
+ "svg": ""
+ },
+ "mixin": {
+ "width": 418,
+ "height": 512,
+ "svg": " "
+ },
+ "mocha": {
+ "width": 310,
+ "height": 512,
+ "svg": " "
+ },
+ "modelica": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "modernweb": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "modo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "modula-2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "modula-3": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "moho": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "moleculer": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "moment-timezone": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "moment": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "monkey": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mono": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "monotone": {
+ "width": 415,
+ "height": 512,
+ "svg": ""
+ },
+ "motorola": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "moustache": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "mruby": {
+ "width": 460,
+ "height": 512,
+ "svg": " "
+ },
+ "mupad": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "nasm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nant": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ndepend": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "neon": {
+ "width": 470,
+ "height": 512,
+ "svg": " "
+ },
+ "npm-old": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "nsis-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nsis": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nsri-alt": {
+ "width": 355,
+ "height": 512,
+ "svg": " "
+ },
+ "nsri": {
+ "width": 426,
+ "height": 512,
+ "svg": " "
+ },
+ "nvidia": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nwscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nxc": {
+ "width": 343,
+ "height": 512,
+ "svg": " "
+ },
+ "nano": {
+ "width": 383,
+ "height": 512,
+ "svg": ""
+ },
+ "nanoc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "neko": {
+ "width": 486,
+ "height": 512,
+ "svg": " "
+ },
+ "nemerle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "neo4j": {
+ "width": 459,
+ "height": 512,
+ "svg": " "
+ },
+ "nessus": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nestjs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "netlinx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "netlogo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "netlify": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "new-relic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nextjs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nextflow": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "ngrx": {
+ "width": 478,
+ "height": 512,
+ "svg": " "
+ },
+ "nib": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nickle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nightwatch": {
+ "width": 423,
+ "height": 512,
+ "svg": " "
+ },
+ "nimble": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nimrod": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nintendo64": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nix": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nmap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nodemon": {
+ "width": 451,
+ "height": 512,
+ "svg": ""
+ },
+ "nokogiri": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nomad": {
+ "width": 438,
+ "height": 512,
+ "svg": " "
+ },
+ "noon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "normalise": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nuget": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nuclide": {
+ "width": 427,
+ "height": 512,
+ "svg": " "
+ },
+ "numpy-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "numpy": {
+ "width": 480,
+ "height": 512,
+ "svg": " "
+ },
+ "nunjucks": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "nuxt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ocaml": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ooc": {
+ "width": 387,
+ "height": 512,
+ "svg": ""
+ },
+ "os2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "owl": {
+ "width": 318,
+ "height": 512,
+ "svg": " "
+ },
+ "oberon": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "objective-j": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "octave": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "odin": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ogone": {
+ "width": 461,
+ "height": 512,
+ "svg": " "
+ },
+ "omnigraffle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "opa": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "openapi": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openbsd-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "openbsd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "opencl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "opencv": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openexr": {
+ "width": 481,
+ "height": 512,
+ "svg": ""
+ },
+ "opengl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openindiana": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openoffice": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openpolicyagent": {
+ "width": 460,
+ "height": 512,
+ "svg": " "
+ },
+ "opensolaris": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openstack": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openvms": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "openvpn": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openzfs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openscad": {
+ "width": 641,
+ "height": 512,
+ "svg": " "
+ },
+ "org-mode": {
+ "width": 467,
+ "height": 512,
+ "svg": " "
+ },
+ "ox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "oxygene": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "oz": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "p4": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pawn": {
+ "width": 242,
+ "height": 512,
+ "svg": ""
+ },
+ "pcd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "phpunit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pico-8": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "pm2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pnpm": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pov-ray": {
+ "width": 371,
+ "height": 512,
+ "svg": " "
+ },
+ "pros": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pan": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "papyrus": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "parrot": {
+ "width": 375,
+ "height": 512,
+ "svg": ""
+ },
+ "pascal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "patch": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pegjs": {
+ "width": 417,
+ "height": 512,
+ "svg": " "
+ },
+ "perl6": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "phalcon": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "phoenix": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "photorec": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "phraseapp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pickle": {
+ "width": 370,
+ "height": 512,
+ "svg": " "
+ },
+ "picolisp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pike": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pinescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pipenv": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "platformio": {
+ "width": 425,
+ "height": 512,
+ "svg": " "
+ },
+ "pod": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pogoscript": {
+ "width": 286,
+ "height": 512,
+ "svg": " "
+ },
+ "pointwise": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "polymer": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "pony": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "postcss": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "postscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "powerbuilder": {
+ "width": 497,
+ "height": 512,
+ "svg": " "
+ },
+ "powerpc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "powershell": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "precision": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "precommit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "prettier": {
+ "width": 439,
+ "height": 512,
+ "svg": " "
+ },
+ "prisma": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "processing": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "progress-old": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "progress": {
+ "width": 479,
+ "height": 512,
+ "svg": " "
+ },
+ "propeller": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "proselint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "protractor": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pug-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pug": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pullapprove": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "puppet": {
+ "width": 335,
+ "height": 512,
+ "svg": " "
+ },
+ "pure": {
+ "width": 293,
+ "height": 512,
+ "svg": " "
+ },
+ "purebasic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "purescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "pypi": {
+ "width": 454,
+ "height": 512,
+ "svg": " "
+ },
+ "pyup": {
+ "width": 443,
+ "height": 512,
+ "svg": " "
+ },
+ "pyret": {
+ "width": 512,
+ "height": 500,
+ "svg": " "
+ },
+ "q#": {
+ "width": 382,
+ "height": 512,
+ "svg": " "
+ },
+ "qt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "qiskit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "qlikview": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "quasar": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "r": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "raml": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "rdata": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rdoc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "realbasic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "risc-v": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rspec": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rstudio": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "racket": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rascal": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "razzle": {
+ "width": 403,
+ "height": 512,
+ "svg": " "
+ },
+ "rescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reactos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "readthedocs": {
+ "width": 402,
+ "height": 512,
+ "svg": " "
+ },
+ "reason": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reasonstudios-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reasonstudios": {
+ "width": 456,
+ "height": 512,
+ "svg": " "
+ },
+ "rebol": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "red-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "red": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "redux": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "reek": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "regex": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "remark": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "renovate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rexx": {
+ "width": 353,
+ "height": 512,
+ "svg": " "
+ },
+ "rhino3d": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ring": {
+ "width": 454,
+ "height": 512,
+ "svg": " "
+ },
+ "riot-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "riot": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rmarkdown": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "robotframework-old": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "robotframework": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "robots": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rollup-old": {
+ "width": 446,
+ "height": 512,
+ "svg": " "
+ },
+ "rollup": {
+ "width": 387,
+ "height": 512,
+ "svg": " "
+ },
+ "rubocop": {
+ "width": 433,
+ "height": 512,
+ "svg": " "
+ },
+ "rubygems": {
+ "width": 447,
+ "height": 512,
+ "svg": " "
+ },
+ "sac": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "sas": {
+ "width": 342,
+ "height": 512,
+ "svg": " "
+ },
+ "sbt": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "sparc": {
+ "width": 286,
+ "height": 512,
+ "svg": ""
+ },
+ "sqf": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sqlite": {
+ "width": 458,
+ "height": 512,
+ "svg": " "
+ },
+ "svn": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sage": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sails": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "saltstack": {
+ "width": 500,
+ "height": 512,
+ "svg": " "
+ },
+ "san": {
+ "width": 425,
+ "height": 512,
+ "svg": " "
+ },
+ "sandbox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scheme": {
+ "width": 350,
+ "height": 512,
+ "svg": ""
+ },
+ "scilab": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scilla": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scratch": {
+ "width": 271,
+ "height": 512,
+ "svg": ""
+ },
+ "scrutinizer": {
+ "width": 447,
+ "height": 512,
+ "svg": ""
+ },
+ "self": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "semanticrelease": {
+ "width": 444,
+ "height": 512,
+ "svg": " "
+ },
+ "sentry": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "sequelize": {
+ "width": 443,
+ "height": 512,
+ "svg": " "
+ },
+ "serverless": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "service-fabric": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "shadowcljs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "shellcheck": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "shen": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "shipit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "shippable": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "shuriken": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sigils": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "silicongraphics": {
+ "width": 506,
+ "height": 512,
+ "svg": " "
+ },
+ "silverstripe": {
+ "width": 508,
+ "height": 512,
+ "svg": " "
+ },
+ "sinatra": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sketchup-layout": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sketchup-make": {
+ "width": 475,
+ "height": 512,
+ "svg": " "
+ },
+ "sketchup-stylebuilder": {
+ "width": 482,
+ "height": 512,
+ "svg": " "
+ },
+ "slash": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "smartos-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "smartos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snapcraft": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snort": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snowpack": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snyk": {
+ "width": 280,
+ "height": 512,
+ "svg": " "
+ },
+ "solidarity": {
+ "width": 346,
+ "height": 512,
+ "svg": " "
+ },
+ "solidity": {
+ "width": 330,
+ "height": 512,
+ "svg": " "
+ },
+ "sophia": {
+ "width": 489,
+ "height": 512,
+ "svg": " "
+ },
+ "sorbet": {
+ "width": 397,
+ "height": 512,
+ "svg": " "
+ },
+ "source": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "spacemacs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "spacengine": {
+ "width": 474,
+ "height": 512,
+ "svg": " "
+ },
+ "spray": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "stan": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stata": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stdlibjs": {
+ "width": 460,
+ "height": 512,
+ "svg": " "
+ },
+ "stencil": {
+ "width": 405,
+ "height": 512,
+ "svg": ""
+ },
+ "stitches": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "storybook": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "storyist": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "strings": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "stylable": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "styledcomponents": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stylelint": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "stylishhaskell": {
+ "width": 417,
+ "height": 512,
+ "svg": " "
+ },
+ "stylus-orb": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "stylus-s": {
+ "width": 376,
+ "height": 512,
+ "svg": ""
+ },
+ "stylus": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sublime": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "supercollider": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "svelte": {
+ "width": 426,
+ "height": 512,
+ "svg": " "
+ },
+ "swagger": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "systemverilog": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tfs": {
+ "width": 510,
+ "height": 512,
+ "svg": " "
+ },
+ "tla+": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "toml": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "totvs": {
+ "width": 502,
+ "height": 512,
+ "svg": " "
+ },
+ "tsx-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tsx": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ttcn-3": {
+ "width": 400,
+ "height": 512,
+ "svg": " "
+ },
+ "txl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tag": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "tailwind": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tcl": {
+ "width": 242,
+ "height": 512,
+ "svg": " "
+ },
+ "templatetoolkit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "templeos": {
+ "width": 473,
+ "height": 512,
+ "svg": " "
+ },
+ "terminal": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tern": {
+ "width": 491,
+ "height": 512,
+ "svg": ""
+ },
+ "terraform": {
+ "width": 458,
+ "height": 512,
+ "svg": " "
+ },
+ "terser": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-coffeescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-directory": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-generic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-go": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-haskell": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-js": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-perl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-python": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-react": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-ruby": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-rust": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "test-typescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "testcafe": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "textmate": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "textile": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "thor": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tilt": {
+ "width": 470,
+ "height": 512,
+ "svg": " "
+ },
+ "tinymce": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tipe": {
+ "width": 331,
+ "height": 512,
+ "svg": " "
+ },
+ "tortoisesvn": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "truffle": {
+ "width": 490,
+ "height": 512,
+ "svg": ""
+ },
+ "turing": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "twig": {
+ "width": 409,
+ "height": 512,
+ "svg": " "
+ },
+ "twine": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "typedoc": {
+ "width": 467,
+ "height": 512,
+ "svg": " "
+ },
+ "typescript-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "typescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "typings": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ufo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "uno": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "unibeautify": {
+ "width": 395,
+ "height": 512,
+ "svg": " "
+ },
+ "unicode": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "unrealscript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "urweb": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "v-ray": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "v": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "v8-turbofan": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "v8": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vax": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vcl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vhdl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vmware": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vscode": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vsts": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vagrant": {
+ "width": null,
+ "height": null,
+ "svg": " "
+ },
+ "vala": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "velocity": {
+ "width": 457,
+ "height": 512,
+ "svg": " "
+ },
+ "verilog": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vertexshader": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "video": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "virtualbox-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "virtualbox": {
+ "width": 440,
+ "height": 512,
+ "svg": " "
+ },
+ "vite": {
+ "width": 510,
+ "height": 512,
+ "svg": " "
+ },
+ "vue": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vyper": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "w3c": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wasi": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wdl": {
+ "width": 356,
+ "height": 512,
+ "svg": " "
+ },
+ "wallaby": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "walt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "warcraft-iii": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "watchman": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webassembly": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webgl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webvtt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webhint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webpack-old": {
+ "width": 450,
+ "height": 512,
+ "svg": " "
+ },
+ "webpack": {
+ "width": 462,
+ "height": 512,
+ "svg": " "
+ },
+ "wenyan": {
+ "width": 300,
+ "height": 512,
+ "svg": " "
+ },
+ "wercker": {
+ "width": 384,
+ "height": 512,
+ "svg": " "
+ },
+ "wget": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "winui": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "windi": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "wine": {
+ "width": 302,
+ "height": 512,
+ "svg": " "
+ },
+ "wolfram": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "workbox": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wurst": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "x10": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xmos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xpages": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xamarin": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xtend": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xubuntu": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yaml-alt1": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "yaml-alt2": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yaml-alt3": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yaml-alt4": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yaml": {
+ "width": 457,
+ "height": 512,
+ "svg": " "
+ },
+ "yamllint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yang": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yara": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "yui": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yasm": {
+ "width": 462,
+ "height": 512,
+ "svg": ""
+ },
+ "yorick": {
+ "width": 417,
+ "height": 512,
+ "svg": " "
+ },
+ "zbrush": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "zeit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "zephir": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "zig": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "zilog": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "zimpl": {
+ "width": 476,
+ "height": 512,
+ "svg": ""
+ },
+ "zorinos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "zork": {
+ "width": 470,
+ "height": 512,
+ "svg": ""
+ },
+ "bithound": {
+ "width": 466,
+ "height": 512,
+ "svg": " "
+ },
+ "curl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dbase": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dotenv": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dotjs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "draw.io": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ec": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "fthtml": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "gltf": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "illumos": {
+ "width": 394,
+ "height": 512,
+ "svg": ""
+ },
+ "jscpd": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kos": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "libuv": {
+ "width": 435,
+ "height": 512,
+ "svg": " "
+ },
+ "mirc": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "nginx": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "pkgsrc": {
+ "width": 487,
+ "height": 512,
+ "svg": " "
+ },
+ "pytest": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "restructuredtext": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "restql": {
+ "width": 458,
+ "height": 512,
+ "svg": " "
+ },
+ "rsync": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tmux": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "xmake": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "appcelerator": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "appstore": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "aptana": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "asterisk": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "atom": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "backbone": {
+ "width": 413,
+ "height": 512,
+ "svg": " "
+ },
+ "bing": {
+ "width": 410,
+ "height": 512,
+ "svg": ""
+ },
+ "bloatstrap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bower": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "brackets": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "bugsense": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "celluloid": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cisco": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "clojure-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "clojure": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "cloud9": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coda": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "code-badge": {
+ "width": 439,
+ "height": 512,
+ "svg": " "
+ },
+ "code": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "codeigniter": {
+ "width": 427,
+ "height": 512,
+ "svg": ""
+ },
+ "codrops": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coffeescript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "compass": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "creativecommons-badge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "creativecommons": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "css3-full": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "cssdeck": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "csstricks": {
+ "width": 478,
+ "height": 512,
+ "svg": ""
+ },
+ "dart": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "database": {
+ "width": 390,
+ "height": 512,
+ "svg": " "
+ },
+ "debian": {
+ "width": 410,
+ "height": 512,
+ "svg": ""
+ },
+ "django": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dlang": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "doctrine": {
+ "width": 388,
+ "height": 512,
+ "svg": " "
+ },
+ "dojo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "dotnet": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "dreamweaver": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "eclipse": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "envato": {
+ "width": 449,
+ "height": 512,
+ "svg": ""
+ },
+ "extjs": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "fsharp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ghost-small": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ghost": {
+ "width": 499,
+ "height": 512,
+ "svg": " "
+ },
+ "git-branch": {
+ "width": 366,
+ "height": 512,
+ "svg": " "
+ },
+ "git-commit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "git-compare": {
+ "width": 443,
+ "height": 512,
+ "svg": " "
+ },
+ "git-merge": {
+ "width": 439,
+ "height": 512,
+ "svg": " "
+ },
+ "git-pullrequest": {
+ "width": 410,
+ "height": 512,
+ "svg": " "
+ },
+ "github-badge": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "github-full": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "google-analytics": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "google-cloudplatform": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "grails": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hackernews": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "haskell": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "heroku": {
+ "width": 331,
+ "height": 512,
+ "svg": " "
+ },
+ "html5-3deffects": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "html5-connectivity": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "html5-deviceaccess": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "html5-multimedia": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ie": {
+ "width": 498,
+ "height": 512,
+ "svg": " "
+ },
+ "illustrator": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "intellij": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ionic": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jekyll": {
+ "width": 280,
+ "height": 512,
+ "svg": " "
+ },
+ "jquery-ui": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jquery": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "js-badge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "js-shield": {
+ "width": 452,
+ "height": 512,
+ "svg": " "
+ },
+ "komodo": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "krakenjs-badge": {
+ "width": 479,
+ "height": 512,
+ "svg": " "
+ },
+ "krakenjs": {
+ "width": 489,
+ "height": 512,
+ "svg": " "
+ },
+ "materialize": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "meteor-full": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "mit": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "modernizr": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mongodb": {
+ "width": 219,
+ "height": 512,
+ "svg": " "
+ },
+ "mootools-badge": {
+ "width": 182,
+ "height": 512,
+ "svg": " "
+ },
+ "mootools": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mozilla": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "msql-server": {
+ "width": 468,
+ "height": 512,
+ "svg": " "
+ },
+ "mysql": {
+ "width": 486,
+ "height": 512,
+ "svg": " "
+ },
+ "nancy": {
+ "width": 327,
+ "height": 512,
+ "svg": ""
+ },
+ "net-magazine": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "netbeans": {
+ "width": 485,
+ "height": 512,
+ "svg": " "
+ },
+ "nodejs-small": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "nodejs": {
+ "width": 455,
+ "height": 512,
+ "svg": " "
+ },
+ "onedrive": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "openshift": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "opensource": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "perl": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "phonegap": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "photoshop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "postgresql": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "prolog": {
+ "width": 456,
+ "height": 512,
+ "svg": " "
+ },
+ "rackspace": {
+ "width": 497,
+ "height": 512,
+ "svg": " "
+ },
+ "raphael": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rasberry-pi": {
+ "width": 401,
+ "height": 512,
+ "svg": " "
+ },
+ "redis": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "requirejs": {
+ "width": 426,
+ "height": 512,
+ "svg": " "
+ },
+ "responsive": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ruby-on-rails": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ruby-rough": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "ruby": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scala": {
+ "width": 376,
+ "height": 512,
+ "svg": " "
+ },
+ "scriptcs": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scrum": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "senchatouch": {
+ "width": 338,
+ "height": 512,
+ "svg": ""
+ },
+ "sizzlejs": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "smashing-magazine": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "snapsvg": {
+ "width": 309,
+ "height": 512,
+ "svg": " "
+ },
+ "spark": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "sqllite": {
+ "width": 229,
+ "height": 512,
+ "svg": ""
+ },
+ "stackoverflow": {
+ "width": 401,
+ "height": 512,
+ "svg": " "
+ },
+ "streamline": {
+ "width": 466,
+ "height": 512,
+ "svg": " "
+ },
+ "symfony-badge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "techcrunch": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "terminal-badge": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "travis": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "vim": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "visualstudio": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "webplatform": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yahoo-small": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "yeoman": {
+ "width": 457,
+ "height": 512,
+ "svg": " "
+ },
+ "yii": {
+ "width": 479,
+ "height": 512,
+ "svg": " "
+ },
+ "zend": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "3dprint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "antenna": {
+ "width": 302,
+ "height": 512,
+ "svg": " "
+ },
+ "apache": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "archlinux": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "bomb": {
+ "width": 365,
+ "height": 512,
+ "svg": ""
+ },
+ "c": {
+ "width": 469,
+ "height": 512,
+ "svg": ""
+ },
+ "cassandra": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "coffee-bean": {
+ "width": 436,
+ "height": 512,
+ "svg": " "
+ },
+ "csharp": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "css": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "database-alt1": {
+ "width": 381,
+ "height": 512,
+ "svg": " "
+ },
+ "database-alt2": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "dreamhost": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "elixir": {
+ "width": 332,
+ "height": 512,
+ "svg": " "
+ },
+ "exherbo": {
+ "width": 503,
+ "height": 512,
+ "svg": " "
+ },
+ "fire": {
+ "width": 385,
+ "height": 512,
+ "svg": " "
+ },
+ "gnome": {
+ "width": 403,
+ "height": 512,
+ "svg": " "
+ },
+ "google-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "google-code": {
+ "width": 461,
+ "height": 512,
+ "svg": " "
+ },
+ "google-developers": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "grails-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "hadoop": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "html": {
+ "width": 471,
+ "height": 512,
+ "svg": " "
+ },
+ "iphone": {
+ "width": 256,
+ "height": 512,
+ "svg": " "
+ },
+ "java-bold": {
+ "width": 369,
+ "height": 512,
+ "svg": " "
+ },
+ "java-duke": {
+ "width": 284,
+ "height": 512,
+ "svg": " "
+ },
+ "javascript-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "javascript": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "jetty": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "kde": {
+ "width": 485,
+ "height": 512,
+ "svg": " "
+ },
+ "linegraph": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "linuxmint": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "looking": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "mariadb": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "maven": {
+ "width": 379,
+ "height": 512,
+ "svg": ""
+ },
+ "microscope": {
+ "width": 329,
+ "height": 512,
+ "svg": " "
+ },
+ "mobiledevice": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "mobilephone-alt": {
+ "width": 240,
+ "height": 512,
+ "svg": " "
+ },
+ "mobilephone-broadcast": {
+ "width": 326,
+ "height": 512,
+ "svg": " "
+ },
+ "mysql-alt": {
+ "width": 487,
+ "height": 512,
+ "svg": " "
+ },
+ "netbsd": {
+ "width": 491,
+ "height": 512,
+ "svg": " "
+ },
+ "nginx-alt1": {
+ "width": 512,
+ "height": 512,
+ "svg": ""
+ },
+ "nginx-alt2": {
+ "width": 322,
+ "height": 512,
+ "svg": " "
+ },
+ "objc": {
+ "width": 471,
+ "height": 512,
+ "svg": " "
+ },
+ "oracle-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "oracle": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "osx": {
+ "width": 432,
+ "height": 512,
+ "svg": ""
+ },
+ "phone-alt": {
+ "width": 380,
+ "height": 512,
+ "svg": " "
+ },
+ "phone-retro": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "php-alt": {
+ "width": 472,
+ "height": 512,
+ "svg": " "
+ },
+ "playframework-alt": {
+ "width": 448,
+ "height": 512,
+ "svg": " "
+ },
+ "playframework": {
+ "width": 448,
+ "height": 512,
+ "svg": ""
+ },
+ "plone": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "postgresql-alt": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "rails-alt": {
+ "width": 398,
+ "height": 512,
+ "svg": " "
+ },
+ "rails": {
+ "width": 426,
+ "height": 512,
+ "svg": " "
+ },
+ "satellite": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "scala-alt": {
+ "width": 375,
+ "height": 512,
+ "svg": " "
+ },
+ "script-alt": {
+ "width": 471,
+ "height": 512,
+ "svg": " "
+ },
+ "script": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "shell": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "solaris": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "splatter": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "spring": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "svg": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "tomcat": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "wireless": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "x11": {
+ "width": 512,
+ "height": 512,
+ "svg": " "
+ },
+ "activity": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "alert": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "archive": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "arrow-bottom": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "arrow-left": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "arrow-right": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "arrow-top": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "backwards": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "bag": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "ban": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "bell": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "book": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "bookmark": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "calendar": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "camera": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "caret-bottom": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "caret-left": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "caret-right": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "caret-top": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "cart": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "checkmark": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "chevron-bottom": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "chevron-left": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "chevron-right": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "chevron-top": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "clipboard": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "clock": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "close": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "compose": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "creditcard": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "desktop": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n\n"
+ },
+ "download": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "edit": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "eject": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "ellipsis-horizontal": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "ellipsis-vertical": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "end": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "export": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "external": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "eye": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "feed": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "file": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "filter": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n\n\n"
+ },
+ "flag": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "folder-open": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "folder": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "forwards": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "fullscreen-exit": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "fullscreen": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "gift": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "heart": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "home": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "import": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "inbox": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "info": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "lightning": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "link": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "location": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "lock": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "mail": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "menu": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "message": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "microphone": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "minus": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "mobile": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "moon": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "move": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "music": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "mute": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "options": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "paperclip": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "pause": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "photo": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "play": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "plus": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "portfolio": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "print": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "reload": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "reply": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "search": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "send": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "settings": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "sign-in": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n\n"
+ },
+ "sign-out": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "star": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "start": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "telephone": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "trash": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "unlock": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n"
+ },
+ "upload": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "user": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "volume": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "work": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ },
+ "zoom-in": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "zoom-out": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "zoom-reset": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n \n \n"
+ },
+ "showDisks": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "up": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "dir": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "symlink": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "other": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "disk": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "rom": {
+ "width": 24,
+ "height": 24,
+ "svg": " "
+ },
+ "audio": {
+ "width": "32",
+ "height": "32",
+ "svg": "\n \n"
+ }
+}
\ No newline at end of file
diff --git a/src/assets/kb_layouts/da-DK.json b/src/assets/kb_layouts/da-DK.json
new file mode 100644
index 000000000..fd44edc07
--- /dev/null
+++ b/src/assets/kb_layouts/da-DK.json
@@ -0,0 +1,448 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "½",
+ "cmd": "½",
+ "shift_name": "§",
+ "shift_cmd": "§"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_cmd": "@",
+ "alt_name": "@",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_name": "£",
+ "alt_cmd": "£",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "¤",
+ "shift_cmd": "¤",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_name": "$",
+ "alt_cmd": "$",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "alt_name": "{",
+ "alt_cmd": "{",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_name": "}",
+ "alt_cmd": "}",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "´",
+ "cmd": "´",
+ "shift_name": "`",
+ "shift_cmd": "`",
+ "alt_cmd": "|",
+ "alt_name": "|",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "alt_name": "€",
+ "alt_cmd": "€",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "Å",
+ "cmd": "å",
+ "shift_cmd": "Å",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "¨",
+ "cmd": "¨",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Æ",
+ "cmd": "æ",
+ "shift_cmd": "Æ"
+ },
+ {
+ "name": "Ø",
+ "cmd": "ø",
+ "shift_cmd": "Ø"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/de-DE.json b/src/assets/kb_layouts/de-DE.json
index d03802018..64977e665 100644
--- a/src/assets/kb_layouts/de-DE.json
+++ b/src/assets/kb_layouts/de-DE.json
@@ -390,7 +390,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -417,15 +417,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/en-COLEMAK.json b/src/assets/kb_layouts/en-COLEMAK.json
index f9778a381..cc78e595a 100644
--- a/src/assets/kb_layouts/en-COLEMAK.json
+++ b/src/assets/kb_layouts/en-COLEMAK.json
@@ -393,7 +393,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -420,15 +420,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/en-DVORAK.json b/src/assets/kb_layouts/en-DVORAK.json
index 2470dfb00..e9f180264 100644
--- a/src/assets/kb_layouts/en-DVORAK.json
+++ b/src/assets/kb_layouts/en-DVORAK.json
@@ -392,7 +392,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -419,15 +419,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/en-GB.json b/src/assets/kb_layouts/en-GB.json
index 19ef9aad2..2a549b189 100644
--- a/src/assets/kb_layouts/en-GB.json
+++ b/src/assets/kb_layouts/en-GB.json
@@ -332,7 +332,7 @@
"name": "SHIFT",
"cmd": "ESCAPED|-- SHIFT: RIGHT"
}, {
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}],
"row_space": [{
@@ -352,13 +352,13 @@
"name": "CTRL",
"cmd": "ESCAPED|-- CTRL: RIGHT"
}, {
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
}, {
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
}, {
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}]
}
diff --git a/src/assets/kb_layouts/en-NORMAN.json b/src/assets/kb_layouts/en-NORMAN.json
new file mode 100644
index 000000000..87e900b70
--- /dev/null
+++ b/src/assets/kb_layouts/en-NORMAN.json
@@ -0,0 +1,434 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "`",
+ "cmd": "`",
+ "shift_name": "~",
+ "shift_cmd": "~"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "@",
+ "shift_cmd": "@",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~3",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "=",
+ "cmd": "=",
+ "shift_name": "+",
+ "shift_cmd": "+",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": ";",
+ "cmd": ";",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "[",
+ "cmd": "[",
+ "shift_name": "{",
+ "shift_cmd": "{",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "]",
+ "cmd": "]",
+ "shift_name": "}",
+ "shift_cmd": "}",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "\"",
+ "shift_cmd": "\""
+ },
+ {
+ "name": "\\",
+ "cmd": "\\",
+ "shift_name": "|",
+ "shift_cmd": "|",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": "<",
+ "shift_cmd": "<"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ">",
+ "shift_cmd": ">"
+ },
+ {
+ "name": "\/",
+ "cmd": "\/",
+ "shift_name": "?",
+ "shift_cmd": "?"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "ALT",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/en-US.json b/src/assets/kb_layouts/en-US.json
index 424dd5f44..99ceb007f 100644
--- a/src/assets/kb_layouts/en-US.json
+++ b/src/assets/kb_layouts/en-US.json
@@ -392,7 +392,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -419,15 +419,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/en-WORKMAN.json b/src/assets/kb_layouts/en-WORKMAN.json
new file mode 100644
index 000000000..5fa688189
--- /dev/null
+++ b/src/assets/kb_layouts/en-WORKMAN.json
@@ -0,0 +1,433 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "`",
+ "cmd": "`",
+ "shift_name": "~",
+ "shift_cmd": "~"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "@",
+ "shift_cmd": "@",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~3",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "=",
+ "cmd": "=",
+ "shift_name": "+",
+ "shift_cmd": "+",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "F",
+ "cmd": "F",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "U",
+ "cmd": "U",
+ "shift_cmd": "U",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": ":",
+ "cmd": ":",
+ "shift_cmd": ":",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~;"
+ },
+ {
+ "name": "[",
+ "cmd": "[",
+ "shift_name": "{",
+ "shift_cmd": "{",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "]",
+ "cmd": "]",
+ "shift_name": "}",
+ "shift_cmd": "}",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "t",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_name": "I",
+ "shift_cmd": "I"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "\"",
+ "shift_cmd": "\""
+ },
+ {
+ "name": "\\",
+ "cmd": "\\",
+ "shift_name": "|",
+ "shift_cmd": "|",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": "<",
+ "shift_cmd": "<"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ">",
+ "shift_cmd": ">"
+ },
+ {
+ "name": "\/",
+ "cmd": "\/",
+ "shift_name": "?",
+ "shift_cmd": "?"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "ALT",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
diff --git a/src/assets/kb_layouts/es-ES.json b/src/assets/kb_layouts/es-ES.json
new file mode 100644
index 000000000..5564cc530
--- /dev/null
+++ b/src/assets/kb_layouts/es-ES.json
@@ -0,0 +1,448 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "°",
+ "cmd": "°",
+ "shift_name": "ª",
+ "shift_cmd": "ª",
+ "alt_name": "\\",
+ "alt_cmd": "\\"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_name": "|",
+ "alt_cmd": "|",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_name": "@",
+ "alt_cmd": "@",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "·",
+ "shift_cmd": "·",
+ "alt_name": "#",
+ "alt_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "alt_name": "~",
+ "alt_cmd": "ESCAPED|-- TILDE",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "alt_name": "€",
+ "alt_cmd": "€",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "alt_name": "¬",
+ "alt_cmd": "¬",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "¡",
+ "cmd": "¡",
+ "shift_name": "¿",
+ "shift_cmd": "¿",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "alt_name": "€",
+ "alt_cmd": "€",
+ "ctrl_cmd": "\r"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "`",
+ "cmd": "ESCAPED|-- GRAVE",
+ "shift_name": "^",
+ "shift_cmd": "ESCAPED|-- CIRCUM",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Ñ",
+ "cmd": "ñ",
+ "shift_cmd": "Ñ",
+ "alt_cmd": "~~~CTRLSEQ1~~~ñ"
+ },
+ {
+ "name": "´",
+ "cmd": "ESCAPED|-- ACUTE",
+ "shift_name": "¨",
+ "shift_cmd": "ESCAPED|-- TREMA",
+ "alt_name": "{",
+ "alt_cmd": "{"
+ },
+ {
+ "name": "Ç",
+ "cmd": "ç",
+ "shift_cmd": "Ç",
+ "alt_name": "}",
+ "alt_cmd": "}",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/es-LAT.json b/src/assets/kb_layouts/es-LAT.json
index a71cbe99a..91cf61705 100644
--- a/src/assets/kb_layouts/es-LAT.json
+++ b/src/assets/kb_layouts/es-LAT.json
@@ -1,402 +1,444 @@
{
- "row_numbers": [
- { "name": "ESC", "cmd": "~~~CTRLSEQ1~~~" },
- { "name": "|", "cmd": "|", "shift_name": "°", "shift_cmd": "°" },
- {
- "name": "1",
- "cmd": "1",
- "shift_name": "!",
- "shift_cmd": "!",
- "alt_cmd": "~~~CTRLSEQ1~~~1",
- "fn_name": "F1",
- "fn_cmd": "~~~CTRLSEQ1~~~OP"
- },
- {
- "name": "2",
- "cmd": "2",
- "shift_name": "\"",
- "shift_cmd": "\"",
- "alt_cmd": "~~~CTRLSEQ1~~~2",
- "fn_name": "F2",
- "fn_cmd": "~~~CTRLSEQ1~~~OQ"
- },
- {
- "name": "3",
- "cmd": "3",
- "shift_name": "#",
- "shift_cmd": "#",
- "ctrl_cmd": "~~~CTRLSEQ1~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~3",
- "fn_name": "F3",
- "fn_cmd": "~~~CTRLSEQ1~~~OR"
- },
- {
- "name": "4",
- "cmd": "4",
- "shift_name": "$",
- "shift_cmd": "$",
- "ctrl_cmd": "~~~CTRLSEQ2~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~4",
- "fn_name": "F4",
- "fn_cmd": "~~~CTRLSEQ1~~~OS"
- },
- {
- "name": "5",
- "cmd": "5",
- "shift_name": "%",
- "shift_cmd": "%",
- "ctrl_cmd": "~~~CTRLSEQ3~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~5",
- "fn_name": "F5",
- "fn_cmd": "~~~CTRLSEQ1~~~[15~"
- },
- {
- "name": "6",
- "cmd": "6",
- "shift_name": "&",
- "shift_cmd": "&",
- "ctrl_cmd": "~~~CTRLSEQ4~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~6",
- "fn_name": "F6",
- "fn_cmd": "~~~CTRLSEQ1~~~[17~"
- },
- {
- "name": "7",
- "cmd": "7",
- "shift_name": "/",
- "shift_cmd": "/",
- "ctrl_cmd": "~~~CTRLSEQ5~~~",
- "fn_name": "F7",
- "fn_cmd": "~~~CTRLSEQ1~~~[18~"
- },
- {
- "name": "8",
- "cmd": "8",
- "shift_name": "(",
- "shift_cmd": "(",
- "fn_name": "F8",
- "fn_cmd": "~~~CTRLSEQ1~~~[19~"
- },
- {
- "name": "9",
- "cmd": "9",
- "shift_name": ")",
- "shift_cmd": ")",
- "alt_cmd": "~~~CTRLSEQ1~~~9",
- "fn_name": "F9",
- "fn_cmd": "~~~CTRLSEQ1~~~[20~"
- },
- {
- "name": "0",
- "cmd": "0",
- "shift_name": "=",
- "shift_cmd": "=",
- "alt_cmd": "~~~CTRLSEQ1~~~0",
- "fn_name": "F10",
- "fn_cmd": "~~~CTRLSEQ1~~~[21~"
- },
- {
- "name": "'",
- "cmd": "'",
- "shift_name": "?",
- "shift_cmd": "?",
- "alt_name": "\\",
- "alt_cmd": "\\",
- "fn_name": "F11",
- "fn_cmd": "~~~CTRLSEQ1~~~[23~"
- },
- {
- "name": "¿",
- "cmd": "¿",
- "shift_name": "¡",
- "shift_cmd": "¡",
- "fn_name": "F12",
- "fn_cmd": "~~~CTRLSEQ1~~~[24~"
- },
- {
- "name": "BACK",
- "cmd": "\b",
- "shift_name": "DELETE",
- "shift_cmd": "~~~CTRLSEQ1~~~[3~"
- }
- ],
- "row_1": [
- { "name": "TAB", "cmd": "\t" },
- {
- "name": "Q",
- "cmd": "q",
- "shift_cmd": "Q",
- "alt_name": "@",
- "alt_cmd": "@",
- "ctrl_cmd": "~~~CTRLSEQ6~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~q"
- },
- {
- "name": "W",
- "cmd": "w",
- "shift_cmd": "W",
- "ctrl_cmd": "~~~CTRLSEQ7~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~w"
- },
- {
- "name": "E",
- "cmd": "e",
- "shift_cmd": "E",
- "ctrl_cmd": "\r",
- "alt_cmd": "~~~CTRLSEQ1~~~e"
- },
- {
- "name": "R",
- "cmd": "r",
- "shift_cmd": "R",
- "ctrl_cmd": "~~~CTRLSEQ8~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~r"
- },
- {
- "name": "T",
- "cmd": "t",
- "shift_cmd": "T",
- "ctrl_cmd": "~~~CTRLSEQ9~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~t"
- },
- {
- "name": "Y",
- "cmd": "y",
- "shift_cmd": "Y",
- "ctrl_cmd": "~~~CTRLSEQ10~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~y"
- },
- {
- "name": "U",
- "cmd": "u",
- "shift_cmd": "U",
- "ctrl_cmd": "~~~CTRLSEQ11~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~u"
- },
- {
- "name": "I",
- "cmd": "i",
- "shift_cmd": "I",
- "ctrl_cmd": "\r",
- "alt_cmd": "~~~CTRLSEQ1~~~i"
- },
- {
- "name": "O",
- "cmd": "o",
- "shift_cmd": "O",
- "alt_cmd": "~~~CTRLSEQ1~~~o"
- },
- {
- "name": "P",
- "cmd": "p",
- "shift_cmd": "P",
- "ctrl_cmd": "~~~CTRLSEQ12~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~p"
- },
- {
- "name": "´",
- "cmd": "´",
- "shift_name": "¨",
- "shift_cmd": "¨",
- "ctrl_cmd": "~~~CTRLSEQ1~~~"
- },
- {
- "name": "+",
- "cmd": "+",
- "shift_name": "*",
- "shift_cmd": "*",
- "alt_name": "~",
- "alt_cmd": "~",
- "ctrl_cmd": "~~~CTRLSEQ3~~~"
- },
- { "name": "ENTER", "cmd": "\r" }
- ],
- "row_2": [
- {
- "name": "CAPS",
- "cmd": "ESCAPED|-- CAPSLCK: ON",
- "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
- },
- {
- "name": "A",
- "cmd": "a",
- "shift_cmd": "A",
- "ctrl_cmd": "~~~CTRLSEQ13~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~a"
- },
- {
- "name": "S",
- "cmd": "s",
- "shift_cmd": "S",
- "ctrl_cmd": "~~~CTRLSEQ14~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~s"
- },
- {
- "name": "D",
- "cmd": "d",
- "shift_cmd": "D",
- "ctrl_cmd": "~~~CTRLSEQ15~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~d"
- },
- {
- "name": "F",
- "cmd": "f",
- "shift_cmd": "F",
- "ctrl_cmd": "~~~CTRLSEQ16~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~f"
- },
- {
- "name": "G",
- "cmd": "g",
- "shift_cmd": "G",
- "ctrl_cmd": "\r",
- "alt_cmd": "~~~CTRLSEQ1~~~g"
- },
- {
- "name": "H",
- "cmd": "h",
- "shift_cmd": "H",
- "alt_cmd": "~~~CTRLSEQ1~~~h"
- },
- {
- "name": "J",
- "cmd": "j",
- "shift_cmd": "J",
- "alt_cmd": "~~~CTRLSEQ1~~~j"
- },
- {
- "name": "K",
- "cmd": "k",
- "shift_cmd": "K",
- "alt_cmd": "~~~CTRLSEQ1~~~k"
- },
- {
- "name": "L",
- "cmd": "l",
- "shift_cmd": "L",
- "alt_cmd": "~~~CTRLSEQ1~~~l"
- },
- {
- "name": "Ñ",
- "cmd": "ñ",
- "shift_cmd": "Ñ",
- "alt_cmd": "~~~CTRLSEQ1~~~ñ"
- },
- {
- "name": "{",
- "cmd": "{",
- "shift_name": "[",
- "shift_cmd": "[",
- "alt_name": "^",
- "alt_cmd": "^"
- },
- {
- "name": "}",
- "cmd": "}",
- "shift_name": "]",
- "shift_cmd": "]",
- "alt_name": "`",
- "alt_cmd": "`",
- "ctrl_cmd": "~~~CTRLSEQ2~~~"
- },
- { "name": "", "cmd": "\r" }
- ],
- "row_3": [
- { "name": "SHIFT", "cmd": "ESCAPED|-- SHIFT: LEFT" },
- {
- "name": "<",
- "cmd": "<",
- "shift_name": ">",
- "shift_cmd": ">",
- "ctrl_cmd": "~~~CTRLSEQ2~~~"
- },
- {
- "name": "Z",
- "cmd": "z",
- "shift_cmd": "Z",
- "ctrl_cmd": "~~~CTRLSEQ17~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~z"
- },
- {
- "name": "X",
- "cmd": "x",
- "shift_cmd": "X",
- "ctrl_cmd": "~~~CTRLSEQ18~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~x"
- },
- {
- "name": "C",
- "cmd": "c",
- "shift_cmd": "C",
- "ctrl_cmd": "~~~CTRLSEQ19~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~c"
- },
- {
- "name": "V",
- "cmd": "v",
- "shift_cmd": "V",
- "ctrl_cmd": "~~~CTRLSEQ20~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~v"
- },
- {
- "name": "B",
- "cmd": "b",
- "shift_cmd": "B",
- "ctrl_cmd": "~~~CTRLSEQ21~~~",
- "alt_cmd": "~~~CTRLSEQ1~~~b"
- },
- {
- "name": "N",
- "cmd": "n",
- "shift_cmd": "N",
- "alt_cmd": "~~~CTRLSEQ1~~~n"
- },
- {
- "name": "M",
- "cmd": "m",
- "shift_cmd": "M",
- "ctrl_cmd": "\r",
- "alt_cmd": "~~~CTRLSEQ1~~~m"
- },
- {
- "name": ",",
- "cmd": ",",
- "shift_name": ";",
- "shift_cmd": ";"
- },
- {
- "name": ".",
- "cmd": ".",
- "shift_name": ":",
- "shift_cmd": ":"
- },
- {
- "name": "-",
- "cmd": "-",
- "shift_name": "_",
- "shift_cmd": "_"
- },
- {
- "name": "SHIFT",
- "cmd": "ESCAPED|-- SHIFT: RIGHT"
- },
- {
- "name": "⬆",
- "cmd": "~~~CTRLSEQ1~~~OA"
- }
- ],
- "row_space": [
- { "name": "CTRL", "cmd": "ESCAPED|-- CTRL: LEFT" },
- {
- "name": "FN",
- "cmd": "ESCAPED|-- FN: ON",
- "fn_cmd": "ESCAPED|-- FN: OFF"
- },
- { "name": "", "cmd": " " },
- { "name": "ALT GR", "cmd": "ESCAPED|-- ALT: RIGHT" },
- { "name": "CTRL", "cmd": "ESCAPED|-- CTRL: RIGHT" },
- { "name": "⬅", "cmd": "~~~CTRLSEQ1~~~OD" },
- { "name": "⬇", "cmd": "~~~CTRLSEQ1~~~OB" },
- { "name": "➡", "cmd": "~~~CTRLSEQ1~~~OC" }
- ]
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "|",
+ "cmd": "|",
+ "shift_name": "°",
+ "shift_cmd": "°",
+ "alt_name": "¬",
+ "alt_cmd": "¬"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~3",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "¿",
+ "cmd": "¿",
+ "shift_name": "¡",
+ "shift_cmd": "¡",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "alt_name": "@",
+ "alt_cmd": "@",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "´",
+ "cmd": "ESCAPED|-- ACUTE",
+ "shift_name": "¨",
+ "shift_cmd": "ESCAPED|-- TREMA",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Ñ",
+ "cmd": "ñ",
+ "shift_cmd": "Ñ",
+ "alt_cmd": "~~~CTRLSEQ1~~~ñ"
+ },
+ {
+ "name": "{",
+ "cmd": "{",
+ "shift_name": "[",
+ "shift_cmd": "[",
+ "alt_name": "^",
+ "alt_cmd": "ESCAPED|-- CIRCUM"
+ },
+ {
+ "name": "}",
+ "cmd": "}",
+ "shift_name": "]",
+ "shift_cmd": "]",
+ "alt_name": "`",
+ "alt_cmd": "ESCAPED|-- GRAVE",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
}
diff --git a/src/assets/kb_layouts/fr-BEPO.json b/src/assets/kb_layouts/fr-BEPO.json
index 11551b183..8f9ba476d 100644
--- a/src/assets/kb_layouts/fr-BEPO.json
+++ b/src/assets/kb_layouts/fr-BEPO.json
@@ -9,14 +9,20 @@
"cmd": "$",
"shift_name": "#",
"shift_cmd": "#",
- "alt_cmd": "–"
+ "alt_name": "–",
+ "alt_cmd": "–",
+ "altshift_name": "¶",
+ "altshift_cmd": "¶"
},
{
"name": "\"",
"cmd": "\"",
"shift_name": "1",
"shift_cmd": "1",
+ "alt_name": "––",
"alt_cmd": "—",
+ "altshift_name": "„",
+ "altshift_cmd": "„",
"fn_name": "F1",
"fn_cmd": "~~~CTRLSEQ1~~~OP"
},
@@ -27,6 +33,8 @@
"shift_cmd": "2",
"alt_name": "<",
"alt_cmd": "<",
+ "altshift_name": "“",
+ "altshift_cmd": "“",
"fn_name": "F2",
"fn_cmd": "~~~CTRLSEQ1~~~OQ"
},
@@ -38,6 +46,8 @@
"ctrl_cmd": "~~~CTRLSEQ1~~~",
"alt_name": ">",
"alt_cmd": ">",
+ "altshift_name": "”",
+ "altshift_cmd": "”",
"fn_name": "F3",
"fn_cmd": "~~~CTRLSEQ1~~~OR"
},
@@ -49,6 +59,8 @@
"ctrl_cmd": "~~~CTRLSEQ2~~~",
"alt_name": "[",
"alt_cmd": "[",
+ "altshift_name": "≤",
+ "altshift_cmd": "≤",
"fn_name": "F4",
"fn_cmd": "~~~CTRLSEQ1~~~OS"
},
@@ -60,6 +72,8 @@
"ctrl_cmd": "~~~CTRLSEQ3~~~",
"alt_name": "]",
"alt_cmd": "]",
+ "altshift_name": "≥",
+ "altshift_cmd": "≥",
"fn_name": "F5",
"fn_cmd": "~~~CTRLSEQ1~~~[15~"
},
@@ -82,6 +96,8 @@
"ctrl_cmd": "~~~CTRLSEQ5~~~",
"alt_name": "±",
"alt_cmd": "±",
+ "altshift_name": "¬",
+ "altshift_cmd": "¬",
"fn_name": "F7",
"fn_cmd": "~~~CTRLSEQ1~~~[18~"
},
@@ -91,8 +107,10 @@
"shift_name": "8",
"shift_cmd": "8",
"ctrl_cmd": "\r",
- "alt_name": "÷",
- "alt_cmd": "÷",
+ "alt_name": "−",
+ "alt_cmd": "−",
+ "altshift_name": "¼",
+ "altshift_cmd": "¼",
"fn_name": "F8",
"fn_cmd": "~~~CTRLSEQ1~~~[19~"
},
@@ -103,6 +121,8 @@
"shift_cmd": "9",
"alt_name": "÷",
"alt_cmd": "÷",
+ "altshift_name": "½",
+ "altshift_cmd": "½",
"fn_name": "F9",
"fn_cmd": "~~~CTRLSEQ1~~~[20~"
},
@@ -113,6 +133,8 @@
"shift_cmd": "0",
"alt_name": "×",
"alt_cmd": "×",
+ "altshift_name": "¾",
+ "altshift_cmd": "¾",
"fn_name": "F10",
"fn_cmd": "~~~CTRLSEQ1~~~[21~"
},
@@ -123,6 +145,8 @@
"shift_cmd": "°",
"alt_name": "≠",
"alt_cmd": "≠",
+ "altshift_name": "′",
+ "altshift_cmd": "′",
"fn_name": "F11",
"fn_cmd": "~~~CTRLSEQ1~~~[23~"
},
@@ -131,7 +155,10 @@
"cmd": "%",
"shift_name": "`",
"shift_cmd": "`",
+ "alt_name": "‰",
"alt_cmd": "‰",
+ "altshift_name": "″",
+ "altshift_cmd": "″",
"fn_name": "F12",
"fn_cmd": "~~~CTRLSEQ1~~~[24~"
},
@@ -153,6 +180,8 @@
"shift_cmd": "B",
"alt_name": "|",
"alt_cmd": "|",
+ "altshift_name": "¦",
+ "altshift_cmd": "¦",
"ctrl_cmd": "~~~CTRLSEQ21~~~"
},
{
@@ -168,6 +197,8 @@
"shift_cmd": "P",
"alt_name": "&",
"alt_cmd": "&",
+ "altshift_name": "§",
+ "altshift_cmd": "§",
"ctrl_cmd": "~~~CTRLSEQ12~~~"
},
{
@@ -176,6 +207,8 @@
"shift_cmd": "O",
"alt_name": "œ",
"alt_cmd": "œ",
+ "altshift_name": "Œ",
+ "altshift_cmd": "Œ",
"ctrl_cmd": "~~~CTRLSEQ8~~~"
},
{
@@ -184,7 +217,9 @@
"shift_cmd": "È",
"ctrl_cmd": "~~~CTRLSEQ9~~~",
"alt_name": "`",
- "alt_cmd": "ESCAPED|-- GRAVE"
+ "alt_cmd": "ESCAPED|-- GRAVE",
+ "altshift_name": "`",
+ "altshift_cmd": "`"
},
{
"name": "^",
@@ -202,7 +237,7 @@
"shift_cmd": "V",
"ctrl_cmd": "~~~CTRLSEQ20~~~",
"alt_name": "ˇ",
- "alt_cmd": "ESCAPE|-- CARON"
+ "alt_cmd": "ESCAPED|-- CARON"
},
{
"name": "D",
@@ -210,7 +245,9 @@
"shift_cmd": "D",
"ctrl_cmd": "~~~CTRLSEQ15~~~",
"alt_name": "ð",
- "alt_cmd": "ð"
+ "alt_cmd": "ð",
+ "altshift_name": "Ð",
+ "altshift_cmd": "Ð"
},
{
"name": "L",
@@ -224,7 +261,9 @@
"cmd": "j",
"shift_cmd": "J",
"alt_name": "ij",
- "alt_cmd": "ij"
+ "alt_cmd": "ij",
+ "altshift_name": "IJ",
+ "altshift_cmd": "IJ"
},
{
"name": "Z",
@@ -232,6 +271,8 @@
"shift_cmd": "Z",
"alt_name": "ə",
"alt_cmd": "ə",
+ "altshift_name": "Ə",
+ "altshift_cmd": "Ə",
"ctrl_cmd": "~~~CTRLSEQ17~~~"
},
{
@@ -259,7 +300,19 @@
"shift_cmd": "A",
"ctrl_cmd": "~~~CTRLSEQ13~~~",
"alt_name": "æ",
- "alt_cmd": "æ"
+ "alt_cmd": "æ",
+ "altshift_name": "Æ",
+ "altshift_cmd": "Æ"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_name": "ù",
+ "alt_cmd": "ù",
+ "altshift_name": "Ù",
+ "altshift_cmd": "Ù"
},
{
"name": "I",
@@ -269,14 +322,6 @@
"alt_name": "¨",
"alt_cmd": "ESCAPED|-- TREMA"
},
- {
- "name": "U",
- "cmd": "u",
- "shift_cmd": "U",
- "ctrl_cmd": "~~~CTRLSEQ11~~~",
- "alt_name": "ù",
- "alt_cmd": "ù"
- },
{
"name": "E",
"cmd": "e",
@@ -300,7 +345,9 @@
"shift_cmd": "C",
"ctrl_cmd": "~~~CTRLSEQ19~~~",
"alt_name": "©",
- "alt_cmd": "©"
+ "alt_cmd": "©",
+ "altshift_name": "ſ",
+ "altshift_cmd": "ſ"
},
{
"name": "T",
@@ -308,7 +355,9 @@
"shift_cmd": "T",
"ctrl_cmd": "~~~CTRLSEQ9~~~",
"alt_name": "þ",
- "alt_cmd": "þ"
+ "alt_cmd": "þ",
+ "altshift_name": "Þ",
+ "altshift_cmd": "Þ"
},
{
"name": "S",
@@ -324,7 +373,9 @@
"shift_cmd": "R",
"ctrl_cmd": "~~~CTRLSEQ8~~~",
"alt_name": "®",
- "alt_cmd": "®"
+ "alt_cmd": "®",
+ "altshift_name": "™",
+ "altshift_cmd": "™"
},
{
"name": "N",
@@ -339,14 +390,18 @@
"shift_cmd": "M",
"alt_name": "¯",
"ctrl_cmd": "\r",
- "alt_cmd": "ESCAPED|-- MACRON"
+ "alt_cmd": "ESCAPED|-- MACRON",
+ "altshift_name": "º",
+ "altshift_cmd": "º"
},
{
"name": "Ç",
"cmd": "ç",
"shift_cmd": "Ç",
"alt_name": "¸",
- "alt_cmd": "ESCAPED|-- CEDILLA"
+ "alt_cmd": "ESCAPED|-- CEDILLA",
+ "altshift_name": ",",
+ "altshift_cmd": "ESCAPED|-- IOTASUB"
},
{
"name": "",
@@ -378,7 +433,9 @@
"shift_cmd": "Y",
"ctrl_cmd": "~~~CTRLSEQ10~~~",
"alt_name": "{",
- "alt_cmd": "{"
+ "alt_cmd": "{",
+ "altshift_name": "‘",
+ "altshift_cmd": "‘"
},
{
"name": "X",
@@ -386,7 +443,9 @@
"shift_cmd": "X",
"ctrl_cmd": "~~~CTRLSEQ18~~~",
"alt_name": "}",
- "alt_cmd": "}"
+ "alt_cmd": "}",
+ "altshift_name": "’",
+ "altshift_cmd": "’"
},
{
"name": ".",
@@ -395,7 +454,9 @@
"shift_name": ":",
"shift_cmd": ":",
"alt_name": "…",
- "alt_cmd": "…"
+ "alt_cmd": "…",
+ "altshift_name": "·",
+ "altshift_cmd": "·"
},
{
"name": "K",
@@ -435,7 +496,9 @@
"cmd": "h",
"shift_cmd": "H",
"alt_name": "†",
- "alt_cmd": "†"
+ "alt_cmd": "†",
+ "altshift_name": "‡",
+ "altshift_cmd": "‡"
},
{
"name": "F",
@@ -443,14 +506,16 @@
"shift_cmd": "F",
"ctrl_cmd": "~~~CTRLSEQ16~~~",
"alt_name": "˛",
- "alt_cmd": "ESCAPED|-- IOTASUB"
+ "alt_cmd": "ESCAPED|-- IOTASUB",
+ "altshift_name": "ª",
+ "altshift_cmd": "ª"
},
{
"name": "SHIFT",
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -467,7 +532,7 @@
{
"name": "",
"cmd": " ",
- "shift_cmd": " ",
+ "shift_cmd": "\u00A0",
"alt_cmd": "_"
},
{
@@ -479,15 +544,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/fr-FR.json b/src/assets/kb_layouts/fr-FR.json
index d5383ede3..e9186c47e 100644
--- a/src/assets/kb_layouts/fr-FR.json
+++ b/src/assets/kb_layouts/fr-FR.json
@@ -414,7 +414,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -441,15 +441,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/hu-HU.json b/src/assets/kb_layouts/hu-HU.json
index 1953a4643..5db07efb1 100644
--- a/src/assets/kb_layouts/hu-HU.json
+++ b/src/assets/kb_layouts/hu-HU.json
@@ -399,7 +399,7 @@
"cmd": "ESCAPED|-- SHIFT: RIGHT"
},
{
- "name": "⬆",
+ "name": "ESCAPED|-- ICON: ARROW_UP",
"cmd": "~~~CTRLSEQ1~~~OA"
}
],
@@ -426,15 +426,15 @@
"cmd": "ESCAPED|-- CTRL: RIGHT"
},
{
- "name": "⬅",
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
"cmd": "~~~CTRLSEQ1~~~OD"
},
{
- "name": "⬇",
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
"cmd": "~~~CTRLSEQ1~~~OB"
},
{
- "name": "➡",
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
"cmd": "~~~CTRLSEQ1~~~OC"
}
]
diff --git a/src/assets/kb_layouts/it-IT.json b/src/assets/kb_layouts/it-IT.json
new file mode 100644
index 000000000..0ca9e2513
--- /dev/null
+++ b/src/assets/kb_layouts/it-IT.json
@@ -0,0 +1,447 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "\\",
+ "cmd": "\\",
+ "shift_name": "|",
+ "shift_cmd": "|"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "£",
+ "shift_cmd": "£",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~3",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "?",
+ "cmd": "?",
+ "shift_name": "'",
+ "shift_cmd": "'",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[22~",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "ì",
+ "cmd": "ì",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "\r",
+ "alt_name": "€",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "è",
+ "cmd": "è",
+ "shift_name": "é",
+ "shift_cmd": "é",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "ò",
+ "cmd": "ò",
+ "shift_name": "ç",
+ "shift_cmd": "ç",
+ "alt_name": "@",
+ "alt_cmd": "@"
+ },
+ {
+ "name": "à",
+ "cmd": "à",
+ "shift_name": "°",
+ "shift_cmd": "°",
+ "alt_name": "#",
+ "alt_cmd": "#"
+ },
+ {
+ "name": "ù",
+ "cmd": "ù",
+ "shift_name": "§",
+ "shift_cmd": "§",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/nl-BE.json b/src/assets/kb_layouts/nl-BE.json
new file mode 100644
index 000000000..5170e185a
--- /dev/null
+++ b/src/assets/kb_layouts/nl-BE.json
@@ -0,0 +1,458 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "²",
+ "cmd": "²",
+ "shift_name": "³",
+ "shift_cmd": "³",
+ "alt_cmd": "¬"
+ },
+ {
+ "name": "&",
+ "cmd": "&",
+ "shift_name": "1",
+ "shift_cmd": "1",
+ "alt_name": "|",
+ "alt_cmd": "|",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "é",
+ "cmd": "é",
+ "shift_name": "2",
+ "shift_cmd": "2",
+ "capslck_cmd": "É",
+ "alt_name": "@",
+ "alt_cmd": "@",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "\"",
+ "cmd": "\"",
+ "shift_name": "3",
+ "shift_cmd": "3",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_name": "#",
+ "alt_cmd": "#",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "4",
+ "shift_cmd": "4",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "(",
+ "cmd": "(",
+ "shift_name": "5",
+ "shift_cmd": "5",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "§",
+ "cmd": "§",
+ "shift_name": "6",
+ "shift_cmd": "6",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_name": "^",
+ "alt_cmd": "|^",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "è",
+ "cmd": "è",
+ "shift_name": "7",
+ "shift_cmd": "7",
+ "capslck_cmd": "È",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "!",
+ "cmd": "!",
+ "shift_name": "8",
+ "shift_cmd": "8",
+ "ctrl_cmd": "\r",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "ç",
+ "cmd": "ç",
+ "shift_name": "9",
+ "shift_cmd": "9",
+ "capslck_cmd": "Ç",
+ "alt_name": "{",
+ "alt_cmd": "{",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "à",
+ "cmd": "à",
+ "shift_name": "0",
+ "shift_cmd": "0",
+ "capslck_cmd": "À",
+ "alt_name": "}",
+ "alt_cmd": "@}",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": ")",
+ "cmd": ")",
+ "shift_name": "°",
+ "shift_cmd": "°",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "alt_name": "€",
+ "alt_cmd": "€",
+ "ctrl_cmd": "\r"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "^",
+ "cmd": "ESCAPED|-- CIRCUM",
+ "shift_name": "¨",
+ "shift_cmd": "ESCAPED|-- TREMA",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "$",
+ "cmd": "$",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": "ù",
+ "cmd": "ù",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "alt_name": "'",
+ "alt_cmd": "'",
+ "capslck_cmd": "Ù"
+ },
+ {
+ "name": "µ",
+ "cmd": "µ",
+ "shift_name": "£",
+ "shift_cmd": "£",
+ "alt_name": "`",
+ "alt_cmd": "`"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": "?",
+ "shift_cmd": "?"
+ },
+ {
+ "name": ";",
+ "cmd": ";",
+ "shift_name": ".",
+ "shift_cmd": "."
+ },
+ {
+ "name": ":",
+ "cmd": ":",
+ "shift_name": "\/",
+ "shift_cmd": "\/"
+ },
+ {
+ "name": "=",
+ "cmd": "=",
+ "shift_name": "+",
+ "shift_cmd": "+",
+ "alt_name": "~",
+ "alt_cmd": "~"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/pt-BR.json b/src/assets/kb_layouts/pt-BR.json
new file mode 100644
index 000000000..3d3f2862a
--- /dev/null
+++ b/src/assets/kb_layouts/pt-BR.json
@@ -0,0 +1,368 @@
+{
+ "row_numbers": [{
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ }, {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "\"",
+ "shift_cmd": "\""
+ }, {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ }, {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "@",
+ "shift_cmd": "@",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ }, {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~3",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ }, {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ }, {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ }, {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "¨",
+ "shift_cmd": "¨",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ }, {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ }, {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ }, {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_cmd": "~~~CTRLSEQ1~~~9",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ }, {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_cmd": "~~~CTRLSEQ1~~~0",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ }, {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ }, {
+ "name": "=",
+ "cmd": "=",
+ "shift_name": "+",
+ "shift_cmd": "+",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ }, {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "BACKSPACE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }],
+ "row_1": [{
+ "name": "TAB",
+ "cmd": "\t"
+ }, {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ }, {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ }, {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ }, {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ }, {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ }, {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ }, {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ }, {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ }, {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ }, {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ }, {
+ "name": "`",
+ "cmd": "`",
+ "shift_name": "´",
+ "shift_cmd": "´",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ }, {
+ "name": "{",
+ "cmd": "{",
+ "shift_name": "[",
+ "shift_cmd": "[",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ }, {
+ "name": "ENTER",
+ "cmd": "\r"
+ }],
+ "row_2": [{
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ }, {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ }, {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ }, {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ }, {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ }, {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ }, {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ }, {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ }, {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ }, {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ }, {
+ "name": "Ç",
+ "cmd": "ç",
+ "shift_cmd": "Ç",
+ "alt_cmd": "~~~CTRLSEQ1~~~ç"
+ }, {
+ "name": "^",
+ "cmd": "^",
+ "shift_name": "~",
+ "shift_cmd": "~"
+ }, {
+ "name": "}",
+ "cmd": "}",
+ "shift_name": "]",
+ "shift_cmd": "]"
+ }, {
+ "name": "",
+ "cmd": "\r"
+ }],
+ "row_3": [{
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ }, {
+ "name": "\\",
+ "cmd": "\\",
+ "shift_name": "|",
+ "shift_cmd": "|",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ }, {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ }, {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ }, {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ }, {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ }, {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ }, {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ }, {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ }, {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ",",
+ "shift_cmd": ","
+ }, {
+ "name": ">",
+ "cmd": ">",
+ "shift_name": ".",
+ "shift_cmd": "."
+ }, {
+ "name": ":",
+ "cmd": ":",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ }, {
+ "name": "?",
+ "cmd": "?",
+ "shift_name": "\/",
+ "shift_cmd": "\/"
+ }, {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ }, {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }],
+ "row_space": [{
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ }, {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ }, {
+ "name": "",
+ "cmd": " "
+ }, {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ }, {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ }, {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ }, {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ }, {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }]
+}
diff --git a/src/assets/kb_layouts/sv-SE.json b/src/assets/kb_layouts/sv-SE.json
new file mode 100644
index 000000000..7b4edf5e8
--- /dev/null
+++ b/src/assets/kb_layouts/sv-SE.json
@@ -0,0 +1,448 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "½",
+ "cmd": "½",
+ "shift_name": "§",
+ "shift_cmd": "§"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_cmd": "@",
+ "alt_name": "@",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "#",
+ "shift_cmd": "#",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_name": "£",
+ "alt_cmd": "£",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "¤",
+ "shift_cmd": "¤",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_name": "$",
+ "alt_cmd": "$",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "alt_name": "{",
+ "alt_cmd": "{",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_name": "}",
+ "alt_cmd": "}",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "´",
+ "cmd": "´",
+ "shift_name": "`",
+ "shift_cmd": "`",
+ "alt_cmd": "|",
+ "alt_name": "|",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~q"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "alt_name": "€",
+ "alt_cmd": "€",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "Å",
+ "cmd": "å",
+ "shift_cmd": "Å",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "¨",
+ "cmd": "¨",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Ä",
+ "cmd": "ä",
+ "shift_cmd": "Ä"
+ },
+ {
+ "name": "Ö",
+ "cmd": "ö",
+ "shift_cmd": "Ö"
+ },
+ {
+ "name": "'",
+ "cmd": "'",
+ "shift_name": "*",
+ "shift_cmd": "*",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/tr-TR-F.json b/src/assets/kb_layouts/tr-TR-F.json
new file mode 100644
index 000000000..beb4e3a31
--- /dev/null
+++ b/src/assets/kb_layouts/tr-TR-F.json
@@ -0,0 +1,446 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "+",
+ "cmd": "+",
+ "shift_name": "*",
+ "shift_cmd": "*"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "\"",
+ "shift_cmd": "\"",
+ "alt_cmd": "~~~CTRLSEQ1~~~2",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_name": "#",
+ "alt_cmd": "#",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "$",
+ "shift_cmd": "$",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~4",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~5",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~6",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "'",
+ "shift_cmd": "'",
+ "alt_name": "{",
+ "alt_cmd": "{",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "ctrl_cmd": "\r",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_name": "}",
+ "alt_cmd": "}",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "/",
+ "cmd": "/",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "alt_name": "|",
+ "alt_cmd": "|",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_name": "@",
+ "alt_cmd": "@"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "Ğ",
+ "cmd": "ğ",
+ "shift_cmd": "Ğ",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~e"
+ },
+ {
+ "name": "I",
+ "cmd": "ı",
+ "shift_cmd": "I",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~t"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_name": "~",
+ "alt_cmd":"~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "İ",
+ "cmd": "i",
+ "shift_cmd": "İ",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_name": "€",
+ "alt_cmd": "€"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "Ü",
+ "cmd": "ü",
+ "shift_cmd": "Ü",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "alt_name": "₺",
+ "alt_cmd": "₺"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y"
+ },
+ {
+ "name": "Ş",
+ "cmd": "ş",
+ "shift_cmd": "Ş"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_name": "`",
+ "alt_cmd": "`"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "Ö",
+ "cmd": "ö",
+ "shift_cmd": "Ö",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "Ç",
+ "cmd": "ç",
+ "shift_cmd": "Ç",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/kb_layouts/tr-TR-Q.json b/src/assets/kb_layouts/tr-TR-Q.json
new file mode 100644
index 000000000..984a113d4
--- /dev/null
+++ b/src/assets/kb_layouts/tr-TR-Q.json
@@ -0,0 +1,452 @@
+{
+ "row_numbers": [
+ {
+ "name": "ESC",
+ "cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "\"",
+ "cmd": "\"",
+ "shift_name": "é",
+ "shift_cmd": "é"
+ },
+ {
+ "name": "1",
+ "cmd": "1",
+ "shift_name": "!",
+ "shift_cmd": "!",
+ "alt_cmd": "~~~CTRLSEQ1~~~1",
+ "fn_name": "F1",
+ "fn_cmd": "~~~CTRLSEQ1~~~OP"
+ },
+ {
+ "name": "2",
+ "cmd": "2",
+ "shift_name": "'",
+ "shift_cmd": "'",
+ "alt_name": "£",
+ "alt_cmd": "£",
+ "fn_name": "F2",
+ "fn_cmd": "~~~CTRLSEQ1~~~OQ"
+ },
+ {
+ "name": "3",
+ "cmd": "3",
+ "shift_name": "^",
+ "shift_cmd": "^",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~",
+ "alt_name": "#",
+ "alt_cmd": "#",
+ "fn_name": "F3",
+ "fn_cmd": "~~~CTRLSEQ1~~~OR"
+ },
+ {
+ "name": "4",
+ "cmd": "4",
+ "shift_name": "+",
+ "shift_cmd": "+",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~",
+ "alt_name": "$",
+ "alt_cmd": "$",
+ "fn_name": "F4",
+ "fn_cmd": "~~~CTRLSEQ1~~~OS"
+ },
+ {
+ "name": "5",
+ "cmd": "5",
+ "shift_name": "%",
+ "shift_cmd": "%",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~",
+ "alt_name": "½",
+ "alt_cmd": "½",
+ "fn_name": "F5",
+ "fn_cmd": "~~~CTRLSEQ1~~~[15~"
+ },
+ {
+ "name": "6",
+ "cmd": "6",
+ "shift_name": "&",
+ "shift_cmd": "&",
+ "ctrl_cmd": "~~~CTRLSEQ4~~~",
+ "alt_name": "§",
+ "alt_cmd": "§",
+ "fn_name": "F6",
+ "fn_cmd": "~~~CTRLSEQ1~~~[17~"
+ },
+ {
+ "name": "7",
+ "cmd": "7",
+ "shift_name": "/",
+ "shift_cmd": "/",
+ "ctrl_cmd": "~~~CTRLSEQ5~~~",
+ "alt_name": "{",
+ "alt_cmd": "{",
+ "fn_name": "F7",
+ "fn_cmd": "~~~CTRLSEQ1~~~[18~"
+ },
+ {
+ "name": "8",
+ "cmd": "8",
+ "shift_name": "(",
+ "shift_cmd": "(",
+ "ctrl_cmd": "\r",
+ "alt_name": "[",
+ "alt_cmd": "[",
+ "fn_name": "F8",
+ "fn_cmd": "~~~CTRLSEQ1~~~[19~"
+ },
+ {
+ "name": "9",
+ "cmd": "9",
+ "shift_name": ")",
+ "shift_cmd": ")",
+ "alt_name": "]",
+ "alt_cmd": "]",
+ "fn_name": "F9",
+ "fn_cmd": "~~~CTRLSEQ1~~~[20~"
+ },
+ {
+ "name": "0",
+ "cmd": "0",
+ "shift_name": "=",
+ "shift_cmd": "=",
+ "alt_name": "}",
+ "alt_cmd": "}",
+ "fn_name": "F10",
+ "fn_cmd": "~~~CTRLSEQ1~~~[21~"
+ },
+ {
+ "name": "*",
+ "cmd": "*",
+ "shift_name": "?",
+ "shift_cmd": "?",
+ "alt_name": "\\",
+ "alt_cmd": "\\",
+ "fn_name": "F11",
+ "fn_cmd": "~~~CTRLSEQ1~~~[23~"
+ },
+ {
+ "name": "-",
+ "cmd": "-",
+ "shift_name": "_",
+ "shift_cmd": "_",
+ "alt_name": "|",
+ "alt_cmd": "|",
+ "fn_name": "F12",
+ "fn_cmd": "~~~CTRLSEQ1~~~[24~"
+ },
+ {
+ "name": "BACK",
+ "cmd": "\b",
+ "shift_name": "DELETE",
+ "shift_cmd": "~~~CTRLSEQ1~~~[3~"
+ }
+ ],
+ "row_1": [
+ {
+ "name": "TAB",
+ "cmd": "\t"
+ },
+ {
+ "name": "Q",
+ "cmd": "q",
+ "shift_cmd": "Q",
+ "ctrl_cmd": "~~~CTRLSEQ6~~~",
+ "alt_name": "@",
+ "alt_cmd": "@"
+ },
+ {
+ "name": "W",
+ "cmd": "w",
+ "shift_cmd": "W",
+ "ctrl_cmd": "~~~CTRLSEQ7~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~w"
+ },
+ {
+ "name": "E",
+ "cmd": "e",
+ "shift_cmd": "E",
+ "ctrl_cmd": "\r",
+ "alt_name": "€",
+ "alt_cmd": "€"
+ },
+ {
+ "name": "R",
+ "cmd": "r",
+ "shift_cmd": "R",
+ "ctrl_cmd": "~~~CTRLSEQ8~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~r"
+ },
+ {
+ "name": "T",
+ "cmd": "t",
+ "shift_cmd": "T",
+ "ctrl_cmd": "~~~CTRLSEQ9~~~",
+ "alt_name": "₺",
+ "alt_cmd": "₺"
+ },
+ {
+ "name": "Y",
+ "cmd": "y",
+ "shift_cmd": "Y",
+ "ctrl_cmd": "~~~CTRLSEQ10~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~y"
+ },
+ {
+ "name": "U",
+ "cmd": "u",
+ "shift_cmd": "U",
+ "ctrl_cmd": "~~~CTRLSEQ11~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~u"
+ },
+ {
+ "name": "I",
+ "cmd": "i",
+ "shift_cmd": "I",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~i"
+ },
+ {
+ "name": "O",
+ "cmd": "o",
+ "shift_cmd": "O",
+ "alt_cmd": "~~~CTRLSEQ1~~~o"
+ },
+ {
+ "name": "P",
+ "cmd": "p",
+ "shift_cmd": "P",
+ "ctrl_cmd": "~~~CTRLSEQ12~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~p"
+ },
+ {
+ "name": "Ğ",
+ "cmd": "ğ",
+ "shift_cmd": "Ğ",
+ "ctrl_cmd": "~~~CTRLSEQ1~~~"
+ },
+ {
+ "name": "Ü",
+ "cmd": "ü",
+ "shift_cmd": "Ü",
+ "alt_name": "~",
+ "alt_cmd": "~",
+ "ctrl_cmd": "~~~CTRLSEQ3~~~"
+ },
+ {
+ "name": "ENTER",
+ "cmd": "\r"
+ }
+ ],
+ "row_2": [
+ {
+ "name": "CAPS",
+ "cmd": "ESCAPED|-- CAPSLCK: ON",
+ "shift_cmd": "ESCAPED|-- CAPSLCK: OFF"
+ },
+ {
+ "name": "A",
+ "cmd": "a",
+ "shift_cmd": "A",
+ "ctrl_cmd": "~~~CTRLSEQ13~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~a"
+ },
+ {
+ "name": "S",
+ "cmd": "s",
+ "shift_cmd": "S",
+ "ctrl_cmd": "~~~CTRLSEQ14~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~s"
+ },
+ {
+ "name": "D",
+ "cmd": "d",
+ "shift_cmd": "D",
+ "ctrl_cmd": "~~~CTRLSEQ15~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~d"
+ },
+ {
+ "name": "F",
+ "cmd": "f",
+ "shift_cmd": "F",
+ "ctrl_cmd": "~~~CTRLSEQ16~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~f"
+ },
+ {
+ "name": "G",
+ "cmd": "g",
+ "shift_cmd": "G",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~g"
+ },
+ {
+ "name": "H",
+ "cmd": "h",
+ "shift_cmd": "H",
+ "alt_cmd": "~~~CTRLSEQ1~~~h"
+ },
+ {
+ "name": "J",
+ "cmd": "j",
+ "shift_cmd": "J",
+ "alt_cmd": "~~~CTRLSEQ1~~~j"
+ },
+ {
+ "name": "K",
+ "cmd": "k",
+ "shift_cmd": "K",
+ "alt_cmd": "~~~CTRLSEQ1~~~k"
+ },
+ {
+ "name": "L",
+ "cmd": "l",
+ "shift_cmd": "L",
+ "alt_cmd": "~~~CTRLSEQ1~~~l"
+ },
+ {
+ "name": "Ş",
+ "cmd": "ş",
+ "shift_cmd": "Ş"
+ },
+ {
+ "name": "İ",
+ "cmd": "i",
+ "shift_cmd": "İ"
+ },
+ {
+ "name": ",",
+ "cmd": ",",
+ "shift_name": ";",
+ "shift_cmd": ";",
+ "alt_name": "`",
+ "alt_cmd": "`",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "",
+ "cmd": "\r"
+ }
+ ],
+ "row_3": [
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: LEFT"
+ },
+ {
+ "name": "<",
+ "cmd": "<",
+ "shift_name": ">",
+ "shift_cmd": ">",
+ "alt_name": "|",
+ "alt_cmd": "|",
+ "ctrl_cmd": "~~~CTRLSEQ2~~~"
+ },
+ {
+ "name": "Z",
+ "cmd": "z",
+ "shift_cmd": "Z",
+ "ctrl_cmd": "~~~CTRLSEQ17~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~z"
+ },
+ {
+ "name": "X",
+ "cmd": "x",
+ "shift_cmd": "X",
+ "ctrl_cmd": "~~~CTRLSEQ18~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~x"
+ },
+ {
+ "name": "C",
+ "cmd": "c",
+ "shift_cmd": "C",
+ "ctrl_cmd": "~~~CTRLSEQ19~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~c"
+ },
+ {
+ "name": "V",
+ "cmd": "v",
+ "shift_cmd": "V",
+ "ctrl_cmd": "~~~CTRLSEQ20~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~v"
+ },
+ {
+ "name": "B",
+ "cmd": "b",
+ "shift_cmd": "B",
+ "ctrl_cmd": "~~~CTRLSEQ21~~~",
+ "alt_cmd": "~~~CTRLSEQ1~~~b"
+ },
+ {
+ "name": "N",
+ "cmd": "n",
+ "shift_cmd": "N",
+ "alt_cmd": "~~~CTRLSEQ1~~~n"
+ },
+ {
+ "name": "M",
+ "cmd": "m",
+ "shift_cmd": "M",
+ "ctrl_cmd": "\r",
+ "alt_cmd": "~~~CTRLSEQ1~~~m"
+ },
+ {
+ "name": "Ö",
+ "cmd": "ö",
+ "shift_cmd": "Ö"
+ },
+ {
+ "name": "Ç",
+ "cmd": "ç",
+ "shift_cmd": "Ç"
+ },
+ {
+ "name": ".",
+ "cmd": ".",
+ "shift_name": ":",
+ "shift_cmd": ":"
+ },
+ {
+ "name": "SHIFT",
+ "cmd": "ESCAPED|-- SHIFT: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_UP",
+ "cmd": "~~~CTRLSEQ1~~~OA"
+ }
+ ],
+ "row_space": [
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: LEFT"
+ },
+ {
+ "name": "FN",
+ "cmd": "ESCAPED|-- FN: ON",
+ "fn_cmd": "ESCAPED|-- FN: OFF"
+ },
+ {
+ "name": "",
+ "cmd": " "
+ },
+ {
+ "name": "ALT GR",
+ "cmd": "ESCAPED|-- ALT: RIGHT"
+ },
+ {
+ "name": "CTRL",
+ "cmd": "ESCAPED|-- CTRL: RIGHT"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_LEFT",
+ "cmd": "~~~CTRLSEQ1~~~OD"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_DOWN",
+ "cmd": "~~~CTRLSEQ1~~~OB"
+ },
+ {
+ "name": "ESCAPED|-- ICON: ARROW_RIGHT",
+ "cmd": "~~~CTRLSEQ1~~~OC"
+ }
+ ]
+}
diff --git a/src/assets/misc/file-icons-match.js b/src/assets/misc/file-icons-match.js
new file mode 100644
index 000000000..03d342c6a
--- /dev/null
+++ b/src/assets/misc/file-icons-match.js
@@ -0,0 +1,2416 @@
+/*
+ * Thanks everyone for pointing out this is probably on of the ugliest source code files on GitHub
+ * This is script-generated code, however, so it might disqualify
+ * See file-icons-generator.js at root dir of git tree
+*/
+function matchIcon(filename) {
+ if (/^APLSource$/.test(filename)) { return "acre"; }
+ if (/^\.acre$/.test(filename)) { return "acre"; }
+ if (/^\.agda$/i.test(filename)) { return "agda"; }
+ if (/\/\.config\/alacritty$/i.test(filename)) { return "alacritty-alt"; }
+ if (/\.(app|xcodeproj|xcworkspace)$/i.test(filename)) { return "appstore"; }
+ if (/\.artx$/i.test(filename)) { return "arttext"; }
+ if (/\.art4$/i.test(filename)) { return "arttext4"; }
+ if (/^\.atom(-ci)?$/.test(filename)) { return "atom"; }
+ if (/[^\s.]\.(c?action|definition|workflow)$/i.test(filename)) { return "automator"; }
+ if (/^\.azure-pipelines$/i.test(filename)) { return "azurepipelines"; }
+ if (/^\.bzr$/.test(filename)) { return "bazaar"; }
+ if (/^\.bitcoin$/i.test(filename)) { return "bitcoin"; }
+ if (/^bloc$/i.test(filename)) { return "bloc"; }
+ if (/^bower[-_]components$/.test(filename)) { return "bower"; }
+ if (/^\.buildkite$/.test(filename)) { return "buildkite"; }
+ if (/^\.cabal$/i.test(filename)) { return "cabal"; }
+ if (/\.chef$/.test(filename)) { return "chef"; }
+ if (/^\.circleci$/.test(filename)) { return "circleci"; }
+ if (/^cnab$/i.test(filename)) { return "cnab"; }
+ if (/^\.cpan$/i.test(filename)) { return "cpan"; }
+ if (/^\.cpanplus$/i.test(filename)) { return "cpan"; }
+ if (/^cubits?$/i.test(filename)) { return "cubit"; }
+ if (/^CVS$/.test(filename)) { return "cvs"; }
+ if (/\.deno$/i.test(filename)) { return "deno"; }
+ if (/\.dependabot$/i.test(filename)) { return "dependabot"; }
+ if (/^\.devcontainer$/i.test(filename)) { return "devcontainer"; }
+ if (/^\.docker$/.test(filename)) { return "docker"; }
+ if (/^(Dropbox|\.dropbox\.cache)$/.test(filename)) { return "dropbox"; }
+ if (/^\.dub$/.test(filename)) { return "dub"; }
+ if (/^\.dvc$/.test(filename)) { return "dvc"; }
+ if (/^\.emacs\.d$/.test(filename)) { return "emacs"; }
+ if (/^\.expo(-shared)?$/i.test(filename)) { return "expo"; }
+ if (/^\.fossil-settings$/i.test(filename)) { return "fossil"; }
+ if (/\.git$/.test(filename)) { return "git"; }
+ if (/^\.github$/.test(filename)) { return "github"; }
+ if (/^\.gitlab$/.test(filename)) { return "gitlab"; }
+ if (/^\.nyc[-_]output$/.test(filename)) { return "istanbul"; }
+ if (/.\.(appex|bundle|ccl|component|framework|framework|ideplugin|kext|mdimporter|osax|(osirix)?plugin|qlgenerator)$/i.test(filename)) { return "dylib"; }
+ if (/^\.meteor$/.test(filename)) { return "meteor"; }
+ if (/^\.hg$/.test(filename)) { return "hg"; }
+ if (/^node_modules$/.test(filename)) { return "node"; }
+ if (/^\.node-gyp$/.test(filename)) { return "node"; }
+ if (/^\.(bundle|paket)$/i.test(filename)) { return "package"; }
+ if (/^\.svn$/i.test(filename)) { return "svn"; }
+ if (/\.tmBundle$/i.test(filename)) { return "textmate"; }
+ if (/\.ufo\d?$/i.test(filename)) { return "ufo"; }
+ if (/\.vagrant$/i.test(filename)) { return "vagrant"; }
+ if (/\.vagrant\.d$/i.test(filename)) { return "vagrant"; }
+ if (/^\.vim$/i.test(filename)) { return "vim"; }
+ if (/^\.vscode$/i.test(filename)) { return "vs"; }
+ if (/^\.wine$/i.test(filename)) { return "wine"; }
+ if (/^\.yarn$/i.test(filename)) { return "yarn"; }
+ if (/\.bsl$/i.test(filename)) { return "1c"; }
+ if (/\.sdbl$/i.test(filename)) { return "1c"; }
+ if (/\.os$/i.test(filename)) { return "1c"; }
+ if (/\.mdo$/i.test(filename)) { return "1c-alt"; }
+ if (/\.4dm$/i.test(filename)) { return "4d"; }
+ if (/\.a?\+$/i.test(filename)) { return "a-plus"; }
+ if (/\.abap$/i.test(filename)) { return "abap"; }
+ if (/\.abif$/i.test(filename)) { return "abif"; }
+ if (/\.ab1$/i.test(filename)) { return "abif"; }
+ if (/\.fsa$/i.test(filename)) { return "abif"; }
+ if (/^acre\.config$/i.test(filename)) { return "acre"; }
+ if (/\.swf$/i.test(filename)) { return "as"; }
+ if (/\.as$/i.test(filename)) { return "as"; }
+ if (/\.jsfl$/i.test(filename)) { return "as"; }
+ if (/\.swc$/i.test(filename)) { return "as"; }
+ if (/\.(ada|adb|ads)$/i.test(filename)) { return "ada"; }
+ if (/^(ada95|ada2005)$/i.test(filename)) { return "ada"; }
+ if (/\.aep$/i.test(filename)) { return "ae"; }
+ if (/\.aet$/i.test(filename)) { return "ae"; }
+ if (/\.fla$/i.test(filename)) { return "animate"; }
+ if (/\.ai$/i.test(filename)) { return "ai"; }
+ if (/\.ait$/i.test(filename)) { return "ai"; }
+ if (/\.indd$/i.test(filename)) { return "indesign"; }
+ if (/\.indl$/i.test(filename)) { return "indesign"; }
+ if (/\.indt$/i.test(filename)) { return "indesign"; }
+ if (/\.indb$/i.test(filename)) { return "indesign"; }
+ if (/\.idml$/i.test(filename)) { return "indesign"; }
+ if (/\.psd$/i.test(filename)) { return "psd"; }
+ if (/\.psb$/i.test(filename)) { return "psd"; }
+ if (/\.prproj$/i.test(filename)) { return "premiere"; }
+ if (/\.prel$/i.test(filename)) { return "premiere"; }
+ if (/\.psq$/i.test(filename)) { return "premiere"; }
+ if (/\.prw$/i.test(filename)) { return "totvs"; }
+ if (/\.ahu$/i.test(filename)) { return "totvs"; }
+ if (/\.aph$/i.test(filename)) { return "totvs"; }
+ if (/\.tlpp$/i.test(filename)) { return "totvs"; }
+ if (/\.affect$/i.test(filename)) { return "affectscript"; }
+ if (/\.afdesign$/i.test(filename)) { return "affinity"; }
+ if (/\.afphoto$/i.test(filename)) { return "affinity"; }
+ if (/\.afpub$/i.test(filename)) { return "affinity"; }
+ if (/\.agda$/i.test(filename)) { return "agda"; }
+ if (/\.lagda$/i.test(filename)) { return "agda"; }
+ if (/^\.?alacritty\.ya?ml$/i.test(filename)) { return "alacritty"; }
+ if (/\.alexrc$/i.test(filename)) { return "alex"; }
+ if (/\.alexignore$/i.test(filename)) { return "alex"; }
+ if (/\.als$/i.test(filename)) { return "alloy"; }
+ if (/(\.|^)APKBUILD$/.test(filename)) { return "alpine"; }
+ if (/\.ampl$/i.test(filename)) { return "ampl"; }
+ if (/\.muse$/i.test(filename)) { return "amusewiki"; }
+ if (/Muse$/i.test(filename)) { return "amusewiki"; }
+ if (/\.ana$/i.test(filename)) { return "analytica"; }
+ if (/\.smali$/i.test(filename)) { return "android"; }
+ if (/\.rsh$/i.test(filename)) { return "android"; }
+ if (/\.webarchivexml$/i.test(filename)) { return "android"; }
+ if (/\.(acs|angelscript)$/i.test(filename)) { return "angelscript"; }
+ if (/AngelCode$/i.test(filename)) { return "angelscript"; }
+ if (/^angular[^.]*\.[cm]?js$/i.test(filename)) { return "angular"; }
+ if (/\.anme$/i.test(filename)) { return "animestudio"; }
+ if (/\.anime$/i.test(filename)) { return "animestudio"; }
+ if (/\.animeaction$/i.test(filename)) { return "animestudio"; }
+ if (/\.animebrush$/i.test(filename)) { return "animestudio"; }
+ if (/\.animeexport$/i.test(filename)) { return "animestudio"; }
+ if (/\.animeproj$/i.test(filename)) { return "animestudio"; }
+ if (/\.animestyle$/i.test(filename)) { return "animestudio"; }
+ if (/(^|\.)ansible(\.ya?ml)?$/i.test(filename)) { return "ansible"; }
+ if (/([\\\/])roles\1[^\\\/]+\1(?:tasks|handlers|tests)\1.*\.ya?ml$/i.test(filename)) { return "ansible"; }
+ if (/([\\\/])roles\1[^\\\/]+\1(?:defaults|vars|meta)\1.*\.ya?ml$/i.test(filename)) { return "ansible"; }
+ if (/([\\\/])(?:group_vars|host_vars)\1.*\.ya?ml$/i.test(filename)) { return "ansible"; }
+ if (/(^|.*(\.|-|\/))vault\.ya?ml$$/i.test(filename)) { return "lock"; }
+ if (/\.ansiweatherrc$/i.test(filename)) { return "sun"; }
+ if (/^ant\.xml$|\.ant$/i.test(filename)) { return "ant"; }
+ if (/\.g$/i.test(filename)) { return "antlr"; }
+ if (/\.g4$/i.test(filename)) { return "antlr"; }
+ if (/^\.?antwar\.conf(ig)?\.[cm]?js$/i.test(filename)) { return "antwar"; }
+ if (/\.any$/i.test(filename)) { return "anyscript"; }
+ if (/^(apache2?|httpd)(\.[-\w]+)*\.conf$/i.test(filename)) { return "apache"; }
+ if (/\.apacheconf$/i.test(filename)) { return "apache"; }
+ if (/^httpd\.conf/i.test(filename)) { return "apache"; }
+ if (/apache2\/magic$/i.test(filename)) { return "apache"; }
+ if (/\.vhost$/i.test(filename)) { return "apache"; }
+ if (/\.thrift$/i.test(filename)) { return "apache"; }
+ if (/\.apib$/i.test(filename)) { return "api"; }
+ if (/^api-extractor(-base)?\.json$/i.test(filename)) { return "apiextractor"; }
+ if (/\.apl[acfino]?$/i.test(filename)) { return "apl"; }
+ if (/\.apl\.history$/i.test(filename)) { return "apl"; }
+ if (/^apollo\.config\.js$/i.test(filename)) { return "apollo"; }
+ if (/^appcelerator\.[cm]?js$/i.test(filename)) { return "appcelerator"; }
+ if (/\.(applescript|scpt)$/i.test(filename)) { return "apple"; }
+ if (/^com\.apple\./.test(filename)) { return "apple"; }
+ if (/^\.?appveyor\.yml$/i.test(filename)) { return "appveyor"; }
+ if (/\.arc$/i.test(filename)) { return "arc"; }
+ if (/^\.install$/.test(filename)) { return "archlinux"; }
+ if (/^\.SRCINFO$/.test(filename)) { return "archlinux"; }
+ if (/^pacman\.conf$/.test(filename)) { return "archlinux"; }
+ if (/^pamac\.conf$/.test(filename)) { return "archlinux"; }
+ if (/^PKGBUILD$/.test(filename)) { return "archlinux"; }
+ if (/yaourtrc$/i.test(filename)) { return "archlinux"; }
+ if (/\.ino$/i.test(filename)) { return "arduino"; }
+ if (/\.(ad|adoc|asc|asciidoc)$/i.test(filename)) { return "asciidoctor"; }
+ if (/\.asp$/i.test(filename)) { return "asp"; }
+ if (/\.asax$/i.test(filename)) { return "asp"; }
+ if (/\.ascx$/i.test(filename)) { return "asp"; }
+ if (/\.ashx$/i.test(filename)) { return "asp"; }
+ if (/\.asmx$/i.test(filename)) { return "asp"; }
+ if (/\.aspx$/i.test(filename)) { return "asp"; }
+ if (/\.axd$/i.test(filename)) { return "asp"; }
+ if (/\.aj$/i.test(filename)) { return "eclipse"; }
+ if (/\.a$/i.test(filename)) { return "asm"; }
+ if (/\.i$/i.test(filename)) { return "asm"; }
+ if (/\.s$/i.test(filename)) { return "asm"; }
+ if (/\.asm$/i.test(filename)) { return "asm"; }
+ if (/\.a51$/i.test(filename)) { return "asm"; }
+ if (/\.agc$/i.test(filename)) { return "asm-agc"; }
+ if (/^(Virtual\s*)?AGC$|^Apollo([-_\s]*11)?\s*Guidance\s*Computer$/i.test(filename)) { return "asm-agc"; }
+ if (/\.arm$/i.test(filename)) { return "asm-arm"; }
+ if (/\.avr$/i.test(filename)) { return "asm-avr"; }
+ if (/\.h8(SX?|\d{3})?$/i.test(filename)) { return "asm-hitachi"; }
+ if (/^(h8(SX?|\/?\d{3})?)$/i.test(filename)) { return "asm-hitachi"; }
+ if (/\.((x|i(a[-_]?))(32|86|64)(asm)?|i386|80386)$/i.test(filename)) { return "asm-intel"; }
+ if (/^(x86|x64|x86[-_]?64|i(a[-_]?)?(32|64)|i386|80386|Intel|Itanium|[ftm]asm)$/i.test(filename)) { return "asm-intel"; }
+ if (/\.m68k$/i.test(filename)) { return "asm-m68k"; }
+ if (/\.lst$/i.test(filename)) { return "asm-m68k"; }
+ if (/\.v(ax|masm)$/i.test(filename)) { return "asm-vax"; }
+ if (/^(Macro[-_\s]?32|VAX\s+Macro|vmasm)$/i.test(filename)) { return "asm-vax"; }
+ if (/\.z80$/i.test(filename)) { return "asm-zilog"; }
+ if (/\.PLX(COPY)?$/.test(filename)) { return "asm-zilog"; }
+ if (/\.asy$/i.test(filename)) { return "asymptote"; }
+ if (/\.atomproject\.[jc]son$/i.test(filename)) { return "atom"; }
+ if (/^\.?apmrc$/i.test(filename)) { return "atom"; }
+ if (/^\.?atoum(\.[^.]+)*\.php/i.test(filename)) { return "atoum"; }
+ if (/\.dats$/i.test(filename)) { return "ats"; }
+ if (/\.hats$/i.test(filename)) { return "ats"; }
+ if (/\.sats$/i.test(filename)) { return "ats"; }
+ if (/\.aup$/i.test(filename)) { return "audacity"; }
+ if (/\.mp3$/i.test(filename)) { return "audio"; }
+ if (/\.wav$/i.test(filename)) { return "audio"; }
+ if (/\.(aac|ac3|m4p)$/i.test(filename)) { return "audio"; }
+ if (/\.aif[fc]?$/i.test(filename)) { return "audio"; }
+ if (/\.au$/i.test(filename)) { return "audio"; }
+ if (/\.flac$/i.test(filename)) { return "audio"; }
+ if (/\.f4[ab]$/i.test(filename)) { return "audio"; }
+ if (/\.it$/i.test(filename)) { return "audio"; }
+ if (/\.m4a$/i.test(filename)) { return "audio"; }
+ if (/\.mka$/i.test(filename)) { return "audio"; }
+ if (/\.(mpc|mp\+)$/i.test(filename)) { return "audio"; }
+ if (/\.oga$/i.test(filename)) { return "audio"; }
+ if (/\.opus$/i.test(filename)) { return "audio"; }
+ if (/\.r[am]$/i.test(filename)) { return "audio"; }
+ if (/\.s3m$/i.test(filename)) { return "audio"; }
+ if (/\.sndh$/i.test(filename)) { return "audio"; }
+ if (/\.wma$/i.test(filename)) { return "audio"; }
+ if (/\.aug$/i.test(filename)) { return "augeas"; }
+ if (/^aurelia\.json$/i.test(filename)) { return "aurelia"; }
+ if (/\.ahk$/i.test(filename)) { return "ahk"; }
+ if (/\.ahkl$/i.test(filename)) { return "ahk"; }
+ if (/\.au3$/i.test(filename)) { return "autoit"; }
+ if (/^(AutoIt3|AutoItScript|au3)$/i.test(filename)) { return "autoit"; }
+ if (/\.av(cs|sc|dl)$/i.test(filename)) { return "avro"; }
+ if (/\.awk$/i.test(filename)) { return "awk"; }
+ if (/\.gawk$/i.test(filename)) { return "awk"; }
+ if (/\.mawk$/i.test(filename)) { return "awk"; }
+ if (/\.nawk$/i.test(filename)) { return "awk"; }
+ if (/\.auk$/i.test(filename)) { return "awk"; }
+ if (/^azure-pipelines\.ya?ml$/i.test(filename)) { return "azurepipelines"; }
+ if (/\.(babelrc|babelrc\.[cm]?js|languagebabel|babel)$/i.test(filename)) { return "babel"; }
+ if (/babel(\.[\w\-]+)*\.conf(ig)?\./i.test(filename)) { return "babel"; }
+ if (/\.babelignore$/i.test(filename)) { return "babel"; }
+ if (/^backbone([-.]min|dev)?\.[cm]?js$/i.test(filename)) { return "backbone"; }
+ if (/\.(bak|old|orig)$/.test(filename)) { return "backup"; }
+ if (/\.bal$/i.test(filename)) { return "ballerina"; }
+ if (/\.balx$/i.test(filename)) { return "ballerina"; }
+ if (/\.bzrignore$/i.test(filename)) { return "bazaar"; }
+ if (/\.bc$/i.test(filename)) { return "calc"; }
+ if (/\.dc$/i.test(filename)) { return "calc"; }
+ if (/^bc\.library$/i.test(filename)) { return "calc"; }
+ if (/^\.?dcrc$/i.test(filename)) { return "calc"; }
+ if (/^behat(\.[^.]+)*\.ya?ml$/i.test(filename)) { return "behat"; }
+ if (/\.bemjson(\.[cm]?js)?$/i.test(filename)) { return "bem"; }
+ if (/\.cbx$/i.test(filename)) { return "bibtex"; }
+ if (/\.bbl$/i.test(filename)) { return "bibtex"; }
+ if (/\.bbx$/i.test(filename)) { return "bibtex"; }
+ if (/\.bib(tex)?$/i.test(filename)) { return "bibtex"; }
+ if (/\.bst$/i.test(filename)) { return "bibtex"; }
+ if (/\.bs$/i.test(filename)) { return "bikeshed"; }
+ if (/\.biml$/i.test(filename)) { return "biml"; }
+ if (/\.([ls]?o|out)$/i.test(filename)) { return "binary"; }
+ if (/\.axf$/i.test(filename)) { return "binary"; }
+ if (/\.elf$/i.test(filename)) { return "binary"; }
+ if (/\.la$/i.test(filename)) { return "binary"; }
+ if (/\.ko$/i.test(filename)) { return "binary"; }
+ if (/\.((c([+px]{2}?)?-?)?objdump|bsdiff|bin|dat|pak|pdb)$/i.test(filename)) { return "binary"; }
+ if (/\.d-objdump$/i.test(filename)) { return "binary"; }
+ if (/\.(gco?|gcode|[cdhk]nc)$/i.test(filename)) { return "binary"; }
+ if (/\.rpy[bc]$/i.test(filename)) { return "binary"; }
+ if (/\.py[cdo]$/i.test(filename)) { return "binary"; }
+ if (/\.prx$/i.test(filename)) { return "binary"; }
+ if (/\.puff$/i.test(filename)) { return "binary"; }
+ if (/\.swp$/i.test(filename)) { return "binary"; }
+ if (/^\.rnd$/i.test(filename)) { return "binary"; }
+ if (/^binder[-_]requirements\.(in|txt)$/i.test(filename)) { return "binder"; }
+ if (/^\.bintray\.json$/i.test(filename)) { return "bintray"; }
+ if (/\.bison$/i.test(filename)) { return "bison"; }
+ if (/\.y$/i.test(filename)) { return "bison"; }
+ if (/\.yacc$/i.test(filename)) { return "bison"; }
+ if (/\.yy$/i.test(filename)) { return "bison"; }
+ if (/^bitbucket-pipelines\.ya?ml$/i.test(filename)) { return "bitbucket"; }
+ if (/^bitcoin\.conf$/i.test(filename)) { return "bitcoin"; }
+ if (/\.bithoundrc$/i.test(filename)) { return "bithound"; }
+ if (/\.blend$/i.test(filename)) { return "blender"; }
+ if (/\.blend\d+$/i.test(filename)) { return "blender"; }
+ if (/\.bphys$/i.test(filename)) { return "blender"; }
+ if (/\.bb$/i.test(filename)) { return "blitzbasic"; }
+ if (/\.decls$/i.test(filename)) { return "blitzbasic"; }
+ if (/\.bsv$/i.test(filename)) { return "bluespec"; }
+ if (/\.boo$/i.test(filename)) { return "boo"; }
+ if (/\.boot$/i.test(filename)) { return "boot"; }
+ if (/^Makefile\.boot$/i.test(filename)) { return "boot"; }
+ if (/^bors\.toml$/i.test(filename)) { return "bors"; }
+ if (/^(custom\.)?bootstrap\S*\.js$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.cjs$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.mjs$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.css$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.less$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.scss$/i.test(filename)) { return "bootstrap"; }
+ if (/^(custom\.)?bootstrap\S*\.styl$/i.test(filename)) { return "bootstrap"; }
+ if (/\.bootstraprc$/i.test(filename)) { return "bootstrap"; }
+ if (/\.bsq$/i.test(filename)) { return "bosque"; }
+ if (/^(\.bowerrc|bower\.json|Bowerfile)$/i.test(filename)) { return "bower"; }
+ if (/\.bf?$/i.test(filename)) { return "brain"; }
+ if (/^(bf|Brainf\**ck)$/i.test(filename)) { return "brain"; }
+ if (/brakeman\.yml$/i.test(filename)) { return "brakeman"; }
+ if (/^brakeman\.ignore$/i.test(filename)) { return "brakeman"; }
+ if (/\.bro$/i.test(filename)) { return "bro"; }
+ if (/^Brocfile\./i.test(filename)) { return "broccoli"; }
+ if (/\.br$/i.test(filename)) { return "brotli"; }
+ if (/^(browserslist|\.browserslistrc)$/i.test(filename)) { return "browserslist"; }
+ if (/^(bs-config|browser-sync)\.([cm]?js|json)$/i.test(filename)) { return "browsersync"; }
+ if (/^brunch-config\.([cm]?js|coffee|ts)$/i.test(filename)) { return "brunch"; }
+ if (/\.buckconfig$/i.test(filename)) { return "buck"; }
+ if (/^BUCK$/.test(filename)) { return "buck"; }
+ if (/^Gemfile(\.lock)?$/i.test(filename)) { return "bundler"; }
+ if (/\.gemfile$/i.test(filename)) { return "bundler"; }
+ if (/gemfile/i.test(filename)) { return "bundler"; }
+ if (/\.dm$/i.test(filename)) { return "byond"; }
+ if (/^(DM|Dream\s*Maker(\s*Script)?)$/i.test(filename)) { return "byond"; }
+ if (/\.c$/i.test(filename)) { return "c"; }
+ if (/\.h$/i.test(filename)) { return "c"; }
+ if (/\.cats$/i.test(filename)) { return "c"; }
+ if (/\.idc$/i.test(filename)) { return "c"; }
+ if (/\.w$/i.test(filename)) { return "c"; }
+ if (/\.nc$/i.test(filename)) { return "c"; }
+ if (/\.upc$/i.test(filename)) { return "c"; }
+ if (/\.xbm$/i.test(filename)) { return "c"; }
+ if (/\.xpm$/i.test(filename)) { return "c"; }
+ if (/(\\|\/)share(?:\1misc)?\1getopts?\d?$/.test(filename)) { return "c"; }
+ if (/\.c[+px]{2}$|\.cc$/i.test(filename)) { return "cpp"; }
+ if (/\.h[+px]{2}$/i.test(filename)) { return "cpp"; }
+ if (/\.[it]pp$/i.test(filename)) { return "cpp"; }
+ if (/\.(tcc|inl)$/i.test(filename)) { return "cpp"; }
+ if (/\.cs$/i.test(filename)) { return "csharp"; }
+ if (/^c\s*sharp$/i.test(filename)) { return "csharp"; }
+ if (/\.csx$/i.test(filename)) { return "csscript"; }
+ if (/\.cabal$/i.test(filename)) { return "cabal"; }
+ if (/^cabal\.(config|project)$/i.test(filename)) { return "cabal"; }
+ if (/^cabal-ghcjs\.project$/i.test(filename)) { return "cabal"; }
+ if (/^cabal\../i.test(filename)) { return "cabal"; }
+ if (/^Caddyfile($|[-.])/i.test(filename)) { return "caddy"; }
+ if (/\.caffemodel$/i.test(filename)) { return "caffe"; }
+ if (/\.solverstate$/i.test(filename)) { return "caffe"; }
+ if (/\.caffe2model$/i.test(filename)) { return "caffe2"; }
+ if (/^(init|predict)_net\.pb$/i.test(filename)) { return "caffe2"; }
+ if (/^(deploy|solver|train_val)\.prototxt$/i.test(filename)) { return "caffe2"; }
+ if (/\.cake$/i.test(filename)) { return "cake"; }
+ if (/^Cakefile$/.test(filename)) { return "cakefile"; }
+ if (/\.ctp$/i.test(filename)) { return "cakephp"; }
+ if (/\.calva-repl$/i.test(filename)) { return "calva"; }
+ if (/^Cartfile(\.|$)/.test(filename)) { return "carthage"; }
+ if (/\.casc?$/i.test(filename)) { return "casc"; }
+ if (/\.ceylon$/i.test(filename)) { return "ceylon"; }
+ if (/^chai\.([jt]sx?|es6?|coffee)$/i.test(filename)) { return "chai"; }
+ if (/\.chpl$/i.test(filename)) { return "chapel"; }
+ if (/chpl$/i.test(filename)) { return "chapel"; }
+ if (/^Chart(\.bundle)?(\.min)?\.[cm]?js$/i.test(filename)) { return "chartjs"; }
+ if (/TODO/.test(filename)) { return "checklist"; }
+ if (/^todo\.txt$/i.test(filename)) { return "checklist"; }
+ if (/\.(todo|taskpaper)$/i.test(filename)) { return "checklist"; }
+ if (/\.jas$/i.test(filename)) { return "cheetah3d"; }
+ if (/^chefignore$|^(Berks|Policy)file(\.lock)?$/i.test(filename)) { return "chef"; }
+ if (/^chocolatey.*\.ps1$/i.test(filename)) { return "chocolatey"; }
+ if (/\.ck$/i.test(filename)) { return "chuck"; }
+ if (/\.crx$/i.test(filename)) { return "chrome"; }
+ if (/^circle\.yml$/i.test(filename)) { return "circleci"; }
+ if (/\.brd$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.sch$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.pcb$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gbr$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gtl$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gbl$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gbs$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gto$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gts$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gtp$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gbo$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gbp$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.drl$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.dsn$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gko$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gpt$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gpb$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.gm\d+$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.g[0-9]+$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/^PCB\.[0-9]+(\.backup~?)?$/.test(filename)) { return "icon-circuit-board"; }
+ if (/\.(cir|ckt|struct|tech)$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.fab$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.net$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.pho$/i.test(filename)) { return "icon-circuit-board"; }
+ if (/\.cirru$/i.test(filename)) { return "cirru"; }
+ if (/\.clw$/i.test(filename)) { return "clarion"; }
+ if (/\.icl$/i.test(filename)) { return "clean"; }
+ if (/\.dcl$/i.test(filename)) { return "clean"; }
+ if (/\.abc$/i.test(filename)) { return "clean"; }
+ if (/\.click$/i.test(filename)) { return "click"; }
+ if (/Click!$/i.test(filename)) { return "click"; }
+ if (/\.clp$/i.test(filename)) { return "clips"; }
+ if (/\.clj$/i.test(filename)) { return "clojure"; }
+ if (/\.cl2$/i.test(filename)) { return "clojure"; }
+ if (/\.cljc$/i.test(filename)) { return "clojure"; }
+ if (/\.cljx$/i.test(filename)) { return "clojure"; }
+ if (/\.hic$/i.test(filename)) { return "clojure"; }
+ if (/\.cljs(cm)?$/i.test(filename)) { return "cljs"; }
+ if (/\.soy$/i.test(filename)) { return "closure-tpl"; }
+ if (/\.cfignore$/i.test(filename)) { return "cloudfoundry"; }
+ if (/\.cmake$/i.test(filename)) { return "cmake"; }
+ if (/^CMakeLists\.txt$/.test(filename)) { return "cmake"; }
+ if (/\.(cob|ccp|cbl|cobol|cpy)$/i.test(filename)) { return "cobol"; }
+ if (/\.podspec$/i.test(filename)) { return "cocoapods"; }
+ if (/\.codacy\.ya?ml$/i.test(filename)) { return "codacy"; }
+ if (/\.codeclimate\.yml$/i.test(filename)) { return "cc"; }
+ if (/^\.?codecov\.ya?ml$/i.test(filename)) { return "codecov"; }
+ if (/(^config)?\.codekit\d*$/i.test(filename)) { return "codekit"; }
+ if (/^codemeta\.json(ld)?$/i.test(filename)) { return "codemeta"; }
+ if (/^codeship-[\w.-]+\.ya?ml$/i.test(filename)) { return "codeship"; }
+ if (/\.coffee$/i.test(filename)) { return "coffee"; }
+ if (/\.cjsx$/i.test(filename)) { return "coffee"; }
+ if (/\.coffee\.ecr$/i.test(filename)) { return "coffee"; }
+ if (/\.coffee\.erb$/i.test(filename)) { return "coffee"; }
+ if (/\.coffee\.md$/i.test(filename)) { return "coffee"; }
+ if (/\.litcoffee$/i.test(filename)) { return "coffee"; }
+ if (/\.iced$/i.test(filename)) { return "coffee"; }
+ if (/\.cfc$/i.test(filename)) { return "cf"; }
+ if (/\.cfml?$/i.test(filename)) { return "cf"; }
+ if (/\.(dae|collada)$/i.test(filename)) { return "khronos"; }
+ if (/^commitlint\.config\.js$|^\.commitlintrc\.(json|js|ya?ml)$/i.test(filename)) { return "commitlint"; }
+ if (/^\.?cz\.(json|toml|ya?ml)$/i.test(filename)) { return "commitizen"; }
+ if (/\.cl$/i.test(filename)) { return "cl"; }
+ if (/^c?lisp$/i.test(filename)) { return "cl"; }
+ if (/^_?(compass|lemonade)\.scss$/i.test(filename)) { return "compass"; }
+ if (/\.cp$/i.test(filename)) { return "cp"; }
+ if (/\.cps$/i.test(filename)) { return "cp"; }
+ if (/^composer\.(json|lock)$/i.test(filename)) { return "composer"; }
+ if (/^composer\.phar$/i.test(filename)) { return "composer"; }
+ if (/\.(zip|z|xz)$/i.test(filename)) { return "zip"; }
+ if (/\.rar$/i.test(filename)) { return "zip"; }
+ if (/\.t?gz$/i.test(filename)) { return "zip"; }
+ if (/\.(lzo?|lzma|tlz|tar\.lzma)$/i.test(filename)) { return "zip"; }
+ if (/\.7z$/i.test(filename)) { return "zip"; }
+ if (/\.apk$/i.test(filename)) { return "zip"; }
+ if (/\.tar$/i.test(filename)) { return "zip"; }
+ if (/\.bz2$/i.test(filename)) { return "zip"; }
+ if (/\.maff$/i.test(filename)) { return "zip"; }
+ if (/\.iso$/i.test(filename)) { return "zip"; }
+ if (/\.hqx$/i.test(filename)) { return "zip"; }
+ if (/\.xpi$/i.test(filename)) { return "zip"; }
+ if (/\.gem$/i.test(filename)) { return "zip"; }
+ if (/\.whl$/i.test(filename)) { return "zip"; }
+ if (/\.epub$/i.test(filename)) { return "zip"; }
+ if (/\.jar$/i.test(filename)) { return "zip"; }
+ if (/\.war$/i.test(filename)) { return "zip"; }
+ if (/\.wgt$/i.test(filename)) { return "zip"; }
+ if (/\.xar$/i.test(filename)) { return "zip"; }
+ if (/\.dsk$/i.test(filename)) { return "zip"; }
+ if (/\.ear$/i.test(filename)) { return "zip"; }
+ if (/\.egg$/i.test(filename)) { return "zip"; }
+ if (/\.sit$/i.test(filename)) { return "zip"; }
+ if (/\.hak$/i.test(filename)) { return "zip"; }
+ if (/\.cdf$/i.test(filename)) { return "cdf"; }
+ if (/^(conanfile\.(txt|py)|conan\.conf)$/i.test(filename)) { return "conan"; }
+ if (/^\.?condarc$/i.test(filename)) { return "conda"; }
+ if (/\.(ini|desktop|directory|cfg|co?nf|prefs)$/i.test(filename)) { return "config"; }
+ if (/\.properties$/i.test(filename)) { return "config"; }
+ if (/\.ld$/i.test(filename)) { return "config"; }
+ if (/\.ldif$/i.test(filename)) { return "config"; }
+ if (/\.lds$/i.test(filename)) { return "config"; }
+ if (/\.mcf$/i.test(filename)) { return "config"; }
+ if (/\.opts$/i.test(filename)) { return "config"; }
+ if (/^pf\.os$/i.test(filename)) { return "config"; }
+ if (/\.sdl(ang)?$/i.test(filename)) { return "config"; }
+ if (/^mimeapps\.list$/i.test(filename)) { return "config"; }
+ if (/(\.|^)terminal(rc)?$/i.test(filename)) { return "config"; }
+ if (/^ld\.script$/i.test(filename)) { return "config"; }
+ if (/^(shells|rpc)$/i.test(filename)) { return "config"; }
+ if (/^\.?XCompose$/.test(filename)) { return "config"; }
+ if (/^buildozer\.spec$/i.test(filename)) { return "config"; }
+ if (/^settings\.bsp$/i.test(filename)) { return "config"; }
+ if (/config|settings|option|pref/i.test(filename)) { return "config"; }
+ if (/\.flc$/i.test(filename)) { return "config"; }
+ if (/\.kys$/i.test(filename)) { return "config"; }
+ if (/\/(dev[-\w]+|troff)\/([^\/]+\/)*(DESC|Foundry|download|symbolmap)(\.(in|proto|8400))?$/i.test(filename)) { return "config"; }
+ if (/[\/\\]fontforge[\/\\]hotkeys[\/\\][^\/\\]+/i.test(filename)) { return "config"; }
+ if (/\.git[\/\\](config|info[\/\\][-\w]+)$/.test(filename)) { return "config"; }
+ if (/(^|[\/\\])\.fossil-settings\1(?:[^\/\/]+)/.test(filename)) { return "config"; }
+ if (/(^|[\/\\])\.ssh[\/\\]config$/.test(filename)) { return "config"; }
+ if (/^\/(private\/)?etc\/([^\/]+\/)*[^\/]*\.(cf|conf|ini)(\.default)?$/i.test(filename)) { return "config"; }
+ if (/^\/(private\/)?etc\/(aliases|auto_(home|master)|ftpusers|group|gettytab|hosts(\.equiv)?|manpaths|networks|paths|protocols|services|shells|sudoers|ttys)$/i.test(filename)) { return "config"; }
+ if (/^coffeelint\.json$/i.test(filename)) { return "config-coffee"; }
+ if (/\.coffeelintignore$/i.test(filename)) { return "config-coffee"; }
+ if (/^go\.mod$/i.test(filename)) { return "config-go"; }
+ if (/^go\.sum$/i.test(filename)) { return "config-go"; }
+ if (/^haskellconfig\.json$/i.test(filename)) { return "config-hs"; }
+ if (/\.js(beautify|cs|hint)rc$|^(jsconfig(\..+)?|\.?eshost(-config)?)\.json$/i.test(filename)) { return "config-js"; }
+ if (/^perl[56]?-?config\.json$/i.test(filename)) { return "config-perl"; }
+ if (/^python-?config\.json$/i.test(filename)) { return "config-python"; }
+ if (/^pyproject\.toml$/i.test(filename)) { return "config-python"; }
+ if (/^poetry\.lock$/i.test(filename)) { return "config-python"; }
+ if (/^\.coveragerc$/i.test(filename)) { return "config-python"; }
+ if (/^MANIFEST\.in$/i.test(filename)) { return "config-python"; }
+ if (/\.python-version$/i.test(filename)) { return "config-python"; }
+ if (/^jsxconfig\.json$/i.test(filename)) { return "config-react"; }
+ if (/^rubyconfig\.json$|\.(autotest|cross_rubies|gemtest|hoerc|kick|simplecov|yardopts)$/i.test(filename)) { return "config-ruby"; }
+ if (/^\.yardopts/i.test(filename)) { return "config-ruby"; }
+ if (/^rustconfig\.json$/i.test(filename)) { return "config-rust"; }
+ if (/^rust-toolchain$/i.test(filename)) { return "config-rust"; }
+ if (/^tsconfig(\..+)?\.json$/i.test(filename)) { return "config-ts"; }
+ if (/^tslint\.json$/i.test(filename)) { return "config-ts"; }
+ if (/\.conll$/i.test(filename)) { return "conll"; }
+ if (/\.conllu$/i.test(filename)) { return "conll"; }
+ if (/\.coq$/i.test(filename)) { return "coq"; }
+ if (/^cordova([^.]*\.|-(\d\.)+)[cm]?js$/i.test(filename)) { return "cordova"; }
+ if (/\.(cmx|ccx)$/i.test(filename)) { return "corel"; }
+ if (/\.(cdrx?|cdt)$/i.test(filename)) { return "coreldraw"; }
+ if (/^\.coveralls\.ya?ml$/i.test(filename)) { return "coveralls"; }
+ if (/^cpanfile$/i.test(filename)) { return "cpan"; }
+ if (/^META\.yml$/.test(filename)) { return "cpan"; }
+ if (/^META\.json$/.test(filename)) { return "cpan"; }
+ if (/^MANIFEST\.SKIP$/.test(filename)) { return "cpan"; }
+ if (/\.cpc$/i.test(filename)) { return "cpcdosc"; }
+ if (/\.creole$/i.test(filename)) { return "creole"; }
+ if (/^crowdin\.ya?ml$/i.test(filename)) { return "crowdin"; }
+ if (/\.e?cr$/i.test(filename)) { return "crystal"; }
+ if (/\.orc$/i.test(filename)) { return "csound"; }
+ if (/\.udo$/i.test(filename)) { return "csound"; }
+ if (/\.csd$/i.test(filename)) { return "csound"; }
+ if (/\.sco$/i.test(filename)) { return "csound"; }
+ if (/\.css$/i.test(filename)) { return "css3"; }
+ if (/\.less$/i.test(filename)) { return "css3"; }
+ if (/\.tss$/i.test(filename)) { return "css3"; }
+ if (/\.feature$/i.test(filename)) { return "cucumber"; }
+ if (/gherkin$/i.test(filename)) { return "cucumber"; }
+ if (/\.cu$/i.test(filename)) { return "nvidia"; }
+ if (/\.cuh$/i.test(filename)) { return "nvidia"; }
+ if (/\.cfl$/i.test(filename)) { return "cuneiform"; }
+ if (/(^|\.)curlrc$|^_curlrc$/i.test(filename)) { return "curl"; }
+ if (/\.curry$/i.test(filename)) { return "curry"; }
+ if (/\.cvsignore$/i.test(filename)) { return "cvs"; }
+ if (/\.cwl$/i.test(filename)) { return "cwl"; }
+ if (/Common Workflow Language$/i.test(filename)) { return "cwl"; }
+ if (/\.pyx$/i.test(filename)) { return "cython"; }
+ if (/\.pxd$/i.test(filename)) { return "cython"; }
+ if (/\.pxi$/i.test(filename)) { return "cython"; }
+ if (/\.di?$/i.test(filename)) { return "dlang"; }
+ if (/^d3(\.v\d+)?[^.]*\.[cm]?js$/i.test(filename)) { return "d3"; }
+ if (/\.(dfy|dafny)$/i.test(filename)) { return "dafny"; }
+ if (/\.dnh$/i.test(filename)) { return "yang"; }
+ if (/\.d(arcs)?patch$/i.test(filename)) { return "darcs"; }
+ if (/^\.boringignore$/i.test(filename)) { return "darcs"; }
+ if (/\.dart$/i.test(filename)) { return "dart"; }
+ if (/\.s[kl]im$/i.test(filename)) { return "dashboard"; }
+ if (/\.cpuprofile$/i.test(filename)) { return "dashboard"; }
+ if (/\.cloc$/i.test(filename)) { return "dashboard"; }
+ if (/\.aff$/i.test(filename)) { return "database"; }
+ if (/\.cson$/i.test(filename)) { return "database"; }
+ if (/\.dict?$/i.test(filename)) { return "database"; }
+ if (/\.hson$/i.test(filename)) { return "database"; }
+ if (/\.http$/i.test(filename)) { return "database"; }
+ if (/\.ndjson$/i.test(filename)) { return "database"; }
+ if (/\.fea$/i.test(filename)) { return "database"; }
+ if (/\.json\.eex$/i.test(filename)) { return "database"; }
+ if (/\.cbor$/i.test(filename)) { return "database"; }
+ if (/\.(proto|protote?xt|pbte?xt)$/i.test(filename)) { return "database"; }
+ if (/\.pytb$/i.test(filename)) { return "database"; }
+ if (/\.pydeps$/i.test(filename)) { return "database"; }
+ if (/\.pot?$/i.test(filename)) { return "database"; }
+ if (/\.ejson$/i.test(filename)) { return "database"; }
+ if (/\.edn$/i.test(filename)) { return "database"; }
+ if (/\.eam\.fs$/i.test(filename)) { return "database"; }
+ if (/\.son$/i.test(filename)) { return "database"; }
+ if (/\.ston$/i.test(filename)) { return "database"; }
+ if (/\.ttl$/i.test(filename)) { return "database"; }
+ if (/\.schema$/i.test(filename)) { return "database"; }
+ if (/\.sy$/i.test(filename)) { return "database"; }
+ if (/\.syntax$/i.test(filename)) { return "database"; }
+ if (/\.webmanifest$/i.test(filename)) { return "database"; }
+ if (/\.tgn$/i.test(filename)) { return "database"; }
+ if (/\.2da$/i.test(filename)) { return "database"; }
+ if (/\.(od|onlydata)$/i.test(filename)) { return "database"; }
+ if (/\.dbi$/i.test(filename)) { return "database"; }
+ if (/\.snip(pets?)?$/i.test(filename)) { return "database"; }
+ if (/\.yas(nippet)?$/i.test(filename)) { return "database"; }
+ if (/(^|\.)fonts\.(dir|scale|alias)$/i.test(filename)) { return "database"; }
+ if (/(^|\.)encodings\.dir$/i.test(filename)) { return "database"; }
+ if (/^pkginfo$/i.test(filename)) { return "database"; }
+ if (/^term(cap|info)/i.test(filename)) { return "database"; }
+ if (/^eign$/.test(filename)) { return "database"; }
+ if (/^(birthtoken|flowers)$/.test(filename)) { return "database"; }
+ if (/(\\|\/)share(?:\1misc)?\1(?:ascii|trace\.codes)$/.test(filename)) { return "database"; }
+ if (/^(mime\.types|fstab)$/i.test(filename)) { return "database"; }
+ if (/^METADATA\.pb$/.test(filename)) { return "database"; }
+ if (/\.(ldj|ldjson|jsonl)$/.test(filename)) { return "database"; }
+ if (/\.(irb-history|lesshst)$/i.test(filename)) { return "database"; }
+ if (/^(magic\.mgc|figmagic)$/i.test(filename)) { return "database"; }
+ if (/[\/\\](?:magic[\/\\]Magdir|file[\/\\]magic)[\/\\][-.\w]+$/i.test(filename)) { return "database"; }
+ if (/(\\|\/)dev[-\w]+\1(?:[^\\\/]+\1)*(?!DESC|NOTES)(?:[A-Z][-A-Z]*)(?:\.in)?$/.test(filename)) { return "database"; }
+ if (/term\/O?tab\.[^\/]+$|\/dev[-\w]+\/(APL\.bug|[A-Z][-A-Za-z0-9]*)(\.fd)?$/i.test(filename)) { return "database"; }
+ if (/(^|\/)n?term\/O?tab\.(X|lpr)$/i.test(filename)) { return "database"; }
+ if (/\.ssh[\/\\](authorized_keys|known_hosts)$/.test(filename)) { return "database"; }
+ if (/^\.icondb\.js$/.test(filename)) { return "database"; }
+ if (/^index\.(bt|db|dir|pag)$/i.test(filename)) { return "database"; }
+ if (/^whatis$/i.test(filename)) { return "database"; }
+ if (/^(language-subtag-registry(\.txt)?|nametable)$/.test(filename)) { return "database"; }
+ if (/\.git[\/\\](.*[\/\\])?(HEAD|ORIG_HEAD|packed-refs|logs[\/\\](.+[\/\\])?[^\/\\]+)$/.test(filename)) { return "database"; }
+ if (/\.dwl$/i.test(filename)) { return "dataweave"; }
+ if (/\.dbf$/i.test(filename)) { return "dbase"; }
+ if (/\.deb$/i.test(filename)) { return "debian"; }
+ if (/(^|\.)(control|dsc)$/.test(filename)) { return "debian"; }
+ if (/^rules$/.test(filename)) { return "debian"; }
+ if (/\.dfm$/i.test(filename)) { return "delphi"; }
+ if (/\.dof$/i.test(filename)) { return "delphi"; }
+ if (/\.dpr$/i.test(filename)) { return "delphi"; }
+ if (/\.dmark$/i.test(filename)) { return "icon-star"; }
+ if (/^d[_\W]?mark$/i.test(filename)) { return "icon-star"; }
+ if (/^dependabot\.ya?ml$/i.test(filename)) { return "dependabot"; }
+ if (/^devcontainer\.json$/i.test(filename)) { return "devcontainer"; }
+ if (/\.dts$/i.test(filename)) { return "devicetree"; }
+ if (/\.dtsi$/i.test(filename)) { return "devicetree"; }
+ if (/\.dhall$/i.test(filename)) { return "dhall"; }
+ if (/\.dia$/i.test(filename)) { return "dia"; }
+ if (/\.diff$/i.test(filename)) { return "diff"; }
+ if (/\.diffs$/i.test(filename)) { return "diff"; }
+ if (/\.dig$/i.test(filename)) { return "digdag"; }
+ if (/\.dit(roff)?$/i.test(filename)) { return "binary"; }
+ if (/\.zone$/i.test(filename)) { return "earth"; }
+ if (/\.arpa$/i.test(filename)) { return "earth"; }
+ if (/^CNAME$/.test(filename)) { return "earth"; }
+ if (/\.(dbk|docbook)$/i.test(filename)) { return "docbook"; }
+ if (/^(Dockerfile|docker-compose)|\.docker(file|ignore)$/i.test(filename)) { return "docker"; }
+ if (/^docker-sync\.yml$/i.test(filename)) { return "docker"; }
+ if (/\.doclets\.ya?ml$/i.test(filename)) { return "doclets"; }
+ if (/\.eco$/i.test(filename)) { return "docpad"; }
+ if (/(^|\.)docz(rc)?(\.config)?\.[cm]?js$/i.test(filename)) { return "docz"; }
+ if (/(^|\.)docz(rc)?(\.config)?\.json$/i.test(filename)) { return "docz"; }
+ if (/\.djs$/i.test(filename)) { return "doge"; }
+ if (/^dojo\.[cm]?js$/i.test(filename)) { return "dojo"; }
+ if (/^dosbox(\b|_).*(\.conf|pref\w*)$/i.test(filename)) { return "dosbox"; }
+ if (/^\.env(\.|$)/i.test(filename)) { return "dotenv"; }
+ if (/\.dot$/i.test(filename)) { return "dotjs"; }
+ if (/\.crdownload$/i.test(filename)) { return "download"; }
+ if (/^\.?Doxyfile$/i.test(filename)) { return "doxygen"; }
+ if (/^dragula(\.min)?\.([cm]?js|css)$/i.test(filename)) { return "dragula"; }
+ if (/^\.drawio($|\.)|\.d(raw)?io(\.png|\.svg)?$/i.test(filename)) { return "drawio"; }
+ if (/\.drone\.ya?ml$/i.test(filename)) { return "drone"; }
+ if (/^dub(\.selections)?\.(json|sdl)$/i.test(filename)) { return "dub"; }
+ if (/\.dyalog$/i.test(filename)) { return "dyalog"; }
+ if (/\.dyapp$/i.test(filename)) { return "dyalog"; }
+ if (/\.mipage$/i.test(filename)) { return "dyalog"; }
+ if (/\.(dylib|bundle)$/i.test(filename)) { return "dylib"; }
+ if (/\.E$/.test(filename)) { return "e"; }
+ if (/\.eup$/i.test(filename)) { return "eagle"; }
+ if (/\.eb$/i.test(filename)) { return "easybuild"; }
+ if (/\.ec$/i.test(filename)) { return "ec"; }
+ if (/\.eh$/i.test(filename)) { return "ec"; }
+ if (/\.epj$/i.test(filename)) { return "ecere"; }
+ if (/\.c?project$/.test(filename)) { return "eclipse"; }
+ if (/\.classpath$/i.test(filename)) { return "eclipse"; }
+ if (/\.ecl(\.txt)?$/i.test(filename)) { return "eclipse-lang"; }
+ if (/\.editorconfig$/i.test(filename)) { return "editorconfig"; }
+ if (/\.ecrc$/i.test(filename)) { return "editorconfig"; }
+ if (/\.edge$/i.test(filename)) { return "edge"; }
+ if (/\.e$/.test(filename)) { return "eiffel"; }
+ if (/\.ejs$/i.test(filename)) { return "ejs"; }
+ if (/\.compilerc(\.json)?$/i.test(filename)) { return "electron"; }
+ if (/(^|\.)forge\.config\.js$/i.test(filename)) { return "electron"; }
+ if (/\.ex$/i.test(filename)) { return "elixir"; }
+ if (/\.(exs|l?eex)$/i.test(filename)) { return "elixir"; }
+ if (/^mix\.(exs?|lock)$/i.test(filename)) { return "elixir"; }
+ if (/\.elm$/i.test(filename)) { return "elm"; }
+ if (/(^|\.)(el|_?emacs|emacs\.desktop|abbrev[-_]defs)$/i.test(filename)) { return "emacs"; }
+ if (/(^|\.)(elc|eld)$/i.test(filename)) { return "emacs"; }
+ if (/\.gnus$/i.test(filename)) { return "emacs"; }
+ if (/\.viper$/i.test(filename)) { return "emacs"; }
+ if (/^Cask$/.test(filename)) { return "emacs"; }
+ if (/^Project\.ede$/i.test(filename)) { return "emacs"; }
+ if (/^(authors|(code)?owners)$/i.test(filename)) { return "at"; }
+ if (/^(EML|mbox|e?-?mail)$/i.test(filename)) { return "at"; }
+ if (/^ember(\.|(-[^.]+)?-(\d+\.)+(debug\.)?)[cm]?js$/i.test(filename)) { return "ember"; }
+ if (/\.emberscript$/i.test(filename)) { return "em"; }
+ if (/\.em(blem)?$/i.test(filename)) { return "mustache"; }
+ if (/\.ensime$/i.test(filename)) { return "ensime"; }
+ if (/\.eq$/i.test(filename)) { return "eq"; }
+ if (/\.erl$/i.test(filename)) { return "erlang"; }
+ if (/\.beam$/i.test(filename)) { return "erlang"; }
+ if (/\.hrl$/i.test(filename)) { return "erlang"; }
+ if (/\.xrl$/i.test(filename)) { return "erlang"; }
+ if (/\.yrl$/i.test(filename)) { return "erlang"; }
+ if (/\.app\.src$/i.test(filename)) { return "erlang"; }
+ if (/^Emakefile$/.test(filename)) { return "erlang"; }
+ if (/^rebar(\.config)?\.lock$/i.test(filename)) { return "erlang"; }
+ if (/^\.?esdoc\.([cm]?js|json)$/i.test(filename)) { return "esdoc"; }
+ if (/\.eslint(cache|ignore)$/i.test(filename)) { return "eslint"; }
+ if (/\.eslintrc($|\.)/i.test(filename)) { return "eslint"; }
+ if (/\bExtjs(-ext)?\.[cm]?js$/i.test(filename)) { return "extjs"; }
+ if (/^fabric\.mod\.json$/i.test(filename)) { return "fabric"; }
+ if (/^fabfile\.py$/i.test(filename)) { return "fabfile"; }
+ if (/\.factor$/i.test(filename)) { return "factor"; }
+ if (/\.factor-rc$/i.test(filename)) { return "factor"; }
+ if (/\.factor-boot-rc$/i.test(filename)) { return "factor"; }
+ if (/\.fal(con)?$/i.test(filename)) { return "falcon"; }
+ if (/\.fy$/i.test(filename)) { return "fancy"; }
+ if (/\.fancypack$/i.test(filename)) { return "fancy"; }
+ if (/^Fakefile$/.test(filename)) { return "fancy"; }
+ if (/\.fan$/i.test(filename)) { return "fantom"; }
+ if (/\.(fasta|fas?|seq|fsa)$/i.test(filename)) { return "dna"; }
+ if (/\.(fastq|fq)$/i.test(filename)) { return "dna"; }
+ if (/\.(faa|mpfa)$/i.test(filename)) { return "dna"; }
+ if (/\.fna$/i.test(filename)) { return "dna"; }
+ if (/\.ffn$/i.test(filename)) { return "dna"; }
+ if (/\.frn$/i.test(filename)) { return "dna"; }
+ if (/\.sam$/i.test(filename)) { return "dna"; }
+ if (/\.fql$/i.test(filename)) { return "fauna"; }
+ if (/\.faunarc$/i.test(filename)) { return "fauna"; }
+ if (/\.dsp$/i.test(filename)) { return "faust"; }
+ if (/\.fbx$/i.test(filename)) { return "fbx"; }
+ if (/\.fxl$/i.test(filename)) { return "fexl"; }
+ if (/\.figma$/i.test(filename)) { return "figma"; }
+ if (/\.fdx$/i.test(filename)) { return "finaldraft"; }
+ if (/^Icon\r$/.test(filename)) { return "finder"; }
+ if (/\.rsrc$/i.test(filename)) { return "finder"; }
+ if (/^\._./.test(filename)) { return "finder"; }
+ if (/\.DS_Store$/i.test(filename)) { return "finder"; }
+ if (/^firebase\.json$/i.test(filename)) { return "firebase"; }
+ if (/^firestore\.indexes\.json$/i.test(filename)) { return "firebase"; }
+ if (/^firestore\.rules?$/i.test(filename)) { return "firebase"; }
+ if (/\.firebaserc$/i.test(filename)) { return "firebase"; }
+ if (/\.bolt$/i.test(filename)) { return "firebase-bolt"; }
+ if (/\.webapp$/i.test(filename)) { return "firefox"; }
+ if (/^flask([-_.].*)\.py$/i.test(filename)) { return "flask"; }
+ if (/\.flooignore$/i.test(filename)) { return "floobits"; }
+ if (/\.(flowconfig|js\.flow|flow)$/i.test(filename)) { return "flow"; }
+ if (/\.fx$/i.test(filename)) { return "flux"; }
+ if (/\.flux$/i.test(filename)) { return "flux"; }
+ if (/\.flutter-plugins$/i.test(filename)) { return "flutter"; }
+ if (/\.woff2$/i.test(filename)) { return "font"; }
+ if (/\.woff$/i.test(filename)) { return "font"; }
+ if (/\.eot$/i.test(filename)) { return "font"; }
+ if (/\.ttc$/i.test(filename)) { return "font"; }
+ if (/\.ttf$/i.test(filename)) { return "font"; }
+ if (/\.otf$/i.test(filename)) { return "font"; }
+ if (/\.pfb$/i.test(filename)) { return "font"; }
+ if (/\.pfm$/i.test(filename)) { return "font"; }
+ if (/\.tfm$/i.test(filename)) { return "font"; }
+ if (/\.dfont$/i.test(filename)) { return "font"; }
+ if (/\.psfu?$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.pcf$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.psftx$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.bdf$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.fnt$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.fon$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.snf$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.flf$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.tlf$/i.test(filename)) { return "font-bitmap"; }
+ if (/\.(ff|pe)$/i.test(filename)) { return "ff"; }
+ if (/\.sfd$/i.test(filename)) { return "ff"; }
+ if (/^\.issuetracker$/i.test(filename)) { return "fork"; }
+ if (/\.trm$/i.test(filename)) { return "ftr"; }
+ if (/\.f$/i.test(filename)) { return "fortran"; }
+ if (/\.f90$/i.test(filename)) { return "fortran"; }
+ if (/\.f03$/i.test(filename)) { return "fortran"; }
+ if (/\.f08$/i.test(filename)) { return "fortran"; }
+ if (/\.f77$/i.test(filename)) { return "fortran"; }
+ if (/\.f95$/i.test(filename)) { return "fortran"; }
+ if (/\.for$/i.test(filename)) { return "fortran"; }
+ if (/\.fpp$/i.test(filename)) { return "fortran"; }
+ if (/\.pfo$/i.test(filename)) { return "fortran"; }
+ if (/\.fossa\.ya?ml$/i.test(filename)) { return "fossa"; }
+ if (/\.fossaignore$/i.test(filename)) { return "fossa"; }
+ if (/\.fountain$/i.test(filename)) { return "fountain"; }
+ if (/\.fi?dl$/i.test(filename)) { return "franca"; }
+ if (/\.fdepl$/i.test(filename)) { return "franca"; }
+ if (/\.ftl$/i.test(filename)) { return "freemarker"; }
+ if (/ftl$/i.test(filename)) { return "freemarker"; }
+ if (/\.fr$/i.test(filename)) { return "frege"; }
+ if (/\.fs[xi]?$/i.test(filename)) { return "fsharp"; }
+ if (/f#$/i.test(filename)) { return "fsharp"; }
+ if (/\.fthtml$/i.test(filename)) { return "fthtml"; }
+ if (/^fuelux(\.min)?\.(css|[cm]?js)$/i.test(filename)) { return "fuelux"; }
+ if (/^fuse\.[cm]?js$/.test(filename)) { return "fusebox"; }
+ if (/\.fut$/i.test(filename)) { return "futhark"; }
+ if (/^galaxy\.ini$/i.test(filename)) { return "galaxy"; }
+ if (/\.gspec$/i.test(filename)) { return "galen"; }
+ if (/\.gtest$/i.test(filename)) { return "galen"; }
+ if (/\.gml$/i.test(filename)) { return "gml"; }
+ if (/\.gms$/i.test(filename)) { return "gams"; }
+ if (/\.gap$/i.test(filename)) { return "gap"; }
+ if (/\.gi$/i.test(filename)) { return "gap"; }
+ if (/\.tst$/i.test(filename)) { return "gap"; }
+ if (/^gatsby-.+\.[jt]s$/i.test(filename)) { return "gatsby"; }
+ if (/\.gss$/i.test(filename)) { return "gauss"; }
+ if (/\.gdb$/i.test(filename)) { return "gdb"; }
+ if (/gdbinit$/i.test(filename)) { return "gdb"; }
+ if (/^\.htaccess$/i.test(filename)) { return "gear"; }
+ if (/^\.htpasswd$/i.test(filename)) { return "gear"; }
+ if (/^\.lesshintrc$/i.test(filename)) { return "gear"; }
+ if (/^\.csscomb\.json$/i.test(filename)) { return "gear"; }
+ if (/^text\.enc$/.test(filename)) { return "gear"; }
+ if (/\.csslintrc$/i.test(filename)) { return "gear"; }
+ if (/\.htmlhintrc$/i.test(filename)) { return "gear"; }
+ if (/\.module$/i.test(filename)) { return "gear"; }
+ if (/\.codoopts$/i.test(filename)) { return "gear"; }
+ if (/\.arcconfig$/i.test(filename)) { return "gear"; }
+ if (/\.pairs$/i.test(filename)) { return "gear"; }
+ if (/\.lintstagedrc$/i.test(filename)) { return "gear"; }
+ if (/\.indent\.pro$/i.test(filename)) { return "gear"; }
+ if (/^\./.test(filename)) { return "gear"; }
+ if (/\.dll$/i.test(filename)) { return "gears"; }
+ if (/\.xml$/i.test(filename)) { return "code"; }
+ if (/\.xmp$/i.test(filename)) { return "code"; }
+ if (/\.rdf$/i.test(filename)) { return "code"; }
+ if (/\.config$/i.test(filename)) { return "code"; }
+ if (/^_service$/.test(filename)) { return "code"; }
+ if (/^configure\.ac$/.test(filename)) { return "code"; }
+ if (/^Settings\.StyleCop$/.test(filename)) { return "code"; }
+ if (/\.4th$/i.test(filename)) { return "code"; }
+ if (/\.adm[lx]$/i.test(filename)) { return "code"; }
+ if (/\.[ad]sl$/i.test(filename)) { return "code"; }
+ if (/\.aepx$/i.test(filename)) { return "code"; }
+ if (/\.appxmanifest$/i.test(filename)) { return "code"; }
+ if (/\.ash$/i.test(filename)) { return "code"; }
+ if (/\.asn1?$/i.test(filename)) { return "code"; }
+ if (/\.axml$/i.test(filename)) { return "code"; }
+ if (/\.bc$/i.test(filename)) { return "code"; }
+ if (/\.befunge$/i.test(filename)) { return "code"; }
+ if (/\.bmx$/i.test(filename)) { return "code"; }
+ if (/\.brs$/i.test(filename)) { return "code"; }
+ if (/\.capnp$/i.test(filename)) { return "code"; }
+ if (/\.ccxml$/i.test(filename)) { return "code"; }
+ if (/\.cscfg$/i.test(filename)) { return "code"; }
+ if (/\.cgi$/i.test(filename)) { return "code"; }
+ if (/\.ch$/i.test(filename)) { return "code"; }
+ if (/\.clixml$/i.test(filename)) { return "code"; }
+ if (/\.cocci$/i.test(filename)) { return "code"; }
+ if (/\.ct$/i.test(filename)) { return "code"; }
+ if (/\.cw$/i.test(filename)) { return "code"; }
+ if (/\.cy$/i.test(filename)) { return "code"; }
+ if (/\.rdg$/i.test(filename)) { return "code"; }
+ if (/\.dita$/i.test(filename)) { return "code"; }
+ if (/\.ditamap$/i.test(filename)) { return "code"; }
+ if (/\.ditaval$/i.test(filename)) { return "code"; }
+ if (/\.dotsettings$/i.test(filename)) { return "code"; }
+ if (/\.dtd$/i.test(filename)) { return "code"; }
+ if (/\.dyl$/i.test(filename)) { return "code"; }
+ if (/\.dylan$/i.test(filename)) { return "code"; }
+ if (/\.eclxml$/i.test(filename)) { return "code"; }
+ if (/\.ed$/i.test(filename)) { return "code"; }
+ if (/\.fcgi$/i.test(filename)) { return "code"; }
+ if (/\.fidl$/i.test(filename)) { return "code"; }
+ if (/\.filters$/i.test(filename)) { return "code"; }
+ if (/\.fo$/i.test(filename)) { return "code"; }
+ if (/\.forth$/i.test(filename)) { return "code"; }
+ if (/\.frt$/i.test(filename)) { return "code"; }
+ if (/\.fsproj$/i.test(filename)) { return "code"; }
+ if (/\.fth$/i.test(filename)) { return "code"; }
+ if (/\.fun$/i.test(filename)) { return "code"; }
+ if (/\.fxml$/i.test(filename)) { return "code"; }
+ if (/\.grace$/i.test(filename)) { return "code"; }
+ if (/\.grxml$/i.test(filename)) { return "code"; }
+ if (/\.iml$/i.test(filename)) { return "code"; }
+ if (/\.intr$/i.test(filename)) { return "code"; }
+ if (/\.ivy$/i.test(filename)) { return "code"; }
+ if (/\.jelly$/i.test(filename)) { return "code"; }
+ if (/\.jf?lex$/i.test(filename)) { return "code"; }
+ if (/\.joy$/i.test(filename)) { return "code"; }
+ if (/\.jsproj$/i.test(filename)) { return "code"; }
+ if (/\.jspx$/i.test(filename)) { return "code"; }
+ if (/\.launch$/i.test(filename)) { return "code"; }
+ if (/\.lid$/i.test(filename)) { return "code"; }
+ if (/\.lp$/i.test(filename)) { return "code"; }
+ if (/\.m4$/i.test(filename)) { return "code"; }
+ if (/\.manifest$/i.test(filename)) { return "code"; }
+ if (/\.mask$/i.test(filename)) { return "code"; }
+ if (/\.mdpolicy$/i.test(filename)) { return "code"; }
+ if (/\.menu$/i.test(filename)) { return "code"; }
+ if (/\.ML$/.test(filename)) { return "code"; }
+ if (/\.mq[45h]$/i.test(filename)) { return "code"; }
+ if (/\.mtml$/i.test(filename)) { return "code"; }
+ if (/\.muf$/i.test(filename)) { return "code"; }
+ if (/\.mumps$/i.test(filename)) { return "code"; }
+ if (/\.mxml$/i.test(filename)) { return "code"; }
+ if (/\.myt$/i.test(filename)) { return "code"; }
+ if (/\.natvis$/i.test(filename)) { return "code"; }
+ if (/\.odd$/i.test(filename)) { return "code"; }
+ if (/\.ohm$/i.test(filename)) { return "code"; }
+ if (/\.omgrofl$/i.test(filename)) { return "code"; }
+ if (/\.osm$/i.test(filename)) { return "code"; }
+ if (/\.pig$/i.test(filename)) { return "code"; }
+ if (/\.plist$/i.test(filename)) { return "code"; }
+ if (/\.prg$/i.test(filename)) { return "code"; }
+ if (/\.proj$/i.test(filename)) { return "code"; }
+ if (/\.props$/i.test(filename)) { return "code"; }
+ if (/\.psc1$/i.test(filename)) { return "code"; }
+ if (/\.pt$/i.test(filename)) { return "code"; }
+ if (/\.qhelp$/i.test(filename)) { return "code"; }
+ if (/\.resx$/i.test(filename)) { return "code"; }
+ if (/\.rl$/i.test(filename)) { return "code"; }
+ if (/\.scxml$/i.test(filename)) { return "code"; }
+ if (/\.sed$/i.test(filename)) { return "code"; }
+ if (/\.sgml?$/i.test(filename)) { return "code"; }
+ if (/\.sig$/i.test(filename)) { return "code"; }
+ if (/\.sk$/i.test(filename)) { return "code"; }
+ if (/\.sk[12]$/i.test(filename)) { return "code"; }
+ if (/\.sml$/i.test(filename)) { return "code"; }
+ if (/\.smt$/i.test(filename)) { return "code"; }
+ if (/\.smt2$/i.test(filename)) { return "code"; }
+ if (/\.spthy$/i.test(filename)) { return "code"; }
+ if (/\.srdf$/i.test(filename)) { return "code"; }
+ if (/\.ssmssln$/i.test(filename)) { return "code"; }
+ if (/\.st$/i.test(filename)) { return "code"; }
+ if (/\.stellaris$/i.test(filename)) { return "code"; }
+ if (/\.storyboard$/i.test(filename)) { return "code"; }
+ if (/\.tagx$/i.test(filename)) { return "code"; }
+ if (/\.targets$/i.test(filename)) { return "code"; }
+ if (/\.tera$/i.test(filename)) { return "code"; }
+ if (/\.tml$/i.test(filename)) { return "code"; }
+ if (/\.ui$/i.test(filename)) { return "code"; }
+ if (/\.urdf$/i.test(filename)) { return "code"; }
+ if (/\.ux$/i.test(filename)) { return "code"; }
+ if (/\.vxml$/i.test(filename)) { return "code"; }
+ if (/\.webidl$/i.test(filename)) { return "code"; }
+ if (/\.wisp$/i.test(filename)) { return "code"; }
+ if (/\.wlp(4|ppp)$/i.test(filename)) { return "code"; }
+ if (/\.wsdl$/i.test(filename)) { return "code"; }
+ if (/\.wsf$/i.test(filename)) { return "code"; }
+ if (/\.x3d$/i.test(filename)) { return "code"; }
+ if (/\.xacro$/i.test(filename)) { return "code"; }
+ if (/\.xib$/i.test(filename)) { return "code"; }
+ if (/\.xlf$/i.test(filename)) { return "code"; }
+ if (/\.xliff$/i.test(filename)) { return "code"; }
+ if (/\.xmi$/i.test(filename)) { return "code"; }
+ if (/\.xproj$/i.test(filename)) { return "code"; }
+ if (/\.xsd$/i.test(filename)) { return "code"; }
+ if (/\.xsl$/i.test(filename)) { return "code"; }
+ if (/\.xslt$/i.test(filename)) { return "code"; }
+ if (/\.xul$/i.test(filename)) { return "code"; }
+ if (/\.zcml$/i.test(filename)) { return "code"; }
+ if (/\.kid$/i.test(filename)) { return "genshi"; }
+ if (/^xml\+(genshi|kid)$/i.test(filename)) { return "genshi"; }
+ if (/\.gen$/i.test(filename)) { return "genstat"; }
+ if (/\.gpi$/i.test(filename)) { return "genstat"; }
+ if (/\.ebuild$/i.test(filename)) { return "gentoo"; }
+ if (/\.eclass$/i.test(filename)) { return "gentoo"; }
+ if (/\.xcf$/i.test(filename)) { return "gimp"; }
+ if (/\.ggr$/i.test(filename)) { return "gimp"; }
+ if (/\.gih$/i.test(filename)) { return "gimp"; }
+ if (/\.gpl$/i.test(filename)) { return "gimp"; }
+ if (/\.vbr$/i.test(filename)) { return "gimp"; }
+ if (/^\.git|^\.keep$|\.(lfsconfig|mailmap)$/i.test(filename)) { return "git"; }
+ if (/\.git(ignore|config|attributes)$/i.test(filename)) { return "git"; }
+ if (/^(ATOM_)?COMMIT_EDITMSG$/.test(filename)) { return "git-commit"; }
+ if (/^MERGE_(HEAD|MODE|MSG)$/.test(filename)) { return "git-merge"; }
+ if (/^\.gitlab-ci\.yml$/.test(filename)) { return "gitlab"; }
+ if (/^\.?gitpod\.ya?ml$/i.test(filename)) { return "gitpod"; }
+ if (/\.glade$/i.test(filename)) { return "glade"; }
+ if (/^glide\.ya?ml$/i.test(filename)) { return "glide"; }
+ if (/\.gltf$/i.test(filename)) { return "gltf"; }
+ if (/\.glf$/i.test(filename)) { return "pointwise"; }
+ if (/\.glyphs$/i.test(filename)) { return "glyphs"; }
+ if (/\.gn$/i.test(filename)) { return "gn"; }
+ if (/\.gni$/i.test(filename)) { return "gn"; }
+ if (/\.(gnu|gplv[23])$/i.test(filename)) { return "gnu"; }
+ if (/^([AL]?GPL|GFDL)(\b|_)/.test(filename)) { return "gnu"; }
+ if (/\.gtk/.test(filename)) { return "gnome"; }
+ if (/\.(gp|plo?t|gnuplot)$/i.test(filename)) { return "gnuplot"; }
+ if (/\.go$/i.test(filename)) { return "go"; }
+ if (/\.gd$/i.test(filename)) { return "godot"; }
+ if (/\.godot$/i.test(filename)) { return "godot"; }
+ if (/\.tres$/i.test(filename)) { return "godot"; }
+ if (/\.tscn$/i.test(filename)) { return "godot"; }
+ if (/\.import$/i.test(filename)) { return "godot"; }
+ if (/\.golo$/i.test(filename)) { return "golo"; }
+ if (/^\.goreleaser\.ya?ml$/i.test(filename)) { return "goreleaser"; }
+ if (/\.gs$/i.test(filename)) { return "gosu"; }
+ if (/\.gst$/i.test(filename)) { return "gosu"; }
+ if (/\.gsx$/i.test(filename)) { return "gosu"; }
+ if (/\.vark$/i.test(filename)) { return "gosu"; }
+ if (/\.gradle$/i.test(filename)) { return "gradle"; }
+ if (/gradlew$/i.test(filename)) { return "gradle"; }
+ if (/\.bnf$/i.test(filename)) { return "bnf"; }
+ if (/\.abnf$/i.test(filename)) { return "bnf"; }
+ if (/\.ebnf$/i.test(filename)) { return "bnf"; }
+ if (/\.cddl$/i.test(filename)) { return "bnf"; }
+ if (/\.(cf|lbnf)$/i.test(filename)) { return "bnf"; }
+ if (/\.grammar$/i.test(filename)) { return "bnf"; }
+ if (/\.gf$/i.test(filename)) { return "gf"; }
+ if (/\.gcx$/i.test(filename)) { return "grapher"; }
+ if (/\.graphql$/i.test(filename)) { return "graphql"; }
+ if (/\.graphqls$/i.test(filename)) { return "graphql"; }
+ if (/\.gql$/i.test(filename)) { return "graphql"; }
+ if (/^\.graphqlrc(?:\.(?:json|js|ya?ml))?$/i.test(filename)) { return "graphql"; }
+ if (/^graphql\.config\.js$/.test(filename)) { return "graphql"; }
+ if (/^codegen\.(json|ya?ml)$/i.test(filename)) { return "gql-codegen"; }
+ if (/\.gv$/i.test(filename)) { return "graphviz"; }
+ if (/\.dot$/i.test(filename)) { return "graphviz"; }
+ if (/\.(plantuml|[ip]uml|pu)$/i.test(filename)) { return "graphviz"; }
+ if (/\.gvdesign$/i.test(filename)) { return "gvdesign"; }
+ if (/^greenkeeper\.json$/i.test(filename)) { return "greenkeeper"; }
+ if (/\bgridsome\.(config|client|server)\.[jt]s$/i.test(filename)) { return "gridsome"; }
+ if (/\.(groovy|grt|gtpl|gsp|gvy)$/i.test(filename)) { return "groovy"; }
+ if (/gsp$/i.test(filename)) { return "groovy"; }
+ if (/^gruntfile.*\.([cm]?js|jsx)$/i.test(filename)) { return "grunt"; }
+ if (/^gruntfile.*\.(lit)?coffee$/i.test(filename)) { return "grunt"; }
+ if (/^gruntfile.*\.tsx?$/i.test(filename)) { return "grunt"; }
+ if (/^gulpfile.*\.([cm]?js|jsx)$/i.test(filename)) { return "gulp"; }
+ if (/^gulpfile.*\.(lit)?coffee$/i.test(filename)) { return "gulp"; }
+ if (/^gulpfile.*\.tsx?$/i.test(filename)) { return "gulp"; }
+ if (/\.hh$/i.test(filename)) { return "hack"; }
+ if (/\.hhi$/i.test(filename)) { return "hack"; }
+ if (/\.hack$/i.test(filename)) { return "hack"; }
+ if (/\.haml$/i.test(filename)) { return "haml"; }
+ if (/\.hamlc$/i.test(filename)) { return "haml"; }
+ if (/\.haml\.deface$/i.test(filename)) { return "haml"; }
+ if (/\.hb$/i.test(filename)) { return "harbour"; }
+ if (/\.hcl$/i.test(filename)) { return "hashicorp"; }
+ if (/\.workflow$/i.test(filename)) { return "hashicorp"; }
+ if (/\.hs$/i.test(filename)) { return "haskell"; }
+ if (/\.hsc$/i.test(filename)) { return "haskell"; }
+ if (/\.c2hs$/i.test(filename)) { return "haskell"; }
+ if (/\.lhs$/i.test(filename)) { return "haskell"; }
+ if (/\.hs-boot$/i.test(filename)) { return "haskell"; }
+ if (/\.hsig$/i.test(filename)) { return "haskell"; }
+ if (/^hie\.ya?ml($|\.)/i.test(filename)) { return "hie"; }
+ if (/\.hx([sm]l|)?$/.test(filename)) { return "haxe"; }
+ if (/\.hxproj$/i.test(filename)) { return "haxedevelop"; }
+ if (/^\.p4ignore$/i.test(filename)) { return "helix"; }
+ if (/\.chm$/i.test(filename)) { return "question"; }
+ if (/\.hlp$/i.test(filename)) { return "question"; }
+ if (/^(Proc|Apt)file$/.test(filename)) { return "heroku"; }
+ if (/\.buildpacks$/i.test(filename)) { return "heroku"; }
+ if (/\.slugignore$/i.test(filename)) { return "heroku"; }
+ if (/^\.vendor_urls$/.test(filename)) { return "heroku"; }
+ if (/\.hpgl$/i.test(filename)) { return "hp"; }
+ if (/\.hjson$/i.test(filename)) { return "hjson"; }
+ if (/\.hc$/i.test(filename)) { return "templeos"; }
+ if (/\.hc\.z$/i.test(filename)) { return "templeos"; }
+ if (/^Brewfile$/.test(filename)) { return "brew"; }
+ if (/\.hl$/i.test(filename)) { return "hoplon"; }
+ if (/\.(hipnc|hip|i3d|picnc)$/i.test(filename)) { return "houdini"; }
+ if (/\.vfl$/i.test(filename)) { return "houdini"; }
+ if (/\.hound\.ya?ml$/i.test(filename)) { return "houndci"; }
+ if (/\.x?html?$/i.test(filename)) { return "html5"; }
+ if (/\.cshtml$/i.test(filename)) { return "html5"; }
+ if (/\.gohtml$/i.test(filename)) { return "html5"; }
+ if (/\.html\.eex$/i.test(filename)) { return "html5"; }
+ if (/\.jsp$/i.test(filename)) { return "html5"; }
+ if (/\.jspf$/i.test(filename)) { return "html5"; }
+ if (/\.kit$/i.test(filename)) { return "html5"; }
+ if (/\.isml$/i.test(filename)) { return "html5"; }
+ if (/\.latte$/i.test(filename)) { return "html5"; }
+ if (/\.phtml$/i.test(filename)) { return "html5"; }
+ if (/\.shtml$/i.test(filename)) { return "html5"; }
+ if (/\.scaml$/i.test(filename)) { return "html5"; }
+ if (/\.swig$/i.test(filename)) { return "html5"; }
+ if (/\.vash$/i.test(filename)) { return "html5"; }
+ if (/\.xht$/i.test(filename)) { return "html5"; }
+ if (/\.dtml$/i.test(filename)) { return "html5"; }
+ if (/\.mht(ml)?$/i.test(filename)) { return "html5"; }
+ if (/\.html?\.ecr$/i.test(filename)) { return "html5"; }
+ if (/\.(html?\.erb(\.deface)?|rhtml)$/i.test(filename)) { return "html5"; }
+ if (/\.huskyrc$/i.test(filename)) { return "husky"; }
+ if (/\.huskyrc\.js$/i.test(filename)) { return "husky"; }
+ if (/\.huskyrc\.json$/i.test(filename)) { return "husky"; }
+ if (/\.huskyrc\.cjs$/i.test(filename)) { return "husky"; }
+ if (/\.huskyrc\.mjs$/i.test(filename)) { return "husky"; }
+ if (/\.huskyrc\.ya?ml$/i.test(filename)) { return "husky"; }
+ if (/\.hy$/i.test(filename)) { return "hy"; }
+ if (/hylang$/i.test(filename)) { return "hy"; }
+ if (/\.ejs\.t$/i.test(filename)) { return "hygen"; }
+ if (/^\.hyper\.[cm]?js$/i.test(filename)) { return "hyper"; }
+ if (/\.dlm$/i.test(filename)) { return "idl"; }
+ if (/^icomoon(\.[-\w]+)*\.json$/i.test(filename)) { return "icomoon"; }
+ if (/\.idr$/i.test(filename)) { return "idris"; }
+ if (/\.lidr$/i.test(filename)) { return "idris"; }
+ if (/\.ipf$/i.test(filename)) { return "igorpro"; }
+ if (/igor$/i.test(filename)) { return "igorpro"; }
+ if (/\.a?png$/i.test(filename)) { return "image"; }
+ if (/\.gif$/i.test(filename)) { return "image"; }
+ if (/\.jpe?g$/i.test(filename)) { return "image"; }
+ if (/\.(avif|heifs?|hif)$/i.test(filename)) { return "image"; }
+ if (/\.ico$/i.test(filename)) { return "image"; }
+ if (/\.webp$/i.test(filename)) { return "image"; }
+ if (/\.bmp$/i.test(filename)) { return "image"; }
+ if (/\.bpg$/i.test(filename)) { return "image"; }
+ if (/\.cin$/i.test(filename)) { return "image"; }
+ if (/\.cd5$/i.test(filename)) { return "image"; }
+ if (/\.cgm$/i.test(filename)) { return "image"; }
+ if (/\.cr2$/i.test(filename)) { return "image"; }
+ if (/\.dcm$/i.test(filename)) { return "image"; }
+ if (/\.dds$/i.test(filename)) { return "image"; }
+ if (/\.djvu?$/i.test(filename)) { return "image"; }
+ if (/\.dpx$/i.test(filename)) { return "image"; }
+ if (/\.ecw$/i.test(filename)) { return "image"; }
+ if (/\.fig$/i.test(filename)) { return "image"; }
+ if (/\.fits?$/i.test(filename)) { return "image"; }
+ if (/\.flif$/i.test(filename)) { return "image"; }
+ if (/\.fts$/i.test(filename)) { return "image"; }
+ if (/\.(gsrc|gr(emli)?n)$/i.test(filename)) { return "image"; }
+ if (/\.hdp$/i.test(filename)) { return "image"; }
+ if (/\.hdr$/i.test(filename)) { return "image"; }
+ if (/\.heic$/i.test(filename)) { return "image"; }
+ if (/\.icns$/i.test(filename)) { return "image"; }
+ if (/\.iff$/i.test(filename)) { return "image"; }
+ if (/\.(jp[f2xm]|j2c|mj2)$/i.test(filename)) { return "image"; }
+ if (/\.jps$/i.test(filename)) { return "image"; }
+ if (/\.jng$/i.test(filename)) { return "image"; }
+ if (/\.jxr$/i.test(filename)) { return "image"; }
+ if (/\.lbm$/i.test(filename)) { return "image"; }
+ if (/\.liff$/i.test(filename)) { return "image"; }
+ if (/\.mpo$/i.test(filename)) { return "image"; }
+ if (/\.mng$/i.test(filename)) { return "image"; }
+ if (/\.nrrd$/i.test(filename)) { return "image"; }
+ if (/\.ora$/i.test(filename)) { return "image"; }
+ if (/\.pcx$/i.test(filename)) { return "image"; }
+ if (/\.pict$/i.test(filename)) { return "image"; }
+ if (/\.pxr$/i.test(filename)) { return "image"; }
+ if (/\.raw$/i.test(filename)) { return "image"; }
+ if (/\.sct$/i.test(filename)) { return "image"; }
+ if (/\.sgi$/i.test(filename)) { return "image"; }
+ if (/\.svgz$/i.test(filename)) { return "image"; }
+ if (/\.tga$/i.test(filename)) { return "image"; }
+ if (/\.tiff?$/i.test(filename)) { return "image"; }
+ if (/\.vsdx?$/i.test(filename)) { return "image"; }
+ if (/\.wbm$/i.test(filename)) { return "image"; }
+ if (/\.wbmp$/i.test(filename)) { return "image"; }
+ if (/\.(wmf|emf|wmz|apm)$/i.test(filename)) { return "image"; }
+ if (/\.wdp$/i.test(filename)) { return "image"; }
+ if (/\.xwd$/i.test(filename)) { return "image"; }
+ if (/\.pxm$/i.test(filename)) { return "image"; }
+ if (/\.pxb$/i.test(filename)) { return "image"; }
+ if (/\.pxg$/i.test(filename)) { return "image"; }
+ if (/\.pxls$/i.test(filename)) { return "image"; }
+ if (/\.pxs$/i.test(filename)) { return "image"; }
+ if (/\.imba$/i.test(filename)) { return "imba"; }
+ if (/^\.imgbotconfig$/i.test(filename)) { return "imgbot"; }
+ if (/\.ni$/i.test(filename)) { return "inform7"; }
+ if (/\.i7x$/i.test(filename)) { return "inform7"; }
+ if (/\.ink$/i.test(filename)) { return "ink"; }
+ if (/\.ink2$/i.test(filename)) { return "ink"; }
+ if (/\.inx$/i.test(filename)) { return "inkscape"; }
+ if (/\.iss$/i.test(filename)) { return "inno"; }
+ if (/\.isl$/i.test(filename)) { return "inno"; }
+ if (/\.io$/i.test(filename)) { return "io"; }
+ if (/\.ik$/i.test(filename)) { return "ioke"; }
+ if (/^ionic\.(project|config\.json)$/.test(filename)) { return "ionic"; }
+ if (/\.thy$/i.test(filename)) { return "isabelle"; }
+ if (/^ROOT$/.test(filename)) { return "isabelle"; }
+ if (/^\.nycrc(\.json)?$/i.test(filename)) { return "istanbul"; }
+ if (/^\.nycrc\.ya?ml$/i.test(filename)) { return "istanbul"; }
+ if (/^nyc\.config\.js$/i.test(filename)) { return "istanbul"; }
+ if (/^nyc\.config\.cjs$/i.test(filename)) { return "istanbul"; }
+ if (/^nyc\.config\.mjs$/i.test(filename)) { return "istanbul"; }
+ if (/\.ijs$/i.test(filename)) { return "j"; }
+ if (/\.jade$/i.test(filename)) { return "jade"; }
+ if (/^Jakefile$/.test(filename)) { return "jake"; }
+ if (/\.jake$/i.test(filename)) { return "jake"; }
+ if (/^\.?jasmine\.json$|^jasmine\.([-\w]+\.)?([cm]?js|ts|coffee)$/i.test(filename)) { return "jasmine"; }
+ if (/\.java$/i.test(filename)) { return "java"; }
+ if (/\.class$/i.test(filename)) { return "java"; }
+ if (/\.js$/i.test(filename)) { return "js"; }
+ if (/\._js$/i.test(filename)) { return "js"; }
+ if (/\.jsb$/i.test(filename)) { return "js"; }
+ if (/\.jsm$/i.test(filename)) { return "js"; }
+ if (/\.jss$/i.test(filename)) { return "js"; }
+ if (/\.es\d?$/i.test(filename)) { return "js"; }
+ if (/\.cjs$/i.test(filename)) { return "js"; }
+ if (/\.mjs$/i.test(filename)) { return "js"; }
+ if (/\.sjs$/i.test(filename)) { return "js"; }
+ if (/\.ssjs$/i.test(filename)) { return "js"; }
+ if (/\.jspre$/i.test(filename)) { return "js"; }
+ if (/\.jscript$/i.test(filename)) { return "js"; }
+ if (/\.jse$/i.test(filename)) { return "js"; }
+ if (/\.jslib$/i.test(filename)) { return "js"; }
+ if (/\.xsjs$/i.test(filename)) { return "js"; }
+ if (/\.xsjslib$/i.test(filename)) { return "js"; }
+ if (/\.dust$/i.test(filename)) { return "js"; }
+ if (/\.htc$/i.test(filename)) { return "js"; }
+ if (/\.pac$/i.test(filename)) { return "js"; }
+ if (/\.pjs$/i.test(filename)) { return "js"; }
+ if (/\.js\.ecr$/i.test(filename)) { return "js"; }
+ if (/\.js\.erb$/i.test(filename)) { return "js"; }
+ if (/([\/\\])cartridge\1scripts(?:\1.+)?\1[^\\\/]+\.ds$/i.test(filename)) { return "js"; }
+ if (/^_config\.yml$/.test(filename)) { return "jekyll"; }
+ if (/\.nojekyll$/i.test(filename)) { return "jekyll"; }
+ if (/^Jenkinsfile$/.test(filename)) { return "jenkins"; }
+ if (/^jest(\.config)?(\.babel)?\.(js(on|x)?|[cm]js|tsx?)$/i.test(filename)) { return "jest"; }
+ if (/^\.jestrc($|\.)/i.test(filename)) { return "jest"; }
+ if (/\.(mjs|tsx?)\.snap$/i.test(filename)) { return "jest"; }
+ if (/\.cjs\.snap$/i.test(filename)) { return "jest"; }
+ if (/\.snap$/i.test(filename)) { return "jest"; }
+ if (/\.jinja$/i.test(filename)) { return "jinja"; }
+ if (/\.j(inja)?2$/i.test(filename)) { return "jinja"; }
+ if (/\.jison$/i.test(filename)) { return "jison"; }
+ if (/\.jisonlex$/i.test(filename)) { return "jison"; }
+ if (/\.ol$/i.test(filename)) { return "jolie"; }
+ if (/\.iol$/i.test(filename)) { return "jolie"; }
+ if (/^jquery([-.](min|latest|slim|\d\.\d+(\.\d+)?))*\.([jt]sx?|es6?|coffee|map)$/i.test(filename)) { return "jquery"; }
+ if (/^jquery([-_.](ui[-_.](custom|dialog-?\w*)|effects)(\.[^.]*)?|[-.]?ui(-\d\.\d+(\.\d+)?)?(\.\w+)?)([-_.]?min|dev)?\.([jt]sx?|es6?|coffee|map|s?css|less|styl)$/i.test(filename)) { return "jqueryui"; }
+ if (/\.jscpd(\.json)?$|^jscpd-report\.json/i.test(filename)) { return "jscpd"; }
+ if (/\.jscpd\.html$/i.test(filename)) { return "jscpd"; }
+ if (/\.jscpd\.xml$/i.test(filename)) { return "jscpd"; }
+ if (/\.(h|geo|topo)?json$/i.test(filename)) { return "json"; }
+ if (/\.jsonc$/i.test(filename)) { return "json"; }
+ if (/\.rsj$/i.test(filename)) { return "json"; }
+ if (/\.json5$/i.test(filename)) { return "json5"; }
+ if (/\.jsonld$/i.test(filename)) { return "jsonld"; }
+ if (/\.jq$/i.test(filename)) { return "sql"; }
+ if (/\.jsonnet$/i.test(filename)) { return "jsonnet"; }
+ if (/\.libsonnet$/i.test(filename)) { return "jsonnet"; }
+ if (/\.jsx$/i.test(filename)) { return "jsx"; }
+ if (/\.jl$/i.test(filename)) { return "julia"; }
+ if (/\.jos$/i.test(filename)) { return "junos"; }
+ if (/\.slax$/i.test(filename)) { return "junos"; }
+ if (/\.ipynb$/i.test(filename)) { return "jupyter"; }
+ if (/^Notebook$/.test(filename)) { return "jupyter"; }
+ if (/\.ksy$/i.test(filename)) { return "kaitai"; }
+ if (/^karma\.conf(ig)?\.[cm]?js$/i.test(filename)) { return "karma"; }
+ if (/^karma\.conf(ig)?\.coffee$/i.test(filename)) { return "karma"; }
+ if (/^karma\.conf(ig)?\.ts$/i.test(filename)) { return "karma"; }
+ if (/\.ks$/i.test(filename)) { return "kos"; }
+ if (/^keybase\.txt$/i.test(filename)) { return "keybase"; }
+ if (/\.keynote$/i.test(filename)) { return "keynote"; }
+ if (/\.knt$/i.test(filename)) { return "keynote"; }
+ if (/\.hypr$/i.test(filename)) { return "kibo"; }
+ if (/\.hypr\.live$/i.test(filename)) { return "kibo"; }
+ if (/\.kicad_pcb$/i.test(filename)) { return "kicad"; }
+ if (/\.kicad_pcb-bak$/i.test(filename)) { return "kicad"; }
+ if (/\.kicad_mod$/i.test(filename)) { return "kicad"; }
+ if (/\.kicad_wks$/i.test(filename)) { return "kicad"; }
+ if (/^fp-lib-table$/i.test(filename)) { return "kicad"; }
+ if (/^\.?kitchen(\.[-\w]*)*\.ya?ml$/i.test(filename)) { return "kitchenci"; }
+ if (/\.kv$/i.test(filename)) { return "kivy"; }
+ if (/\.kml$/i.test(filename)) { return "earth"; }
+ if (/^knockout[-.](\d+\.){3}(debug\.)?[cm]?js$/i.test(filename)) { return "knockout"; }
+ if (/\.kt$/i.test(filename)) { return "kotlin"; }
+ if (/\.ktm$/i.test(filename)) { return "kotlin"; }
+ if (/\.kts$/i.test(filename)) { return "kotlin"; }
+ if (/\.krl$/i.test(filename)) { return "krl"; }
+ if (/^kubernetes.*\.ya?ml$/i.test(filename)) { return "kubernetes"; }
+ if (/(^|\.)kazelcfg\.json$/i.test(filename)) { return "kubernetes"; }
+ if (/\.(csl|kusto)$/i.test(filename)) { return "kusto"; }
+ if (/Kusto (Query.?Language|Explorer)|^KQL$/i.test(filename)) { return "kusto"; }
+ if (/\.lv(proj|lib)$/i.test(filename)) { return "labview"; }
+ if (/\.blade(\.php)?$/i.test(filename)) { return "laravel"; }
+ if (/\.lark$/i.test(filename)) { return "lark"; }
+ if (/\.lasso$/i.test(filename)) { return "lasso"; }
+ if (/\.las$/i.test(filename)) { return "lasso"; }
+ if (/\.lasso8$/i.test(filename)) { return "lasso"; }
+ if (/\.lasso9$/i.test(filename)) { return "lasso"; }
+ if (/\.lassoapp$/i.test(filename)) { return "lasso"; }
+ if (/\.ldml$/i.test(filename)) { return "lasso"; }
+ if (/\.lat$/i.test(filename)) { return "latino"; }
+ if (/^leaflet\.(draw-src|draw|spin|coordinates-(\d+\.)\d+\.\d+\.src)\.([cm]?js|css)$|^wicket-leaflet\.[cm]?js$/i.test(filename)) { return "leaflet"; }
+ if (/\.lean$/i.test(filename)) { return "lean"; }
+ if (/\.hlean$/i.test(filename)) { return "lean"; }
+ if (/\.ledger$/i.test(filename)) { return "graph"; }
+ if (/\.hledger$/i.test(filename)) { return "graph"; }
+ if (/^lefthook(-local)?\.ya?ml$/i.test(filename)) { return "lefthook"; }
+ if (/\.lr$/i.test(filename)) { return "lektor"; }
+ if (/\.lektorproject$/i.test(filename)) { return "lektor"; }
+ if (/^lerna\.json$/i.test(filename)) { return "lerna"; }
+ if (/project\.clj$/i.test(filename)) { return "lein"; }
+ if (/\.l(e?x)?$/i.test(filename)) { return "lex"; }
+ if (/^lexer\.x$/i.test(filename)) { return "lex"; }
+ if (/\.flex$/i.test(filename)) { return "lex"; }
+ if (/\.lfe$/i.test(filename)) { return "lfe"; }
+ if (/^\.?lgtm\.ya?ml$/i.test(filename)) { return "lgtm"; }
+ if (/^\.?lighthouserc\.(json|js|ya?ml)$/i.test(filename)) { return "lighthouse"; }
+ if (/\.lwo$/i.test(filename)) { return "lightwave"; }
+ if (/\.lws$/i.test(filename)) { return "lightwave"; }
+ if (/\.ly$/i.test(filename)) { return "lilypond"; }
+ if (/\.ily$/i.test(filename)) { return "lilypond"; }
+ if (/\.hxp$/i.test(filename)) { return "lime"; }
+ if (/\.url$/i.test(filename)) { return "link"; }
+ if (/\.lnk$/i.test(filename)) { return "link"; }
+ if (/\.alias$/.test(filename)) { return "link"; }
+ if (/\.linq$/i.test(filename)) { return "linqpad"; }
+ if (/\.lisp$/i.test(filename)) { return "lisp"; }
+ if (/\.lsp$/i.test(filename)) { return "lisp"; }
+ if (/\.nl$/i.test(filename)) { return "lisp"; }
+ if (/\.ny$/i.test(filename)) { return "lisp"; }
+ if (/\.podsl$/i.test(filename)) { return "lisp"; }
+ if (/\.sexp$/i.test(filename)) { return "lisp"; }
+ if (/\.sbclrc$/i.test(filename)) { return "lisp"; }
+ if (/\.ls$/i.test(filename)) { return "ls"; }
+ if (/\._ls$/i.test(filename)) { return "ls"; }
+ if (/^Slakefile$/.test(filename)) { return "ls"; }
+ if (/\.ll$/i.test(filename)) { return "llvm"; }
+ if (/\.clang-(format|tidy)$/i.test(filename)) { return "llvm"; }
+ if (/^ubsan\.blacklist$/i.test(filename)) { return "llvm"; }
+ if (/\.xm$/i.test(filename)) { return "mobile"; }
+ if (/\.xi$/i.test(filename)) { return "mobile"; }
+ if (/\.(logtalk|lgt)$/i.test(filename)) { return "logtalk"; }
+ if (/\.lol$/i.test(filename)) { return "lolcode"; }
+ if (/\.(lookml|lkml)$/i.test(filename)) { return "lookml"; }
+ if (/\.lsl$/i.test(filename)) { return "lsl"; }
+ if (/\.lslp$/i.test(filename)) { return "lsl"; }
+ if (/\.lua$/i.test(filename)) { return "lua"; }
+ if (/\.pd_lua$/i.test(filename)) { return "lua"; }
+ if (/\.rbxs$/i.test(filename)) { return "lua"; }
+ if (/\.wlua$/i.test(filename)) { return "lua"; }
+ if (/^Lakefile$/i.test(filename)) { return "lua"; }
+ if (/\.luacheckrc$/i.test(filename)) { return "lua"; }
+ if (/\.rockspec$/i.test(filename)) { return "lua"; }
+ if (/\.m2$/i.test(filename)) { return "macaulay2"; }
+ if (/m2$/i.test(filename)) { return "macaulay2"; }
+ if (/^Makefile/.test(filename)) { return "checklist"; }
+ if (/^mk\.config$/.test(filename)) { return "checklist"; }
+ if (/\.(mk|mak|make)$/i.test(filename)) { return "checklist"; }
+ if (/^contrib\.make?([-.]|$)/i.test(filename)) { return "checklist"; }
+ if (/^BSDmakefile$/i.test(filename)) { return "checklist"; }
+ if (/^GNUmakefile$/i.test(filename)) { return "checklist"; }
+ if (/^makefile\.sco$/i.test(filename)) { return "checklist"; }
+ if (/^Kbuild$/.test(filename)) { return "checklist"; }
+ if (/^makefile$/.test(filename)) { return "checklist"; }
+ if (/^mkfile$/i.test(filename)) { return "checklist"; }
+ if (/^\.?qmake$/i.test(filename)) { return "checklist"; }
+ if (/\.am$/i.test(filename)) { return "checklist"; }
+ if (/^DEPS$/.test(filename)) { return "checklist"; }
+ if (/\.mms$/i.test(filename)) { return "checklist"; }
+ if (/\.mmk$/i.test(filename)) { return "checklist"; }
+ if (/\.pri$/i.test(filename)) { return "checklist"; }
+ if (/^justfile$/i.test(filename)) { return "checklist"; }
+ if (/\.eml$/i.test(filename)) { return "icon-mail"; }
+ if (/\.mbo?x$/i.test(filename)) { return "icon-mail"; }
+ if (/\.mak?o$/i.test(filename)) { return "mako"; }
+ if (/\.(1([bcmstx]|has|in)?|[24568]|3(avl|bsm|cfgadm|in|[cmx]|perl|pm?|qt)?|7(d|fs|i|ipp|m|p)?|9[efps]?|eqn|groff|man|mandoc|mdoc|me|mom|nr?|nroff|roff?|tmac|tmac-u|tr|troff)$/i.test(filename)) { return "manpage"; }
+ if (/^(man|mdoc)\.template$/i.test(filename)) { return "manpage"; }
+ if (/\.(chem|dformat|pic)$|^grap(\.tex)?\.defines$/i.test(filename)) { return "manpage"; }
+ if (/\.(rnh|rno|run|runoff)$/i.test(filename)) { return "manpage"; }
+ if (/(^|\.)((troff|eqn)rc(-end)?)$/i.test(filename)) { return "manpage"; }
+ if (/^tmac\.|^(mmn|mmt|toc\.entries)$/i.test(filename)) { return "manpage"; }
+ if (/(^|\/)samples\/(eqn|mm|[nt]?roff|pic|tbl)\.[a-z]+$/i.test(filename)) { return "manpage"; }
+ if (/(\\|\/)(?:man(\w+)\1[^\\\/]+\.\2|(?:tmac|eqnchar)\.d\1(?:ms\.)?[^\\\/.]+(?:\.in)?|picasso\1(?:defs\.\w+|disclaimer))$/.test(filename)) { return "manpage"; }
+ if (/\.css\.map$/i.test(filename)) { return "sourcemap"; }
+ if (/\.js\.map$/i.test(filename)) { return "sourcemap"; }
+ if (/\.cjs\.map$/i.test(filename)) { return "sourcemap"; }
+ if (/\.mjs\.map$/i.test(filename)) { return "sourcemap"; }
+ if (/\.cidmap$/i.test(filename)) { return "sourcemap"; }
+ if (/\.map$/i.test(filename)) { return "sourcemap"; }
+ if (/\.mapping$/i.test(filename)) { return "sourcemap"; }
+ if (/\.enigma$/i.test(filename)) { return "sourcemap"; }
+ if (/\.match$/i.test(filename)) { return "sourcemap"; }
+ if (/\.tiny$/i.test(filename)) { return "sourcemap"; }
+ if (/\.tinyv2$/i.test(filename)) { return "sourcemap"; }
+ if (/\.unpick$/i.test(filename)) { return "sourcemap"; }
+ if (/\.mss$/i.test(filename)) { return "mapbox"; }
+ if (/^Carto(CSS)?$/i.test(filename)) { return "mapbox"; }
+ if (/\.(md(te?xt)?|mdown|markdown|mkd|mkdown|mdwn|mkdn|ron|pmd|jmd)$/i.test(filename)) { return "markdown"; }
+ if (/^(CommonMark|GFM|Pandoc)$|\bMarkdown\b/i.test(filename)) { return "markdown"; }
+ if (/^\.markdownlint/i.test(filename)) { return "markdownlint"; }
+ if (/^\.?mdlrc(\.style)?\.rb$/i.test(filename)) { return "markdownlint"; }
+ if (/^\.?mdlrc$/i.test(filename)) { return "markdownlint"; }
+ if (/\.marko$/i.test(filename)) { return "marko"; }
+ if (/\.marko\.[cm]?js$/i.test(filename)) { return "marko"; }
+ if (/^materialize(\.min)?\.([cm]?js|css)$/i.test(filename)) { return "materialize"; }
+ if (/\.mathematica$/i.test(filename)) { return "mathematica"; }
+ if (/\.ma$/i.test(filename)) { return "mathematica"; }
+ if (/\.mt$/i.test(filename)) { return "mathematica"; }
+ if (/\.nb$/i.test(filename)) { return "mathematica"; }
+ if (/\.nbp$/i.test(filename)) { return "mathematica"; }
+ if (/^MathJax[^.]*\.[cm]?js$/i.test(filename)) { return "mathjax"; }
+ if (/\.matlab$/i.test(filename)) { return "matlab"; }
+ if (/\.mlappinstall$/i.test(filename)) { return "matlab"; }
+ if (/\.mlpkginstall$/i.test(filename)) { return "matlab"; }
+ if (/\.mltbx$/i.test(filename)) { return "matlab"; }
+ if (/\.mdlp$/i.test(filename)) { return "matlab"; }
+ if (/\.mn$/i.test(filename)) { return "matlab"; }
+ if (/\.sldd$/i.test(filename)) { return "matlab"; }
+ if (/\.slx$/i.test(filename)) { return "matlab"; }
+ if (/\.slxp$/i.test(filename)) { return "matlab"; }
+ if (/\.maxpat$/i.test(filename)) { return "max"; }
+ if (/\.maxhelp$/i.test(filename)) { return "max"; }
+ if (/\.maxproj$/i.test(filename)) { return "max"; }
+ if (/\.mxt$/i.test(filename)) { return "max"; }
+ if (/\.pat$/i.test(filename)) { return "max"; }
+ if (/\.ms$/i.test(filename)) { return "maxscript"; }
+ if (/\.mcr$/i.test(filename)) { return "maxscript"; }
+ if (/\.mce$/i.test(filename)) { return "maxscript"; }
+ if (/\.max$/i.test(filename)) { return "maxscript"; }
+ if (/\.3ds$/i.test(filename)) { return "maxscript"; }
+ if (/\.mb$/i.test(filename)) { return "maya"; }
+ if (/\.mel$/i.test(filename)) { return "maya"; }
+ if (/\.mcf[ip]$/i.test(filename)) { return "maya"; }
+ if (/\.mdx$/i.test(filename)) { return "mdx"; }
+ if (/\.mediawiki$/i.test(filename)) { return "mediawiki"; }
+ if (/\.wiki$/i.test(filename)) { return "mediawiki"; }
+ if (/^\.mention-bot$/i.test(filename)) { return "bullhorn"; }
+ if (/\.hgignore$/i.test(filename)) { return "hg"; }
+ if (/\.?hgrc$/i.test(filename)) { return "hg"; }
+ if (/\.hgsub$/i.test(filename)) { return "hg"; }
+ if (/\.hgsubstate$/i.test(filename)) { return "hg"; }
+ if (/\.moo$/i.test(filename)) { return "mercury"; }
+ if (/\.(mmd|mermaid)$/i.test(filename)) { return "mermaid"; }
+ if (/^(meson\.build|meson_options\.txt)$/i.test(filename)) { return "meson"; }
+ if (/\.metal$/i.test(filename)) { return "metal"; }
+ if (/\.mp$/i.test(filename)) { return "metapost"; }
+ if (/\.mf$/i.test(filename)) { return "metapost"; }
+ if (/\.accda$/i.test(filename)) { return "access"; }
+ if (/\.accdb$/i.test(filename)) { return "access"; }
+ if (/\.accde$/i.test(filename)) { return "access"; }
+ if (/\.accdr$/i.test(filename)) { return "access"; }
+ if (/\.accdt$/i.test(filename)) { return "access"; }
+ if (/\.adn$/i.test(filename)) { return "access"; }
+ if (/\.laccdb$/i.test(filename)) { return "access"; }
+ if (/\.mdw$/i.test(filename)) { return "access"; }
+ if (/\.xls$/i.test(filename)) { return "excel"; }
+ if (/\.xlsx$/i.test(filename)) { return "excel"; }
+ if (/\.xlsm$/i.test(filename)) { return "excel"; }
+ if (/\.xlsb$/i.test(filename)) { return "excel"; }
+ if (/\.xlt$/i.test(filename)) { return "excel"; }
+ if (/\.xla$/i.test(filename)) { return "excel"; }
+ if (/\.xlam$/i.test(filename)) { return "excel"; }
+ if (/\.xltm$/i.test(filename)) { return "excel"; }
+ if (/\.xltx$/i.test(filename)) { return "excel"; }
+ if (/\.(infopathxml|xsn|xsf|xtp2)$/i.test(filename)) { return "infopath"; }
+ if (/\.o?crec$/i.test(filename)) { return "lync"; }
+ if (/\.one$/i.test(filename)) { return "onenote"; }
+ if (/\.pst$/i.test(filename)) { return "outlook"; }
+ if (/\.bcmx$/i.test(filename)) { return "outlook"; }
+ if (/\.oab$/i.test(filename)) { return "outlook"; }
+ if (/\.otm$/i.test(filename)) { return "outlook"; }
+ if (/\.oft$/i.test(filename)) { return "outlook"; }
+ if (/\.nk2$/i.test(filename)) { return "outlook"; }
+ if (/\.olk14\w*$/i.test(filename)) { return "outlook"; }
+ if (/\.pps$/i.test(filename)) { return "powerpoint"; }
+ if (/\.ppsx$/i.test(filename)) { return "powerpoint"; }
+ if (/\.ppt$/i.test(filename)) { return "powerpoint"; }
+ if (/\.pptx$/i.test(filename)) { return "powerpoint"; }
+ if (/\.potm$/i.test(filename)) { return "powerpoint"; }
+ if (/\.mpp$/i.test(filename)) { return "msproject"; }
+ if (/\.mpt$/i.test(filename)) { return "msproject"; }
+ if (/\.puz$/i.test(filename)) { return "publisher"; }
+ if (/\.doc$/i.test(filename)) { return "word"; }
+ if (/\.docx$/i.test(filename)) { return "word"; }
+ if (/\.docm$/i.test(filename)) { return "word"; }
+ if (/\.docxml$/i.test(filename)) { return "word"; }
+ if (/\.dotm$/i.test(filename)) { return "word"; }
+ if (/\.dotx$/i.test(filename)) { return "word"; }
+ if (/\.wri$/i.test(filename)) { return "word"; }
+ if (/\.wll$/i.test(filename)) { return "word"; }
+ if (/\.vsdx$/i.test(filename)) { return "visio"; }
+ if (/\.vdw$/i.test(filename)) { return "visio"; }
+ if (/\.vdx$/i.test(filename)) { return "visio"; }
+ if (/\.vsd$/i.test(filename)) { return "visio"; }
+ if (/\.vsdm$/i.test(filename)) { return "visio"; }
+ if (/\.vsw$/i.test(filename)) { return "visio"; }
+ if (/\.vsx$/i.test(filename)) { return "visio"; }
+ if (/\.vtx$/i.test(filename)) { return "visio"; }
+ if (/\.vrd$/i.test(filename)) { return "visio"; }
+ if (/\.vsl$/i.test(filename)) { return "visio"; }
+ if (/\.vs[st][mx]?$/i.test(filename)) { return "visio"; }
+ if (/^mcmod\.info$/i.test(filename)) { return "minecraft"; }
+ if (/\.mcfunction$/i.test(filename)) { return "minecraft"; }
+ if (/\.mclevel$/i.test(filename)) { return "minecraft"; }
+ if (/\.mcpack$/i.test(filename)) { return "minecraft"; }
+ if (/\.mcworld$/i.test(filename)) { return "minecraft"; }
+ if (/^pack\.mcmeta$/i.test(filename)) { return "minecraft"; }
+ if (/\.png\.mcmeta$/.test(filename)) { return "minecraft"; }
+ if (/\.mzn$/i.test(filename)) { return "minizinc"; }
+ if (/\.dzn$/i.test(filename)) { return "minizinc"; }
+ if (/\.mint$/i.test(filename)) { return "mint"; }
+ if (/\.dr?uby$/g.test(filename)) { return "mirah"; }
+ if (/\.mir(ah)?$/g.test(filename)) { return "mirah"; }
+ if (/\.m$/i.test(filename)) { return "miranda"; }
+ if (/\.mrc$/i.test(filename)) { return "mirc"; }
+ if (/\.mjml$/i.test(filename)) { return "mjml"; }
+ if (/\.mjmlslim$/i.test(filename)) { return "mjml"; }
+ if (/^\.?mkdocs\.ya?ml$/i.test(filename)) { return "book-alt"; }
+ if (/\.mocharc\.(jsonc?|[cm]?js|ya?ml)$/i.test(filename)) { return "mocha"; }
+ if (/^mocha(\.min)?\.([jt]sx?|es6?|coffee)$/i.test(filename)) { return "mocha"; }
+ if (/^mocha(\.min)?\.(s?css|less|styl)$/i.test(filename)) { return "mocha"; }
+ if (/mocha\.opts$/i.test(filename)) { return "mocha"; }
+ if (/\.obj$/i.test(filename)) { return "model"; }
+ if (/\.mtl$/i.test(filename)) { return "model"; }
+ if (/\.shader$/i.test(filename)) { return "model"; }
+ if (/\.geo(m|metry)?$/i.test(filename)) { return "model"; }
+ if (/\.c4d$/i.test(filename)) { return "model"; }
+ if (/\.comp$/i.test(filename)) { return "model"; }
+ if (/\.tesc$/i.test(filename)) { return "model"; }
+ if (/\.tese$/i.test(filename)) { return "model"; }
+ if (/\.cginc$/i.test(filename)) { return "model"; }
+ if (/\.dxf$/i.test(filename)) { return "model"; }
+ if (/\.dwg$/i.test(filename)) { return "model"; }
+ if (/\.mdl$/i.test(filename)) { return "model"; }
+ if (/\.ply$/i.test(filename)) { return "model"; }
+ if (/\.fnc$/i.test(filename)) { return "model"; }
+ if (/\.stl$/i.test(filename)) { return "model"; }
+ if (/\.u3d$/i.test(filename)) { return "model"; }
+ if (/\.(rviz|vcg)$/i.test(filename)) { return "model"; }
+ if (/\.(ste?p|p21)$/i.test(filename)) { return "model"; }
+ if (/\.x$/i.test(filename)) { return "model"; }
+ if (/\.mo$/i.test(filename)) { return "modelica"; }
+ if (/^\.?modernizr(rc)?\.[cm]?js$|^modernizr([-\.]custom|-\d\.\d+)(\.\d+)?\.[cm]?js$/i.test(filename)) { return "modernizr"; }
+ if (/^web-(dev-server|test-runner)\.config\.([cm]?js)$/i.test(filename)) { return "modernweb"; }
+ if (/\.lxo$/i.test(filename)) { return "modo"; }
+ if (/\.mod$/i.test(filename)) { return "modula2"; }
+ if (/\.def$/i.test(filename)) { return "modula2"; }
+ if (/\.i3$/i.test(filename)) { return "modula3"; }
+ if (/\.ig$/i.test(filename)) { return "modula3"; }
+ if (/\.m3$/i.test(filename)) { return "modula3"; }
+ if (/\.mg$/i.test(filename)) { return "modula3"; }
+ if (/^m3(makefile|overrides)$/i.test(filename)) { return "modula3"; }
+ if (/\.moho$/i.test(filename)) { return "moho"; }
+ if (/\.mohoaction$/i.test(filename)) { return "moho"; }
+ if (/\.mohobrush$/i.test(filename)) { return "moho"; }
+ if (/\.mohoexport$/i.test(filename)) { return "moho"; }
+ if (/\.mohoproj$/i.test(filename)) { return "moho"; }
+ if (/\.mohostyle$/i.test(filename)) { return "moho"; }
+ if (/^moleculer\.config\.([cm]?js|json|ts)$/i.test(filename)) { return "moleculer"; }
+ if (/^moment(-with-locales)?(\.min)?\.[cm]?js$/i.test(filename)) { return "moment"; }
+ if (/^moment-timezone(-with-data)?(-\d{4}-\d{4})?(\.min)?\.[cm]?js$/i.test(filename)) { return "moment-tz"; }
+ if (/\.monkey$/i.test(filename)) { return "monkey"; }
+ if (/\.mtn-ignore$/i.test(filename)) { return "monotone"; }
+ if (/\.moon$/i.test(filename)) { return "moon"; }
+ if (/^mootools[^.]*\d+\.\d+(\.\d+)?[^.]*\.[cm]?js$/i.test(filename)) { return "mootools"; }
+ if (/\.mrb$/i.test(filename)) { return "mruby"; }
+ if (/\.dsql$/i.test(filename)) { return "msql"; }
+ if (/\.mu$/i.test(filename)) { return "mupad"; }
+ if (/\.chord$/i.test(filename)) { return "music"; }
+ if (/\.midi?$/i.test(filename)) { return "music"; }
+ if (/\.pd$/i.test(filename)) { return "music"; }
+ if (/\.(hb[st]|handlebars|(mu)?stache)$/i.test(filename)) { return "mustache"; }
+ if (/^(hbs|htmlbars|handlebars)$/i.test(filename)) { return "mustache"; }
+ if (/\.nanorc$/i.test(filename)) { return "nano"; }
+ if (/^\.?nanoc\.ya?ml$/i.test(filename)) { return "nanoc"; }
+ if (/\.build$/i.test(filename)) { return "nant"; }
+ if (/\.nasm$/i.test(filename)) { return "nasm"; }
+ if (/\.ncl$/i.test(filename)) { return "earth"; }
+ if (/\.neon$/i.test(filename)) { return "neon"; }
+ if (/\.nd?proj$/i.test(filename)) { return "ndepend"; }
+ if (/\.neko$/i.test(filename)) { return "neko"; }
+ if (/^run\.n$/.test(filename)) { return "neko"; }
+ if (/\.cyp(her)?$/i.test(filename)) { return "neo4j"; }
+ if (/\.nasl$/i.test(filename)) { return "nessus"; }
+ if (/\.axs$/i.test(filename)) { return "amx"; }
+ if (/\.axi$/i.test(filename)) { return "amx"; }
+ if (/\.nlogo$/i.test(filename)) { return "netlogo"; }
+ if (/^netlify\.toml$/i.test(filename)) { return "netlify"; }
+ if (/^newrelic\.yml/i.test(filename)) { return "newrelic"; }
+ if (/\.nf$/i.test(filename)) { return "nextflow"; }
+ if (/^nextflow\.config$/i.test(filename)) { return "nextflow"; }
+ if (/^next\.config\.[cm]?js$/i.test(filename)) { return "nextjs"; }
+ if (/^nestconfig\.json$/i.test(filename)) { return "nestjs"; }
+ if (/\.pbm$/i.test(filename)) { return "image"; }
+ if (/\.pgm$/i.test(filename)) { return "image"; }
+ if (/\.ppm$/i.test(filename)) { return "image"; }
+ if (/\.pnm$/i.test(filename)) { return "image"; }
+ if (/^nginx(\.[-\w]+)*\.conf$/i.test(filename)) { return "nginx"; }
+ if (/\.nginx(conf)?$/i.test(filename)) { return "nginx"; }
+ if (/\.nib$/i.test(filename)) { return "nib"; }
+ if (/\.5c$/i.test(filename)) { return "nickle"; }
+ if (/^nightwatch\.conf(ig)?\.[cm]?js$/i.test(filename)) { return "nightwatch"; }
+ if (/\.nim(rod)?$/i.test(filename)) { return "nimrod"; }
+ if (/Nimrod$/i.test(filename)) { return "nimrod"; }
+ if (/\.nimble$/i.test(filename)) { return "nimble"; }
+ if (/\.ninja$/i.test(filename)) { return "shuriken"; }
+ if (/\.ninja\.d$/i.test(filename)) { return "shuriken"; }
+ if (/\.n64$/i.test(filename)) { return "n64"; }
+ if (/\.z64$/i.test(filename)) { return "n64"; }
+ if (/\.nit$/i.test(filename)) { return "nit"; }
+ if (/\.nix$/i.test(filename)) { return "nix"; }
+ if (/nixos$/i.test(filename)) { return "nix"; }
+ if (/\.nse$/i.test(filename)) { return "nmap"; }
+ if (/\.njs$/i.test(filename)) { return "node"; }
+ if (/\.nvmrc$/i.test(filename)) { return "node"; }
+ if (/\.node$/i.test(filename)) { return "node"; }
+ if (/\.node-version$/i.test(filename)) { return "node"; }
+ if (/^BUNDLED_NODE_VERSION$/.test(filename)) { return "node"; }
+ if (/\.node_repl_history$/i.test(filename)) { return "node"; }
+ if (/^nodemon\.json$|\.nodemonignore$/i.test(filename)) { return "nodemon"; }
+ if (/^\.?nokogirirc($|\.)/i.test(filename)) { return "nokogiri"; }
+ if (/\.nomad$/i.test(filename)) { return "nomad"; }
+ if (/\.noon$/i.test(filename)) { return "noon"; }
+ if (/^normalize(\.min)?\.(css|less|scss|styl)$/i.test(filename)) { return "normalize"; }
+ if (/^(package\.json|\.npmignore|\.?npmrc|npm-debug\.log|npm-shrinkwrap\.json|package-lock\.json)$/i.test(filename)) { return "npm"; }
+ if (/\.nsi$/i.test(filename)) { return "nsis"; }
+ if (/\.nsh$/i.test(filename)) { return "nsis"; }
+ if (/^\.nsrirc(\.(json|(config\.)?[cm]?js|ya?ml))?$/i.test(filename)) { return "nsri"; }
+ if (/^\.nsriignore(\.(json|(config\.)?[cm]?js|ya?ml))?$/i.test(filename)) { return "nsri"; }
+ if (/\.integrity\.json$/i.test(filename)) { return "nsri-alt"; }
+ if (/\.nu$/i.test(filename)) { return "recycle"; }
+ if (/^Nukefile$/.test(filename)) { return "recycle"; }
+ if (/\.nuspec$/i.test(filename)) { return "nuget"; }
+ if (/\.nupkg$/i.test(filename)) { return "nuget"; }
+ if (/\.pkgproj$/i.test(filename)) { return "nuget"; }
+ if (/\.snupkg$/i.test(filename)) { return "nuget"; }
+ if (/\.psmdcp$/i.test(filename)) { return "nuget"; }
+ if (/\.npy$/i.test(filename)) { return "numpy"; }
+ if (/\.npz$/i.test(filename)) { return "numpy"; }
+ if (/\.numpy$/i.test(filename)) { return "numpy"; }
+ if (/\.numpyw$/i.test(filename)) { return "numpy"; }
+ if (/\.numsc$/i.test(filename)) { return "numpy"; }
+ if (/\.(nunjucks|njk)$/i.test(filename)) { return "nunjucks"; }
+ if (/^nuxt\.config\.[jt]s$/i.test(filename)) { return "nuxt"; }
+ if (/\.nss$/i.test(filename)) { return "nwscript"; }
+ if (/\.ncs$/i.test(filename)) { return "nwscript"; }
+ if (/\.ndb$/i.test(filename)) { return "nwscript"; }
+ if (/^nx\.json$/i.test(filename)) { return "nx"; }
+ if (/\.nxc$/i.test(filename)) { return "nxc"; }
+ if (/\.ob2$/i.test(filename)) { return "oberon"; }
+ if (/\.mm?$/i.test(filename)) { return "objc"; }
+ if (/\.pch$/i.test(filename)) { return "objc"; }
+ if (/\.x$/i.test(filename)) { return "objc"; }
+ if (/\.j$/i.test(filename)) { return "objj"; }
+ if (/\.sj$/i.test(filename)) { return "objj"; }
+ if (/\.ml$/i.test(filename)) { return "ocaml"; }
+ if (/\.mli$/i.test(filename)) { return "ocaml"; }
+ if (/\.eliom$/i.test(filename)) { return "ocaml"; }
+ if (/\.eliomi$/i.test(filename)) { return "ocaml"; }
+ if (/\.ml4$/i.test(filename)) { return "ocaml"; }
+ if (/\.mll$/i.test(filename)) { return "ocaml"; }
+ if (/\.mly$/i.test(filename)) { return "ocaml"; }
+ if (/\.octave$/i.test(filename)) { return "octave"; }
+ if (/\.octave_hist$/i.test(filename)) { return "octave"; }
+ if (/\.octaverc$/i.test(filename)) { return "octave"; }
+ if (/\.odin$/i.test(filename)) { return "odin"; }
+ if (/\.graffle$/i.test(filename)) { return "omnigraffle"; }
+ if (/\.gdiagramstyle$/i.test(filename)) { return "omnigraffle"; }
+ if (/\.gstencil$/i.test(filename)) { return "omnigraffle"; }
+ if (/\.gtemplate$/i.test(filename)) { return "omnigraffle"; }
+ if (/\.(o3|ogone)$/i.test(filename)) { return "ogone"; }
+ if (/\.ooc$/i.test(filename)) { return "ooc"; }
+ if (/\.opa$/i.test(filename)) { return "opa"; }
+ if (/^\+(CONTENTS|DESC|DISPLAY)$/.test(filename)) { return "openbsd"; }
+ if (/\.opencl$/i.test(filename)) { return "opencl"; }
+ if (/\.(p|abl)$/i.test(filename)) { return "progress"; }
+ if (/^(progress|openedge|abl)$/i.test(filename)) { return "progress"; }
+ if (/\.exr$/i.test(filename)) { return "openexr"; }
+ if (/\.(glslv?|gsh|gshader)$/i.test(filename)) { return "opengl"; }
+ if (/^(GLSL|GLslang)$/i.test(filename)) { return "opengl"; }
+ if (/\.(vert|vrx|vertex|vsh(ader)?)$/i.test(filename)) { return "vertex"; }
+ if (/\.(fra?g|fp|fsh|fshader)$/i.test(filename)) { return "vertex"; }
+ if (/\.odt$/i.test(filename)) { return "openoffice"; }
+ if (/\.ott$/i.test(filename)) { return "openoffice"; }
+ if (/\.fodt$/i.test(filename)) { return "openoffice"; }
+ if (/\.ods$/i.test(filename)) { return "openoffice"; }
+ if (/\.ots$/i.test(filename)) { return "openoffice"; }
+ if (/\.fods$/i.test(filename)) { return "openoffice"; }
+ if (/\.odp$/i.test(filename)) { return "openoffice"; }
+ if (/\.otp$/i.test(filename)) { return "openoffice"; }
+ if (/\.fodp$/i.test(filename)) { return "openoffice"; }
+ if (/\.odg$/i.test(filename)) { return "openoffice"; }
+ if (/\.otg$/i.test(filename)) { return "openoffice"; }
+ if (/\.fodg$/i.test(filename)) { return "openoffice"; }
+ if (/\.odf$/i.test(filename)) { return "openoffice"; }
+ if (/\.odb$/i.test(filename)) { return "openoffice"; }
+ if (/\.rego$/i.test(filename)) { return "openpolicy"; }
+ if (/\.scad$/i.test(filename)) { return "scad"; }
+ if (/\.jscad$/i.test(filename)) { return "scad"; }
+ if (/\.hlb$/i.test(filename)) { return "openvms"; }
+ if (/\.cld$/i.test(filename)) { return "openvms"; }
+ if (/\.com$/i.test(filename)) { return "openvms"; }
+ if (/\.ovpn$/i.test(filename)) { return "openvpn"; }
+ if (/^vdev\d+$/.test(filename)) { return "openzfs"; }
+ if (/\.org$/i.test(filename)) { return "org"; }
+ if (/\.dmg$/i.test(filename)) { return "osx"; }
+ if (/\.ox$/i.test(filename)) { return "ox"; }
+ if (/\.oxh$/i.test(filename)) { return "ox"; }
+ if (/\.oxo$/i.test(filename)) { return "ox"; }
+ if (/\.oxygene$/i.test(filename)) { return "oxygene"; }
+ if (/\.oz$/i.test(filename)) { return "oz"; }
+ if (/\.p4$/i.test(filename)) { return "p4"; }
+ if (/Cargo\.toml$/i.test(filename)) { return "package"; }
+ if (/Cargo\.lock$/i.test(filename)) { return "package"; }
+ if (/\.packages$/i.test(filename)) { return "package"; }
+ if (/^pubspec\.lock$/i.test(filename)) { return "package"; }
+ if (/^pubspec\.ya?ml$/i.test(filename)) { return "package"; }
+ if (/^paket\.(dependencies|lock|references|local|template)$/i.test(filename)) { return "package"; }
+ if (/\.pan$/i.test(filename)) { return "pan"; }
+ if (/\.psc$/i.test(filename)) { return "papyrus"; }
+ if (/\.parrot$/i.test(filename)) { return "parrot"; }
+ if (/\.pasm$/i.test(filename)) { return "parrot"; }
+ if (/\.pir$/i.test(filename)) { return "parrot"; }
+ if (/\.pas(cal)?$/i.test(filename)) { return "pascal"; }
+ if (/\.lpr$/i.test(filename)) { return "pascal"; }
+ if (/\.lfm$/i.test(filename)) { return "pascal"; }
+ if (/\.lps$/i.test(filename)) { return "pascal"; }
+ if (/\.lpi$/i.test(filename)) { return "pascal"; }
+ if (/\.lpk$/i.test(filename)) { return "pascal"; }
+ if (/\.lrs$/i.test(filename)) { return "pascal"; }
+ if (/\.lrt$/i.test(filename)) { return "pascal"; }
+ if (/\.or$/i.test(filename)) { return "pascal"; }
+ if (/\.ppu$/i.test(filename)) { return "pascal"; }
+ if (/\.patch$/i.test(filename)) { return "patch"; }
+ if (/^PATR(ONS|EON)\.md$/.test(filename)) { return "patreon"; }
+ if (/\.pwn$/i.test(filename)) { return "pawn"; }
+ if (/\.pcd$/i.test(filename)) { return "pcd"; }
+ if (/\.pdf$/i.test(filename)) { return "icon-file-pdf"; }
+ if (/\.(pegjs|peggy)$/i.test(filename)) { return "peg"; }
+ if (/\.pegcoffee$/i.test(filename)) { return "peg"; }
+ if (/\.p(er)?l$/i.test(filename)) { return "perl"; }
+ if (/\.al$/i.test(filename)) { return "perl"; }
+ if (/\.ph$/i.test(filename)) { return "perl"; }
+ if (/\.plx$/i.test(filename)) { return "perl"; }
+ if (/\.pm$/i.test(filename)) { return "perl"; }
+ if (/\.(psgi|xs)$/i.test(filename)) { return "perl"; }
+ if (/\.volt$/i.test(filename)) { return "phalcon"; }
+ if (/\.php([st\d]|_cs)?$/i.test(filename)) { return "php"; }
+ if (/^Phakefile/.test(filename)) { return "php"; }
+ if (/\.engine$/i.test(filename)) { return "php"; }
+ if (/\.phar$/i.test(filename)) { return "php"; }
+ if (/^phpunit\.xml$/i.test(filename)) { return "phpunit"; }
+ if (/^phoenix\.ex$/i.test(filename)) { return "phoenix"; }
+ if (/^phoenix\.[cm]?js$/i.test(filename)) { return "phoenix"; }
+ if (/^\.photorec\.cfg$/i.test(filename)) { return "photorec"; }
+ if (/^\.phraseapp\.ya?ml$/i.test(filename)) { return "phraseapp"; }
+ if (/\.(pkl|pickle)$/i.test(filename)) { return "pickle"; }
+ if (/\.p8$/i.test(filename)) { return "pico8"; }
+ if (/^pico\W8$/i.test(filename)) { return "pico8"; }
+ if (/\.l$/i.test(filename)) { return "picolisp"; }
+ if (/^Pipfile(\.lock)?$/i.test(filename)) { return "pipenv"; }
+ if (/\.pike$/i.test(filename)) { return "pike"; }
+ if (/\.pmod$/i.test(filename)) { return "pike"; }
+ if (/\.pine$/i.test(filename)) { return "pinescript"; }
+ if (/^platformio\.ini$/i.test(filename)) { return "platformio"; }
+ if (/\.pls$/i.test(filename)) { return "sql"; }
+ if (/\.pck$/i.test(filename)) { return "sql"; }
+ if (/\.pks$/i.test(filename)) { return "sql"; }
+ if (/\.plb$/i.test(filename)) { return "sql"; }
+ if (/\.plsql$/i.test(filename)) { return "sql"; }
+ if (/\.pkb$/i.test(filename)) { return "sql"; }
+ if (/^ecosystem\.conf(ig)?\./i.test(filename)) { return "pm2"; }
+ if (/^pnpm-(lock|workspace)\.ya?ml$/i.test(filename)) { return "pnpm"; }
+ if (/^pnpmfile\.js$/i.test(filename)) { return "pnpm"; }
+ if (/\.pod$/i.test(filename)) { return "pod"; }
+ if (/\.pogo$/i.test(filename)) { return "pogo"; }
+ if (/^polymer\.json$/i.test(filename)) { return "polymer"; }
+ if (/\.pony$/i.test(filename)) { return "pony"; }
+ if (/\.p(ost)?css$/i.test(filename)) { return "postcss"; }
+ if (/\.sss$/i.test(filename)) { return "postcss"; }
+ if (/\.postcssrc(\.([cm]?js|json|ya?ml))?$/i.test(filename)) { return "postcss"; }
+ if (/\bpostcss\.config\.[cm]?js$/i.test(filename)) { return "postcss"; }
+ if (/\.pgsql$/i.test(filename)) { return "pgsql"; }
+ if (/PL\/pgSQL$/i.test(filename)) { return "pgsql"; }
+ if (/\.ps$/i.test(filename)) { return "postscript"; }
+ if (/\.eps$/i.test(filename)) { return "postscript"; }
+ if (/\.pfa$/i.test(filename)) { return "postscript"; }
+ if (/\.bez$/i.test(filename)) { return "postscript"; }
+ if (/^fontinfo$/i.test(filename)) { return "postscript"; }
+ if (/\.a[fm]m$/i.test(filename)) { return "postscript"; }
+ if (/\/Resource\/[A-Z]\w+\/[^\/]+$|(^|\/)(cidfmap|xlatmap|PPI_CUtils|Pscript5Idiom)$/i.test(filename)) { return "postscript"; }
+ if (/\.eps[fi]$/i.test(filename)) { return "postscript"; }
+ if (/^Fontmap(\.GS)?$/i.test(filename)) { return "postscript"; }
+ if (/\.gsf$/i.test(filename)) { return "postscript"; }
+ if (/\.pov$/i.test(filename)) { return "povray"; }
+ if (/\.pbl$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.pbt$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.srw$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.sru$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.srp$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.sra$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.srj$/i.test(filename)) { return "powerbuilder"; }
+ if (/\.ps1$/i.test(filename)) { return "powershell"; }
+ if (/\.psd1$/i.test(filename)) { return "powershell"; }
+ if (/\.psm1$/i.test(filename)) { return "powershell"; }
+ if (/\.ps1xml$/i.test(filename)) { return "powershell"; }
+ if (/^\.pre-commit\b.*\.ya?ml$/i.test(filename)) { return "precommit"; }
+ if (/\.prettierrc(\.([cm]?js|json5?|ya?ml))?$|^prettier\.config\.[cm]?js$/i.test(filename)) { return "prettier"; }
+ if (/\.prettierignore$/i.test(filename)) { return "prettier"; }
+ if (/\.ppd$/i.test(filename)) { return "print"; }
+ if (/\.upp$/i.test(filename)) { return "print"; }
+ if (/\.joboptions$/i.test(filename)) { return "print"; }
+ if (/\.prisma$/i.test(filename)) { return "prisma"; }
+ if (/^project\.pros$/i.test(filename)) { return "pros"; }
+ if (/\.pde$/i.test(filename)) { return "processing"; }
+ if (/\.pro$/i.test(filename)) { return "prolog"; }
+ if (/\.prolog$/i.test(filename)) { return "prolog"; }
+ if (/\.yap$/i.test(filename)) { return "prolog"; }
+ if (/\.spin$/i.test(filename)) { return "propeller"; }
+ if (/\.proselintrc$/i.test(filename)) { return "proselint"; }
+ if (/^protractor\.(conf|config)\./i.test(filename)) { return "protractor"; }
+ if (/\.pug$/i.test(filename)) { return "pug"; }
+ if (/^\.pug-lintrc/i.test(filename)) { return "pug"; }
+ if (/^\.?pullapprove\.ya?ml$/i.test(filename)) { return "pullapprove"; }
+ if (/\.pp$/i.test(filename)) { return "puppet"; }
+ if (/\.epp$/i.test(filename)) { return "puppet"; }
+ if (/Modulefile$/i.test(filename)) { return "puppet"; }
+ if (/\.pure$/i.test(filename)) { return "pure"; }
+ if (/\.pb$/i.test(filename)) { return "purebasic"; }
+ if (/\.pbi$/i.test(filename)) { return "purebasic"; }
+ if (/\.purs$/i.test(filename)) { return "purescript"; }
+ if (/^((dev|docs?|tests?)[-_]requirements|requirements([-_](dev|docs?|tests?))?)\.(in|txt)$/i.test(filename)) { return "pypi"; }
+ if (/\.arr$/i.test(filename)) { return "pyret"; }
+ if (/^pytest\.ini$/.test(filename)) { return "pytest"; }
+ if (/\.py$/i.test(filename)) { return "python"; }
+ if (/\.ipy$/i.test(filename)) { return "python"; }
+ if (/\.isolate$/i.test(filename)) { return "python"; }
+ if (/\.pep$/i.test(filename)) { return "python"; }
+ if (/\.gyp$/i.test(filename)) { return "python"; }
+ if (/\.gypi$/i.test(filename)) { return "python"; }
+ if (/\.pyde$/i.test(filename)) { return "python"; }
+ if (/\.pyp$/i.test(filename)) { return "python"; }
+ if (/\.pyt$/i.test(filename)) { return "python"; }
+ if (/\.py3$/i.test(filename)) { return "python"; }
+ if (/\.pyi$/i.test(filename)) { return "python"; }
+ if (/\.pyw$/i.test(filename)) { return "python"; }
+ if (/\.pyz$/i.test(filename)) { return "python"; }
+ if (/\.tac$/i.test(filename)) { return "python"; }
+ if (/\.wsgi$/i.test(filename)) { return "python"; }
+ if (/\.xpy$/i.test(filename)) { return "python"; }
+ if (/\.smk$/i.test(filename)) { return "python"; }
+ if (/\.rpy$/i.test(filename)) { return "python"; }
+ if (/^py\.typed$/i.test(filename)) { return "python"; }
+ if (/\.?(pypirc|pythonrc|python-venv)$/i.test(filename)) { return "python"; }
+ if (/^(SConstruct|SConscript)$/.test(filename)) { return "python"; }
+ if (/^(Snakefile|WATCHLISTS)$/.test(filename)) { return "python"; }
+ if (/^wscript$/.test(filename)) { return "python"; }
+ if (/^\.pyup(\.ya?ml)?$/i.test(filename)) { return "pyup"; }
+ if (/\.q$/i.test(filename)) { return "kx"; }
+ if (/\.k$/i.test(filename)) { return "kx"; }
+ if (/\.qs$/i.test(filename)) { return "qsharp"; }
+ if (/qsharp$/i.test(filename)) { return "qsharp"; }
+ if (/\.qasm$/i.test(filename)) { return "qiskit"; }
+ if (/OpenQASM$/i.test(filename)) { return "qiskit"; }
+ if (/\.qvw$/i.test(filename)) { return "qlik"; }
+ if (/\.qvd$/i.test(filename)) { return "qlik"; }
+ if (/\.qml$/i.test(filename)) { return "qt"; }
+ if (/\.qmlproject$/i.test(filename)) { return "qt"; }
+ if (/\.qbs$/i.test(filename)) { return "qt"; }
+ if (/^(toolchain_)?installscript\.qs$/i.test(filename)) { return "qt"; }
+ if (/^quasar\.conf\.[cm]?js$/i.test(filename)) { return "quasar"; }
+ if (/\.(r|Rprofile|Rhistory|rsx|rd)$/i.test(filename)) { return "r"; }
+ if (/^(Rscript|splus|Rlang)$/i.test(filename)) { return "r"; }
+ if (/\.rkt$/i.test(filename)) { return "racket"; }
+ if (/\.rktd$/i.test(filename)) { return "racket"; }
+ if (/\.rktl$/i.test(filename)) { return "racket"; }
+ if (/\.scrbl$/i.test(filename)) { return "racket"; }
+ if (/\.pl6$/i.test(filename)) { return "perl6"; }
+ if (/\.[tp]6$|\.6pl$/i.test(filename)) { return "perl6"; }
+ if (/\.(pm6|p6m)$/i.test(filename)) { return "perl6"; }
+ if (/\.6pm$/i.test(filename)) { return "perl6"; }
+ if (/\.nqp$/i.test(filename)) { return "perl6"; }
+ if (/\.p6l$/i.test(filename)) { return "perl6"; }
+ if (/\.pod6$/i.test(filename)) { return "perl6"; }
+ if (/\.raku$/i.test(filename)) { return "perl6"; }
+ if (/\.rakumod$/i.test(filename)) { return "perl6"; }
+ if (/\.rakutest$/i.test(filename)) { return "perl6"; }
+ if (/^Rexfile$/.test(filename)) { return "perl6"; }
+ if (/\.raml$/i.test(filename)) { return "raml"; }
+ if (/^raphael(\.min|\.no-deps)*\.[cm]?js$/i.test(filename)) { return "raphael"; }
+ if (/\.rsc$/i.test(filename)) { return "rascal"; }
+ if (/^razzle\.config\./i.test(filename)) { return "razzle"; }
+ if (/^\.?readthedocs\.ya?ml$/i.test(filename)) { return "readthedocs"; }
+ if (/^\.rehyperc(\.([cm]?js|json|ya?ml))?$/i.test(filename)) { return "remark"; }
+ if (/^\.remarkrc(\.([cm]?js|json|ya?ml))?$/i.test(filename)) { return "remark"; }
+ if (/^\.retextrc(\.([cm]?js|json|ya?ml))?$/i.test(filename)) { return "remark"; }
+ if (/\.rehypeignore$/i.test(filename)) { return "remark"; }
+ if (/\.remarkignore$/i.test(filename)) { return "remark"; }
+ if (/\.retextignore$/i.test(filename)) { return "remark"; }
+ if (/\.r(est)?ql$/i.test(filename)) { return "restql"; }
+ if (/^restql\.ya?ml$/i.test(filename)) { return "restql"; }
+ if (/\.Rdata$/i.test(filename)) { return "rdata"; }
+ if (/\.rdb$/i.test(filename)) { return "rdata"; }
+ if (/\.rds$/i.test(filename)) { return "rdata"; }
+ if (/\.rdx$/i.test(filename)) { return "rdata"; }
+ if (/\.rdoc$/i.test(filename)) { return "rdoc"; }
+ if (/^react(-[^.]*)?\.[cm]?js$/i.test(filename)) { return "react"; }
+ if (/\.react\.[cm]?js$/i.test(filename)) { return "react"; }
+ if (/^README(\b|_)|^((un)?licen[sc]es?(\.mysql)?|(read|readme|click|delete|keep|test)\.me)(\.(md|txt))?$|\.(readme|1st|licen[sc]es?)$/i.test(filename)) { return "book"; }
+ if (/^(notice|bugs|changes|change[-_]?log([-._]?\d+)?|contribute|contributing|contributors|copy(ing|right)(\.regex)?|faq|fixes|hacking|history|install|maintainers|manifest|more\.stuff|notes|problems|projects|revision|terms|thanks|warnings)(_\w+)?$/i.test(filename)) { return "book"; }
+ if (/\b(changelog|copying(v?\d)?|install|notes?|notices?|read[-_]?me)\b|^licen[sc]es?[-._]/i.test(filename)) { return "book"; }
+ if (/^(news|release[-_.]?notes)([-_.]?[-\d]+)?$/i.test(filename)) { return "book"; }
+ if (/^zork\d\.(?!pre$|pur$)[a-z]+$/.test(filename)) { return "book"; }
+ if (/^zork\d\.doc$/.test(filename)) { return "book"; }
+ if (/^sudo[-_]lecture$/i.test(filename)) { return "book"; }
+ if (/\.changes$/i.test(filename)) { return "book"; }
+ if (/\.journal$/i.test(filename)) { return "book"; }
+ if (/\.faq$/i.test(filename)) { return "book"; }
+ if (/\.yo$/i.test(filename)) { return "book"; }
+ if (/\.rbbas$/i.test(filename)) { return "xojo"; }
+ if (/\.rbfrm$/i.test(filename)) { return "xojo"; }
+ if (/\.rbmnu$/i.test(filename)) { return "xojo"; }
+ if (/\.rbres$/i.test(filename)) { return "xojo"; }
+ if (/\.rbtbar$/i.test(filename)) { return "xojo"; }
+ if (/\.rbuistate$/i.test(filename)) { return "xojo"; }
+ if (/\.re$/i.test(filename)) { return "reason"; }
+ if (/\.rei$/i.test(filename)) { return "reason"; }
+ if (/\.reason$/i.test(filename)) { return "reasonstudios"; }
+ if (/\.rns$/i.test(filename)) { return "reasonstudios"; }
+ if (/\.rsn$/i.test(filename)) { return "reasonstudios"; }
+ if (/\.rx2$/i.test(filename)) { return "reasonstudios"; }
+ if (/\.sxt$/i.test(filename)) { return "reasonstudios"; }
+ if (/\.reb(ol)?$/i.test(filename)) { return "rebol"; }
+ if (/\.r2$/i.test(filename)) { return "rebol"; }
+ if (/\.r3$/i.test(filename)) { return "rebol"; }
+ if (/\.red$/i.test(filename)) { return "red"; }
+ if (/\.reds$/i.test(filename)) { return "red"; }
+ if (/\.rpm(macros)?$/i.test(filename)) { return "red-hat"; }
+ if (/\.spec$/i.test(filename)) { return "red-hat"; }
+ if (/\.reek$/i.test(filename)) { return "reek"; }
+ if (/\.regexp?$/i.test(filename)) { return "regex"; }
+ if (/(?!^renovate$)(\.|^)renovate(rc)?(\.json)?$/i.test(filename)) { return "renovate"; }
+ if (/^require([-.]min|dev)?\.[cm]?js$/i.test(filename)) { return "requirejs"; }
+ if (/\.resi$/i.test(filename)) { return "rescript"; }
+ if (/\.re?st(\.txt)?$/i.test(filename)) { return "rst"; }
+ if (/^re?st$/i.test(filename)) { return "rst"; }
+ if (/\.rexx?$/i.test(filename)) { return "rexx"; }
+ if (/\.pprx$/i.test(filename)) { return "rexx"; }
+ if (/\.3dm$/i.test(filename)) { return "rhino"; }
+ if (/\.rvb$/i.test(filename)) { return "rhino"; }
+ if (/^riemann\.config$/i.test(filename)) { return "clojure"; }
+ if (/\.ring$/i.test(filename)) { return "ring"; }
+ if (/\.tag$/i.test(filename)) { return "riot"; }
+ if (/\.(rmd|rmarkdown)$/i.test(filename)) { return "rmarkdown"; }
+ if (/\.robot$/i.test(filename)) { return "robot"; }
+ if (/^robots\.txt$/i.test(filename)) { return "robots"; }
+ if (/^rollup\.config\./i.test(filename)) { return "rollup"; }
+ if (/\.rg$/i.test(filename)) { return "clojure"; }
+ if (/\.rspec$/i.test(filename)) { return "rspec"; }
+ if (/\.rss$/i.test(filename)) { return "rss"; }
+ if (/\.rproj$/i.test(filename)) { return "rstudio"; }
+ if (/^rsyncd\.conf$/i.test(filename)) { return "rsync"; }
+ if (/\.(rb|ru|ruby|erb|god|mspec|pluginspec|podspec|rabl|rake|opal)$/i.test(filename)) { return "ruby"; }
+ if (/^\.?(irbrc|gemrc|pryrc|ruby-(gemset|version))$/i.test(filename)) { return "ruby"; }
+ if (/^(Appraisals|(Rake|App|[bB]uild|Cap|Danger|Deliver|Fast|Guard|Jar|Maven|Pod|Puppet|Snap)file(\.lock)?)$/.test(filename)) { return "ruby"; }
+ if (/\.(jbuilder|rbuild|rb[wx]|builder)$/i.test(filename)) { return "ruby"; }
+ if (/^rails$/.test(filename)) { return "ruby"; }
+ if (/\.watchr$/i.test(filename)) { return "ruby"; }
+ if (/^\.rubocop(_todo)?\.ya?ml$/i.test(filename)) { return "rubocop"; }
+ if (/\.gemspec$/i.test(filename)) { return "rubygems"; }
+ if (/\.rs$/i.test(filename)) { return "rust"; }
+ if (/\.rlib$/i.test(filename)) { return "rust"; }
+ if (/^rust-toolchain$/.test(filename)) { return "rust"; }
+ if (/\.sac$/i.test(filename)) { return "sac"; }
+ if (/\.san$/i.test(filename)) { return "san"; }
+ if (/\.webarchive$/i.test(filename)) { return "safari"; }
+ if (/\.sage$/i.test(filename)) { return "sage"; }
+ if (/\.sagews$/i.test(filename)) { return "sage"; }
+ if (/^\.sailsrc$/i.test(filename)) { return "sails"; }
+ if (/\.sls$/i.test(filename)) { return "saltstack"; }
+ if (/^Salt(State)?$/i.test(filename)) { return "saltstack"; }
+ if (/\.sb$/i.test(filename)) { return "sandbox"; }
+ if (/^(Sandbox Profile Language|SBPL)$/i.test(filename)) { return "sandbox"; }
+ if (/\.sas$/i.test(filename)) { return "sas"; }
+ if (/\.scss$/i.test(filename)) { return "sass"; }
+ if (/\.sass$/i.test(filename)) { return "sass"; }
+ if (/^\.sassrc(\.[cm]?js)?$/i.test(filename)) { return "sass"; }
+ if (/\.sbt$/i.test(filename)) { return "sbt"; }
+ if (/\.(sc|scala)$/i.test(filename)) { return "scala"; }
+ if (/\.kojo$/i.test(filename)) { return "scala"; }
+ if (/\.scm$/i.test(filename)) { return "scheme"; }
+ if (/\.sld$/i.test(filename)) { return "scheme"; }
+ if (/\.sps$/i.test(filename)) { return "scheme"; }
+ if (/\.xtm$/i.test(filename)) { return "scheme"; }
+ if (/\.scilla$/i.test(filename)) { return "scilla"; }
+ if (/\.sci$/i.test(filename)) { return "scilab"; }
+ if (/\.sce$/i.test(filename)) { return "scilab"; }
+ if (/\.tst$/i.test(filename)) { return "scilab"; }
+ if (/\.sb2$/i.test(filename)) { return "scratch"; }
+ if (/\.sb3$/i.test(filename)) { return "scratch"; }
+ if (/\.scrutinizer\.yml$/i.test(filename)) { return "scrutinizer"; }
+ if (/\.secret$/i.test(filename)) { return "secret"; }
+ if (/\.self$/i.test(filename)) { return "self"; }
+ if (/^\.releaserc(\.(ya?ml|[cm]?js|json))?$/i.test(filename)) { return "semrelease"; }
+ if (/^sencha(\.min)?\.[cm]?js$/i.test(filename)) { return "sencha"; }
+ if (/\.sentryclirc$/i.test(filename)) { return "sentry"; }
+ if (/\.csv$/i.test(filename)) { return "graph"; }
+ if (/\.(tab|tsv)$/i.test(filename)) { return "graph"; }
+ if (/\.dif$/i.test(filename)) { return "graph"; }
+ if (/\.slk$/i.test(filename)) { return "graph"; }
+ if (/\.prn$/i.test(filename)) { return "graph"; }
+ if (/(^|\.)serverless\.ya?ml$/i.test(filename)) { return "serverless"; }
+ if (/\.sfproj$/i.test(filename)) { return "sf"; }
+ if (/\.sequelizerc(\.[cm]?js|\.json)?$/i.test(filename)) { return "sequelize"; }
+ if (/\.(sgi|iris)$/i.test(filename)) { return "sgi"; }
+ if (/^shadow-cljs\.edn$/i.test(filename)) { return "shadowcljs"; }
+ if (/\.(sh|rc|bash|tool|install|command)$/i.test(filename)) { return "terminal"; }
+ if (/^(\.?bash(rc|[-_]?(profile|login|logout|history|prompt))|_osc|config|install-sh)$/i.test(filename)) { return "terminal"; }
+ if (/\.(ksh|mksh|pdksh)$/i.test(filename)) { return "terminal"; }
+ if (/\.sh-session$/i.test(filename)) { return "terminal"; }
+ if (/\.zsh(-theme|_history)?$|^\.?(antigen|zpreztorc|zlogin|zlogout|zprofile|zshenv|zshrc)$/i.test(filename)) { return "terminal"; }
+ if (/\.fish$|^\.fishrc$/i.test(filename)) { return "terminal"; }
+ if (/^\.?(login|profile)$/.test(filename)) { return "terminal"; }
+ if (/^\.?_?dir_?colors$/i.test(filename)) { return "terminal"; }
+ if (/\.inputrc$/i.test(filename)) { return "terminal"; }
+ if (/\.tmux$/i.test(filename)) { return "terminal"; }
+ if (/rc_Apple_Terminal$/i.test(filename)) { return "terminal"; }
+ if (/^(configure|config\.(guess|rpath|status|sub)|depcomp|libtool|compile)$/.test(filename)) { return "terminal"; }
+ if (/^\/(private\/)?etc\/([^\/]+\/)*(profile$|nanorc$|rc\.|csh\.)/i.test(filename)) { return "terminal"; }
+ if (/^\.?cshrc$/i.test(filename)) { return "terminal"; }
+ if (/\.profile$/i.test(filename)) { return "terminal"; }
+ if (/\.tcsh$/i.test(filename)) { return "terminal"; }
+ if (/\.csh$/i.test(filename)) { return "terminal"; }
+ if (/^\.?shellcheckrc$/i.test(filename)) { return "shellcheck"; }
+ if (/\.shen$/i.test(filename)) { return "shen"; }
+ if (/^shipitfile(\b.+)?\.[cm]?js$/i.test(filename)) { return "shipit"; }
+ if (/^shippable\.ya?ml$/i.test(filename)) { return "shippable"; }
+ if (/\.liquid$/i.test(filename)) { return "shopify"; }
+ if (/\.sieve$/i.test(filename)) { return "filter"; }
+ if (/\.sigils$/i.test(filename)) { return "sigils"; }
+ if (/\.ss$/i.test(filename)) { return "silverstripe"; }
+ if (/\.sketch$/i.test(filename)) { return "sketch"; }
+ if (/\.layout$/i.test(filename)) { return "sketchup-lo"; }
+ if (/\.skp$/i.test(filename)) { return "sketchup-mk"; }
+ if (/\.style$/i.test(filename)) { return "sketchup-sb"; }
+ if (/\.eskip$/i.test(filename)) { return "anchor"; }
+ if (/\.sl$/i.test(filename)) { return "slash"; }
+ if (/\.tpl$/i.test(filename)) { return "smarty"; }
+ if (/^snapcraft\.ya?ml$/i.test(filename)) { return "snapcraft"; }
+ if (/^snap\.svg([-.]min)?\.[cm]?js$/i.test(filename)) { return "snapsvg"; }
+ if (/\.snort$/i.test(filename)) { return "snort"; }
+ if (/^snowpack\.config\.([cm]?js|ts|json)$/i.test(filename)) { return "snowpack"; }
+ if (/\.snyk$/i.test(filename)) { return "snyk"; }
+ if (/^\.solidarity(\.json)?$/i.test(filename)) { return "solidarity"; }
+ if (/\.sol(idity)?$/i.test(filename)) { return "solidity"; }
+ if (/\.aes$/i.test(filename)) { return "sophia"; }
+ if (/\.rbi$/i.test(filename)) { return "sorbet"; }
+ if (/\.(sma|sp)$/i.test(filename)) { return "clojure"; }
+ if (/\.inc$/i.test(filename)) { return "clojure"; }
+ if (/\.spe$/i.test(filename)) { return "spacengine"; }
+ if (/(^|\.)spacemacs$/i.test(filename)) { return "spacemacs"; }
+ if (/\.sparql$/i.test(filename)) { return "sparql"; }
+ if (/\.rq$/i.test(filename)) { return "sparql"; }
+ if (/\.mixins?\.json$/i.test(filename)) { return "mixin"; }
+ if (/\.jsont$/i.test(filename)) { return "squarespace"; }
+ if (/^(json[-_]?t|json[-_\s]?template)$/i.test(filename)) { return "squarespace"; }
+ if (/\.sqf$/i.test(filename)) { return "sqf"; }
+ if (/\.hqf$/i.test(filename)) { return "sqf"; }
+ if (/\.(my)?sql$/i.test(filename)) { return "sql"; }
+ if (/\.ddl$/i.test(filename)) { return "sql"; }
+ if (/\.udf$/i.test(filename)) { return "sql"; }
+ if (/\.hql$/i.test(filename)) { return "sql"; }
+ if (/\.viw$/i.test(filename)) { return "sql"; }
+ if (/\.prc$/i.test(filename)) { return "sql"; }
+ if (/\.cql$/i.test(filename)) { return "sql"; }
+ if (/\.db2$/i.test(filename)) { return "sql"; }
+ if (/\.4gl$/i.test(filename)) { return "sql"; }
+ if (/\.per$/i.test(filename)) { return "sql"; }
+ if (/\.spsql$/i.test(filename)) { return "sql"; }
+ if (/\.sqlite$/i.test(filename)) { return "sqlite"; }
+ if (/\.sqlite3$/i.test(filename)) { return "sqlite"; }
+ if (/\.db$/i.test(filename)) { return "sqlite"; }
+ if (/\.db3$/i.test(filename)) { return "sqlite"; }
+ if (/\.nut$/i.test(filename)) { return "squirrel"; }
+ if (/\.gnut$/i.test(filename)) { return "squirrel"; }
+ if (/\.pub$/i.test(filename)) { return "key"; }
+ if (/\.pem$/i.test(filename)) { return "key"; }
+ if (/\.key$/i.test(filename)) { return "key"; }
+ if (/\.crt$/i.test(filename)) { return "key"; }
+ if (/\.der$/i.test(filename)) { return "key"; }
+ if (/^id_rsa/.test(filename)) { return "key"; }
+ if (/\.glyphs\d*License$/i.test(filename)) { return "key"; }
+ if (/^(master\.)?passwd$/i.test(filename)) { return "key"; }
+ if (/^git-credential-osxkeychain$/i.test(filename)) { return "key"; }
+ if (/\.ssh[\/\\][^\/\\\s]+$/.test(filename)) { return "key"; }
+ if (/\.stan$/i.test(filename)) { return "stan"; }
+ if (/^(\.bazelrc|bazel\.rc|bazel\.bazelrc)$/i.test(filename)) { return "bazel"; }
+ if (/^(BUILD|WORKSPACE)(\.[Bb][Aa][Zz][Ee][Ll])?$/.test(filename)) { return "bazel"; }
+ if (/\.(bazel|bzl|star)$/i.test(filename)) { return "bazel"; }
+ if (/^\.gazelcfg\.json$/i.test(filename)) { return "bazel"; }
+ if (/\.do$/i.test(filename)) { return "stata"; }
+ if (/\.ado$/i.test(filename)) { return "stata"; }
+ if (/\.doh$/i.test(filename)) { return "stata"; }
+ if (/\.ihlp$/i.test(filename)) { return "stata"; }
+ if (/\.mata$/i.test(filename)) { return "stata"; }
+ if (/\.matah$/i.test(filename)) { return "stata"; }
+ if (/\.sthlp$/i.test(filename)) { return "stata"; }
+ if (/\.stencil$/i.test(filename)) { return "stencil"; }
+ if (/^stdlib(-.+)?\.[cm]?js$/i.test(filename)) { return "stdlibjs"; }
+ if (/^stdlib(-.+)?\.[cm]?js\.gz$/i.test(filename)) { return "stdlibjs"; }
+ if (/^\.?stitches\.config\.([cm]?js|ts)$/i.test(filename)) { return "stitches"; }
+ if (/\.(story|stories)\.([cm]?js|jsx)$/i.test(filename)) { return "storybook"; }
+ if (/\.(story|stories)\.tsx?$/i.test(filename)) { return "storybook"; }
+ if (/\.story$/i.test(filename)) { return "storyist"; }
+ if (/\.strings$/i.test(filename)) { return "strings"; }
+ if (/\.st\.css$/i.test(filename)) { return "stylable"; }
+ if (/\.sc\.js$/i.test(filename)) { return "nailpolish"; }
+ if (/\.sc\.jsx$/i.test(filename)) { return "nailpolish"; }
+ if (/\.sc\.mjs$/i.test(filename)) { return "nailpolish"; }
+ if (/\.sc\.cjs$/i.test(filename)) { return "nailpolish"; }
+ if (/\.sc\.ts$/i.test(filename)) { return "nailpolish"; }
+ if (/\.sc\.tsx$/i.test(filename)) { return "nailpolish"; }
+ if (/^\.stylelintrc(\.|$)/i.test(filename)) { return "stylelint"; }
+ if (/^stylelint\.config\.[cm]?js$/i.test(filename)) { return "stylelint"; }
+ if (/\.stylelint(ignore|cache)$/i.test(filename)) { return "stylelint"; }
+ if (/^\.stylish-haskell\.ya?ml$/i.test(filename)) { return "stylishhaskell"; }
+ if (/\.(styl|stylus)$/i.test(filename)) { return "stylus"; }
+ if (/\.(stTheme|sublime[-_](build|commands|completions|keymap|macro|menu|mousemap|project|settings|theme|workspace|metrics|session|snippet))$/i.test(filename)) { return "sublime"; }
+ if (/\.sublime-syntax$/i.test(filename)) { return "sublime"; }
+ if (/\.scd$/i.test(filename)) { return "scd"; }
+ if (/\.svg$/i.test(filename)) { return "svg"; }
+ if (/^(openapi|swagger)\.(json|yaml|yml)$/i.test(filename)) { return "swagger"; }
+ if (/\.swagger-codegen-ignore$/i.test(filename)) { return "swagger"; }
+ if (/\.swift$/i.test(filename)) { return "swift"; }
+ if (/\.svelte$/i.test(filename)) { return "svelte"; }
+ if (/\.sv$/i.test(filename)) { return "sysverilog"; }
+ if (/\.svh$/i.test(filename)) { return "sysverilog"; }
+ if (/\.vh$/i.test(filename)) { return "sysverilog"; }
+ if (/\.toc$/i.test(filename)) { return "toc"; }
+ if (/^\.listing(\.\d+)?$/.test(filename)) { return "toc"; }
+ if (/\.?c?tags$/i.test(filename)) { return "tag"; }
+ if (/\.gemtags/i.test(filename)) { return "tag"; }
+ if (/\.hgtags$|^localtags$/i.test(filename)) { return "tag"; }
+ if (/^\.?VERSION$/i.test(filename)) { return "tag"; }
+ if (/^\.atom-socket-.+\.\d$/.test(filename)) { return "tag"; }
+ if (/\.pid$/i.test(filename)) { return "tag"; }
+ if (/\.tld$/i.test(filename)) { return "tag"; }
+ if (/(\.|^)sha(256|sum)?$/i.test(filename)) { return "tag"; }
+ if (/(\.|^)(check|ck|crc(32)?|md5|rmd160|sha(224|256|384|512|1|2|3)?)?(sums?|(?<=\w))$/i.test(filename)) { return "tag"; }
+ if (/^\.?tailwind(\.config)?\.([cm]?js|ts|coffee)$/i.test(filename)) { return "tailwind"; }
+ if (/\.tcl$/i.test(filename)) { return "tcl"; }
+ if (/\.adp$/i.test(filename)) { return "tcl"; }
+ if (/\.tm$/i.test(filename)) { return "tcl"; }
+ if (/\.exp$/i.test(filename)) { return "tcl"; }
+ if (/^\.tkcvs/i.test(filename)) { return "tcl"; }
+ if (/^\.tkdiffrc$/.test(filename)) { return "tcl"; }
+ if (/\.tea$/i.test(filename)) { return "coffee"; }
+ if (/\.tfignore$/i.test(filename)) { return "tfs"; }
+ if (/tfs$/i.test(filename)) { return "tfs"; }
+ if (/\.tl$/i.test(filename)) { return "telegram"; }
+ if (/\.xps$/i.test(filename)) { return "telegram"; }
+ if (/\.tt2?$/i.test(filename)) { return "tt"; }
+ if (/\.tt3$/i.test(filename)) { return "tt"; }
+ if (/\.tern-project$/i.test(filename)) { return "tern"; }
+ if (/\.tern-config$/i.test(filename)) { return "tern"; }
+ if (/\.tf(vars)?$/i.test(filename)) { return "terraform"; }
+ if (/\.tf\.json$/i.test(filename)) { return "terraform"; }
+ if (/\.tfstate(\.backup)?$/i.test(filename)) { return "terraform"; }
+ if (/^\.(terser|uglify)rc(\.\w+)?$/i.test(filename)) { return "terser"; }
+ if (/^\.testcaferc\.json$/i.test(filename)) { return "testcafe"; }
+ if (/([._-](spec|test)s?|^test[-_].*)\.((lit)?coffee|iced|cjsx)$/i.test(filename)) { return "test-coffee"; }
+ if (/([\\\/])t\1t?\d+(?:(?!\1).)+\.sh$|[._-](spec|test)s?\.sh$/i.test(filename)) { return "test-generic"; }
+ if (/\.bats$/i.test(filename)) { return "test-generic"; }
+ if (/\.test$/i.test(filename)) { return "test-generic"; }
+ if (/\.xspec$/i.test(filename)) { return "test-generic"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.go$/i.test(filename)) { return "test-go"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.(hsc?|c2hs|lhs)$/i.test(filename)) { return "test-hs"; }
+ if (/([._-](spec|test)s?|^test[._-].*)\.([_s]?js|js[bms]|es\d*)$/i.test(filename)) { return "test-js"; }
+ if (/([._-](spec|test)s?|^test[._-].*)\.mjs$/i.test(filename)) { return "test-js"; }
+ if (/([._-](spec|test)s?|^test[._-].*)\.cjs$/i.test(filename)) { return "test-js"; }
+ if (/([\\\/])(?:(spec|test)s?|t)\1(?:\d+[-.])+(?!-)[^.\\\/]+\.js$/i.test(filename)) { return "test-js"; }
+ if (/([\\\/])(?:(spec|test)s?|t)\1(?:\d+[-.])+(?!-)[^.\\\/]+\.mjs$/i.test(filename)) { return "test-js"; }
+ if (/([\\\/])(?:(spec|test)s?|t)\1(?:\d+[-.])+(?!-)[^.\\\/]+\.cjs$/i.test(filename)) { return "test-js"; }
+ if (/\.t$/i.test(filename)) { return "test-perl"; }
+ if (/^test[._-].*\.pl$/i.test(filename)) { return "test-perl"; }
+ if (/([\\\x2F])t\1(?:(?!\1).)+\.t$/i.test(filename)) { return "test-perl"; }
+ if (/([\\\x2F])(test|spec)s?(\1((?!\1).)+)*\1((?!\1).)+[._-](spec|test)s?\.p(er)?l$/i.test(filename)) { return "test-perl"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.py(3|thon)?/i.test(filename)) { return "test-python"; }
+ if (/([\\\x2F])(test|spec)s?(\1((?!\1).)+)*\1(((?!\1).)+[._-](?:spec|test)s?|(?:spec|test)s?[._-].+)\.py(3|thon)?$/i.test(filename)) { return "test-python"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.(jsx|react\.[cm]?js)$/.test(filename)) { return "test-react"; }
+ if (/([\\\/])(spec|test)s?\1(?:\d+[-.])+(?!-)[^.\\\/]+\.(jsx|react\.[cm]?js)$/i.test(filename)) { return "test-react"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.(rb|ruby)$/i.test(filename)) { return "test-ruby"; }
+ if (/([\\\x2F])(t|tests?|specs?)\1+(?:(?!\1).)*\.(rb|ruby)$/.test(filename)) { return "test-ruby"; }
+ if (/(^test[-_].*|[._-](spec|test)s?)\.rs$/i.test(filename)) { return "test-rust"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.ts$/i.test(filename)) { return "test-ts"; }
+ if (/(^test[._-].*|[._-](spec|test)s?)\.tsx$/i.test(filename)) { return "test-ts"; }
+ if (/([\\\/])(spec|test)s?\1(?:\d+[-.])+(?!-)[^.\\\/]+\.ts$/i.test(filename)) { return "test-ts"; }
+ if (/([\\\/])(spec|test)s?\1(?:\d+[-.])+(?!-)[^.\\\/]+\.tsx$/i.test(filename)) { return "test-ts"; }
+ if (/\.tex$/i.test(filename)) { return "tex"; }
+ if (/\.ltx$/i.test(filename)) { return "tex"; }
+ if (/\.aux$/i.test(filename)) { return "tex"; }
+ if (/\.sty$/i.test(filename)) { return "tex"; }
+ if (/\.dtx$/i.test(filename)) { return "tex"; }
+ if (/\.cls$/i.test(filename)) { return "tex"; }
+ if (/\.ins$/i.test(filename)) { return "tex"; }
+ if (/\.lbx$/i.test(filename)) { return "tex"; }
+ if (/\.mkiv$/i.test(filename)) { return "tex"; }
+ if (/\.mkvi$/i.test(filename)) { return "tex"; }
+ if (/\.mkii$/i.test(filename)) { return "tex"; }
+ if (/\.pgf$/i.test(filename)) { return "tex"; }
+ if (/\.tikz$/i.test(filename)) { return "tex"; }
+ if (/\.(texi(nfo)?|txi)$/i.test(filename)) { return "tex"; }
+ if (/^hyphen(ex)?\.(cs|den|det|fr|sv|us)$/.test(filename)) { return "tex"; }
+ if (/\.te?xt$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.log$|^Terminal[-_\s]Saved[-_\s]Output$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.git[\/\\]description$/.test(filename)) { return "icon-file-text"; }
+ if (/(\\|\/)share(?:\1misc)?\1(?:operator|mail\.(?:tilde)?help)$/.test(filename)) { return "icon-file-text"; }
+ if (/\.err$|\.std(err|out)$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.rtf$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.(i?nfo|lcov)$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.abt$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.ans$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.brf$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.dri$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.etx$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.irclog$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.more$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.msg$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.no$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.rpt$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.srt$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.sub$/i.test(filename)) { return "icon-file-text"; }
+ if (/^(bug-report|fdl|for-release|tests)$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.(utxt|utf8)$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.weechatlog$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.uof$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.uot$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.uos$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.uop$/i.test(filename)) { return "icon-file-text"; }
+ if (/\.textile$/i.test(filename)) { return "textile"; }
+ if (/\.(tm_properties|tmProperties)$/i.test(filename)) { return "textmate"; }
+ if (/\.tmcg$/i.test(filename)) { return "textmate"; }
+ if (/\.tmLanguage$/i.test(filename)) { return "textmate"; }
+ if (/\.tmCommand$/i.test(filename)) { return "textmate"; }
+ if (/\.tmPreferences$/i.test(filename)) { return "textmate"; }
+ if (/\.tmSnippet$/i.test(filename)) { return "textmate"; }
+ if (/\.tmTheme$/i.test(filename)) { return "textmate"; }
+ if (/\.tmMacro$/i.test(filename)) { return "textmate"; }
+ if (/\.yaml-tmlanguage$/i.test(filename)) { return "textmate"; }
+ if (/\.JSON-tmLanguage$/i.test(filename)) { return "textmate"; }
+ if (/\.theme$/i.test(filename)) { return "icon-paintcan"; }
+ if (/\.thor$/i.test(filename)) { return "thor"; }
+ if (/^Thorfile$/i.test(filename)) { return "thor"; }
+ if (/\.8x[pk](\.txt)?$/i.test(filename)) { return "calc"; }
+ if (/^Tiltfile$/i.test(filename)) { return "tilt"; }
+ if (/\.tipe$/i.test(filename)) { return "tipe"; }
+ if (/\.tla$/i.test(filename)) { return "tla"; }
+ if (/(\.|_|^)tmux\.conf$/i.test(filename)) { return "tmux"; }
+ if (/\.toml$/i.test(filename)) { return "toml"; }
+ if (/^\.tgitconfig$/i.test(filename)) { return "tortoise"; }
+ if (/^\.travis/i.test(filename)) { return "travis"; }
+ if (/^\.?truffle\.[cm]?js$/i.test(filename)) { return "truffle"; }
+ if (/\.tsx$/i.test(filename)) { return "tsx"; }
+ if (/\.ttcn3?$/i.test(filename)) { return "ttcn3"; }
+ if (/\.tu$/i.test(filename)) { return "turing"; }
+ if (/\.twig$/i.test(filename)) { return "twig"; }
+ if (/\.tw$/i.test(filename)) { return "twine"; }
+ if (/SugarCube$/i.test(filename)) { return "twine"; }
+ if (/\.txl$/i.test(filename)) { return "txl"; }
+ if (/^typedoc\.json$/i.test(filename)) { return "typedoc"; }
+ if (/\.ts$/i.test(filename)) { return "ts"; }
+ if (/^(ts|Type[-\s]*Script)$/i.test(filename)) { return "ts"; }
+ if (/^typings\.json$/i.test(filename)) { return "typings"; }
+ if (/\.(typoscript|tsconfig)$/i.test(filename)) { return "typo3"; }
+ if (/typo3$/i.test(filename)) { return "typo3"; }
+ if (/^uikit(\.min)?\.[cm]?js$/i.test(filename)) { return "uikit"; }
+ if (/\.unibeautifyrc$/i.test(filename)) { return "unibeautify"; }
+ if (/^unibeautify\.config\.[cm]?js$/i.test(filename)) { return "unibeautify"; }
+ if (/\.unibeautifyrc\.([cm]?js|json)$/i.test(filename)) { return "unibeautify"; }
+ if (/\.unibeautifyrc\.ya?ml$/i.test(filename)) { return "unibeautify"; }
+ if (/^(ArabicShaping|Bidi(Brackets|CharacterTest|Mirroring|Test)|Blocks|CJKRadicals|CaseFolding|CompositionExclusions|Derived(Age|Name|Numeric(Type|Values)|BidiClass|BinaryProperties|CombiningClass|CoreProperties|DecompositionType|EastAsianWidth|GeneralCategory|Joining(Group|Type)|LineBreak|NormalizationProps)|EastAsianWidth|EmojiSources|EquivalentUnifiedIdeograph|(Grapheme|Line|Sentence|Word)Break(Property|Test)|HangulSyllableType|Index|Indic(Positional|Syllabic)Category|Jamo|LineBreak|NameAliases|NamedSequences(Prov)?|NamesList|Normalization(Corrections|Test)|NushuSources|PropList|Property(Value)?Aliases|Script(Extension)?s|SpecialCasing|StandardizedVariants|TangutSources|Unihan(_\w+)?|U(nicode|Source)Data|VerticalOrientation)\.txt$/.test(filename)) { return "unicode"; }
+ if (/^NamesList\.(lst|txt)$/.test(filename)) { return "unicode"; }
+ if (/([\\\/])(UNIDATA|UCD)(?:\1(?:auxiliary|emoji|extracted|unihan))?\1(?!ReadMe)[^\\\/]+\.txt$/i.test(filename)) { return "unicode"; }
+ if (/\.units$/i.test(filename)) { return "scales"; }
+ if (/^units\.(lib|dat)$|^unittab$/i.test(filename)) { return "scales"; }
+ if (/^\.?units[-_]?history$/i.test(filename)) { return "scales"; }
+ if (/\.anim$/i.test(filename)) { return "unity3d"; }
+ if (/\.asset$/i.test(filename)) { return "unity3d"; }
+ if (/\.cubemap$/i.test(filename)) { return "unity3d"; }
+ if (/\.mat$/i.test(filename)) { return "unity3d"; }
+ if (/\.meta$/i.test(filename)) { return "unity3d"; }
+ if (/\.physics?Material(2D)?$/i.test(filename)) { return "unity3d"; }
+ if (/\.prefab$/i.test(filename)) { return "unity3d"; }
+ if (/\.unity$/i.test(filename)) { return "unity3d"; }
+ if (/\.unityproj$/i.test(filename)) { return "unity3d"; }
+ if (/\.unitypackage$/i.test(filename)) { return "unity3d"; }
+ if (/\.uno$/i.test(filename)) { return "uno"; }
+ if (/\.uc$/i.test(filename)) { return "unreal"; }
+ if (/\.uasset$/i.test(filename)) { return "unreal"; }
+ if (/\.ur$/i.test(filename)) { return "urweb"; }
+ if (/\.urs$/i.test(filename)) { return "urweb"; }
+ if (/\.v$/i.test(filename)) { return "v"; }
+ if (/\.vh$/i.test(filename)) { return "v"; }
+ if (/^([dv]8|v8[-_.][^.]*|mksnapshot|mkpeephole)$/i.test(filename)) { return "v8"; }
+ if (/^\.v8flags\b/.test(filename)) { return "v8"; }
+ if (/^\.c8rc(\.json)?$/i.test(filename)) { return "v8"; }
+ if (/^Vagrantfile$/i.test(filename)) { return "vagrant"; }
+ if (/\.vala$/i.test(filename)) { return "vala"; }
+ if (/\.vapi$/i.test(filename)) { return "vala"; }
+ if (/\.bsp$/i.test(filename)) { return "source"; }
+ if (/\.vpk$/i.test(filename)) { return "source"; }
+ if (/\.vtfx$/i.test(filename)) { return "source"; }
+ if (/\.vmt$/i.test(filename)) { return "source"; }
+ if (/\.vtf$/i.test(filename)) { return "source"; }
+ if (/\.vmf$/i.test(filename)) { return "source"; }
+ if (/\.res$/i.test(filename)) { return "source"; }
+ if (/\.vcl$/i.test(filename)) { return "varnish"; }
+ if (/\.vm$/i.test(filename)) { return "velocity"; }
+ if (/^(vercel|now)\.json$/i.test(filename)) { return "zeit"; }
+ if (/^\.(vercel|now)ignore$/i.test(filename)) { return "zeit"; }
+ if (/\.v$/i.test(filename)) { return "verilog"; }
+ if (/\.veo$/i.test(filename)) { return "verilog"; }
+ if (/\.vhdl$/i.test(filename)) { return "vhdl"; }
+ if (/\.vhf$/i.test(filename)) { return "vhdl"; }
+ if (/\.vhi$/i.test(filename)) { return "vhdl"; }
+ if (/\.vho$/i.test(filename)) { return "vhdl"; }
+ if (/\.vhs$/i.test(filename)) { return "vhdl"; }
+ if (/\.vht$/i.test(filename)) { return "vhdl"; }
+ if (/\.vhw$/i.test(filename)) { return "vhdl"; }
+ if (/\.3gpp?$/i.test(filename)) { return "video"; }
+ if (/\.(mp4|m4v|h264)$/i.test(filename)) { return "video"; }
+ if (/\.asx$/i.test(filename)) { return "video"; }
+ if (/\.avi$/i.test(filename)) { return "video"; }
+ if (/\.mov$/i.test(filename)) { return "video"; }
+ if (/\.mk(v|s|3d)$/i.test(filename)) { return "video"; }
+ if (/\.flv$/i.test(filename)) { return "video"; }
+ if (/\.webm$/i.test(filename)) { return "video"; }
+ if (/\.mpe?g$/i.test(filename)) { return "video"; }
+ if (/\.(asf|wmv)$/i.test(filename)) { return "video"; }
+ if (/\.(ogm|og[gv])$/i.test(filename)) { return "video"; }
+ if (/\.(vim|[gn]?vimrc)$/i.test(filename)) { return "vim"; }
+ if (/^[.gn_]?vim(rc|info)$/i.test(filename)) { return "vim"; }
+ if (/\.vmb$/i.test(filename)) { return "vim"; }
+ if (/(^|\.)n?exrc$/i.test(filename)) { return "vim"; }
+ if (/\.ova$/i.test(filename)) { return "virtualbox"; }
+ if (/\.ovf$/i.test(filename)) { return "virtualbox"; }
+ if (/\.vhd$/i.test(filename)) { return "virtualbox"; }
+ if (/\.vhdx$/i.test(filename)) { return "virtualbox"; }
+ if (/\.vbox_version$/i.test(filename)) { return "virtualbox"; }
+ if (/\.vbox(-prev)?$/i.test(filename)) { return "virtualbox"; }
+ if (/^vite\.config\.[jt]s$/i.test(filename)) { return "vite"; }
+ if (/\.(vba?|fr[mx]|bas)$/i.test(filename)) { return "vs"; }
+ if (/\.vbhtml$/i.test(filename)) { return "vs"; }
+ if (/\.vbs$/i.test(filename)) { return "vs"; }
+ if (/\.vsix$/i.test(filename)) { return "vs"; }
+ if (/\.csproj$/i.test(filename)) { return "vs"; }
+ if (/\.vbproj$/i.test(filename)) { return "vs"; }
+ if (/\.vcx?proj(\.[-\w]+)*$/i.test(filename)) { return "vs"; }
+ if (/\.vssettings(\.json)?$/i.test(filename)) { return "vs"; }
+ if (/\.vscodeignore(\.json)?$/i.test(filename)) { return "vs"; }
+ if (/\.vstemplate$/i.test(filename)) { return "vs"; }
+ if (/\.vsixmanifest$/i.test(filename)) { return "vs"; }
+ if (/\.code-workspace$/i.test(filename)) { return "vs"; }
+ if (/\.builds$/i.test(filename)) { return "vs"; }
+ if (/\.dbproj$/i.test(filename)) { return "vs"; }
+ if (/\.lsproj$/i.test(filename)) { return "vs"; }
+ if (/\.modelproj$/i.test(filename)) { return "vs"; }
+ if (/\.sln$/i.test(filename)) { return "vs"; }
+ if (/\.njsproj$/i.test(filename)) { return "vs"; }
+ if (/\.sqlproj$/i.test(filename)) { return "vs"; }
+ if (/\.vcxitems$/i.test(filename)) { return "vs"; }
+ if (/\.wmaproj$/i.test(filename)) { return "vs"; }
+ if (/\.vmdk$/i.test(filename)) { return "vmware"; }
+ if (/\.nvram$/i.test(filename)) { return "vmware"; }
+ if (/\.vmsd$/i.test(filename)) { return "vmware"; }
+ if (/\.vmsn$/i.test(filename)) { return "vmware"; }
+ if (/\.vmss$/i.test(filename)) { return "vmware"; }
+ if (/\.vmtm$/i.test(filename)) { return "vmware"; }
+ if (/\.vmx$/i.test(filename)) { return "vmware"; }
+ if (/\.vmxf$/i.test(filename)) { return "vmware"; }
+ if (/\.vrimg$/i.test(filename)) { return "vray"; }
+ if (/^\.vsts-ci\.ya?ml$/i.test(filename)) { return "vsts"; }
+ if (/\.vue$/i.test(filename)) { return "vue"; }
+ if (/^vue\.config\.[cm]?js$/i.test(filename)) { return "vue"; }
+ if (/\.vy$/i.test(filename)) { return "vyper"; }
+ if (/^w3c\.json$/i.test(filename)) { return "w3c"; }
+ if (/^\.wallaby\.[cm]?js$/i.test(filename)) { return "wallaby"; }
+ if (/\.walt$/i.test(filename)) { return "walt"; }
+ if (/\.wc3$/i.test(filename)) { return "warcraft3"; }
+ if (/\.jass$/i.test(filename)) { return "warcraft3"; }
+ if (/\.zn$/i.test(filename)) { return "warcraft3"; }
+ if (/\.watchmanconfig$|^watchman\.json$/i.test(filename)) { return "watchman"; }
+ if (/\.wdl$/i.test(filename)) { return "wdl"; }
+ if (/Workflow Description Language$/i.test(filename)) { return "wdl"; }
+ if (/\.was?t$/i.test(filename)) { return "wasm"; }
+ if (/\.wasm$/i.test(filename)) { return "wasm"; }
+ if (/^\.hintrc$/i.test(filename)) { return "webhint"; }
+ if (/\.webgl$/i.test(filename)) { return "webgl"; }
+ if (/\.owl$/i.test(filename)) { return "owl"; }
+ if (/(^|\.)webpack(file)?.*\.([jt]sx?|[cm]js|json|(lit)?coffee)$/i.test(filename)) { return "webpack"; }
+ if (/\.vtt$/i.test(filename)) { return "webvtt"; }
+ if (/^wgetrc$|\.wgetrc$/i.test(filename)) { return "wget"; }
+ if (/\.wget-hsts$/i.test(filename)) { return "wget"; }
+ if (/\.wxml$/i.test(filename)) { return "wechat"; }
+ if (/\.wxss$/i.test(filename)) { return "wechat"; }
+ if (/\.wy$/i.test(filename)) { return "wenyan"; }
+ if (/^wercker\.ya?ml$/i.test(filename)) { return "wercker"; }
+ if (/^windi\.config\.[tj]s$/i.test(filename)) { return "windi"; }
+ if (/\.bat$/i.test(filename)) { return "windows"; }
+ if (/\.cmd$/i.test(filename)) { return "windows"; }
+ if (/\.(exe|com|msi)$/i.test(filename)) { return "windows"; }
+ if (/\.reg$/i.test(filename)) { return "windows"; }
+ if (/\.xaml$/i.test(filename)) { return "winui"; }
+ if (/\.baml$/i.test(filename)) { return "winui"; }
+ if (/\.wixproj$/i.test(filename)) { return "wix"; }
+ if (/\.wixobj$/i.test(filename)) { return "wix"; }
+ if (/\.wxs$/i.test(filename)) { return "wix"; }
+ if (/\.wxi$/i.test(filename)) { return "wix"; }
+ if (/\.wxl$/i.test(filename)) { return "wix"; }
+ if (/\.wix$/i.test(filename)) { return "wix"; }
+ if (/\.wl$/i.test(filename)) { return "wolfram"; }
+ if (/\.wls$/i.test(filename)) { return "wolfram"; }
+ if (/\.wlt$/i.test(filename)) { return "wolfram"; }
+ if (/^workbox-config\.[cm]?js$/i.test(filename)) { return "workbox"; }
+ if (/\.wurst$/i.test(filename)) { return "wurst"; }
+ if (/WurstLang$/i.test(filename)) { return "wurst"; }
+ if (/\.x10$/i.test(filename)) { return "x10"; }
+ if (/xten$/i.test(filename)) { return "x10"; }
+ if (/\.X(authority|clients|initrc|inputrc|profile|resources|session-errors|screensaver)$/i.test(filename)) { return "x11"; }
+ if (/\.workbook$/i.test(filename)) { return "xamarin"; }
+ if (/\.xc$/i.test(filename)) { return "xmos"; }
+ if (/\.pbxproj$/i.test(filename)) { return "appstore"; }
+ if (/\.pbxuser$/i.test(filename)) { return "appstore"; }
+ if (/\.xccheckout$/i.test(filename)) { return "appstore"; }
+ if (/\.xcplugindata$/i.test(filename)) { return "appstore"; }
+ if (/\.xcrequiredplugins$/i.test(filename)) { return "appstore"; }
+ if (/\.xcscheme$/i.test(filename)) { return "appstore"; }
+ if (/\.xcscmblueprint$/i.test(filename)) { return "appstore"; }
+ if (/\.xcsettings$/i.test(filename)) { return "appstore"; }
+ if (/\.xcuserstate$/i.test(filename)) { return "appstore"; }
+ if (/\.xcworkspacedata$/i.test(filename)) { return "appstore"; }
+ if (/\.mode\dv3$/i.test(filename)) { return "appstore"; }
+ if (/^xmake\.lua$/i.test(filename)) { return "xmake"; }
+ if (/\.xojo_code$/i.test(filename)) { return "xojo"; }
+ if (/\.xojo_menu$/i.test(filename)) { return "xojo"; }
+ if (/\.xojo_report$/i.test(filename)) { return "xojo"; }
+ if (/\.xojo_script$/i.test(filename)) { return "xojo"; }
+ if (/\.xojo_toolbar$/i.test(filename)) { return "xojo"; }
+ if (/\.xojo_window$/i.test(filename)) { return "xojo"; }
+ if (/\.xsp-config$/i.test(filename)) { return "xpages"; }
+ if (/\.xsp\.metadata$/i.test(filename)) { return "xpages"; }
+ if (/\.xpl$/i.test(filename)) { return "xmos"; }
+ if (/\.xproc$/i.test(filename)) { return "xmos"; }
+ if (/\.(xquery|xq|xql|xqm|xqy)$/i.test(filename)) { return "sql"; }
+ if (/\.xtend$/i.test(filename)) { return "xtend"; }
+ if (/\.ya?ml$/i.test(filename)) { return "yaml"; }
+ if (/\.ya?ml\.mysql$/i.test(filename)) { return "yaml"; }
+ if (/\.ya?ml\.sed$/i.test(filename)) { return "yaml"; }
+ if (/^\.yamllint(\.ya?ml)?$/i.test(filename)) { return "yamllint"; }
+ if (/^\.yaspellerrc($|\.)|^\.yaspeller\.json$/i.test(filename)) { return "yandex"; }
+ if (/\.yang$/i.test(filename)) { return "yang"; }
+ if (/\.yara?$/i.test(filename)) { return "yara"; }
+ if (/^yarn\.lock$|\.yarn-metadata(\.json)?$/i.test(filename)) { return "yarn"; }
+ if (/\.(yarnrc|yarnclean|yarn-integrity)$/i.test(filename)) { return "yarn"; }
+ if (/\.yo-rc\.json$/i.test(filename)) { return "yeoman"; }
+ if (/\.yorick$/i.test(filename)) { return "yorick"; }
+ if (/^(yahoo-|yui)[^.]*\.[cm]?js$/i.test(filename)) { return "yui"; }
+ if (/\.zpr$/i.test(filename)) { return "zbrush"; }
+ if (/\.ztl$/i.test(filename)) { return "zbrush"; }
+ if (/\.zs$/i.test(filename)) { return "crafttweaker"; }
+ if (/^\.zsrc\.json$/i.test(filename)) { return "crafttweaker"; }
+ if (/\.zep$/i.test(filename)) { return "zephir"; }
+ if (/\.zig$/i.test(filename)) { return "zig"; }
+ if (/\.(zimpl|zmpl|zpl)$/i.test(filename)) { return "zimpl"; }
+ if (/\.zap$/i.test(filename)) { return "zork"; }
+ if (/\.xzap$/i.test(filename)) { return "zork"; }
+ if (/^s4\.errors$/i.test(filename)) { return "zork"; }
+ if (/\.zabstr?$/i.test(filename)) { return "zork"; }
+ if (/\.zil$/i.test(filename)) { return "zork"; }
+ if (/\.mud$/i.test(filename)) { return "zork"; }
+}
+module.exports = matchIcon;
\ No newline at end of file
diff --git a/src/assets/themes/chalkboard-ligatures.json b/src/assets/themes/chalkboard-ligatures.json
new file mode 100644
index 000000000..c03b6a89f
--- /dev/null
+++ b/src/assets/themes/chalkboard-ligatures.json
@@ -0,0 +1,44 @@
+{
+ "colors": {
+ "r": 239,
+ "g": 240,
+ "b": 235,
+ "black": "#282a36",
+ "light_black": "#222430",
+ "grey": "#222430",
+ "red": "#ff5c57",
+ "green": "#5af78e",
+ "yellow": "#f3f99d",
+ "blue": "#57c7ff",
+ "magenta": "#ff6ac1",
+ "cyan": "#9aedfe",
+ "white": "#f1f1f0",
+ "brightBlack": "#686868",
+ "brightRed": "#ff5c57",
+ "brightGreen": "#5af78e",
+ "brightYellow": "#f3f99d",
+ "brightBlue": "#57c7ff",
+ "brightMagenta": "#ff6ac1",
+ "brightCyan": "#9aedfe",
+ "brightWhite": "#eff0eb"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Code",
+ "cursorStyle": "block",
+ "foreground": "#eff0eb",
+ "background": "#282a36",
+ "cursor": "#97979b",
+ "cursorAccent": "#282a36",
+ "selection": "rgba(239,240,235,0.3)"
+ },
+ "globe": {
+ "base": "#000000",
+ "marker": "#f3f99d",
+ "pin": "#eff0eb",
+ "satellite": "#ff5c57"
+ }
+}
diff --git a/src/assets/themes/chalkboard-notype.json b/src/assets/themes/chalkboard-notype.json
new file mode 100644
index 000000000..7497f3721
--- /dev/null
+++ b/src/assets/themes/chalkboard-notype.json
@@ -0,0 +1,45 @@
+{
+ "colors": {
+ "r": 239,
+ "g": 240,
+ "b": 235,
+ "black": "#282a36",
+ "light_black": "#222430",
+ "grey": "#222430",
+ "red": "#ff5c57",
+ "green": "#5af78e",
+ "yellow": "#f3f99d",
+ "blue": "#57c7ff",
+ "magenta": "#ff6ac1",
+ "cyan": "#9aedfe",
+ "white": "#f1f1f0",
+ "brightBlack": "#686868",
+ "brightRed": "#ff5c57",
+ "brightGreen": "#5af78e",
+ "brightYellow": "#f3f99d",
+ "brightBlue": "#57c7ff",
+ "brightMagenta": "#ff6ac1",
+ "brightCyan": "#9aedfe",
+ "brightWhite": "#eff0eb"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Mono",
+ "cursorStyle": "block",
+ "foreground": "#eff0eb",
+ "background": "#282a36",
+ "cursor": "#97979b",
+ "cursorAccent": "#282a36",
+ "selection": "rgba(239,240,235,0.3)"
+ },
+ "globe": {
+ "base": "#000000",
+ "marker": "#f3f99d",
+ "pin": "#eff0eb",
+ "satellite": "#ff5c57"
+ },
+ "injectCSS": "section#filesystem{left:0;width:100vw}section#filesystem>h3.title,section#filesystem>div{width:100vw}section#keyboard{display:none;}"
+}
diff --git a/src/assets/themes/cyborg-focus.json b/src/assets/themes/cyborg-focus.json
new file mode 100644
index 000000000..e7bb2bd76
--- /dev/null
+++ b/src/assets/themes/cyborg-focus.json
@@ -0,0 +1,45 @@
+{
+ "colors": {
+ "r": 95,
+ "g": 215,
+ "b": 215,
+ "black": "#011f1f",
+ "light_black": "#0a3333",
+ "grey": "#034747",
+ "red": "#ad3e5a",
+ "green": "#3cd66f",
+ "yellow": "#c5d63c",
+ "blue": "#3c4dd6",
+ "magenta": "#ad31ad",
+ "cyan": "#31adad",
+ "white": "#a3c2c2",
+ "brightBlack": "#454585",
+ "brightRed": "#eb0954",
+ "brightGreen": "#85ff5c",
+ "brightYellow": "#ffff5c",
+ "brightBlue": "#5c5cff",
+ "brightMagenta": "#ff47d6",
+ "brightCyan": "#5cffff",
+ "brightWhite": "#e6fafa"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Code",
+ "cursorStyle": "block",
+ "foreground": "#a3c2c2",
+ "background": "#0a3333",
+ "cursor": "#5cffff",
+ "cursorAccent": "#85ff5c",
+ "selection": "#ffff5c"
+ },
+ "globe": {
+ "base": "#5c5cff",
+ "marker": "#eb0954",
+ "pin": "#85ff5c",
+ "satellite": "#ffff5c"
+ },
+ "injectCSS": "section#keyboard{position:absolute;bottom:3%;right:0;width:17%}section#keyboard .keyboard_row{position:absolute;bottom:0;width:100%;text-align:center}section#keyboard .keyboard_key{position:absolute;bottom:0;display:none}section#keyboard .keyboard_key.active,section#keyboard .keyboard_key.blink{position:absolute;bottom:0;display:flex;color:#263a3a}section#keyboard div.keyboard_key#keyboard_spacebar{min-width:auto;width:80%;right:15%}section#keyboard div.keyboard_row#row_2 div.keyboard_key.keyboard_enter{display:none !important}section#keyboard div.keyboard_key[data-cmd^=\"ESCAPED\"]{left:0} section>h3.title:first-child{border-bottom:0}section>h3.title:first-child::before{border-left:0}section>h3.title:first-child::after{border-right:0} section#filesystem{position:absolute;top:auto;left:0;bottom:0;width:17%}section#filesystem>h3.title{width:17%}section#filesystem>h3.title:first-child>p{width:24%}section#filesystem>h3.title:first-child>p:last-child{position:static;right:auto;width:72%}section#filesystem div#fs_disp_container{width:100%}section#filesystem.list-view>div#fs_disp_container:not(.disks)>div>h4{font-size:0.8vh}section#filesystem.list-view>div#fs_disp_container:not(.disks)>div>h4:nth-of-type(1){display:none}section#filesystem.list-view>div#fs_disp_container:not(.disks)>div>h4:nth-of-type(2){width:25%}div#fs_space_bar{display:none} section#main_shell{height:94.5%;padding:0.37vh;position:absolute;top:2.5vh}ul#main_shell_tabs{margin-left:-0.37vh;margin-top:-0.35vh}ul#main_shell_tabs>li{padding-top:0.55vh;padding-bottom:0.2vh}.terminal .xterm-viewport{padding-bottom:0}.xterm{height:100%}.xterm .xterm-screen{top:0.8vh;left:0.4vh}"
+}
diff --git a/src/assets/themes/cyborg.json b/src/assets/themes/cyborg.json
new file mode 100644
index 000000000..09c4907ad
--- /dev/null
+++ b/src/assets/themes/cyborg.json
@@ -0,0 +1,45 @@
+{
+ "colors": {
+ "r": 95,
+ "g": 215,
+ "b": 215,
+ "black": "#011f1f",
+ "light_black": "#0a3333",
+ "grey": "#034747",
+ "red": "#ad3e5a",
+ "green": "#3cd66f",
+ "yellow": "#c5d63c",
+ "blue": "#3c4dd6",
+ "magenta": "#ad31ad",
+ "cyan": "#31adad",
+ "white": "#a3c2c2",
+ "brightBlack": "#454585",
+ "brightRed": "#eb0954",
+ "brightGreen": "#85ff5c",
+ "brightYellow": "#ffff5c",
+ "brightBlue": "#5c5cff",
+ "brightMagenta": "#ff47d6",
+ "brightCyan": "#5cffff",
+ "brightWhite": "#e6fafa"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Code",
+ "cursorStyle": "block",
+ "foreground": "#a3c2c2",
+ "background": "#0a3333",
+ "cursor": "#5cffff",
+ "cursorAccent": "#85ff5c",
+ "selection": "#ffff5c"
+ },
+ "globe": {
+ "base": "#5c5cff",
+ "marker": "#eb0954",
+ "pin": "#85ff5c",
+ "satellite": "#ffff5c"
+ },
+ "injectCSS": ""
+}
diff --git a/src/assets/themes/navy-disrupted.json b/src/assets/themes/navy-disrupted.json
new file mode 100644
index 000000000..27deb19e8
--- /dev/null
+++ b/src/assets/themes/navy-disrupted.json
@@ -0,0 +1,45 @@
+{
+ "colors": {
+ "r": 20,
+ "g": 119,
+ "b": 205,
+ "black": "#282a36",
+ "light_black": "#222430",
+ "grey": "#222430",
+ "red": "#ff5c57",
+ "green": "#5af78e",
+ "yellow": "#f3f99d",
+ "blue": "#57c7ff",
+ "magenta": "#ff6ac1",
+ "cyan": "#9aedfe",
+ "white": "#f1f1f0",
+ "brightBlack": "#686868",
+ "brightRed": "#ff5c57",
+ "brightGreen": "#5af78e",
+ "brightYellow": "#f3f99d",
+ "brightBlue": "#57c7ff",
+ "brightMagenta": "#ff6ac1",
+ "brightCyan": "#9aedfe",
+ "brightWhite": "#eff0eb"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Mono",
+ "cursorStyle": "block",
+ "foreground": "#87b7cc",
+ "background": "#222430",
+ "cursor": "#87b7cc",
+ "cursorAccent": "#16739c",
+ "selection": "rgba(239,240,235,0.3)"
+ },
+ "globe": {
+ "base": "#16739c",
+ "marker": "#ad0c0c",
+ "pin": "#04b80a",
+ "satellite": "#e3f213"
+ },
+ "injectCSS": "section#main_shell{position:relative;left:29vh;}section#main_shell>h3.title{left:calc(29vh + 16.5vw)!important;}section#mod_column_right{left:28.5vh!important;}section#mod_column_right>h3.title{left:29.6vh!important;}div#mod_netstat_inner{height:6.85vh;padding-top:.5vh;}div#mod_globe_innercontainer{padding-bottom:.95vh;}div#mod_conninfo canvas{height:8vh!important;} @media (aspect-ratio:64/27) {section#mod_column_left > h3.title{left:1.6vh!important}section#mod_column_left{left:1vh !important}section#mod_column_right > h3.title{left:44vh!important}section#mod_column_right{left:43vh !important}section#main_shell > h3.title{left:37vw !important;width:60% !important}section#main_shell{left:41vh;width:60%}}"
+}
diff --git a/src/assets/themes/navy-notype.json b/src/assets/themes/navy-notype.json
new file mode 100644
index 000000000..49c632c71
--- /dev/null
+++ b/src/assets/themes/navy-notype.json
@@ -0,0 +1,45 @@
+{
+ "colors": {
+ "r": 20,
+ "g": 119,
+ "b": 205,
+ "black": "#282a36",
+ "light_black": "#222430",
+ "grey": "#222430",
+ "red": "#ff5c57",
+ "green": "#5af78e",
+ "yellow": "#f3f99d",
+ "blue": "#57c7ff",
+ "magenta": "#ff6ac1",
+ "cyan": "#9aedfe",
+ "white": "#f1f1f0",
+ "brightBlack": "#686868",
+ "brightRed": "#ff5c57",
+ "brightGreen": "#5af78e",
+ "brightYellow": "#f3f99d",
+ "brightBlue": "#57c7ff",
+ "brightMagenta": "#ff6ac1",
+ "brightCyan": "#9aedfe",
+ "brightWhite": "#eff0eb"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Mono",
+ "cursorStyle": "block",
+ "foreground": "#87b7cc",
+ "background": "#222430",
+ "cursor": "#87b7cc",
+ "cursorAccent": "#16739c",
+ "selection": "rgba(239,240,235,0.3)"
+ },
+ "globe": {
+ "base": "#16739c",
+ "marker": "#ad0c0c",
+ "pin": "#04b80a",
+ "satellite": "#e3f213"
+ },
+ "injectCSS": "section#filesystem{left:0;width:100vw}section#filesystem>h3.title,section#filesystem>div{width:100vw}section#keyboard{display:none;}"
+}
diff --git a/src/assets/themes/navy.json b/src/assets/themes/navy.json
new file mode 100644
index 000000000..70d5e2ece
--- /dev/null
+++ b/src/assets/themes/navy.json
@@ -0,0 +1,44 @@
+{
+ "colors": {
+ "r": 20,
+ "g": 119,
+ "b": 205,
+ "black": "#282a36",
+ "light_black": "#222430",
+ "grey": "#222430",
+ "red": "#ff5c57",
+ "green": "#5af78e",
+ "yellow": "#f3f99d",
+ "blue": "#57c7ff",
+ "magenta": "#ff6ac1",
+ "cyan": "#9aedfe",
+ "white": "#f1f1f0",
+ "brightBlack": "#686868",
+ "brightRed": "#ff5c57",
+ "brightGreen": "#5af78e",
+ "brightYellow": "#f3f99d",
+ "brightBlue": "#57c7ff",
+ "brightMagenta": "#ff6ac1",
+ "brightCyan": "#9aedfe",
+ "brightWhite": "#eff0eb"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Mono",
+ "cursorStyle": "block",
+ "foreground": "#87b7cc",
+ "background": "#222430",
+ "cursor": "#87b7cc",
+ "cursorAccent": "#16739c",
+ "selection": "rgba(239,240,235,0.3)"
+ },
+ "globe": {
+ "base": "#16739c",
+ "marker": "#ad0c0c",
+ "pin": "#04b80a",
+ "satellite": "#e3f213"
+ }
+}
diff --git a/src/assets/themes/tron-colorfilter.json b/src/assets/themes/tron-colorfilter.json
new file mode 100644
index 000000000..8407df980
--- /dev/null
+++ b/src/assets/themes/tron-colorfilter.json
@@ -0,0 +1,34 @@
+{
+ "colors": {
+ "r": 170,
+ "g": 207,
+ "b": 209,
+ "black": "#000000",
+ "light_black": "#05080d",
+ "grey": "#262828"
+ },
+ "cssvars": {
+ "font_main": "United Sans Medium",
+ "font_main_light": "United Sans Light"
+ },
+ "terminal": {
+ "fontFamily": "Fira Mono",
+ "cursorStyle": "block",
+ "foreground": "#aacfd1",
+ "background": "#05080d",
+ "cursor": "#aacfd1",
+ "cursorAccent": "#aacfd1",
+ "selection": "rgba(170,207,209,0.3)",
+ "colorFilter": [
+ "rotate(180)",
+ "saturate(0.5)",
+ "mix(0.7)"
+ ]
+ },
+ "globe": {
+ "base": "#000000",
+ "marker": "#aacfd1",
+ "pin": "#aacfd1",
+ "satellite": "#aacfd1"
+ }
+}
diff --git a/src/assets/vendor/encom-globe.js b/src/assets/vendor/encom-globe.js
index 57b1fce44..dae37f3cf 100644
--- a/src/assets/vendor/encom-globe.js
+++ b/src/assets/vendor/encom-globe.js
@@ -23055,8 +23055,6 @@ THREE.ShaderLib = {
THREE.WebGLRenderer = function ( parameters ) {
- console.log( 'THREE.WebGLRenderer', THREE.REVISION );
-
parameters = parameters || {};
var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElement( 'canvas' ),
@@ -28694,7 +28692,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( _gl.getProgramInfoLog( program ) !== '' ) {
- console.error( 'gl.getProgramInfoLog()', _gl.getProgramInfoLog( program ) );
+ // console.error( 'gl.getProgramInfoLog()', _gl.getProgramInfoLog( program ) );
}
diff --git a/src/classes/audiofx.class.js b/src/classes/audiofx.class.js
index 1517db842..83fb51208 100644
--- a/src/classes/audiofx.class.js
+++ b/src/classes/audiofx.class.js
@@ -4,50 +4,53 @@ class AudioManager {
const {Howl, Howler} = require("howler");
if (window.settings.audio === true) {
- this.beep1 = new Howl({
- src: [path.join(__dirname, "assets", "audio", "beep1.wav")]
+ if(window.settings.disableFeedbackAudio === false) {
+ this.stdout = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "stdout.wav")],
+ volume: 0.4
+ });
+ this.stdin = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "stdin.wav")],
+ volume: 0.4
+ });
+ this.folder = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "folder.wav")]
+ });
+ this.granted = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "granted.wav")]
+ });
+ }
+ this.keyboard = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "keyboard.wav")]
});
- this.beep2 = new Howl({
- src: [path.join(__dirname, "assets", "audio", "beep2.wav")]
+ this.theme = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "theme.wav")]
});
- this.beep3 = new Howl({
- src: [path.join(__dirname, "assets", "audio", "beep3.wav")],
- volume: 0.6
+ this.expand = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "expand.wav")]
});
- this.beep4 = new Howl({
- src: [path.join(__dirname, "assets", "audio", "beep4.wav")]
+ this.panels = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "panels.wav")]
});
- this.dismiss = new Howl({
- src: [path.join(__dirname, "assets", "audio", "dismiss.wav")]
+ this.scan = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "scan.wav")]
});
- this.alarm = new Howl({
- src: [path.join(__dirname, "assets", "audio", "alarm.wav")]
+ this.denied = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "denied.wav")]
});
this.info = new Howl({
src: [path.join(__dirname, "assets", "audio", "info.wav")]
});
- } else {
- Howler.volume(0.0);
- }
-
- if (window.settings.audio === true && window.settings.extraAudio === true) {
- this.beep5 = new Howl({
- src: [path.join(__dirname, "assets", "audio", "beep5.wav")]
- });
- this.intro = new Howl({
- src: [path.join(__dirname, "assets", "audio", "intro.wav")]
- });
- this.scan = new Howl({
- src: [path.join(__dirname, "assets", "audio", "scan.wav")]
- });
- this.ping = new Howl({
- src: [path.join(__dirname, "assets", "audio", "ping.wav")],
- volume: 0.02
+ this.alarm = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "alarm.wav")]
});
- this.pingFailed = new Howl({
- src: [path.join(__dirname, "assets", "audio", "pingFailed.wav")],
- volume: 0.02
+ this.error = new Howl({
+ src: [path.join(__dirname, "assets", "audio", "error.wav")]
});
+
+ Howler.volume(window.settings.audioVolume);
+ } else {
+ Howler.volume(0.0);
}
// Return a proxy to avoid errors if sounds aren't loaded
diff --git a/src/classes/clipboardButtons.class.js b/src/classes/clipboardButtons.class.js
deleted file mode 100644
index 86aa1b6f7..000000000
--- a/src/classes/clipboardButtons.class.js
+++ /dev/null
@@ -1,28 +0,0 @@
-class ClipboardButtons {
- constructor(parentId) {
- if (!parentId) throw "Missing parameters";
-
- // Create DOM
- this.parent = document.getElementById(parentId);
- this._element = document.createElement("div");
- this._element.setAttribute("id", "mod_clipboardButtons");
- this._element.innerHTML = `
-