安装

可以使用npm下载moaco-editor:

npm install monaco-editor@0.31.1

我们需要的文件在node_modules/monaco-editor/min/vs目录中,将整个vs目录拷贝到Asp.Net Core Web项目的wwwroot/lib目录下:


在Program.cs中需要启动静态文件:

app.UseStaticFiles();

在布局页面中引入如下css和js:

    <link data-name="vs/editor/editor.main" rel="stylesheet" href="~/lib/vs/editor/editor.main.css" />
    <script  src="~/lib/vs/loader.js"></script>    <script  src="~/lib/vs/editor/editor.main.nls.js"></script>    <script src="~/lib/vs/editor/editor.main.js"></script>

基本的环境设置就完成了。

基本功能

<div id="container" style="width:800px;height:600px;border:1px solid grey"></div>
<script>    $(document).ready(function () {        require.config({ paths: { 'vs': '/lib/vs' } });        monaco.editor.create(document.getElementById('container'), {            value: "function sayHello(){n console.write('Hello World');n}",            language: 'javascript'        });    })</script>

设置

        var editor = monaco.editor.create(document.getElementById('container'), {            value: "function sayHello(){n console.write('Hello World');n}",            language: 'javascript',            lineNumbers: 'on',            roundedSelection: false,            scrollBeyondLastLine: false,            readOnly: false,            theme: 'vs-dark'        });

代码比较

monaco editor的一个强大的功能是文字比较功能,可以将两段文字进行比较:

<script>    require.config({ paths: { 'vs': '/lib/vs' } });    var originalModel = monaco.editor.createModel(        '删除行n行一n行二n行三内容n更多内容',        'text/plain'    );    var modifiedModel = monaco.editor.createModel(        'n行一n行二n行三n更多内容n增加行',        'text/plain'    );    var diffEditor = monaco.editor.createDiffEditor(document.getElementById('container'), {        // You can optionally disable the resizing        enableSplitViewResizing: false    });    diffEditor.setModel({        original: originalModel,        modified: modifiedModel    });</script>

效果如下:

自定义语言

这里使用的“语言”很简单,目的是记录中国象棋的棋谱,关键字只有代表“车马炮”等棋子的大写汉语拼音,运算符只有代表向前、向后和平行移动的“++”、“–”和“==”,还有就是注释。
使用自定义语言,首先要注册这个语言的id:

        monaco.languages.register({ id: 'mylang' });

然后设置语言的Token Provider:

        monaco.languages.setMonarchTokensProvider('mylang', getlang());
@page@model CustomLanguageModel@{    ViewData["Title"] = "自定义语言";}<h1>@ViewData["Title"]</h1><div id="container" style="height: 800px"></div><script>    var require = { paths: { vs: '/lib/vs' } };</script>@section Scripts{<script>    $(document).ready(function () {        monaco.languages.register({ id: 'mylang' });        monaco.languages.setMonarchTokensProvider('mylang', getlang());        var sampleEditor=monaco.editor.create(document.getElementById('container'), {            model:null        }        );        setTimeout(function(){             var model=monaco.editor.createModel('// 炮二平五 nPAO 2 == 5 n//马八进七 nMA 8 ++ 7', 'mylang');             sampleEditor.setModel(model);        },1);    });    function getlang(){        return {            //车马炮相士将帅兵卒          keywords: [ 'JU', 'MA', 'PAO', 'XIANG', 'SHI', 'JIANG', 'SHUAI', 'BING', 'ZU' ],          //++ 进 --退 ==平           operators: [ '++', '--', '=='  ],          symbols:  /[=><!~?:&|+-*/^%]+/,          // The main tokenizer for our languages          tokenizer: {            root: [              [/[A-Z][w$]*/, {cases: { '@@keywords': 'keyword' }}],                { include: '@@whitespace' },              [/@@symbols/, { cases: { '@@operators': 'operator'} } ],              [/d./, 'number'],            ],            comment: [              [/[^/*]+/, 'comment' ],              [//*/,    'comment', '@@push' ],                 ["\*/",    'comment', '@@pop'  ],              [/[/*]/,   'comment' ]            ],            whitespace: [              [/[ trn]+/, 'white'],              [//*/,       'comment', '@@comment' ],              [///.*$/,    'comment'],            ],          },        };    }</script>}}

效果如下:


转自

https://www.cnblogs.com/zhenl/p/15758472.html

喜欢的朋友点一下关注 点关注不迷路

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月1日
下一篇 2022年1月1日

相关推荐