【问题标题】:Notepad++ UDL: Problems with folding start and endNotepad++ UDL:折叠开始和结束的问题
【发布时间】:2013-11-22 12:55:57
【问题描述】:

我想正确折叠以下 Z80 组件摘录的部分,但我无法完成:

.ORG $9D93
        .DB     t2ByteTok, tAsmCmp

    Increase:
        LD      A, B
        CP      255
        JR      Z, KeyLoop
        INC     B
        JR      Display

    Decrease:
        LD      A, B
        CP      0
        JR      Z, KeyLoop
        DEC     B
        JR      Display

.END

在此摘录中,应创建三个折叠区域:

  • #1 从 .ORG $9D93 到 .END
  • #2 从“增加:”到“减少:”之前的行
  • #3 从“Decrease:”到“.END”之前的行

两个问题:

  • 通过将关键字“ORG”设置为“Folding in code 1 style”中的打开标记并将“END”设置为关闭标记,我能够创建第一个折叠。有趣的是,它不适用于“.ORG”和“.END”作为令牌。例如。现在,如果缺少点,则可以创建折叠。我必须以任何方式逃避点吗?
  • 我根本无法进行第二次和第三次折叠。我尝试添加“:”作为打开标记,但是在关闭标记中添加什么?这将是下一个折叠开始或结束之前的行。如何在 UDL 中表达?

【问题讨论】:

    标签: notepad++


    【解决方案1】:

    请理解折叠是为使用对结构而设计的。构造

    If (a)
    |
    |    If (b)
    |    |
    |    |    Print
    |    |
    |    End If
    |
    End If
    

    将按预期折叠,但在您的情况下,评估是:

    .ORG $9D93
    |        .DB     t2ByteTok, tAsmCmp
    |
    |    Increase:
    |    |    LD      A, B
    |    |    CP      255
    |    |    JR      Z, KeyLoop
    |    |    INC     B
    |    |    JR      Display
    |    |
    |    ? (NO MATCH)
    |
    |    Decrease:
    |    |    LD      A, B
    |    |    CP      0
    |    |    JR      Z, KeyLoop
    |    |    DEC     B
    |    |    JR      Display
    |    |
    |    ? (NO MATCH)
    |
    .END
    

    虽然这不是您想要实现的,但尝试以这种方式添加 .END,您将看到所有 3 个折叠都按预期工作:

    .ORG $9D93
    |        .DB     t2ByteTok, tAsmCmp
    |
    |    Increase:
    |    |    LD      A, B
    |    |    CP      255
    |    |    JR      Z, KeyLoop
    |    |    INC     B
    |    |    JR      Display
    |    .END
    |
    |    Decrease:
    |    |    LD      A, B
    |    |    CP      0
    |    |    JR      Z, KeyLoop
    |    |    DEC     B
    |    |    JR      Display
    |    .END
    |
    .END
    

    据我了解 Notepad++ 中的 UDL,您的问题中建议的折叠样式无法通过 UDL 实现。也许它可以在不受简化的 UDL 逻辑绑定的内置 N++ 语言中工作。供您参考,UDL 有意保持简化,以使大多数人可以管理 UI 和逻辑。 (我不打算搜索我最近读到的地方,很抱歉没有链接到最后一句话的来源。)

    检查 N++ 的内部工作原理,您也许可以添加符合您要求的自己的内置语言(不是 UDL)。

    编辑:我最近发现了这条评论:考虑另一个文本编辑器 SynWrite,它可以具有更灵活的词法分析器。只需阅读 Synw 自述文件中的词法分析器教程。 – Alextp 2013 年 10 月 25 日 19:46

    【讨论】:

    • 感谢您这么长时间后的回答以及有关 UDL / 内置语言的背景信息,我会进一步研究:)
    • @PacMani - 我今天查看了它们 - 检查 Notepad++ 源存档中的目录`\scintilla\lexers\`。 In 包含词法分析器文件;令牌检测也是按程序处理的,而不仅仅是声明式的。这意味着您有无限的可能性来实现您所需要的并构建您自己的 N++。祝你好运 :) (或者你也可以看看我几天前在回答末尾添加的 SynWrite。)
    • 好东西!现在调查一下:)
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2021-07-16
    • 1970-01-01
    • 2017-03-09
    • 2013-10-29
    相关资源
    最近更新 更多