如果嵌入需要正确的大括号嵌套,如何在 Ace 编辑器中进行嵌入突出显示?

2024-01-19

考虑以下 Razor 代码:

    <div>@(Model.GetSomething())</div>

显然,只有考虑到所有括号,才能正确识别 Razor 块。
如果我进行朴素嵌入(基于 PHP 的做法):

    var RazorLangHighlightRules = function() {
        CSharpHighlightRules.call(this);
    };

    oop.inherits(RazorLangHighlightRules, CSharpHighlightRules);

    var RazorHighlightRules = function() {
        HtmlHighlightRules.call(this);

        var razorStartRules = [{
            token : "meta.block-marker.razor",
            regex : "@\\(",
            push  : "csharp-start"
        }];

        var endRules = [{
            token : "meta.block-marker.razor",
            regex : "\\)",
            next  : "pop"
        }];

        console.log(this.$rules);
        for (var key in this.$rules)
            this.$rules[key].unshift.apply(this.$rules[key], razorStartRules);

        this.embedRules(RazorLangHighlightRules, "csharp-", endRules, ["start"]);
        this.normalizeRules();
    };

    oop.inherits(RazorHighlightRules, HtmlHighlightRules);

我得到第一个) from GetSomething()被识别为 Razor 块的右大括号,这是不正确的。

在 Ace 中这样做的正确方法是什么?


您需要为每个状态添加一个状态堆栈(并删除)

endRules = [{ 
    regex: "[()]",
    onMatch: function(val, state, stack) {
        this.next = "";
        console.log(stack, this.next, val);
        if (val == "(") {
            stack.unshift("csharp-start", state);
            return "paren";
        }
        // val == ")"
        stack.shift();
        this.next = stack.shift() || "start";
        return this.next == "csharp-start" ? "paren" : "meta.block-marker.razor";
    }
}]

也可以看看将 Javascript 添加到自定义语言 - ACE 编辑器 https://stackoverflow.com/questions/24513783/add-javascript-into-custom-language-ace-editor/24516791#24516791

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果嵌入需要正确的大括号嵌套,如何在 Ace 编辑器中进行嵌入突出显示? 的相关文章

