summaryrefslogtreecommitdiff
path: root/misc/halibut.sl
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2002-08-05 10:31:35 +0000
committerSimon Tatham <anakin@pobox.com>2002-08-05 10:31:35 +0000
commitc478f3d9469c09773097eba89342c311ee70a319 (patch)
treef7b1e1d1ac577b5571bf14fe70af1dced325dccc /misc/halibut.sl
parent6758ed90d7c0015752894202138ecbcef35b80a0 (diff)
downloadhalibut-c478f3d9469c09773097eba89342c311ee70a319.zip
halibut-c478f3d9469c09773097eba89342c311ee70a319.tar.gz
halibut-c478f3d9469c09773097eba89342c311ee70a319.tar.bz2
halibut-c478f3d9469c09773097eba89342c311ee70a319.tar.xz
Rename Buttress to Halibut. I _think_ I've caught everything in this pass.
[originally from svn r1800]
Diffstat (limited to 'misc/halibut.sl')
-rw-r--r--misc/halibut.sl98
1 files changed, 98 insertions, 0 deletions
diff --git a/misc/halibut.sl b/misc/halibut.sl
new file mode 100644
index 0000000..e88b1ed
--- /dev/null
+++ b/misc/halibut.sl
@@ -0,0 +1,98 @@
+% Halibut mode for Jed.
+
+$1 = "Halibut";
+create_syntax_table ($1);
+
+define_syntax ("\#", "", '%', $1); % Comment Syntax
+define_syntax ('\\', '\\', $1); % Quote character
+define_syntax ("{", "}", '(', $1); % are all these needed?
+define_syntax ("a-zA-Z0-9", 'w', $1);
+set_syntax_flags ($1, 8);
+
+#ifdef HAS_DFA_SYNTAX
+%enable_highlight_cache ("halibut.dfa", $1);
+
+% A braced comment in Halibut is \#{ ... }, where ... may contain
+% any correctly nested sequence of braces. Of course we can't match
+% that in a DFA rule, so we'll go down to a reasonable depth of 3
+% instead.
+#ifexists dfa_define_highlight_rule
+dfa_define_highlight_rule ("\\\\#{[^{}]*({[^{}]*({[^}]*}[^{}]*)*}[^{}]*)*}",
+ "Qcomment", $1);
+
+dfa_define_highlight_rule ("\\\\#.*$", "comment", $1);
+dfa_define_highlight_rule ("^\\\\c([ \t].*)?$", "string", $1);
+dfa_define_highlight_rule ("\\\\[\\\\{}\\-_]", "keyword0", $1);
+dfa_define_highlight_rule ("\\\\[A-Za-tv-z][A-Za-z0-9]*", "keyword0", $1);
+dfa_define_highlight_rule ("\\\\u[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]",
+ "keyword0", $1);
+dfa_define_highlight_rule ("\\\\u[A-Fa-f0-9]?[A-Fa-f0-9]?[A-Fa-f0-9]?[A-Fa-f0-9]",
+ "keyword1", $1);
+dfa_define_highlight_rule ("[{}]", "delimiter", $1);
+dfa_define_highlight_rule (".", "normal", $1);
+dfa_build_highlight_table ($1);
+#else
+define_highlight_rule ("\\\\#{[^{}]*({[^{}]*({[^}]*}[^{}]*)*}[^{}]*)*}",
+ "Qcomment", $1);
+
+define_highlight_rule ("\\\\#.*$", "comment", $1);
+define_highlight_rule ("^\\\\c([ \t].*)?$", "string", $1);
+define_highlight_rule ("\\\\[\\\\{}\\-_]", "keyword0", $1);
+define_highlight_rule ("\\\\[A-Za-tv-z][A-Za-z0-9]*", "keyword0", $1);
+define_highlight_rule ("\\\\u[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]",
+ "keyword0", $1);
+define_highlight_rule ("\\\\u[A-Fa-f0-9]?[A-Fa-f0-9]?[A-Fa-f0-9]?[A-Fa-f0-9]",
+ "keyword1", $1);
+define_highlight_rule ("[{}]", "delimiter", $1);
+define_highlight_rule (".", "normal", $1);
+build_highlight_table ($1);
+#endif
+#endif
+
+% This hook identifies lines containing comments as paragraph separator
+define halibut_is_comment() {
+ bol ();
+ while (ffind ("\\\\#")) go_right (3);
+ ffind ("\\#"); % return value on stack
+}
+
+variable Halibut_Ignore_Comment = 0; % if true, line containing a comment
+ % does not delimit a paragraph
+
+define halibut_paragraph_separator() {
+ bol();
+ skip_white();
+ if (eolp())
+ return 1;
+ if (looking_at("\\c ") or looking_at("\\c\t") or
+ looking_at("\\c\n"))
+ return 1;
+ return not (Halibut_Ignore_Comment) and halibut_is_comment();
+}
+
+define halibut_wrap_hook() {
+ variable yep;
+ push_spot ();
+ yep = up_1 () and halibut_is_comment ();
+ pop_spot ();
+ if (yep) {
+ push_spot ();
+ bol_skip_white ();
+ insert ("\\# ");
+ pop_spot ();
+ }
+}
+
+#ifexists mode_set_mode_info
+mode_set_mode_info("Halibut", "fold_info", "\\# {{{\r\\# }}}\r\r");
+#endif
+
+define halibut_mode() {
+ variable mode = "Halibut";
+ % use_keymap (mode);
+ set_mode (mode, 0x1 | 0x20);
+ set_buffer_hook ("par_sep", "halibut_paragraph_separator");
+ set_buffer_hook ("wrap_hook", "halibut_wrap_hook");
+ use_syntax_table (mode);
+ runhooks ("halibut_mode_hook");
+}