diff --git a/.eslintignore b/.eslintignore index 4932e5ba1..b1ad1cf6d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,4 @@ -dev/generate-bailout.js -dev/latex-md.js -dev/update-grammar.js +dev/*.js src/lib/**/*.ts types/**/*.ts resources/**/*.js diff --git a/dev/update-grammar.js b/dev/update-grammar.js index 5b39a01da..d6b812650 100644 --- a/dev/update-grammar.js +++ b/dev/update-grammar.js @@ -1,45 +1,17 @@ -const got = require('got') const fs = require('fs') const path = require('path') - -async function getRequest(url, options) { - try { - const response = await got(url, options) - return response.body - } catch (e) { - console.log('Error code:', e.response.statusCode) - console.log('Error message:', e.response.statusMessage); - } - return undefined -} +const vel = require('vscode-extend-language') async function downloadFile(repo, file, version='main') { const url = 'https://raw.githubusercontent.com/' + repo + '/' + version + '/' + file - var res = await getRequest(url) - if (res === undefined) { + var content = await vel.download(url) + if (!content) { console.log('Cannot retrieve ', url) return } - const content = res.toString('utf-8') const syntaxFilePath = '../syntax/' + path.basename(file) fs.writeFileSync(syntaxFilePath, content) - console.log('Updating ', syntaxFilePath) -} - -async function getCommitSha(repo, version='main') { - const lastCommitInfo = 'https://api.github.com/repos/' + repo + '/git/ref/heads/' + version - var res = await getRequest(lastCommitInfo, {headers: {'User-Agent': 'vscode-latex-basics'}}) - if (res === undefined) { - console.log('Cannot retrieve last commit sha', lastCommitInfo) - return - } - try { - const lastCommit = JSON.parse(res.toString('utf-8')) - const sha = lastCommit.object.sha - console.log(`Update grammar files to ${repo}@${sha}`) - } catch(e) { - console.log('Cannot read last commit information') - } + console.log('Updating', syntaxFilePath) } async function main() { @@ -52,7 +24,12 @@ async function main() { 'markdown-latex-combined.tmLanguage.json' ] - await getCommitSha(latexBasicsRepo) + const sha = await vel.getCommitSha(latexBasicsRepo) + if (sha) { + console.log(`Update grammar files to ${latexBasicsRepo}@${sha}`) + } else { + console.log('Cannot read last commit information') + } for (const file of grammarFiles) { downloadFile(latexBasicsRepo, 'syntaxes/' + file) } diff --git a/dev/update-language.js b/dev/update-language.js new file mode 100644 index 000000000..40a336584 --- /dev/null +++ b/dev/update-language.js @@ -0,0 +1,18 @@ +const path = require('path') +const vel = require('vscode-extend-language') + +async function main() { + // The order of the files matters! + languageFiles = [ + 'latex-cpp-embedded-language-configuration.json', + 'markdown-latex-combined-language-configuration.json', + 'latex-language-configuration.json', + 'latex3-language-configuration.json' + ] + for (const file of languageFiles) { + console.log('Expanding', path.join('../syntax', file)) + await vel.expandConfigurationFile(path.join('../syntax/data', file), path.join('../syntax', file)) + } +} + +main() diff --git a/package-lock.json b/package-lock.json index c60c1a5fb..020418490 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,21 +72,6 @@ "fastq": "^1.6.0" } }, - "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -99,18 +84,6 @@ "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", "dev": true }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, "@types/concat-stream": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", @@ -148,27 +121,12 @@ "@types/node": "*" } }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", @@ -202,15 +160,6 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.1.tgz", @@ -568,27 +517,6 @@ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", "dev": true }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -704,23 +632,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } - } - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -851,12 +762,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1461,15 +1366,6 @@ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", "dev": true }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1530,42 +1426,6 @@ "slash": "^3.0.0" } }, - "got": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", - "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -1656,12 +1516,6 @@ "parse-cache-control": "^1.0.1" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -1690,16 +1544,6 @@ } } }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -1948,12 +1792,6 @@ "argparse": "^2.0.1" } }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -1982,15 +1820,6 @@ "prebuild-install": "^6.0.0" } }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, "latex-utensils": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/latex-utensils/-/latex-utensils-4.1.0.tgz", @@ -2074,12 +1903,6 @@ "is-unicode-supported": "^0.1.0" } }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2370,12 +2193,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -2579,12 +2396,6 @@ "word-wrap": "^1.2.3" } }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -2801,12 +2612,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2920,27 +2725,12 @@ "path-parse": "^1.0.6" } }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3591,6 +3381,12 @@ } } }, + "vscode-extend-language": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vscode-extend-language/-/vscode-extend-language-0.1.0.tgz", + "integrity": "sha512-4MFxg4SbAtpjhBDhoX0+FxF7EmkwhngG/toWXm8SpxfKAW7jLL/ZcKigQiNujcofEUyzAW+ASokcMz3EdmP4Tg==", + "dev": true + }, "vscode-test": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", diff --git a/package.json b/package.json index 55f65f768..07b634ed8 100644 --- a/package.json +++ b/package.json @@ -2210,13 +2210,13 @@ "@typescript-eslint/eslint-plugin": "5.4.0", "@typescript-eslint/parser": "5.4.0", "eslint": "8.3.0", - "got": "11.8.3", "mocha": "9.1.3", "npm-run-all": "4.1.5", "rimraf": "3.0.2", "textmate-bailout": "1.1.0", "typescript": "4.5.2", "vsce": "2.5.0", + "vscode-extend-language": "^0.1.0", "vscode-test": "1.6.1" } } diff --git a/syntax/data/latex-cpp-embedded-language-configuration.json b/syntax/data/latex-cpp-embedded-language-configuration.json new file mode 100644 index 000000000..7bd99f56d --- /dev/null +++ b/syntax/data/latex-cpp-embedded-language-configuration.json @@ -0,0 +1,3 @@ +{ + "extends": "https://raw.githubusercontent.com/jlelong/vscode-latex-basics/main/languages/latex-cpp-embedded-language-configuration.json" +} diff --git a/syntax/data/latex-language-configuration.json b/syntax/data/latex-language-configuration.json new file mode 100644 index 000000000..7aeecd1d6 --- /dev/null +++ b/syntax/data/latex-language-configuration.json @@ -0,0 +1,34 @@ +{ + "extends": "https://raw.githubusercontent.com/jlelong/vscode-latex-basics/main/languages/latex-language-configuration.json", + + "overrides": { + "autoClosingPairs": [ + ["\\begin{", ""], + ["\\left(", ""], + ["\\left[", ""], + ["\\left{", ""], + ["\\bigl(", ""], + ["\\bigl[", ""], + ["\\bigl{", ""], + ["\\Bigl(", ""], + ["\\Bigl[", ""], + ["\\Bigl{", ""], + ["\\biggl(", ""], + ["\\biggl[", ""], + ["\\biggl{", ""], + ["\\Biggl(", ""], + ["\\Biggl[", ""], + ["\\Biggl{", ""], + ["\\(", ""], + ["\\[", ""], + ["\\{", ""], + ["@(", ""], + ["@[", ""], + ["@{", ""], + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["`", "'"] + ] + } +} diff --git a/syntax/data/latex3-language-configuration.json b/syntax/data/latex3-language-configuration.json new file mode 100644 index 000000000..89fd0ab62 --- /dev/null +++ b/syntax/data/latex3-language-configuration.json @@ -0,0 +1,7 @@ +{ + "extends": "https://raw.githubusercontent.com/jlelong/vscode-latex-basics/main/languages/latex-language-configuration.json", + + "overrides": { + "wordPattern": "(__)|(\\*\\*)|(\\.\\.\\.)|([^\\s`'\"~_!?|$#@%^&*\\-=+;:,.<>(){}[\\]\\\\\\/]{2,})" + } +} diff --git a/syntax/data/markdown-latex-combined-language-configuration.json b/syntax/data/markdown-latex-combined-language-configuration.json new file mode 100644 index 000000000..1275217f8 --- /dev/null +++ b/syntax/data/markdown-latex-combined-language-configuration.json @@ -0,0 +1,3 @@ +{ + "extends": "https://github.com/jlelong/vscode-latex-basics/blob/main/languages/markdown-latex-combined-language-configuration.json" +} \ No newline at end of file