投票: 使用的编辑器
SciTE4AHK
sublime text
其他
[查看投票结果]
 
发表回复 
SciTE4AHK 编辑器 词法分析加强
2014-06-08, 20 : 29 (这个帖子最后修改于: 2014-06-12 20 : 19 by robertL.)
SciTE4AHK 编辑器 词法分析加强
概述
SciTE4AHK中,使用scintilla-wrapper所提供的词法解析器(SciLexer.dll)(替换掉SciTE4AHK原生的)

原理简述
词法解析器代码中的词语(如,命令/函数/字符串/变量/数字等)进行分析,为词语标记样式标记,通过为样式标记设置具体的样式,实现代码高亮、折叠等。

import命令:(用到,简介)
  • 原配置文件中的某行加入import命令,其作用相当于,在此命令所在行插入外部配置(类似AHK中的#include)
  • 外部配置会覆盖原配置中import命令插入位置之前的重复部分。
  • 原配置中,形如:
    代码: (全选)
    #import 相对路径\扩展配置的文件名(不含后缀)
    (本应用中)相对路径基点路径用户配置/User properties(即SciTEUser.properties文件)所在文件夹(XP下默认为..\我的文档\AutoHotkey\SciTE相对路径为空时,同时省略“\”符号。
    具体使用见后。

使用方法
  1. 下载附件,(其中三个文件:SciLexer.dllSWLexer.propertiesSWDefault.style.properties放置如下。
    • 用附件中的SciLexer.dll替换掉SciTE4AHK自带的SciLexer.dll(注意备份)。
      SciLexer.dll的位置,默认为..\Program Files\AutoHotkey\SciTE
    • SWLexer.properties:参见以上import命令XP下默认为..\我的文档\AutoHotkey\SciTE
    • SWDefault.style.properties:参见以上import命令XP下默认为..\我的文档\AutoHotkey\SciTE\Styles
    • SWahk.lua:放置在与UserLuaScript.lua文件同目录,XP下默认为..\我的文档\AutoHotkey\SciTE\Styles
  2. 编辑
    • SciTEUser.properties文件的末尾追加
      代码: (全选)
      import SWLexer
      其中,SWLexer为附件SWLexer.properties文件不含后缀的文件名。
      通过SciTE定位SciTEUser.properties文件的位置:在SciTE4AutoHotKey程序中,Options菜单\Open User propertiesd菜单项-打开/激活SciTEUser.properties文件,Tools菜单\Open containing folder菜单项-打开SciTEUser.properties文件所在的目录(如,"X:\我的文档\AutoHotkey\SciTE")。
    • UserLuaScript.lua文件的末尾追加
      代码: (全选)
      require "SWahk"
      其中,SWahk为附件SWahk.lua文件不含后缀的文件名。
      通过SciTE定位UserLuaScript.lua文件的位置:在SciTE4AutoHotKey程序中,工具栏空白右键菜单\Edit User Lua script菜单项-打开/激活UserLuaScript.lua文件,Tools菜单\Open containing folder菜单项-打开UserLuaScript.lua文件所在的目录(如,"X:\我的文档\AutoHotkey\SciTE")。
  3. 运行SciTE4AHK,指定样式为SWDefault;在编辑器中打开Highlight Test.ahk查看效果。
    指定样式:Tools菜单\SciTE4AutoHotkey settings..菜单项-打开SciTE4AutoHotkey settings窗口,在Style下拉别表栏中选择SWDefault项,点击Update按钮,关闭SciTE4AutoHotkey settings窗口。

    另见2楼,简明(粗略)使用方法。

样式
使用import命令,可在现有样式的基础上应用SWDefault样式。
两种方式,如:
  • 在期望被扩展的样式文件(如,Classic.style.properties末尾追加
    代码: (全选)
    import Styles\SWDefault.style
    其中,SWDefault.style为附件SWDefault.style.properties不含后缀的文件名;Styles为目录名。
  • SWDefault.style.properties文件的开始位置插入
    代码: (全选)
    import Styles\Classic.style
    其中,Classic.style为期望继承的不含后缀的文件名;Styles为目录名。

    另见4楼 一壶浊酒(黑色背景主题+详尽注解)、同作者的LexAHKL - Scintilla Lexer for Autohotkey L (v0.10.3 - RC2)(关于样式的详细说明)

优劣
  • scintilla-wrapper所提供的词法解析器能静态分析出代码中的更多元素。通过高亮更直观地区分出原义字符串、变量、%变量名%、参数%表达式化、命令的参数项等(用得好,解决语法问题!)。
    对比效果见附件Highlight Test.zip
  • 新SciLexer保留了对AHK语言的支持。(故,无法高亮包括SciTE配置文件在内的其他文本)(待空了做成外置版本)
  • 对SciTE4AHK中集成的(依赖样式的)功能(如,Block Comment or Uncomment)有影响,已更正,待验证..
  • Debug时无法添加断点→解决
  • 关键词非最新/略不全(才发现SciTE自身也不全,分类不对,面向B版,而非L版?,合并/添加中..(可在SWLexer.properties文件中手动添加)
  • 支持如下代码形式(会造成样式标记错误,并影响其后的所有代码):小括号( 起头(形如(..)?..:..)
  • 自动缩进(指,如}结束后新行自动减小缩进)依赖样式,暂未更正(新行仍保持缩进)(东西不多,但关键是Debug)→解决
  • 对中文标示符(变量名、函数名)支持仍不好(如,%中文变量名%)
  • 输出窗口/Output双击自动跳转失效。

附件说明
  • SWLexer.zip
    • SciLexer.dll:词法解析器(动态库)。
    • SWLexer.properties:为SciTE编辑器指定词法解析器,并设置关键字(如,命令/函数/内置变量/用户关键字等)
    • SWDefault.style.properties:基于样式标记设置的简单样式。
      .properties是SciTE的配置文件.style.properties属于.properties,是SciTE面向AHK定制中使用的命名方式).properties文本文件(可用SciTE、记事本等打开)
    • SWahk.lua:设置SciTE4AHK所用到的Lua脚本(用于Debug/调试等功能),以适应新的词法解析器。
  • Highlight Test.zip
    • Highlight Test.HtmlHighlight Test.ahk最终效果
    • Highlight Test(Original Lexer).htmlHighlight Test.ahkSciTE原效果
    • Highlight Test.ahk样式标记说明,高亮演示用例,用SciTE打开(而非作为AHK执行)。

附件:2014-6-10更新

.zip  SWLexer.zip (大小: 218 KB / 下载: 27)
.zip  Highlight Test.zip (大小: 35.52 KB / 下载: 27)

以下可略

过程记录:
  • 可用SciTE打开SciLexer.dll,搜索ahk*,找ahk对应的Lexer名称。(无法直接使用SCI.ahk中的SCLEX_AHKL=109)
  • SciTE的SciLexer.dll为ahk1;SW的SciLexer.dll为ahkl(区分ahk1ahkl,字体差异小;SciTE的SciLexer.dll中的ahk2面向V2)
  • Scintilla中,分:Lexer-编号&Lexer Language-命名。
  • 区分:"..\Program Files\AutoHotkey\SciTE\newuser"-新用户模板;"..\我的文档\AutoHotkey\SciTE"-用户配置
  • 配置文件中对style的描述不可使用形如"style.$(SCLEX_AHKL).$(SCE_AHKL_IDENTIFIER)"的变量(其中SCLEX_AHKL=ahkl、SCE_AHKL_IDENTIFIER=1),需使用style.ahkl.1(至少其值可以使用变量)。
  • 配置文件中,"A=B"中"="前后不可有空格
  • 善用Search\Find in Files
  • 用到的临时脚本(V2),正则用到x选项
    代码: (全选)
    S:="
    (
        ...
        sci.StyleSetFore(SCE_AHKL_BUILTINVAR     , 0xEE3010), sci.StyleSetBold(SCE_AHKL_BUILTINVAR, true)
        sci.StyleSetFore(SCE_AHKL_KEY            , 0xA2A2A2), sci.StyleSetBold(SCE_AHKL_KEY, true), sci.StyleSetItalic(SCE_AHKL_KEY, true)
        sci.StyleSetFore(SCE_AHKL_USERDEFINED1   , 0x000000)
    )"
    S:=RegExReplace(S,"
        (
            mx)
            sci.StyleSetFore\(([A-Z0-9_]+)\s*,\s*0x([0-9A-F]{6})\)    #$1 $2
            (?:(,)\ssci.StyleSet(Bold)\(.+?\))?                            #$3 $4
            (?:(,)\ssci.StyleSet(Italic)\(.+?\))?                        #$5 $6
        )"
        ,"style.SCLEX_AHKL.$1=fore:#$2$3$4$5$6")
        ;不能包含空格/缩进。
    S:=RegExReplace(S,"\bBold\b","bold")
    S:=RegExReplace(S,"\bItalic\b","italics")
    Clipboard:=S
    ExitApp
  • 关键字版本:SciTE较SW新。(SW含,如,#allowsamelinecomments、endrepeat,为SW中保留的对AutoIt v2的兼容)(可通过SciTE原高亮查看Highlight Test获知)
  • 指令/Directives表示不同。如,SciTE中为include,SW中为#include
  • 关键字分类不同。如,if在SciTE中属于流程控制/Flow of control,在SW中属于命令/Commands。
  • 样式依赖:
    • ahk.lua中含editor.Lexer ~= SCLEX_AHK1条件,需一并修改(通过UserLuaScript.lua覆盖)
    • 需替换SCE_AHK_SCLEX_AHK1(出于.lua.ahk
  • properties/配置中赋值的值为字符串,Lua中赋值的值、=等式判断为表达式(故,不可直接editor.Lexer ~= SCLEX_AHKl,需要先设置SCLEX_AHKl=109)
  • 在SciTE中保存ahk.lua(等Options菜单中的相关文件)会致使重载(故而无需重启SciTE)

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢robertL
2014-06-09, 11 : 53 (这个帖子最后修改于: 2014-06-10 14 : 54 by robertL.)
Information 简明使用方法
By Sunwind
Win7?
  1. 下载论坛中的附件,放置文件如下:
    D:\AutoHotkey\SciTE\SciLexer.dll
    D:\AutoHotkey\SciTE\user\SWLexer.properties
    D:\AutoHotkey\SciTE\user\Styles\SWDefault.style.properties
    D:\AutoHotkey\SciTE\user\SWahk.lua
  2. D:\AutoHotkey\SciTE\user\SciTEUser.properties文件末尾增加import SWLexer;在D:\AutoHotkey\SciTE\user\UserLuaScript.lua文件末尾增加require "SWahk"。
  3. [Image: thumb-1490_53952F21.jpg]

替换×1,新文件×3,小编辑已有文件×2

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-06-09, 13 : 33 (这个帖子最后修改于: 2014-06-10 15 : 03 by robertL.)
RE: SciTE4AHK 编辑器 词法分析加强
好东西!我来测试了!
------------------------------------------------------------------
照着一步一步做了,木有成功……
(2014-06-09 11 : 53)robertL 提到:  By Sunwind
Win7?
  1. 下载论坛中的附件,放置文件如下:
    D:\AutoHotkey\SciTE\SciLexer.dll
    D:\AutoHotkey\SciTE\user\SWLexer.properties
    D:\AutoHotkey\SciTE\user\Styles\SWDefault.style.properties
    D:\AutoHotkey\SciTE\user\SWahk.lua
  2. D:\AutoHotkey\SciTE\user\SciTEUser.properties文件末尾增加import SWLexer;在D:\AutoHotkey\SciTE\user\UserLuaScript.lua文件末尾增加require "SWahk"。
  3. [Image: thumb-1490_53952F21.jpg]

替换×1,新文件×3,小编辑已有文件×2

这个使用方法简单易懂
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-06-10, 23 : 21 (这个帖子最后修改于: 2014-06-11 00 : 04 by 一壶浊酒.)
Star 高亮配置文件注释
抛砖引玉自己配置了一下萝卜的SWDefault.style.properties高亮文件,顺便把里面各条目作了较为细致的注释,方便坛友参照修改(可参照兔子的版本​)
PS:文件/编码/UTF-8


附件
.zip  ZCS-SWD.style.zip (大小: 1.7 KB / 下载: 18)
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-12-24, 19 : 05
RE: SciTE4AHK 编辑器 词法分析加强
非常感谢

(2014-06-10 23 : 21)一壶浊酒 提到:  抛砖引玉自己配置了一下萝卜的SWDefault.style.properties高亮文件,顺便把里面各条目作了较为细致的注释,方便坛友参照修改(可参照兔子的版本​)
PS:文件/编码/UTF-8
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢蓝色随机数
2014-12-25, 11 : 23 (这个帖子最后修改于: 2014-12-25 11 : 24 by 蓝色随机数.)
RE: SciTE4AHK 编辑器 词法分析加强
@一壶浊酒 请问我输入字母时,字体是白色...输入完字母,在后面加上=号后,前面的字母自动变成了蓝色,这种是在哪里可以修改变量颜色的呢?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-12-27, 21 : 26 (这个帖子最后修改于: 2014-12-27 21 : 44 by zhanglei1371.)
RE: SciTE4AHK 编辑器 词法分析加强
(2014-06-09 13 : 33)兔子 提到:  好东西!我来测试了!
------------------------------------------------------------------
照着一步一步做了,木有成功……
(2014-06-09 11 : 53)robertL 提到:  By Sunwind
Win7?
  1. 下载论坛中的附件,放置文件如下:
    D:\AutoHotkey\SciTE\SciLexer.dll
    D:\AutoHotkey\SciTE\user\SWLexer.properties
    D:\AutoHotkey\SciTE\user\Styles\SWDefault.style.properties
    D:\AutoHotkey\SciTE\user\SWahk.lua
  2. D:\AutoHotkey\SciTE\user\SciTEUser.properties文件末尾增加import SWLexer;在D:\AutoHotkey\SciTE\user\UserLuaScript.lua文件末尾增加require "SWahk"。
  3. [Image: thumb-1490_53952F21.jpg]

替换×1,新文件×3,小编辑已有文件×2

这个使用方法简单易懂

我和兔子大师的做法一样,失败:
运行scite后,下面控制台提示信息:
no file 'D:\Program Files\AutoHotkey\SciTE\SWahk\init.lua'
no file '.\SWahk.dll'
no file 'D:\Program Files\AutoHotkey\SciTE\SWahk.dll'
no file 'D:\Program Files\AutoHotkey\SciTE\loadall.dll'
>Lua: error occurred while loading startup script
2014年12月27日 下午9:44
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-12-28, 17 : 44
RE: SciTE4AHK 编辑器 词法分析加强
(2014-12-27 21 : 26)zhanglei1371 提到:  失败:
运行scite后,下面控制台提示信息:
no file 'D:\Program Files\AutoHotkey\SciTE\SWahk\init.lua'
no file '.\SWahk.dll'
no file 'D:\Program Files\AutoHotkey\SciTE\SWahk.dll'
no file 'D:\Program Files\AutoHotkey\SciTE\loadall.dll'
>Lua: error occurred while loading startup script
2014年12月27日 下午9:44
这是Lua加载时未找到'SWahk.lua'导致的(上面的'no file'都是在找它)

使用方法 提到:SWahk.lua:放置在与UserLuaScript.lua文件同目录,XP下默认为..\我的文档\AutoHotkey\SciTE\Styles

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合