web-dev-qa-db-ja.com

どうすればカスタムのEclipse Syntax Highlighterを作成できますか

新しい言語用のコンパイラを開発しています。構文認識環境でその開発を示すことができるのは素晴らしいことだと思いました。言語にはかなりの数のカスタムキーワードがあり、その構造はJavaまたはC/C++などの一般的な言語とは大きく異なります。

どうすればEclipse用のカスタム構文ハイライターを開発できますか?いくつかのプラグインへの参照をいくつか見ましたが、ドキュメントは私の初心者のニーズに十分に対応できません。

私は自分の言語の文法/ REと関連するキーワードのリストを持っています。

38

Eclipseフレームワークは、かなり複雑なドキュメントモデルを使用して構文の色分け(強調表示ではなく色付けと呼びます)を実行します。他のエディターのように単純ではありません。

本当に試してみて、いじくり回したいのであれば、 Eclipseプラグイン開発者ガイドからの以下 を読むことをお勧めします。

(上記のリンクは無効になっています。 これは同様のドキュメントである可能性があります または this 。)

15
Uri

DSL(ドメイン固有言語)を扱っているようですね。あなたが探しているものはまさに XText のような音です。これはページからの抜粋です:

Xtextは、外部のテキストDSLを開発するためのフレームワーク/ツールです。 Xtextの単純なEBNF文法言語を使用して独自のDSLを記述するだけで、ジェネレーターはパーサー、ASTメタモデル(EMFで実装)、およびそこからフル機能のEclipseテキストエディターを作成します。

また、チェックアウト このビデオ これは、背後にいる人々の一人へのインタビューです。きっとここから取ると思います:-)

このプラグイン をチェックアウトすることもできます。まさにあなたが探しているものではありませんが、いいスタートになるかもしれません。

32
zvikico

これはLiClipseのターゲットの1つです( http://www.liclipse.com/ ):Eclipseを対象とする構文の強調表示、基本的なコード補完、アウトラインなどを使用して簡単にエディターを実行します-注そのコア(カスタム言語の作成を可能にする)が最近オープンソースになったこと: http://liclipse.blogspot.com.br/2016/05/liclipse-303-providing-back-to-open.html =。

いいえJava新しい言語を追加するにはスキルが必要です(ほとんどの場合、新しい.liclipse-これはYAMLです-ファイルを適切な場所に作成し、パーティションを作成する方法を示すいくつかの基本ルールを作成します言語-つまり、通常、コードとコメントを文字列から分離するだけであり、パーティションにあるキーワードを指定すると、適切な構文強調表示がすでに得られます)。

ダウンロードすると、plugins\com.brainwy.liclipse.editor\languagesにいくつかの例があり、いくつかの基本的なドキュメントが http://www.liclipse.com/text/supported_languages.html にあります。 =および http://www.liclipse.com/text/scope_definition.html 方法について。

4
Fabio Zadrozny

代わりにNotepad ++のユーザー定義言語機能を使用できます。通常、このようなユースケースにはNotepad ++を使用します。その点で、それは単なるXMLです。また、notepad ++は、言語固有の文法を定義するためのUIベースの編集を提供します。

1
srsforj

Eclipse Colorerを試してみましたが、本当に素晴らしいです(たとえば、ハイライト表示、VBAファイルの操作(制限されたコンテキストで)もちろん)それ以外の場合はサポートされません)。

たとえば、.

  • 折りたたみ(ご覧のとおり)
  • ブラケットマッチングをサポートします(オープン/クローズ)
  • 200以上のファイル拡張子(下記参照)

editor of some *.cls and *.bas file

preferences - file types

詳細 彼らのサイトのスクリーンショット

サポートされている拡張機能の完全なリストは次のとおりです。

