* Add information about how to add new languages to monaco * Update expect.txt * Update doc/devdocs/modules/FileExplorer/monaco/readme.md Co-authored-by: Jay <65828559+Jay-o-Way@users.noreply.github.com> * Adress PR feedback * fix spelling errors * Update doc/devdocs/modules/FileExplorer/monaco/readme.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update readme.md * Update readme.md * Address PR comments * Fix spelling * address PR comments * address PR comments and move files * Update expect.txt * Update doc/devdocs/common/readme.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> * Adress PR comments * Fix spelling * Adress PR comments * Add peek stub documentation * Update doc/devdocs/common/FilePreviewCommon.md Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> * Update doc/devdocs/common/FilePreviewCommon.md * Fix spelling --------- Co-authored-by: Jay <65828559+Jay-o-Way@users.noreply.github.com> Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com> Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
4.9 KiB
FilePreviewCommon
This project contains common code used for previewing and displaying files.
Monaco preview
Monaco preview enables to display developer files. It is based on Microsoft's Monaco Editor which is maintained by the Visual Studio Code team.
This previewer is used for the File Explorer Dev File Previewer, as well as PowerToys Peek.
Update Monaco Editor
- Download Monaco editor with npm: Run
npm i monaco-editor
in the command prompt. - Delete everything except the
min
folder (the minimised code) from the downloaded files. - Copy the
min
folder into thesrc/common/FilePreviewCommon/Assets/Monaco/monacoSRC
folder of the PowerToys project. - Generate the JSON file as described in the generate monaco_languages.json file section.
Add a new language definition
As an example on how to add a new language definition you can look at the one for registry files.
- Add the new language definition (written with Monarch) as a new file to the folder containing Monaco custom languages (Remember the file name and the string you used for "idDefinition" as you need it later.). The file should be formatted like in the example below. (Please change
idDefinition
to the name of your language.)
export function idDefinition() {
return {
...
}
}
- Add the following line to the
monacoSpecialLanguages.js
file, after the other import statements:
import { idDefinition } from './customLanguages/file.js';
Replace file.js with the name of your definition file from step 1. Please replace idDefinition with the string you used in step 1.
- In the
monacoSpecialLanguages.js
file add the following line into theregisterAdditionalLanguages
function:
registerAdditionalNewLanguage("id", [".fileExtension"], idDefinition(), monaco)
Replace id and idDefinition with your id and string used in step 1. Replace fileExtension with a set of file extensions you want the language to register to.
- The id can be anything. Recommended is one of the file extensions. For example "php" or "reg".
- Execute the steps described in the monaco_languages.json section.
Add a new file extension to an existing language
- In the
monacoSpecialLanguages.js
file add the following line to theregisterAdditionalLanguages
function. (existingId
is the id of the language you want to add the extension to. You can find these id's in themonaco_languages.json
file):
registerAdditionalLanguage("id", [".fileExtension"], "existingId", monaco)
- If for instance you want to add more extensions to the php language set the id to
phpExt
and the existingId tophp
.
-
Copy the existing language definition into the
languageDefinitions
function in the same file. You can find the existing definitions in the following folder:/src/common/FilePreviewCommon/Assets/Monaco/monacoSRC/min/vs/basic-languages/
. -
Execute the steps described in the monaco_languages.json section.
monaco_languages.json
monaco_languages.json
contains all extensions and IDs for the languages supported by Monaco. The MonacoHelper
class and the installer are using this file to register preview handlers for the defined extensions.
After updating Monaco Editor and/or adding a new language you should update the monaco_languages.json
file.
- Run the
generateLanguagesJson.html
file on a local webserver (as webbrowsers will block certain needed features when running the file locally.)
- This can for example be achieved by using the Preview Server extension for Visual Studio Code: Open the file in Visual Studio Code, right click in the code editor and select
vscode-preview-server: Launch on browser
. The file will be opened in a browser.
- The browser will download the new
monaco_languages.json
file - Replace the old file with the newly downloaded one in the source code folder.