On 5/28/11 1:23 PM, Edward K. Ream wrote:
This follows up on the discussion at:
http://groups.google.com/group/leo-editor/browse_thread/thread/b41ddfeb3c84e780
I've just created a script that will automatically create entries in
g.app.language_delims_dict using information in the corresponding
files in the leo/modes directory. This is all that is needed to
support @language and syntax coloring for those languages.
However, there are two other tables, g.app.language_extension_dict and
g.app.extension_dict, inverses of each other, for which I need to know
the file extensions that typically apply for each language.
I don't fancy looking up the extension for the 145 languages in leo/
modes, so if you are interested creating files for a particular
language, please tell me both the language name and the file
extensions that apply. Thanks. The sooner the better, please, while
everything is at hand...
Edward
Awesome, then would it be possible for you to add support for Scala
source files? I had simply given up on this possibility, but if you are
working on this stuff anyway and it wouldn't be too much trouble then
that would be great.
I've attached the latest version of the jEdit XML mode file for Scala;
additional information is that the language name is "scala", the
extension is also "scala", and the comments are "// /* */" (just like
C++ and Java).
Thanks!!!
Greg
--
You received this message because you are subscribed to the Google Groups
"leo-editor" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/leo-editor?hl=en.
<?xml version="1.0"?>
<!DOCTYPE MODE SYSTEM "xmode.dtd">
<MODE>
<PROPS>
<PROPERTY NAME="indentOpenBrackets" VALUE="{" />
<PROPERTY NAME="indentCloseBrackets" VALUE="}" />
<PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
<PROPERTY NAME="indentPrevLine"
VALUE="\s*(((if|while)\s*\(|else\s*(\{|$)|else\s+if\s*\(|case\s+.+:|default:)[^;]*|for\s*\(.*)" />
<!-- set this to 'true' if you want to use GNU coding style -->
<PROPERTY NAME="doubleBracketIndent" VALUE="false" />
<PROPERTY NAME="commentStart" VALUE="/*" />
<PROPERTY NAME="commentEnd" VALUE="*/" />
<PROPERTY NAME="lineComment" VALUE="//" />
<PROPERTY NAME="noTabs" VALUE="true" />
<PROPERTY NAME="tabSize" VALUE="2" />
<PROPERTY NAME="indentSize" VALUE="2" />
<PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
</PROPS>
<RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"
DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
<MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
<IMPORT DELEGATE="PRIMARY"/>
</RULES>
<RULES SET="PRIMARY">
<!-- Silly comment -->
<SEQ TYPE="COMMENT1">/**/</SEQ>
<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
<!-- Scaladoc comment -->
<SPAN TYPE="COMMENT3" DELEGATE="SCALADOC">
<BEGIN>/**</BEGIN>
<END>*/</END>
</SPAN>
<!-- Scala comment (Java style) -->
<SPAN TYPE="COMMENT1">
<BEGIN>/*</BEGIN>
<END>*/</END>
</SPAN>
<!-- start of XML comment ([email protected]) -->
<SEQ_REGEXP HASH_CHAR="<" AT_WHITESPACE_END="TRUE" TYPE="COMMENT2"
DELEGATE="XML_COMMENT"><!--</SEQ_REGEXP>
<!-- start of xml tag ([email protected]) -->
<SEQ_REGEXP HASH_CHAR="<" AT_WHITESPACE_END="TRUE" TYPE="LITERAL3"
DELEGATE="XML_TAG"><\/?\w*</SEQ_REGEXP>
<!-- string and character literals -->
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="FALSE">
<BEGIN>"""</BEGIN>
<END>"""</END>
</SPAN>
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>
<SEQ_REGEXP HASH_CHAR="'" TYPE="LITERAL1">'([^']|\\.)'</SEQ_REGEXP>
<!-- symbol literals -->
<SEQ_REGEXP HASH_CHAR="'" TYPE="LABEL">'[0-9a-zA-Z><=+]([0-9a-zA-Z><=+]|_[0-9a-zA-Z><=+])*</SEQ_REGEXP>
<!-- type params between bracket pairs with -->
<!-- nested ones within ([email protected]) -->
<SEQ_REGEXP HASH_CHAR="[" TYPE="LITERAL3"
>\[[^\[\]]*(\[[^\[\]]*(\[[^\[\]]*\][^\[\]]*)*\][^\[\]]*)*\]</SEQ_REGEXP>
<!-- type constraints ([email protected]) -->
<SEQ_REGEXP HASH_CHAR="<" TYPE="LITERAL2"
><:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<SEQ_REGEXP HASH_CHAR=">" TYPE="LITERAL2"
>>:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<SEQ TYPE="OPERATOR">)</SEQ>
<SEQ TYPE="OPERATOR">=</SEQ>
<SEQ TYPE="OPERATOR">!</SEQ>
<SEQ TYPE="OPERATOR">>=</SEQ>
<SEQ TYPE="OPERATOR">>:</SEQ>
<SEQ TYPE="OPERATOR"><=</SEQ>
<SEQ TYPE="OPERATOR"><:</SEQ>
<SEQ TYPE="OPERATOR">+</SEQ>
<SEQ TYPE="OPERATOR">-</SEQ>
<SEQ TYPE="OPERATOR">/</SEQ>
<SEQ TYPE="OPERATOR">*</SEQ>
<SEQ TYPE="OPERATOR">></SEQ>
<SEQ TYPE="OPERATOR"><</SEQ>
<SEQ TYPE="OPERATOR">%</SEQ>
<SEQ TYPE="OPERATOR">&</SEQ>
<SEQ TYPE="OPERATOR">|</SEQ>
<SEQ TYPE="OPERATOR">^</SEQ>
<SEQ TYPE="OPERATOR">`</SEQ>
<SEQ TYPE="OPERATOR">~</SEQ>
<SEQ TYPE="OPERATOR">}</SEQ>
<SEQ TYPE="OPERATOR">{</SEQ>
<SEQ TYPE="NULL">.</SEQ>
<SEQ TYPE="NULL">,</SEQ>
<SEQ TYPE="NULL">;</SEQ>
<SEQ TYPE="NULL">]</SEQ>
<SEQ TYPE="NULL">[</SEQ>
<SEQ TYPE="NULL">?</SEQ>
<SEQ TYPE="NULL">:</SEQ>
<!-- after colon type descriptions ([email protected]) -->
<SEQ_REGEXP HASH_CHAR=":" TYPE="LITERAL2"
>:\s*\w+(\.\w+)*(#\w+)?</SEQ_REGEXP>
<!-- Function calls -->
<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
<SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
<BEGIN>case </BEGIN>
<END>=></END>
</SPAN>
<KEYWORDS>
<KEYWORD1>abstract</KEYWORD1>
<KEYWORD1>case</KEYWORD1>
<KEYWORD1>catch</KEYWORD1>
<KEYWORD1>class</KEYWORD1>
<KEYWORD1>def</KEYWORD1>
<KEYWORD1>do</KEYWORD1>
<KEYWORD1>else</KEYWORD1>
<KEYWORD1>extends</KEYWORD1>
<KEYWORD1>final</KEYWORD1>
<KEYWORD1>finally</KEYWORD1>
<KEYWORD1>for</KEYWORD1>
<KEYWORD1>forSome</KEYWORD1>
<KEYWORD1>if</KEYWORD1>
<KEYWORD1>implicit</KEYWORD1>
<KEYWORD1>import</KEYWORD1>
<KEYWORD1>lazy</KEYWORD1>
<KEYWORD1>match</KEYWORD1>
<KEYWORD1>new</KEYWORD1>
<KEYWORD1>object</KEYWORD1>
<KEYWORD1>override</KEYWORD1>
<KEYWORD1>package</KEYWORD1>
<KEYWORD1>private</KEYWORD1>
<KEYWORD1>protected</KEYWORD1>
<KEYWORD1>requires</KEYWORD1>
<KEYWORD1>return</KEYWORD1>
<KEYWORD1>sealed</KEYWORD1>
<KEYWORD1>throw</KEYWORD1>
<KEYWORD1>trait</KEYWORD1>
<KEYWORD1>try</KEYWORD1>
<KEYWORD1>type</KEYWORD1>
<KEYWORD1>val</KEYWORD1>
<KEYWORD1>var</KEYWORD1>
<KEYWORD1>with</KEYWORD1>
<KEYWORD1>while</KEYWORD1>
<KEYWORD1>yield</KEYWORD1>
<KEYWORD1>=></KEYWORD1>
<!-- java.lang.* wrapper types -->
<KEYWORD2>Character</KEYWORD2>
<KEYWORD2>Integer</KEYWORD2>
<!-- scala.* primitive types -->
<KEYWORD2>Boolean</KEYWORD2>
<KEYWORD2>boolean</KEYWORD2>
<KEYWORD2>Byte</KEYWORD2>
<KEYWORD2>byte</KEYWORD2>
<KEYWORD2>Char</KEYWORD2>
<KEYWORD2>char</KEYWORD2>
<KEYWORD2>Double</KEYWORD2>
<KEYWORD2>double</KEYWORD2>
<KEYWORD2>Float</KEYWORD2>
<KEYWORD2>float</KEYWORD2>
<KEYWORD2>Int</KEYWORD2>
<KEYWORD2>int</KEYWORD2>
<KEYWORD2>Long</KEYWORD2>
<KEYWORD2>long</KEYWORD2>
<KEYWORD2>Short</KEYWORD2>
<KEYWORD2>short</KEYWORD2>
<KEYWORD2>Unit</KEYWORD2>
<KEYWORD2>unit</KEYWORD2>
<!-- scala.* predefined types -->
<KEYWORD3>Actor</KEYWORD3>
<KEYWORD3>ActorProxy</KEYWORD3>
<KEYWORD3>ActorTask</KEYWORD3>
<KEYWORD3>ActorThread</KEYWORD3>
<KEYWORD3>AllRef</KEYWORD3>
<KEYWORD3>Any</KEYWORD3>
<KEYWORD3>AnyRef</KEYWORD3>
<KEYWORD3>Application</KEYWORD3>
<KEYWORD3>AppliedType</KEYWORD3>
<KEYWORD3>Array</KEYWORD3>>
<KEYWORD3>ArrayBuffer</KEYWORD3>
<KEYWORD3>Attribute</KEYWORD3>
<KEYWORD3>BoxedArray</KEYWORD3>
<KEYWORD3>BoxedBooleanArray</KEYWORD3>
<KEYWORD3>BoxedByteArray</KEYWORD3>
<KEYWORD3>BoxedCharArray</KEYWORD3>
<KEYWORD3>Buffer</KEYWORD3>
<KEYWORD3>BufferedIterator</KEYWORD3>
<KEYWORD3>Enumeration</KEYWORD3>
<KEYWORD3>Fluid</KEYWORD3>
<KEYWORD3>Function</KEYWORD3>
<KEYWORD3>IScheduler</KEYWORD3>
<KEYWORD3>ImmutableMapAdaptor</KEYWORD3>
<KEYWORD3>ImmutableSetAdaptor</KEYWORD3>
<KEYWORD3>Iterable</KEYWORD3>
<KEYWORD3>List</KEYWORD3>
<KEYWORD3>Option</KEYWORD3>
<KEYWORD3>Pair</KEYWORD3>
<KEYWORD3>PartialFunction</KEYWORD3>
<KEYWORD3>Pid</KEYWORD3>
<KEYWORD3>PriorityQueue</KEYWORD3>
<KEYWORD3>PriorityQueueProxy</KEYWORD3>
<KEYWORD3>Reaction</KEYWORD3>
<KEYWORD3>Ref</KEYWORD3>
<KEYWORD3>Responder</KEYWORD3>
<KEYWORD3>RichInt</KEYWORD3>
<KEYWORD3>RichString</KEYWORD3>
<KEYWORD3>Rule</KEYWORD3>
<KEYWORD3>RuleTransformer</KEYWORD3>
<KEYWORD3>Script</KEYWORD3>
<KEYWORD3>Some</KEYWORD3>
<KEYWORD3>Stream</KEYWORD3>
<KEYWORD3>String</KEYWORD3>
<KEYWORD3>Symbol</KEYWORD3>
<KEYWORD3>TcpService</KEYWORD3>
<KEYWORD3>TcpServiceWorker</KEYWORD3>
<KEYWORD3>WorkerThread</KEYWORD3>
<!-- scala.* predefined objects -->
<KEYWORD4>Console</KEYWORD4>
<KEYWORD4>Nil</KEYWORD4>
<KEYWORD4>None</KEYWORD4>
<KEYWORD4>Predef</KEYWORD4>
<KEYWORD4>RemoteActor</KEYWORD4>
<KEYWORD4>SUnit</KEYWORD4>
<KEYWORD4>ScalaRunTime</KEYWORD4>
<KEYWORD4>Scheduler</KEYWORD4>
<KEYWORD4>TIMEOUT</KEYWORD4>
<KEYWORD4>TimerThread</KEYWORD4>
<LITERAL2>false</LITERAL2>
<LITERAL2>null</LITERAL2>
<LITERAL2>super</LITERAL2>
<LITERAL2>this</LITERAL2>
<LITERAL2>true</LITERAL2>
</KEYWORDS>
</RULES>
<RULES SET="PATTERN" DEFAULT="NULL" IGNORE_CASE="FALSE">
<IMPORT DELEGATE="PRIMARY"/>
<SEQ TYPE="OPERATOR">@</SEQ>
</RULES>
<RULES SET="SCALADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
<!-- so that @link{...} is highlighted -->
<SEQ TYPE="COMMENT3">{</SEQ>
<!-- so that *@param is highlighted -->
<SEQ TYPE="COMMENT3">*</SEQ>
<!-- Javadoc ignores tags inside <pre> -->
<SPAN TYPE="MARKUP" DELEGATE="SCALADOC_PRE">
<BEGIN><pre></BEGIN>
<END></pre></END>
</SPAN>
<!-- HTML comments -->
<SPAN TYPE="COMMENT1">
<BEGIN><!--</BEGIN>
<END>--></END>
</SPAN>
<!-- Javadoc allows this -->
<SEQ TYPE="COMMENT3"><<</SEQ>
<SEQ TYPE="COMMENT3"><=</SEQ>
<SEQ TYPE="COMMENT3">< </SEQ>
<!-- HTML tags -->
<SPAN TYPE="MARKUP" DELEGATE="xml::TAGS">
<BEGIN><</BEGIN>
<END>></END>
</SPAN>
<KEYWORDS>
<LABEL>@author</LABEL>
<LABEL>@beaninfo</LABEL>
<LABEL>@history</LABEL>
<LABEL>@bug</LABEL>
<LABEL>@review</LABEL>
<LABEL>@todo</LABEL>
<LABEL>@idea</LABEL>
<LABEL>@pre</LABEL>
<LABEL>@requires</LABEL>
<LABEL>@post</LABEL>
<LABEL>@ensures</LABEL>
<LABEL>@generates</LABEL>
<LABEL>@modifies</LABEL>
<LABEL>@invariant</LABEL>
<LABEL>@exception</LABEL>
<LABEL>@hides</LABEL>
<LABEL>@overrides</LABEL>
<LABEL>@equivalent</LABEL>
<LABEL>@bon</LABEL>
<LABEL>@access</LABEL>
<LABEL>@example</LABEL>
<LABEL>@design</LABEL>
<LABEL>@serial</LABEL>
<LABEL>@references</LABEL>
<LABEL>@uses</LABEL>
<LABEL>@guard</LABEL>
<LABEL>@values</LABEL>
<LABEL>@complexity</LABEL>
<LABEL>@deprecated</LABEL>
<LABEL>@docRoot</LABEL>
<LABEL>@exception</LABEL>
<LABEL>@link</LABEL>
<LABEL>@param</LABEL>
<LABEL>@return</LABEL>
<LABEL>@see</LABEL>
<LABEL>@serialData</LABEL>
<LABEL>@serialField</LABEL>
<LABEL>@since</LABEL>
<LABEL>@throws</LABEL>
<LABEL>@version</LABEL>
<LABEL>@spec</LABEL>
</KEYWORDS>
</RULES>
<RULES SET="SCALADOC_PRE" DEFAULT="COMMENT3" />
<!-- inside xml tag default type label -->
<!-- for attribute names ([email protected]) -->
<RULES SET="XML_TAG" DEFAULT="LABEL" IGNORE_CASE="TRUE">
<!-- string and character literals -->
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>"</BEGIN>
<END>"</END>
</SPAN>
<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
<BEGIN>'</BEGIN>
<END>'</END>
</SPAN>
<!-- scala attribute value -->
<SPAN DELEGATE="MAIN">
<BEGIN>{</BEGIN>
<END>}</END>
</SPAN>
<!-- if ">\n" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>$</SEQ_REGEXP>
<!-- if ">;" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>\s*;</SEQ_REGEXP>
<!-- if ">)" goto main rule set -->
<SEQ_REGEXP HASH_CHAR=">" DELEGATE="MAIN" TYPE="LITERAL3"
>>\s*\)</SEQ_REGEXP>
<!-- if ">" goto xml_text rule set -->
<SEQ DELEGATE="XML_TEXT" TYPE="LITERAL3">></SEQ>
</RULES>
<RULES SET="XML_TEXT" DEFAULT="COMMENT4">
<!-- scala expression -->
<SPAN DELEGATE="MAIN">
<BEGIN>{</BEGIN>
<END>}</END>
</SPAN>
<SEQ_REGEXP HASH_CHAR="<" DELEGATE="XML_COMMENT" TYPE="COMMENT2"
><!--</SEQ_REGEXP>
<!-- if "<" goto xml_tag rule set -->
<SEQ_REGEXP HASH_CHAR="<" DELEGATE="XML_TAG" TYPE="LITERAL3"
><\/?\w*</SEQ_REGEXP>
</RULES>
<RULES SET="XML_COMMENT" DEFAULT="COMMENT2">
<!-- if end_of_comment with "\n" goto main rule set -->
<SEQ_REGEXP HASH_CHAR="-" DELEGATE="MAIN" TYPE="COMMENT2"
>-->$</SEQ_REGEXP>
<!-- if end_of_comment with ";" goto main rule set -->
<SEQ_REGEXP HASH_CHAR="-" DELEGATE="MAIN" TYPE="COMMENT2"
>-->\s*;</SEQ_REGEXP>
<!-- if end_of_comment goto xml_text rule set -->
<SEQ DELEGATE="XML_TEXT" TYPE="COMMENT2">--></SEQ>
</RULES>
</MODE>