(これらはインデックス化されていないか、Webのどこかに投稿されていないため、これらの情報を取得することは困難ですが、Googleと共同でも検出できるはずです。
この正規表現^\s+<(?!(!--|prototype|filename)).+>$を使用してすべての行を削除し、完全な内容と Eclipse\plugins\net.sf.colorer_0.9.9\colorer\hrc\proto.hrc ファイルのコピーを圧縮しました。
更新時に気軽に更新してください)

  <!--  main languages  -->
  <prototype name="c" group="main" description="C">

    <filename>/\.c$/i</filename>

  <prototype name="cpp" group="main" description="C++">

    <filename>/\.(cpp|cxx|cc|hpp|h)$/i</filename>

  <prototype name="d" group="main" description="D">

    <filename>/\.(d|di)$/i</filename>


  <prototype name="asm" group="main" description="ASM">

    <filename>/\.(mac|asm|inc|i32|cod)$/i</filename>

  <prototype name="Perl" group="main" description="Perl">

    <filename>/\.(pl[sx]?|pm|pod|t)$/i</filename>

  <prototype name="Java" group="main" description="Java">

    <filename>/\.(Java|jav|jad)$/i</filename>

  <prototype name="idl" group="main" description="IDL">

    <filename>/\.(hvs|(i|o)dl)$/i</filename>

  <prototype name="Pascal" group="main" description="Pascal">

    <filename>/\.(\~?pas|dpr|dpk|inc|int|pp)$/i</filename>

  <prototype name="csharp" group="main" description="C#">

    <filename>/\.cs$/i</filename>

  <prototype name="jsnet" group="main" description="JS.NET">

    <filename weight="0.5">/\.js$/i</filename>

  <prototype name="vbnet" group="main" description="VB.NET">

    <filename>/\.vb$/i</filename>

  <!-- warning!! extensions conflict with Fortran -->
  <prototype name="forth" group="main" description="Forth">

    <filename>/\.(fth|f32|f|spf)$/i</filename>

  <prototype name="fortran" group="main" description="Fortran">

    <filename>/\.(for|f(90)?)$/i</filename>

  <prototype name="vbasic" group="main" description="Visual Basic">

    <filename>/\.(bas|vbp|frm|cls)$/i</filename>

  <prototype name="python" group="main" description="Python">

    <filename>/\.(py|pyw|pys)$/i</filename>

  <prototype name="lua" group="main" description="Lua">

    <filename>/\.(lua)$/i</filename>
  </prototype>  
  <prototype name="Ruby" group="main" description="Ruby">

    <filename>/\.(rb|rbw|Ruby|rake)$/i</filename>
    <filename>/Rakefile$/i</filename>

  <prototype name="scala" group="main" description="Scala">

    <filename>/\.(scala)$/i</filename>

  <prototype name="tcltk" group="main" description="Tcl/Tk/Expect">

    <filename>/\.(tcl|tk|exp)$/i</filename>


  <!--  inet languages  -->

  <prototype name="html" group="inet" description="html">

    <filename>/\.[^ptr]??html?$/i</filename>


  <prototype name="css" group="inet" description="css">

    <filename>/\.(css)$/i</filename>

  <prototype name="html-css" group="inet" description="css for html">

    <filename weight="0">/\.(css)$/i</filename>

  <prototype name="svg-css" group="inet" description="css for svg">

    <filename weight="0">/\.(css)$/i</filename>

  <prototype name="sass" group="inet" description="SASS">

    <filename>/\.(sass)$/i</filename>


  <prototype name="haml" group="inet" description="HAML">

    <filename>/\.(haml)$/i</filename>

  <prototype name="erb" group="inet" description="ERB">

    <filename weight='4'>/\.(erb|rhtml|html\.erb)$/i</filename>


  <prototype name="jsp" group="inet" description="jsp">

    <filename>/\.(jspf?|tag)$/i</filename>


  <prototype name="php" group="inet" description="php">

    <filename>/\.(php\d?|phtml|thtml|inc)$/i</filename>


  <prototype name="xhtml-trans" group="inet" description="xhtml transitional" targetNamespace="http://www.w3.org/1999/xhtml">

    <filename>/\.html?/ix</filename>
    <filename>/\.xhtml?/ix</filename>

  <prototype name="xhtml-strict" group="inet" description="xhtml strict" targetNamespace="http://www.w3.org/1999/xhtml">

    <filename>/\.html?/ix</filename>
    <filename>/\.xhtml?/ix</filename>

  <prototype name="xhtml-frameset" group="inet" description="xhtml frameset" targetNamespace="http://www.w3.org/1999/xhtml">

    <filename>/\.html?/ix</filename>
    <filename>/\.xhtml?/ix</filename>

  <prototype name="asp.vb" group="inet" description="asp - VBScript">

    <filename>/\.(as(p|a)|ht(r|x|a)|inc)$/i</filename>

  <prototype name="asp.js" group="inet" description="asp - JavaScript">

    <filename>/\.(as(p|a)|ht(r|x|a)|inc)$/i</filename>

  <prototype name="asp.ps" group="inet" description="asp - PerlScript">

    <filename>/\.(as(p|a)|ht(r|x|a)|inc)$/i</filename>

  <prototype name="adp" group="inet" description="AOLserver Dynamic Pages">

    <filename>/\.(adp)$/i</filename>

  <prototype name="svg" group="inet" description="SVG 1.0" targetNamespace="http://www.w3.org/2000/svg">

    <filename>/\.svg/ix</filename>

  <prototype name="coldfusion" group="inet" description="ColdFusion">

    <filename>/\.(cfm|cfc)$/i</filename>

  <prototype name="jScript" group="inet" description="JavaScript">

    <filename>/\.(js|mocha)$/i</filename>

  <prototype name="actionscript" group="inet" description="ActionScript">

    <filename>/\.(as)$/i</filename>

  <prototype name="vbScript" group="inet" description="VBScript">

    <filename>/\.(vbs)$/i</filename>


  <prototype name="rss" group="inet" description="rss" targetNamespace="http://purl.org/rss/1.0/">

    <filename>/\.(rss)$/i</filename>
    <filename weight='1.5'>/^rss/i</filename>

  <prototype name="htc" group="inet" description="HTC">

    <filename weight='3'>/\.(htc)$/i</filename>

  <prototype name="xbl" group="inet" description="Mozilla XBL" targetNamespace="http://www.mozilla.org/xbl">

    <filename weight='0.5'>/\.(xml)/i</filename>

  <prototype name="wml" group="inet" description="wml" targetNamespace="http://www.wapforum.org/2001/wml">

    <filename>/\.wml$/i</filename>



  <!--  xml types  -->
  <prototype name="xml" group="xml" description="xml">

    <filename>/\.(xml|gi2|gpr|ui)$/i</filename>
    <filename>/\.(wxs|fb2)$/i</filename>



  <prototype name="dtd" group="xml" description="dtd">

    <filename>/\.(dtd|ent|mod)$/i</filename>

  <prototype name="dtdcatalog" group="xml" description="dtd/sgml catalog">

    <filename>/\.(cat|soc)$/i</filename>


  <prototype name="xslt" group="xml" description="xslt 1.0" targetNamespace="http://www.w3.org/1999/XSL/Transform">

    <filename>/\.(xslt?)$/i</filename>


  <prototype name="xslt2" group="xml" description="xslt 2.0" targetNamespace="http://www.w3.org/1999/XSL/Transform">

    <filename>/\.(xslt?2?)$/i</filename>

  <prototype name="xquery" group="xml" description="xquery 1.0">

    <filename>/\.(xq)$/i</filename>

  <prototype name="xslfo" group="xml" description="xslfo 1.0" targetNamespace="http://www.w3.org/1999/XSL/Transform">

    <filename>/\.(xslfo?|fo)$/i</filename>


  <prototype name="xmlschema" group="xml" description="XML Schema" targetNamespace="http://www.w3.org/2001/XMLSchema">

    <filename>/\.(xsd?)$/i</filename>


  <prototype name="relaxng" group="xml" description="Relax NG" targetNamespace="http://relaxng.org/ns/structure/1.0">

    <filename>/\.rng/ix</filename>

  <prototype name="schematron" group="xml" description="schematron" targetNamespace="http://www.ascc.net/xml/schematron">

    <filename>/\.sch$/ix</filename>

  <prototype name="wsdl" group="xml" description="wsdl 1.1" targetNamespace="http://schemas.xmlsoap.org/wsdl/">

    <filename>/\.wsdl$/ix</filename>

  <prototype name="rdf" group="xml" description="RDF" targetNamespace="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

    <filename>/\.rdf$/ix</filename>



  <prototype name="xmlcatalog" group="xml" description="XML Catalog" targetNamespace="urn:oasis:names:tc:entity:xmlns:xml:catalog">

    <filename>/\.xml$/ix</filename>

  </prototype>  
  <prototype name="docbook" group="xml" description="DocBook 4.2">

    <filename>/\.(dbk?|docbook)$/i</filename>

  <prototype name="mathml" group="xml" description="MathML2">

    <filename>/\.(math?|mml)$/i</filename>



  <!--  database languages  -->
  <prototype name="clarion" group="database" description="Clarion">

    <filename>/\.(cla|clw)$/i</filename>

  <!-- warning!! extensions conflict with Clipper -->
  <prototype name="Clipper" group="database" description="Clipper">

    <filename>/\.(ch|prg)$/i</filename>

  <prototype name="foxpro" group="database" description="FoxPro">

    <filename>/\.(prg|spr|mpr)$/i</filename>

  <prototype name="sqlj" group="database" description="SQLJ (Java sql)">

    <filename>/\.sqlj$/i</filename>

  <prototype name="paradox" group="database" description="Paradox">

    <filename>/\.sc$/i</filename>

  <prototype name="sql" group="database" description="SQL, PL/SQL">

    <filename>/\.sql$/i</filename>

  <prototype name="mysql" group="database" description="MySQL">

   <filename>/\.sql$/i</filename>


  <prototype name="Batch" group="scripts" description="Batch/Config.sys/NTcmd">

    <filename>/\.(Cmd|Bat|nt|btm|sys)$/i</filename>

  <prototype name="Apache" group="scripts" description="Apache httpd.conf">

    <filename>/(httpd\.conf|srm\.conf|access\.conf|\.htaccess|Apache\.conf)$/i</filename>

  <prototype name="Shell" group="scripts" description="sh/ksh/bash script">

    <filename>/\.(sh|spec)$|^\./i</filename>
    <filename>/^PKGBUILD$/i</filename>

  <prototype name="avisynth" group="scripts" description="AviSynth">

    <filename>/\.(avs|avsi)$/i</filename>

  <prototype name="config" group="scripts" description="Config, INI and CTL">

    <filename>/\.(ctl|tpl|ini|cfg|inf|srg|conf|types|tab|dof|dsk|lng)$/i</filename>

  <prototype name="awk" group="scripts" description="AWK">

    <filename weight='5'>/\.awk$/i</filename>


  <prototype name="makefile" group="scripts" description="makefile">

    <filename>/(makefile | tools\.ini) | \.(mak|gmk|ds(p|w)|bp(k|r|g)$)/ix</filename>
    <filename weight='3'>/(Android|application)\.mk/i</filename>

  <prototype name="qmake" group="scripts" description="Qt qmake">

    <filename>/\.pr[oif]$/i</filename>


  <prototype name="mkb" group="scripts" description="Project build file for Airplay SDK">
    <filename>/\.(mkb|mkf)$/i</filename>

  <prototype name="ant" group="scripts" description="Ant's build.xml" targetNamespace="http://jakarta.Apache.org/ant/">

    <filename weight='4'>/\bbuild\.xml$/ix</filename>


  <prototype name="acapella" group="scripts" description="Acapella">

    <filename>/\.(script|proc|param|parameter)$/i</filename>


  <prototype name="qrc" group="scripts" description="qrc">

    <filename>/\.qrc$/ix</filename>


 <prototype name="m4" group="scripts" description="M4">

    <filename>/\.m4$/i</filename>

  <prototype name="linkdef" group="scripts" description="Link Defines">

    <filename weight='3'>/\.def$/i</filename>

  <prototype name="resources" group="scripts" description="Resources">

    <filename>/\.(rc|dlg)$/i</filename>


  <prototype name="javacc" group="scripts" description="Java Compiler Compiler">

    <filename>/\.(jjt?)$/i</filename>

  <prototype name="javaProperties" group="scripts" description="Java properties">

    <filename>/\.pro(p(erties)?)?$/i</filename>

  <prototype name="javapolicy" group="scripts" description="Java policy">

    <filename>/\.policy$/i</filename>

  <prototype name="asn1" group="scripts" description="ASN.1/ECN">

    <filename>/\.(asn|asn1|ecn|edm|Elm|mib)$/i</filename>
    <filename>/-mib$/i</filename>

  <prototype name="Lex" group="scripts" description="Lex">

    <filename>/\.(l|f?lex)+$/i</filename>

  <prototype name="yacc" group="scripts" description="YACC">

    <filename>/\.y+$/i</filename>



  <prototype name="delphiform" group="scripts" description="Delphi form">

    <filename>/\.dfm$/i</filename>

  <prototype name="pnuts" group="scripts" description="Java: Pnuts">

    <filename>/\.(pnut)$/i</filename>


    <prototype name="scons" group="scripts" description="SCons">

    <filename>/(SConstruct|SConscript)$/i</filename>

  <prototype name="rtf" group="scripts" description="RTF text">

    <filename>/\.rtf$/i</filename>

  <prototype name="TeX" group="scripts" description="TeX">

    <filename>/\.(tex|cls|sty|ltx|ltr|dtx)$/i</filename>

  <prototype name="graphviz" group="scripts" description="GraphViz dot">

    <filename>/\.dot+$/i</filename>

  <prototype name="dcl" group="scripts" description="OpenVMS DCL">

    <filename>/\.com$/i</filename>

  <prototype name="vrml" group="scripts" description="VRML">

    <filename>/\.wrl$/i</filename>


  <prototype name="wsc" group="scripts" description="wsc" targetNamespace="uri:wsc">
    <!-- NOTE! 'targetNamespace' is fictive, used only for xsd2hrc -->

    <filename>/\.wsc$/i</filename>

  <prototype name="wsf" group="scripts" description="wsf">

    <filename>/\.wsf$/i</filename>



  <prototype name="rarscript" group="scripts.install" description="RAR Install Script">

    <filename>/\.s$/i</filename>

  <prototype name="nsi" group="scripts.install" description="Nullsoft Install Script">

    <filename>/\.ns(i|h)$/i</filename>

  <prototype name="iss" group="scripts.install" description="InnoSetup script">

    <filename>/\.iss$/i</filename>

  <prototype name="isScripts" group="scripts.install" description="IS script">

    <filename>/\.rul$/i</filename>


  <!--  rare languages  -->

  <prototype name="c1c" group="rare" description="1C">

    <filename>/\.1c$/i</filename>

  <prototype name="ada" group="rare" description="Ada">

    <filename>/\.(ads|adb|adc)$/i</filename>

  <prototype name="abap4" group="rare" description="ABAP/4">

    <filename>/\.(abap4|abap)$/i</filename>

  <prototype name="AutoIt" group="rare" description="AutoIt 2.x">

    <filename>/\.aut$/i</filename>


  <!--  !! you may wish to swap next two types
  because of collision with extensions  -->
  <prototype name="dssp" group="rare" description="Dssp">

    <filename>/\.dsp$/i</filename>

  <prototype name="adsp" group="rare" description="ADSP-21xx Asm">

    <filename>/\.(dsp|sys)$/i</filename>

  <prototype name="Baan" group="rare" description="Baan">

    <filename>/\.cln$/i</filename>

  <prototype name="cobol" group="rare" description="Cobol Fixed format">

    <filename>/\.(cob|cbl)$/i</filename>

  <prototype name="cobolfr" group="rare" description="Cobol Free format">

    <filename>/\.(cob|cbl)$/i</filename>

  <prototype name="cache" group="rare" description="Cache/Open-M">

    <filename>/\.(rsa|ro|rtn|inc|int|mac|cdl)$/i</filename>

  <prototype name="cup" group="rare" description="CUP">

    <filename>/\.(cup)$/i</filename>

  <prototype name="eiffel" group="rare" description="Eiffel">

    <filename>/\.e$/i</filename>

  <prototype name="erlang" group="rare" description="Erlang">

    <filename>/\.[eh]rl$/i</filename>

  <prototype name="icon" group="rare" description="Icon">

    <filename>/\.icn$/i</filename>

  <prototype name="LISP" group="rare" description="LISP">

    <filename>/\.(lsp|LISP|scm|elc|el)$/i</filename>

  <prototype name="mako" group="rare" description="Mako templates">

    <!-- extension conflicts with Makefile, hence weight is less than 2 -->
    <filename weight="1.5">/\.(mako|mak)$/i</filename>

  <prototype name="matlab" group="rare" description="MatLab">

    <filename>/\.m$/i</filename>

  <!-- warning!! extensions conflict with link defines -->
  <prototype name="modula2" group="rare" description="Modula2 and Oberon2">

    <filename>/\.(mod|ob2|odf|def)$/i</filename>

  <prototype name="nesc" group="rare" description="nesC">

    <filename>/\.nc$/i</filename>

  <prototype name="picasm" group="rare" description="PicAsm">

    <filename>/\.(asm|pic)$/i</filename>

  <prototype name="pl1" group="rare" description="PL1">

    <filename>/\.(pl1|pli)$/i</filename>

  <prototype name="rexx" group="rare" description="Rexx">

    <filename>/\.(rex|cmd)$/i</filename>

 <prototype name="jcl" group="rare" description="JCL">

    <filename>/\.(jcl)$/i</filename>


  <prototype name="sml" group="rare" description="Standard ML">

    <filename>/\.(sml|sig)$/i</filename>

  <prototype name="ocaml" group="rare" description="OCaml">

    <filename>/\.ml[ilpy]?$/i</filename>

  <prototype name="sicstusProlog" group="rare" description="Sicstus Prolog">

    <filename>/\.pl$/i</filename>

  <prototype name="stata" group="rare" description="STATA">

    <filename>/\.a?do$/i</filename>

  <prototype name="turboProlog" group="rare" description="Turbo Prolog">

    <filename>/\.tpl$/i</filename>

  <prototype name="verilog" group="rare" description="Verilog HDL">

    <filename weight='3'>/\.g?v$/i</filename>

  <prototype name="vhdl" group="rare" description="VHDL">

    <filename>/\.vhdl?$/i</filename>

 <prototype name="ahdl" group="rare" description="AHDL">

   <filename>/\.(tdf|tdo|ahdl)$/i</filename>

  <prototype name="z80" group="rare" description="z80asm">

    <filename>/\.za$/i</filename>

  <prototype name="asm80" group="rare" description="asm80">

    <filename>/\.a80$/i</filename>

  <prototype name="a51" group="rare" description="8051 asm">

    <filename>/\.a5(1|2)$/i</filename>

  <prototype name="avr" group="rare" description="AVR asm">

    <filename>/\.(asm|inc|avr)$/i</filename>

  <prototype name="mason" group="rare" description="mason">

    <filename>/\.(mc)$/i</filename>

  <prototype name="postscript" group="rare" description="PostScript">

    <filename>/\.((e)?ps|pfa|gsf)$/i</filename>

  <!-- flex extension conflicts -->
  <prototype name="flex" group="rare" description="FlexScript">

    <filename>/\.(src|inc|inf)$/i</filename>



  <!--  other types  -->

  <prototype name="ass" group="other" description="(Advanced) SubStation Alpha script">

    <filename>/\.(ssa|ass)$/</filename>

  <prototype name="cue" group="other" description="Cue sheet">

    <filename>/\.cue$/</filename>

  <prototype name="filesbbs" group="other" description="files.bbs">

    <filename>/(files\.bbs|descript\.ion|file_id.diz)/i</filename>

  <prototype name="diff" group="other" description="Diff/Patch">

    <filename>/\.(diff.*|patch|rej(ect)?)$/i</filename>

  <prototype name="text" group="other" description="plain text">

    <filename>/(read\.?me|\.txt$|\.rus|\.nfo|\.log|install*|*ChangeLog*|AUTHORS|COPYING|FAQ|LICENSE|TODO$)/i</filename>
    <filename>/\.spo/ix</filename>


  <prototype name="default" group="other" description="default type">
    <filename weight='1'>//</filename>
1