Add Erlang filetype (patch by Taylor Venable, thanks).
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5308 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
parent
c9f7afaf3a
commit
38e23095dd
@ -5,6 +5,11 @@
|
|||||||
Don't hide the menu when only the default item is available.
|
Don't hide the menu when only the default item is available.
|
||||||
* data/colorschemes, data/colorschemes/alt.conf, wscript, Makefile.am:
|
* data/colorschemes, data/colorschemes/alt.conf, wscript, Makefile.am:
|
||||||
Add alternative color scheme based on Python colors.
|
Add alternative color scheme based on Python colors.
|
||||||
|
* scintilla/LexErlang.cxx, scintilla/makefile.win32,
|
||||||
|
scintilla/KeyWords.cxx, scintilla/Makefile.am, src/highlighting.c,
|
||||||
|
src/about.c, src/filetypes.c, src/filetypes.h, THANKS,
|
||||||
|
data/filetype_extensions.conf, data/filetypes.erlang, wscript:
|
||||||
|
Add Erlang filetype (patch by Taylor Venable, thanks).
|
||||||
|
|
||||||
|
|
||||||
2010-10-18 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
|
2010-10-18 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
|
||||||
|
1
THANKS
1
THANKS
@ -85,6 +85,7 @@ Erik de Castro Lopo <mle+tools(at)mega-nerd(dot)com> - Various patches
|
|||||||
Thomas Huth <th(dot)huth(at)googlemail(dot)com> - Forth filetype
|
Thomas Huth <th(dot)huth(at)googlemail(dot)com> - Forth filetype
|
||||||
Adam Ples <adamples(at)users(dot)sourceforge(dot)net> - Group encodings in open dialog
|
Adam Ples <adamples(at)users(dot)sourceforge(dot)net> - Group encodings in open dialog
|
||||||
Mário Silva <sharelider(at)gmail(dot)com> - Lisp filetype
|
Mário Silva <sharelider(at)gmail(dot)com> - Lisp filetype
|
||||||
|
Taylor Venable <taylor(at)metasyntax(dot)net> - Erlang filetype
|
||||||
|
|
||||||
Translators:
|
Translators:
|
||||||
------------
|
------------
|
||||||
|
@ -16,6 +16,7 @@ CSS=*.css;
|
|||||||
D=*.d;*.di;
|
D=*.d;*.di;
|
||||||
Diff=*.diff;*.patch;*.rej;
|
Diff=*.diff;*.patch;*.rej;
|
||||||
Docbook=*.docbook;
|
Docbook=*.docbook;
|
||||||
|
Erlang=*.erl;
|
||||||
F77=*.f;*.for;*.ftn;*.f77;
|
F77=*.f;*.for;*.ftn;*.f77;
|
||||||
Ferite=*.fe;
|
Ferite=*.fe;
|
||||||
Forth=*.fs;*.fth;
|
Forth=*.fs;*.fth;
|
||||||
|
71
data/filetypes.erlang
Normal file
71
data/filetypes.erlang
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
[styling]
|
||||||
|
# Each of these (...) refers to the lexer state SCE_ERLANG_(...)
|
||||||
|
default=default
|
||||||
|
comment=comment
|
||||||
|
variable=default
|
||||||
|
number=number
|
||||||
|
keyword=word
|
||||||
|
string=string
|
||||||
|
operator=operator
|
||||||
|
atom=default
|
||||||
|
function_name=default,bold
|
||||||
|
character=default
|
||||||
|
macro=preprocessor
|
||||||
|
record=type
|
||||||
|
preproc=preprocessor
|
||||||
|
node_name=default
|
||||||
|
comment_function=comment
|
||||||
|
comment_module=comment
|
||||||
|
comment_doc=comment
|
||||||
|
comment_doc_macro=comment
|
||||||
|
atom_quoted=default
|
||||||
|
macro_quoted=default
|
||||||
|
record_quoted=default
|
||||||
|
node_name_quoted=default
|
||||||
|
bifs=word2
|
||||||
|
modules=default
|
||||||
|
modules_att=preprocessor
|
||||||
|
unknown=default
|
||||||
|
|
||||||
|
[keywords]
|
||||||
|
# all items must be in one line
|
||||||
|
keywords=after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor
|
||||||
|
# Erlang built-in functions (BIFs)
|
||||||
|
bifs=erlang: abs adler32 adler32_combine erlang:append_element apply atom_to_binary atom_to_list binary_to_atom binary_to_existing_atom binary_to_list bitstring_to_list binary_to_term bit_size erlang:bump_reductions byte_size erlang:cancel_timer check_process_code concat_binary crc32 crc32_combine date decode_packet delete_module erlang:demonitor disconnect_node erlang:display element erase erlang:error exit float float_to_list erlang:fun_info erlang:fun_to_list erlang:function_exported garbage_collect get erlang:get_cookie get_keys erlang:get_stacktrace group_leader halt erlang:hash hd erlang:hibernate integer_to_list erlang:integer_to_list iolist_to_binary iolist_size is_alive is_atom is_binary is_bitstring is_boolean erlang:is_builtin is_float is_function is_integer is_list is_number is_pid is_port is_process_alive is_record is_reference is_tuple length link list_to_atom list_to_binary list_to_bitstring list_to_existing_atom list_to_float list_to_integer erlang:list_to_integer list_to_pid list_to_tuple load_module erlang:load_nif erlang:loaded erlang:localtime erlang:localtime_to_universaltime make_ref erlang:make_tuple erlang:max erlang:md5 erlang:md5_final erlang:md5_init erlang:md5_update erlang:memory erlang:min module_loaded erlang:monitor monitor_node node nodes now open_port erlang:phash erlang:phash2 pid_to_list port_close port_command erlang:port_command port_connect port_control erlang:port_call erlang:port_info erlang:port_to_list erlang:ports pre_loaded erlang:process_display process_flag process_info processes purge_module put erlang:raise erlang:read_timer erlang:ref_to_list register registered erlang:resume_process round self erlang:send erlang:send_after erlang:send_nosuspend erlang:set_cookie setelement size spawn spawn_link spawn_monitor spawn_opt split_binary erlang:start_timer statistics erlang:suspend_process erlang:system_flag erlang:system_info erlang:system_monitor erlang:system_profile term_to_binary throw time tl erlang:trace erlang:trace_delivered erlang:trace_info erlang:trace_pattern trunc tuple_size tuple_to_list erlang:universaltime erlang:universaltime_to_localtime unlink unregister whereis erlang:yield
|
||||||
|
# Erlang preprocessor instructions
|
||||||
|
preproc=-define -else -endif -ifdef -ifndef -include -include_lib -undef
|
||||||
|
# Erlang module attributes
|
||||||
|
module=-behavior -behaviour -compile -created -created_by -export -file -import -module -modified -modified_by -record -revision -spec -type -vsn
|
||||||
|
# Erlang documentation helpers
|
||||||
|
doc=@author @clear @copyright @deprecated @doc @docfile @end @equiv @headerfile @hidden @private @reference @see @since @spec @throws @title @todo @TODO @type @version
|
||||||
|
# Erlang documentation macros
|
||||||
|
doc_macro=@date @docRoot @link @module @package @section @time @type @version
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
# default extension used when saving files
|
||||||
|
extension=erl
|
||||||
|
|
||||||
|
# the following characters are these which a "word" can contains, see documentation
|
||||||
|
#wordchars=_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
|
||||||
|
|
||||||
|
# if only single comment char is supported like # in this file, leave comment_close blank
|
||||||
|
comment_open=%
|
||||||
|
comment_close=
|
||||||
|
|
||||||
|
# set to false if a comment character/string should start at column 0 of a line, true uses any
|
||||||
|
# indentation of the line, e.g. setting to true causes the following on pressing CTRL+d
|
||||||
|
#command_example();
|
||||||
|
# setting to false would generate this
|
||||||
|
# command_example();
|
||||||
|
# This setting works only for single line comments
|
||||||
|
comment_use_indent=true
|
||||||
|
|
||||||
|
# context action command (please see Geany's main documentation for details)
|
||||||
|
context_action_cmd=
|
||||||
|
|
||||||
|
[build_settings]
|
||||||
|
# %f will be replaced by the complete filename
|
||||||
|
# %e will be replaced by the filename without extension
|
||||||
|
# (use only one of it at one time)
|
||||||
|
compiler=erlc "%f"
|
||||||
|
run_cmd=erl "%f"
|
@ -337,6 +337,7 @@ int Scintilla_LinkLexers() {
|
|||||||
LINK_LEXER(lmCss);
|
LINK_LEXER(lmCss);
|
||||||
LINK_LEXER(lmD);
|
LINK_LEXER(lmD);
|
||||||
LINK_LEXER(lmDiff);
|
LINK_LEXER(lmDiff);
|
||||||
|
LINK_LEXER(lmErlang);
|
||||||
LINK_LEXER(lmF77);
|
LINK_LEXER(lmF77);
|
||||||
LINK_LEXER(lmForth);
|
LINK_LEXER(lmForth);
|
||||||
LINK_LEXER(lmFortran);
|
LINK_LEXER(lmFortran);
|
||||||
|
619
scintilla/LexErlang.cxx
Normal file
619
scintilla/LexErlang.cxx
Normal file
@ -0,0 +1,619 @@
|
|||||||
|
// Scintilla source code edit control
|
||||||
|
// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
|
||||||
|
// The License.txt file describes the conditions under which this software may be distributed.
|
||||||
|
/** @file LexErlang.cxx
|
||||||
|
** Lexer for Erlang.
|
||||||
|
** Enhanced by Etienne 'Lenain' Girondel (lenaing@gmail.com)
|
||||||
|
** Originally wrote by Peter-Henry Mander,
|
||||||
|
** based on Matlab lexer by José Fonseca.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "Platform.h"
|
||||||
|
#include "PropSet.h"
|
||||||
|
#include "Accessor.h"
|
||||||
|
#include "StyleContext.h"
|
||||||
|
#include "KeyWords.h"
|
||||||
|
#include "Scintilla.h"
|
||||||
|
#include "SciLexer.h"
|
||||||
|
|
||||||
|
#ifdef SCI_NAMESPACE
|
||||||
|
using namespace Scintilla;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int is_radix(int radix, int ch) {
|
||||||
|
int digit;
|
||||||
|
|
||||||
|
if (36 < radix || 2 > radix)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (isdigit(ch)) {
|
||||||
|
digit = ch - '0';
|
||||||
|
} else if (isalnum(ch)) {
|
||||||
|
digit = toupper(ch) - 'A' + 10;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (digit < radix);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
STATE_NULL,
|
||||||
|
COMMENT,
|
||||||
|
COMMENT_FUNCTION,
|
||||||
|
COMMENT_MODULE,
|
||||||
|
COMMENT_DOC,
|
||||||
|
COMMENT_DOC_MACRO,
|
||||||
|
ATOM_UNQUOTED,
|
||||||
|
ATOM_QUOTED,
|
||||||
|
NODE_NAME_UNQUOTED,
|
||||||
|
NODE_NAME_QUOTED,
|
||||||
|
MACRO_START,
|
||||||
|
MACRO_UNQUOTED,
|
||||||
|
MACRO_QUOTED,
|
||||||
|
RECORD_START,
|
||||||
|
RECORD_UNQUOTED,
|
||||||
|
RECORD_QUOTED,
|
||||||
|
NUMERAL_START,
|
||||||
|
NUMERAL_BASE_VALUE,
|
||||||
|
NUMERAL_FLOAT,
|
||||||
|
NUMERAL_EXPONENT,
|
||||||
|
PREPROCESSOR
|
||||||
|
} atom_parse_state_t;
|
||||||
|
|
||||||
|
static inline bool IsAWordChar(const int ch) {
|
||||||
|
return (ch < 0x80) && (ch != ' ') && (isalnum(ch) || ch == '_');
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ColouriseErlangDoc(unsigned int startPos, int length, int initStyle,
|
||||||
|
WordList *keywordlists[], Accessor &styler) {
|
||||||
|
|
||||||
|
StyleContext sc(startPos, length, initStyle, styler);
|
||||||
|
WordList &reservedWords = *keywordlists[0];
|
||||||
|
WordList &erlangBIFs = *keywordlists[1];
|
||||||
|
WordList &erlangPreproc = *keywordlists[2];
|
||||||
|
WordList &erlangModulesAtt = *keywordlists[3];
|
||||||
|
WordList &erlangDoc = *keywordlists[4];
|
||||||
|
WordList &erlangDocMacro = *keywordlists[5];
|
||||||
|
int radix_digits = 0;
|
||||||
|
int exponent_digits = 0;
|
||||||
|
atom_parse_state_t parse_state = STATE_NULL;
|
||||||
|
atom_parse_state_t old_parse_state = STATE_NULL;
|
||||||
|
bool to_late_to_comment = false;
|
||||||
|
char cur[100];
|
||||||
|
int old_style = SCE_ERLANG_DEFAULT;
|
||||||
|
|
||||||
|
styler.StartAt(startPos);
|
||||||
|
|
||||||
|
for (; sc.More(); sc.Forward()) {
|
||||||
|
int style = SCE_ERLANG_DEFAULT;
|
||||||
|
if (STATE_NULL != parse_state) {
|
||||||
|
|
||||||
|
switch (parse_state) {
|
||||||
|
|
||||||
|
case STATE_NULL : sc.SetState(SCE_ERLANG_DEFAULT); break;
|
||||||
|
|
||||||
|
/* COMMENTS ------------------------------------------------------*/
|
||||||
|
case COMMENT : {
|
||||||
|
if (sc.ch != '%') {
|
||||||
|
to_late_to_comment = true;
|
||||||
|
} else if (!to_late_to_comment && sc.ch == '%') {
|
||||||
|
// Switch to comment level 2 (Function)
|
||||||
|
sc.ChangeState(SCE_ERLANG_COMMENT_FUNCTION);
|
||||||
|
old_style = SCE_ERLANG_COMMENT_FUNCTION;
|
||||||
|
parse_state = COMMENT_FUNCTION;
|
||||||
|
sc.Forward();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// V--- Falling through!
|
||||||
|
case COMMENT_FUNCTION : {
|
||||||
|
if (sc.ch != '%') {
|
||||||
|
to_late_to_comment = true;
|
||||||
|
} else if (!to_late_to_comment && sc.ch == '%') {
|
||||||
|
// Switch to comment level 3 (Module)
|
||||||
|
sc.ChangeState(SCE_ERLANG_COMMENT_MODULE);
|
||||||
|
old_style = SCE_ERLANG_COMMENT_MODULE;
|
||||||
|
parse_state = COMMENT_MODULE;
|
||||||
|
sc.Forward();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// V--- Falling through!
|
||||||
|
case COMMENT_MODULE : {
|
||||||
|
if (parse_state != COMMENT) {
|
||||||
|
// Search for comment documentation
|
||||||
|
if (sc.chNext == '@') {
|
||||||
|
old_parse_state = parse_state;
|
||||||
|
parse_state = ('{' == sc.ch)
|
||||||
|
? COMMENT_DOC_MACRO
|
||||||
|
: COMMENT_DOC;
|
||||||
|
sc.ForwardSetState(sc.state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All comments types fall here.
|
||||||
|
if (sc.atLineEnd) {
|
||||||
|
to_late_to_comment = false;
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case COMMENT_DOC :
|
||||||
|
// V--- Falling through!
|
||||||
|
case COMMENT_DOC_MACRO : {
|
||||||
|
|
||||||
|
if (!isalnum(sc.ch)) {
|
||||||
|
// Try to match documentation comment
|
||||||
|
sc.GetCurrent(cur, sizeof(cur));
|
||||||
|
|
||||||
|
if (parse_state == COMMENT_DOC_MACRO
|
||||||
|
&& erlangDocMacro.InList(cur)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_COMMENT_DOC_MACRO);
|
||||||
|
while (sc.ch != '}' && !sc.atLineEnd)
|
||||||
|
sc.Forward();
|
||||||
|
} else if (erlangDoc.InList(cur)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_COMMENT_DOC);
|
||||||
|
} else {
|
||||||
|
sc.ChangeState(old_style);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch back to old state
|
||||||
|
sc.SetState(old_style);
|
||||||
|
parse_state = old_parse_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sc.atLineEnd) {
|
||||||
|
to_late_to_comment = false;
|
||||||
|
sc.ChangeState(old_style);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Atoms ---------------------------------------------------------*/
|
||||||
|
case ATOM_UNQUOTED : {
|
||||||
|
if ('@' == sc.ch){
|
||||||
|
parse_state = NODE_NAME_UNQUOTED;
|
||||||
|
} else if (sc.ch == ':') {
|
||||||
|
// Searching for module name
|
||||||
|
if (sc.chNext == ' ') {
|
||||||
|
// error
|
||||||
|
sc.ChangeState(SCE_ERLANG_UNKNOWN);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
} else {
|
||||||
|
sc.Forward();
|
||||||
|
if (isalnum(sc.ch)) {
|
||||||
|
sc.GetCurrent(cur, sizeof(cur));
|
||||||
|
sc.ChangeState(SCE_ERLANG_MODULES);
|
||||||
|
sc.SetState(SCE_ERLANG_MODULES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!IsAWordChar(sc.ch)) {
|
||||||
|
|
||||||
|
sc.GetCurrent(cur, sizeof(cur));
|
||||||
|
if (reservedWords.InList(cur)) {
|
||||||
|
style = SCE_ERLANG_KEYWORD;
|
||||||
|
} else if (erlangBIFs.InList(cur)
|
||||||
|
&& strcmp(cur,"erlang:")){
|
||||||
|
style = SCE_ERLANG_BIFS;
|
||||||
|
} else if (sc.ch == '(' || '/' == sc.ch){
|
||||||
|
style = SCE_ERLANG_FUNCTION_NAME;
|
||||||
|
} else {
|
||||||
|
style = SCE_ERLANG_ATOM;
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.ChangeState(style);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case ATOM_QUOTED : {
|
||||||
|
if ( '@' == sc.ch ){
|
||||||
|
parse_state = NODE_NAME_QUOTED;
|
||||||
|
} else if ('\'' == sc.ch && '\\' != sc.chPrev) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_ATOM);
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Node names ----------------------------------------------------*/
|
||||||
|
case NODE_NAME_UNQUOTED : {
|
||||||
|
if ('@' == sc.ch) {
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
} else if (!IsAWordChar(sc.ch)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_NODE_NAME);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case NODE_NAME_QUOTED : {
|
||||||
|
if ('@' == sc.ch) {
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
} else if ('\'' == sc.ch && '\\' != sc.chPrev) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_NODE_NAME_QUOTED);
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Records -------------------------------------------------------*/
|
||||||
|
case RECORD_START : {
|
||||||
|
if ('\'' == sc.ch) {
|
||||||
|
parse_state = RECORD_QUOTED;
|
||||||
|
} else if (isalpha(sc.ch) && islower(sc.ch)) {
|
||||||
|
parse_state = RECORD_UNQUOTED;
|
||||||
|
} else { // error
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case RECORD_UNQUOTED : {
|
||||||
|
if (!IsAWordChar(sc.ch)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_RECORD);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case RECORD_QUOTED : {
|
||||||
|
if ('\'' == sc.ch && '\\' != sc.chPrev) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_RECORD_QUOTED);
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Macros --------------------------------------------------------*/
|
||||||
|
case MACRO_START : {
|
||||||
|
if ('\'' == sc.ch) {
|
||||||
|
parse_state = MACRO_QUOTED;
|
||||||
|
} else if (isalpha(sc.ch)) {
|
||||||
|
parse_state = MACRO_UNQUOTED;
|
||||||
|
} else { // error
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MACRO_UNQUOTED : {
|
||||||
|
if (!IsAWordChar(sc.ch)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_MACRO);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MACRO_QUOTED : {
|
||||||
|
if ('\'' == sc.ch && '\\' != sc.chPrev) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_MACRO_QUOTED);
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Numerics ------------------------------------------------------*/
|
||||||
|
/* Simple integer */
|
||||||
|
case NUMERAL_START : {
|
||||||
|
if (isdigit(sc.ch)) {
|
||||||
|
radix_digits *= 10;
|
||||||
|
radix_digits += sc.ch - '0'; // Assuming ASCII here!
|
||||||
|
} else if ('#' == sc.ch) {
|
||||||
|
if (2 > radix_digits || 36 < radix_digits) {
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
} else {
|
||||||
|
parse_state = NUMERAL_BASE_VALUE;
|
||||||
|
}
|
||||||
|
} else if ('.' == sc.ch && isdigit(sc.chNext)) {
|
||||||
|
radix_digits = 0;
|
||||||
|
parse_state = NUMERAL_FLOAT;
|
||||||
|
} else if ('e' == sc.ch || 'E' == sc.ch) {
|
||||||
|
exponent_digits = 0;
|
||||||
|
parse_state = NUMERAL_EXPONENT;
|
||||||
|
} else {
|
||||||
|
radix_digits = 0;
|
||||||
|
sc.ChangeState(SCE_ERLANG_NUMBER);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* Integer in other base than 10 (x#yyy) */
|
||||||
|
case NUMERAL_BASE_VALUE : {
|
||||||
|
if (!is_radix(radix_digits,sc.ch)) {
|
||||||
|
radix_digits = 0;
|
||||||
|
|
||||||
|
if (!isalnum(sc.ch))
|
||||||
|
sc.ChangeState(SCE_ERLANG_NUMBER);
|
||||||
|
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* Float (x.yyy) */
|
||||||
|
case NUMERAL_FLOAT : {
|
||||||
|
if ('e' == sc.ch || 'E' == sc.ch) {
|
||||||
|
exponent_digits = 0;
|
||||||
|
parse_state = NUMERAL_EXPONENT;
|
||||||
|
} else if (!isdigit(sc.ch)) {
|
||||||
|
sc.ChangeState(SCE_ERLANG_NUMBER);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* Exponent, either integer or float (xEyy, x.yyEzzz) */
|
||||||
|
case NUMERAL_EXPONENT : {
|
||||||
|
if (('-' == sc.ch || '+' == sc.ch)
|
||||||
|
&& (isdigit(sc.chNext))) {
|
||||||
|
sc.Forward();
|
||||||
|
} else if (!isdigit(sc.ch)) {
|
||||||
|
if (0 < exponent_digits)
|
||||||
|
sc.ChangeState(SCE_ERLANG_NUMBER);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
} else {
|
||||||
|
++exponent_digits;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- */
|
||||||
|
/* Preprocessor --------------------------------------------------*/
|
||||||
|
case PREPROCESSOR : {
|
||||||
|
if (!IsAWordChar(sc.ch)) {
|
||||||
|
|
||||||
|
sc.GetCurrent(cur, sizeof(cur));
|
||||||
|
if (erlangPreproc.InList(cur)) {
|
||||||
|
style = SCE_ERLANG_PREPROC;
|
||||||
|
} else if (erlangModulesAtt.InList(cur)) {
|
||||||
|
style = SCE_ERLANG_MODULES_ATT;
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.ChangeState(style);
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
parse_state = STATE_NULL;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* End of : STATE_NULL != parse_state */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (sc.state) {
|
||||||
|
case SCE_ERLANG_VARIABLE : {
|
||||||
|
if (!IsAWordChar(sc.ch))
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} break;
|
||||||
|
case SCE_ERLANG_STRING : {
|
||||||
|
if (sc.ch == '\"' && sc.chPrev != '\\')
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} break;
|
||||||
|
case SCE_ERLANG_COMMENT : {
|
||||||
|
if (sc.atLineEnd)
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} break;
|
||||||
|
case SCE_ERLANG_CHARACTER : {
|
||||||
|
if (sc.chPrev == '\\') {
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} else if (sc.ch != '\\') {
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case SCE_ERLANG_OPERATOR : {
|
||||||
|
if (sc.chPrev == '.') {
|
||||||
|
if (sc.ch == '*' || sc.ch == '/' || sc.ch == '\\'
|
||||||
|
|| sc.ch == '^') {
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} else if (sc.ch == '\'') {
|
||||||
|
sc.ForwardSetState(SCE_ERLANG_DEFAULT);
|
||||||
|
} else {
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sc.SetState(SCE_ERLANG_DEFAULT);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sc.state == SCE_ERLANG_DEFAULT) {
|
||||||
|
bool no_new_state = false;
|
||||||
|
|
||||||
|
switch (sc.ch) {
|
||||||
|
case '\"' : sc.SetState(SCE_ERLANG_STRING); break;
|
||||||
|
case '$' : sc.SetState(SCE_ERLANG_CHARACTER); break;
|
||||||
|
case '%' : {
|
||||||
|
parse_state = COMMENT;
|
||||||
|
sc.SetState(SCE_ERLANG_COMMENT);
|
||||||
|
} break;
|
||||||
|
case '#' : {
|
||||||
|
parse_state = RECORD_START;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} break;
|
||||||
|
case '?' : {
|
||||||
|
parse_state = MACRO_START;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} break;
|
||||||
|
case '\'' : {
|
||||||
|
parse_state = ATOM_QUOTED;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} break;
|
||||||
|
case '+' :
|
||||||
|
case '-' : {
|
||||||
|
if (IsADigit(sc.chNext)) {
|
||||||
|
parse_state = NUMERAL_START;
|
||||||
|
radix_digits = 0;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} else if (sc.ch != '+') {
|
||||||
|
parse_state = PREPROCESSOR;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
default : no_new_state = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (no_new_state) {
|
||||||
|
if (isdigit(sc.ch)) {
|
||||||
|
parse_state = NUMERAL_START;
|
||||||
|
radix_digits = sc.ch - '0';
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} else if (isupper(sc.ch) || '_' == sc.ch) {
|
||||||
|
sc.SetState(SCE_ERLANG_VARIABLE);
|
||||||
|
} else if (isalpha(sc.ch)) {
|
||||||
|
parse_state = ATOM_UNQUOTED;
|
||||||
|
sc.SetState(SCE_ERLANG_UNKNOWN);
|
||||||
|
} else if (isoperator(static_cast<char>(sc.ch))
|
||||||
|
|| sc.ch == '\\') {
|
||||||
|
sc.SetState(SCE_ERLANG_OPERATOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
sc.Complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ClassifyErlangFoldPoint(
|
||||||
|
Accessor &styler,
|
||||||
|
int styleNext,
|
||||||
|
int keyword_start
|
||||||
|
) {
|
||||||
|
int lev = 0;
|
||||||
|
if (styler.Match(keyword_start,"case")
|
||||||
|
|| (
|
||||||
|
styler.Match(keyword_start,"fun")
|
||||||
|
&& (SCE_ERLANG_FUNCTION_NAME != styleNext)
|
||||||
|
)
|
||||||
|
|| styler.Match(keyword_start,"if")
|
||||||
|
|| styler.Match(keyword_start,"query")
|
||||||
|
|| styler.Match(keyword_start,"receive")
|
||||||
|
) {
|
||||||
|
++lev;
|
||||||
|
} else if (styler.Match(keyword_start,"end")) {
|
||||||
|
--lev;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lev;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FoldErlangDoc(
|
||||||
|
unsigned int startPos, int length, int initStyle,
|
||||||
|
WordList** /*keywordlists*/, Accessor &styler
|
||||||
|
) {
|
||||||
|
unsigned int endPos = startPos + length;
|
||||||
|
int currentLine = styler.GetLine(startPos);
|
||||||
|
int lev;
|
||||||
|
int previousLevel = styler.LevelAt(currentLine) & SC_FOLDLEVELNUMBERMASK;
|
||||||
|
int currentLevel = previousLevel;
|
||||||
|
int styleNext = styler.StyleAt(startPos);
|
||||||
|
int style = initStyle;
|
||||||
|
int stylePrev;
|
||||||
|
int keyword_start = 0;
|
||||||
|
char ch;
|
||||||
|
char chNext = styler.SafeGetCharAt(startPos);
|
||||||
|
bool atEOL;
|
||||||
|
|
||||||
|
for (unsigned int i = startPos; i < endPos; i++) {
|
||||||
|
ch = chNext;
|
||||||
|
chNext = styler.SafeGetCharAt(i + 1);
|
||||||
|
|
||||||
|
// Get styles
|
||||||
|
stylePrev = style;
|
||||||
|
style = styleNext;
|
||||||
|
styleNext = styler.StyleAt(i + 1);
|
||||||
|
atEOL = ((ch == '\r') && (chNext != '\n')) || (ch == '\n');
|
||||||
|
|
||||||
|
if (stylePrev != SCE_ERLANG_KEYWORD
|
||||||
|
&& style == SCE_ERLANG_KEYWORD) {
|
||||||
|
keyword_start = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fold on keywords
|
||||||
|
if (stylePrev == SCE_ERLANG_KEYWORD
|
||||||
|
&& style != SCE_ERLANG_KEYWORD
|
||||||
|
&& style != SCE_ERLANG_ATOM
|
||||||
|
) {
|
||||||
|
currentLevel += ClassifyErlangFoldPoint(styler,
|
||||||
|
styleNext,
|
||||||
|
keyword_start);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fold on comments
|
||||||
|
if (style == SCE_ERLANG_COMMENT
|
||||||
|
|| style == SCE_ERLANG_COMMENT_MODULE
|
||||||
|
|| style == SCE_ERLANG_COMMENT_FUNCTION) {
|
||||||
|
|
||||||
|
if (ch == '%' && chNext == '{') {
|
||||||
|
currentLevel++;
|
||||||
|
} else if (ch == '%' && chNext == '}') {
|
||||||
|
currentLevel--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fold on braces
|
||||||
|
if (style == SCE_ERLANG_OPERATOR) {
|
||||||
|
if (ch == '{' || ch == '(' || ch == '[') {
|
||||||
|
currentLevel++;
|
||||||
|
} else if (ch == '}' || ch == ')' || ch == ']') {
|
||||||
|
currentLevel--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (atEOL) {
|
||||||
|
lev = previousLevel;
|
||||||
|
|
||||||
|
if (currentLevel > previousLevel)
|
||||||
|
lev |= SC_FOLDLEVELHEADERFLAG;
|
||||||
|
|
||||||
|
if (lev != styler.LevelAt(currentLine))
|
||||||
|
styler.SetLevel(currentLine, lev);
|
||||||
|
|
||||||
|
currentLine++;
|
||||||
|
previousLevel = currentLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill in the real level of the next line, keeping the current flags as they will be filled in later
|
||||||
|
styler.SetLevel(currentLine,
|
||||||
|
previousLevel
|
||||||
|
| (styler.LevelAt(currentLine) & ~SC_FOLDLEVELNUMBERMASK));
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char * const erlangWordListDesc[] = {
|
||||||
|
"Erlang Reserved words",
|
||||||
|
"Erlang BIFs",
|
||||||
|
"Erlang Preprocessor",
|
||||||
|
"Erlang Module Attributes",
|
||||||
|
"Erlang Documentation",
|
||||||
|
"Erlang Documentation Macro",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
LexerModule lmErlang(
|
||||||
|
SCLEX_ERLANG,
|
||||||
|
ColouriseErlangDoc,
|
||||||
|
"erlang",
|
||||||
|
FoldErlangDoc,
|
||||||
|
erlangWordListDesc);
|
@ -15,6 +15,7 @@ LexCaml.cxx \
|
|||||||
LexCmake.cxx \
|
LexCmake.cxx \
|
||||||
LexCSS.cxx \
|
LexCSS.cxx \
|
||||||
LexD.cxx \
|
LexD.cxx \
|
||||||
|
LexErlang.cxx \
|
||||||
LexForth.cxx \
|
LexForth.cxx \
|
||||||
LexFortran.cxx \
|
LexFortran.cxx \
|
||||||
LexHaskell.cxx \
|
LexHaskell.cxx \
|
||||||
|
@ -62,7 +62,7 @@ MARSHALLER=scintilla-marshal.o
|
|||||||
LEXOBJS=\
|
LEXOBJS=\
|
||||||
LexAda.o LexBash.o LexAsm.o LexCSS.o LexCPP.o LexHTML.o LexOthers.o LexPascal.o \
|
LexAda.o LexBash.o LexAsm.o LexCSS.o LexCPP.o LexHTML.o LexOthers.o LexPascal.o \
|
||||||
LexPerl.o LexPython.o LexSQL.o LexCaml.o LexTCL.o LexTxt2tags.o LexRuby.o \
|
LexPerl.o LexPython.o LexSQL.o LexCaml.o LexTCL.o LexTxt2tags.o LexRuby.o \
|
||||||
LexForth.o LexFortran.o LexVHDL.o LexVerilog.o \
|
LexErlang.o LexForth.o LexFortran.o LexVHDL.o LexVerilog.o \
|
||||||
LexMarkdown.o LexMatlab.o \
|
LexMarkdown.o LexMatlab.o \
|
||||||
LexD.o LexLisp.o LexLua.o LexHaskell.o LexBasic.o LexR.o LexYAML.o LexCmake.o LexNsis.o
|
LexD.o LexLisp.o LexLua.o LexHaskell.o LexBasic.o LexR.o LexYAML.o LexCmake.o LexNsis.o
|
||||||
#--Autogenerated -- end of automatically generated section
|
#--Autogenerated -- end of automatically generated section
|
||||||
|
@ -98,7 +98,8 @@ static const gchar *contributors =
|
|||||||
"Mário Silva, Marko Peric, Matti Mårds, "
|
"Mário Silva, Marko Peric, Matti Mårds, "
|
||||||
"Moritz Barsnick, Ondrej Donek, Peter Strand, Philipp Gildein, Pierre Joye, Rob van der Linde, "
|
"Moritz Barsnick, Ondrej Donek, Peter Strand, Philipp Gildein, Pierre Joye, Rob van der Linde, "
|
||||||
"Robert McGinley, Roland Baudin, Ross McKay, S Jagannathan, Saleem Abdulrasool, "
|
"Robert McGinley, Roland Baudin, Ross McKay, S Jagannathan, Saleem Abdulrasool, "
|
||||||
"Sebastian Kraft, Shiv, Slava Semushin, Stefan Oltmanns, Tamim, Thomas Huth, Thomas Martitz, Tomás Vírseda, "
|
"Sebastian Kraft, Shiv, Slava Semushin, Stefan Oltmanns, Tamim, Taylor Venable, "
|
||||||
|
"Thomas Huth, Thomas Martitz, Tomás Vírseda, "
|
||||||
"Tyler Mulligan, Walery Studennikov, Yura Siamashka";
|
"Tyler Mulligan, Walery Studennikov, Yura Siamashka";
|
||||||
|
|
||||||
|
|
||||||
|
@ -517,6 +517,17 @@ static void init_builtin_filetypes(void)
|
|||||||
ft->comment_close = NULL;
|
ft->comment_close = NULL;
|
||||||
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
|
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
|
||||||
|
|
||||||
|
#define ERLANG
|
||||||
|
ft = filetypes[GEANY_FILETYPES_ERLANG];
|
||||||
|
ft->lang = -2;
|
||||||
|
ft->name = g_strdup("Erlang");
|
||||||
|
filetype_make_title(ft, TITLE_SOURCE_FILE);
|
||||||
|
ft->extension = g_strdup("erl");
|
||||||
|
ft->pattern = utils_strv_new("*.erl", NULL);
|
||||||
|
ft->comment_open = g_strdup("%");
|
||||||
|
ft->comment_close = NULL;
|
||||||
|
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
|
||||||
|
|
||||||
#define CONF
|
#define CONF
|
||||||
ft = filetypes[GEANY_FILETYPES_CONF];
|
ft = filetypes[GEANY_FILETYPES_CONF];
|
||||||
ft->lang = 10;
|
ft->lang = 10;
|
||||||
|
@ -87,6 +87,7 @@ typedef enum
|
|||||||
GEANY_FILETYPES_VERILOG,
|
GEANY_FILETYPES_VERILOG,
|
||||||
GEANY_FILETYPES_FORTH,
|
GEANY_FILETYPES_FORTH,
|
||||||
GEANY_FILETYPES_LISP,
|
GEANY_FILETYPES_LISP,
|
||||||
|
GEANY_FILETYPES_ERLANG,
|
||||||
/* ^ append items here */
|
/* ^ append items here */
|
||||||
GEANY_MAX_BUILT_IN_FILETYPES /* Don't use this, use filetypes_array->len instead */
|
GEANY_MAX_BUILT_IN_FILETYPES /* Don't use this, use filetypes_array->len instead */
|
||||||
}
|
}
|
||||||
|
@ -1137,6 +1137,88 @@ static void styleset_lisp(ScintillaObject *sci, gint ft_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void styleset_erlang_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
|
||||||
|
{
|
||||||
|
new_styleset(ft_id, 26);
|
||||||
|
get_keyfile_style(config, config_home, "default", &style_sets[ft_id].styling[0]);
|
||||||
|
get_keyfile_style(config, config_home, "comment", &style_sets[ft_id].styling[1]);
|
||||||
|
get_keyfile_style(config, config_home, "variable", &style_sets[ft_id].styling[2]);
|
||||||
|
get_keyfile_style(config, config_home, "number", &style_sets[ft_id].styling[3]);
|
||||||
|
get_keyfile_style(config, config_home, "keyword", &style_sets[ft_id].styling[4]);
|
||||||
|
get_keyfile_style(config, config_home, "string", &style_sets[ft_id].styling[5]);
|
||||||
|
get_keyfile_style(config, config_home, "operator", &style_sets[ft_id].styling[6]);
|
||||||
|
get_keyfile_style(config, config_home, "atom", &style_sets[ft_id].styling[7]);
|
||||||
|
get_keyfile_style(config, config_home, "function_name", &style_sets[ft_id].styling[8]);
|
||||||
|
get_keyfile_style(config, config_home, "character", &style_sets[ft_id].styling[9]);
|
||||||
|
get_keyfile_style(config, config_home, "macro", &style_sets[ft_id].styling[10]);
|
||||||
|
get_keyfile_style(config, config_home, "record", &style_sets[ft_id].styling[11]);
|
||||||
|
get_keyfile_style(config, config_home, "preproc", &style_sets[ft_id].styling[12]);
|
||||||
|
get_keyfile_style(config, config_home, "node_name", &style_sets[ft_id].styling[13]);
|
||||||
|
get_keyfile_style(config, config_home, "comment_function", &style_sets[ft_id].styling[14]);
|
||||||
|
get_keyfile_style(config, config_home, "comment_module", &style_sets[ft_id].styling[15]);
|
||||||
|
get_keyfile_style(config, config_home, "comment_doc", &style_sets[ft_id].styling[16]);
|
||||||
|
get_keyfile_style(config, config_home, "comment_doc_macro", &style_sets[ft_id].styling[17]);
|
||||||
|
get_keyfile_style(config, config_home, "atom_quoted", &style_sets[ft_id].styling[18]);
|
||||||
|
get_keyfile_style(config, config_home, "macro_quoted", &style_sets[ft_id].styling[19]);
|
||||||
|
get_keyfile_style(config, config_home, "record_quoted", &style_sets[ft_id].styling[20]);
|
||||||
|
get_keyfile_style(config, config_home, "node_name_quoted", &style_sets[ft_id].styling[21]);
|
||||||
|
get_keyfile_style(config, config_home, "bifs", &style_sets[ft_id].styling[22]);
|
||||||
|
get_keyfile_style(config, config_home, "modules", &style_sets[ft_id].styling[23]);
|
||||||
|
get_keyfile_style(config, config_home, "modules_att", &style_sets[ft_id].styling[24]);
|
||||||
|
get_keyfile_style(config, config_home, "unknown", &style_sets[ft_id].styling[25]);
|
||||||
|
|
||||||
|
style_sets[ft_id].keywords = g_new(gchar*, 6);
|
||||||
|
get_keyfile_keywords(config, config_home, "keywords", ft_id, 0);
|
||||||
|
get_keyfile_keywords(config, config_home, "bifs", ft_id, 1);
|
||||||
|
get_keyfile_keywords(config, config_home, "preproc", ft_id, 2);
|
||||||
|
get_keyfile_keywords(config, config_home, "module", ft_id, 3);
|
||||||
|
get_keyfile_keywords(config, config_home, "doc", ft_id, 4);
|
||||||
|
get_keyfile_keywords(config, config_home, "doc_macro", ft_id, 5);
|
||||||
|
style_sets[ft_id].keywords[6] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void styleset_erlang(ScintillaObject *sci, gint ft_id)
|
||||||
|
{
|
||||||
|
apply_filetype_properties(sci, SCLEX_ERLANG, ft_id);
|
||||||
|
|
||||||
|
sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
|
||||||
|
sci_set_keywords(sci, 1, style_sets[ft_id].keywords[1]);
|
||||||
|
sci_set_keywords(sci, 2, style_sets[ft_id].keywords[2]);
|
||||||
|
sci_set_keywords(sci, 3, style_sets[ft_id].keywords[3]);
|
||||||
|
sci_set_keywords(sci, 4, style_sets[ft_id].keywords[4]);
|
||||||
|
sci_set_keywords(sci, 5, style_sets[ft_id].keywords[5]);
|
||||||
|
|
||||||
|
set_sci_style(sci, STYLE_DEFAULT, ft_id, 0);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_DEFAULT, ft_id, 0);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_COMMENT, ft_id, 1);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_VARIABLE, ft_id, 2);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_NUMBER, ft_id, 3);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_KEYWORD, ft_id, 4);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_STRING, ft_id, 5);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_OPERATOR, ft_id, 6);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_ATOM, ft_id, 7);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_FUNCTION_NAME, ft_id, 8);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_CHARACTER, ft_id, 9);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_MACRO, ft_id, 10);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_RECORD, ft_id, 11);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_PREPROC, ft_id, 12);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_NODE_NAME, ft_id, 13);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_COMMENT_FUNCTION, ft_id, 14);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_COMMENT_MODULE, ft_id, 15);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_COMMENT_DOC, ft_id, 16);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_COMMENT_DOC_MACRO, ft_id, 17);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_ATOM_QUOTED, ft_id, 18);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_MACRO_QUOTED, ft_id, 19);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_RECORD_QUOTED, ft_id, 20);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_NODE_NAME_QUOTED, ft_id, 21);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_BIFS, ft_id, 22);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_MODULES, ft_id, 23);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_MODULES_ATT, ft_id, 24);
|
||||||
|
set_sci_style(sci, SCE_ERLANG_UNKNOWN, ft_id, 25);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void styleset_latex_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
|
static void styleset_latex_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
|
||||||
{
|
{
|
||||||
new_styleset(ft_id, 5);
|
new_styleset(ft_id, 5);
|
||||||
@ -3326,6 +3408,7 @@ void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *con
|
|||||||
init_styleset_case(GEANY_FILETYPES_D, styleset_d_init);
|
init_styleset_case(GEANY_FILETYPES_D, styleset_d_init);
|
||||||
init_styleset_case(GEANY_FILETYPES_DIFF, styleset_diff_init);
|
init_styleset_case(GEANY_FILETYPES_DIFF, styleset_diff_init);
|
||||||
init_styleset_case(GEANY_FILETYPES_LISP, styleset_lisp_init);
|
init_styleset_case(GEANY_FILETYPES_LISP, styleset_lisp_init);
|
||||||
|
init_styleset_case(GEANY_FILETYPES_ERLANG, styleset_erlang_init);
|
||||||
init_styleset_case(GEANY_FILETYPES_DOCBOOK, styleset_docbook_init);
|
init_styleset_case(GEANY_FILETYPES_DOCBOOK, styleset_docbook_init);
|
||||||
init_styleset_case(GEANY_FILETYPES_FERITE, styleset_ferite_init);
|
init_styleset_case(GEANY_FILETYPES_FERITE, styleset_ferite_init);
|
||||||
init_styleset_case(GEANY_FILETYPES_F77, styleset_f77_init);
|
init_styleset_case(GEANY_FILETYPES_F77, styleset_f77_init);
|
||||||
@ -3397,6 +3480,7 @@ void highlighting_set_styles(ScintillaObject *sci, GeanyFiletype *ft)
|
|||||||
styleset_case(GEANY_FILETYPES_D, styleset_d);
|
styleset_case(GEANY_FILETYPES_D, styleset_d);
|
||||||
styleset_case(GEANY_FILETYPES_DIFF, styleset_diff);
|
styleset_case(GEANY_FILETYPES_DIFF, styleset_diff);
|
||||||
styleset_case(GEANY_FILETYPES_LISP, styleset_lisp);
|
styleset_case(GEANY_FILETYPES_LISP, styleset_lisp);
|
||||||
|
styleset_case(GEANY_FILETYPES_ERLANG, styleset_erlang);
|
||||||
styleset_case(GEANY_FILETYPES_DOCBOOK, styleset_docbook);
|
styleset_case(GEANY_FILETYPES_DOCBOOK, styleset_docbook);
|
||||||
styleset_case(GEANY_FILETYPES_FERITE, styleset_ferite);
|
styleset_case(GEANY_FILETYPES_FERITE, styleset_ferite);
|
||||||
styleset_case(GEANY_FILETYPES_F77, styleset_f77);
|
styleset_case(GEANY_FILETYPES_F77, styleset_f77);
|
||||||
|
2
wscript
2
wscript
@ -87,7 +87,7 @@ scintilla_sources = [
|
|||||||
'scintilla/KeyWords.cxx',
|
'scintilla/KeyWords.cxx',
|
||||||
'scintilla/LexAda.cxx', 'scintilla/LexAsm.cxx', 'scintilla/LexBash.cxx',
|
'scintilla/LexAda.cxx', 'scintilla/LexAsm.cxx', 'scintilla/LexBash.cxx',
|
||||||
'scintilla/LexBasic.cxx', 'scintilla/LexCaml.cxx', 'scintilla/LexCmake.cxx', 'scintilla/LexCPP.cxx',
|
'scintilla/LexBasic.cxx', 'scintilla/LexCaml.cxx', 'scintilla/LexCmake.cxx', 'scintilla/LexCPP.cxx',
|
||||||
'scintilla/LexCSS.cxx', 'scintilla/LexD.cxx', 'scintilla/LexForth.cxx',
|
'scintilla/LexCSS.cxx', 'scintilla/LexD.cxx', 'scintilla/LexErlang.cxx', 'scintilla/LexForth.cxx',
|
||||||
'scintilla/LexFortran.cxx', 'scintilla/LexHaskell.cxx', 'scintilla/LexHTML.cxx', 'scintilla/LexLisp.cxx',
|
'scintilla/LexFortran.cxx', 'scintilla/LexHaskell.cxx', 'scintilla/LexHTML.cxx', 'scintilla/LexLisp.cxx',
|
||||||
'scintilla/LexLua.cxx', 'scintilla/LexMarkdown.cxx', 'scintilla/LexMatlab.cxx',
|
'scintilla/LexLua.cxx', 'scintilla/LexMarkdown.cxx', 'scintilla/LexMatlab.cxx',
|
||||||
'scintilla/LexNsis.cxx', 'scintilla/LexOthers.cxx',
|
'scintilla/LexNsis.cxx', 'scintilla/LexOthers.cxx',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user