随机推荐

  • GPUImage 色度键滤镜

    我正在尝试使用 GPUImage 框架的色键过滤器 我按照 Filtershowcase 示例进行操作 但显然我错过了一些东西 因为它只显示视频 但没有绿屏抠出效果 这是我对摄像机 滤镜的初始化 camera GPUImageStillCa
  • 检测多 SIM 设备中来电的目标 SimCard

    我读过很多帖子并尝试过很多解决方案 但所有帖子的共同点是它们都已经过时了 至少我找不到适用于较新版本的 Android 的解决方案 Post 1 https stackoverflow com a 21454296 6444297 结果 i
  • 以 DRY 方式扩展 SLICK 表

    我有一个关于 Slick Scala 的有趣问题 我希望你们中的一位好心人能够帮助我 我有几个表 并通过扩展在 SLICK 案例类中 case class A case class B case class C 共享这些共同领域 id St
  • 使用Jquery查找父div的id

    我有一些像这样的html div p Volume p div
  • Rails - 操作电缆上的服务器阻塞

    我有一个在开发中完美运行的 Rails 应用程序 我已部署到服务器 应用程序加载并正确显示其登陆和关于页面 但是 当我使用 Action Cable 访问页面时 服务器会阻塞 从网页发出的最后一个请求与 Action Cable 相关 并且
  • Android 中背景为 AnimationDrawable 的按钮状态

    我在 Android 中制作自定义按钮已经有一段时间了 事情很简单 只需为按钮状态制作图像资源并为其制作一个选择器 一切都很顺利而且美好 现在我遇到了新的情况 我制作了一个可绘制的动画并将其设置为按钮的背景
  • 如何在 Eclipse 编辑器插件中显示语法错误

    如何在 Eclipse 编辑器插件中指示语法错误 例如 非法的标记序列 就像在 Eclipse Java 编辑器中一样 即通过红色蠕动下划线 滚动条上可以跳转到的红色标记以及解释性消息您将鼠标悬停在其中一个上吗 我正在为自定义文件格式 特别
  • 当子属性更改时如何触发 NgComponent 的更新

    我是 AngularDart 和 Dart 的完全初学者 我遵循了教程 但我似乎找不到答案 我有两个可以完美工作的 NgComponents
  • ggplot2——自动放大geom_smooth(使用coord_cartesian)

    geom smooth很棒 很大程度上是因为它平均了很多变化 然而 正因为如此 当它缩小时 很难看出它在 x 轴上的变化 我正在制作大约 1000 个我需要的图表ggplot2放大通过coord cartesian 然而 每个图表都有不同的
  • 使用时间选择器设置时间

    有两个编辑文本 单击编辑文本时间选择器应该弹出 如何使用时间选择器选择日期并在两个编辑文本中设置日期 我已经用谷歌搜索了 timepicker 但我不知道如何在单击 edittext 时启动时间选择器并且 设置时间 XML
  • Python:替换重音符号(é 到 e)、删除 [^a-zA-Z\d\s] 和 lower() 的有效方法[重复]

    这个问题在这里已经有答案了 使用Python 3 3 我想做以下事情 替换特殊字母字符 例如 e 锐号 和 o 带有基本字符的扬抑符 例如 从 到 o 删除除字母数字和字母数字之间的空格之外的所有字符 人物 转换为小写 这是我到目前为止所拥
  • pecl 安装以前的 php 版本

    我已将 MacBook 升级为 Mavericks 并破坏了我的开发环境 我现在遇到的问题是我的 pear pecl 仍然尝试安装我以前的 5 3 版本的 PHP 而不是版本 5 4 PHP版本 php v PHP 5 4 17 cli b
  • OSGi + 休眠

    数据库操作不是分散在四个 osgi 包中 而是全部执行略有不同的操作 我想创建一个 简单的 OSGi 包来负责所有持久性问题 我觉得这并不像听起来那么简单 因为 每个包都有唯一的类加载器 所以我真正感激的是如果有人知道此类问题的解决方案 我
  • 如何在 Rust 中对“选项”分配进行分组?

    我有一个代码块 需要一次分配多个可选变量 任何值出现的可能性都很小None 因此单独处理每个失败的案例并不是特别有用 目前我这样写支票 if let Some a foo a if let Some b foo b if let Some
  • 在 datagridview 中显示 Yes/NO 而不是 True/False

    datagridview以一种形式显示数据库表的内容 表类型的一列是布尔值 因此在datagridview中显示true false 但我想自定义它以显示是 否 你建议哪种方式 当谈到自定义格式时 我想到了两种可能的解决方案 1 手柄Cel
  • cakephp 3 用于关联数据的 queryBuilder

    我有2张桌子 Table 1 product prices id price description pack display created modified Table 2 payment infos id payer pay date
  • 如何将html保存到数据库字段

    我有一个小编辑器 http www leigeber com 2010 02 javascript wysiwyg editor 我的用户可以使用此编辑器的网页 我将 html 保存到我的数据库中 我在将此 html 保存到我的数据库时遇到
  • UICollectionView 中的多个部分

    我正在使用集合视图为我的医院构建一个 iOS 应用程序 但是 根据目的 我需要在专科诊所使用多个部分 如果只是 1 部分 我已经完成了代码 当我尝试将其分成 2 个部分时 它总是返回一个 nil 值 请检查我下面的代码 public fun
  • 什么是表分区?

    什么情况下我们应该使用表分区 一个例子可能会有所帮助 我们每天从 124 家杂货店收集数据 每天的数据都与其他日期完全不同 我们按日期对数据进行分区 这使我们能够更快地 因为oracle可以使用分区索引并快速消除所有不相关的天数 这还使备份
  • 如果嵌入需要正确的大括号嵌套,如何在 Ace 编辑器中进行嵌入突出显示?

    考虑以下 Razor 代码 div Model GetSomething div 显然 只有考虑到所有括号 才能正确识别 Razor 块 如果我进行朴素嵌入 基于 PHP 的做法 var RazorLangHighlightRules fu