我想使用Ace Editor来实现:
服务器端验证,然后使用以下命令标记一些有错误的行:
editor.session.setAnnotations([{row:1,column:0,text: "消息",类型:"错误"}]);
我想解析一种逐行解析的新语言"逐行扫描"并且是这样的:
A. GO TO 20
B. TURN LEFT
我已经有一个服务器端验证器用于我的语言(Java lib),我已经实现了我的目标
我怀疑如何将所有内容整合到我的第二个目标中。 ace编辑器是否提供了这样的功能(服务器端验证)?
我在github上看到了这个:https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/javascript_worker.js看起来对JS进行了某种外部验证,但我真的不明白Ace是否提供了我想要的东西。
如果ACE不支持,我该如何实现?如果你不能提供一些高水平的建筑和#34;提示将不胜感激......
答案 0 :(得分:0)
Ace没有向服务器发送内容的验证器示例,但它在webworker中运行验证器,这有点类似。
问题的天真方法是向会话添加更改侦听器,并在每次更改时将会话内容发送到服务器,运行验证程序,发回带有错误位置的json,并使用setAnnotations
的方式显示在你的问题中。
但是在每次更改时发送整个文档都很慢,因此ace只发送更改,并从中重建文档。
王牌如何运作?:
模式具有createWorker函数,用于创建WorkerClient的实例,WorkerClient启动webWorker并将changeListener添加到文档中。
worker.js使用mirror.js从更改中重建文档,并在超时后调用函数。所有语言特定部分都在该功能中。如果您以某种方式发现难以理解javascript_worker.js
如果您不想采用天真的方法,可以重复使用某些ace webWorker代码与服务器同步。对于客户端,您需要将worker_client.js
中的postMessage替换为send over socket,并将服务器替换为nodejs或重新实现java中的mirror.js
。
然而,在js中重新实现您的语言验证并使用类似javascript_worker中的jshint将提供更好的用户体验。您甚至可以使用java to js compiler。