el/dot-emacs.el: Make operator symbols look like punctuation.
[profile] / el / dot-emacs.el
index 4f9bd59..a2117c3 100644 (file)
@@ -1524,6 +1524,126 @@ doesn't match any of the regular expressions in
   "Major mode for editing C# code.")
 
 ;;;--------------------------------------------------------------------------
+;;; F# programming configuration.
+
+(setq fsharp-indent-offset 2)
+
+(defun mdw-fontify-fsharp ()
+
+  (let ((punct "=<>+-*/|&%!@?"))
+    (do ((i 0 (1+ i)))
+       ((>= i (length punct)))
+      (modify-syntax-entry (aref punct i) ".")))
+
+  (modify-syntax-entry ?_ "_")
+  (modify-syntax-entry ?( "(")
+  (modify-syntax-entry ?) ")")
+
+  (setq indent-tabs-mode nil)
+
+  (let ((fsharp-keywords
+        (mdw-regexps "abstract" "and" "as" "assert" "atomic"
+                     "base" "begin" "break"
+                     "checked" "class" "component" "const" "constraint"
+                     "constructor" "continue"
+                     "default" "delegate" "do" "done" "downcast" "downto"
+                     "eager" "elif" "else" "end" "exception" "extern"
+                     "false" "finally" "fixed" "for" "fori" "fun" "function"
+                     "functor"
+                     "global"
+                     "if" "in" "include" "inherit" "inline" "interface"
+                     "internal"
+                     "lazy" "let"
+                     "match" "measure" "member" "method" "mixin" "module"
+                     "mutable"
+                     "namespace" "new" "null"
+                     "object""of" "open" "or" "override"
+                     "parallel" "params" "private" "process" "protected"
+                     "public" "pure"
+                     "rec" "recursive" "return"
+                     "sealed" "sig" "static" "struct"
+                     "tailcall" "then" "to" "trait" "true" "try" "type"
+                     "upcast" "use"
+                     "val" "virtual" "void" "volatile"
+                     "when" "while" "with"
+                     "yield"))
+
+       (fsharp-builtins
+        (mdw-regexps "asr" "land" "lor" "lsl" "lsr" "lxor" "mod"))
+
+       (bang-keywords
+        (mdw-regexps "do" "let" "return" "use" "yield"))
+
+       (preprocessor-keywords
+        (mdw-regexps "if" "indent" "else" "endif")))
+
+    (setq font-lock-keywords
+         (list (list (concat "\\(^\\|[^\"]\\)"
+                             "\\(" "(\\*"
+                                   "[^*]*\\*+"
+                                   "\\(" "[^)*]" "[^*]*" "\\*+" "\\)*"
+                                   ")"
+                             "\\|"
+                                   "//.*"
+                             "\\)")
+                     '(2 font-lock-comment-face))
+
+               (list (concat "'" "\\("
+                                   "\\\\"
+                                   "\\(" "[ntbr'\\]"
+                                   "\\|" "[0-9][0-9][0-9]"
+                                   "\\|" "u" "[0-9a-fA-F]\\{4\\}"
+                                   "\\|" "U" "[0-9a-fA-F]\\{8\\}"
+                                   "\\)"
+                                 "\\|"
+                                 "." "\\)" "'"
+                             "\\|"
+                             "\"" "[^\"\\]*"
+                                   "\\(" "\\\\" "\\(.\\|\n\\)"
+                                         "[^\"\\]*" "\\)*"
+                             "\\(\"\\|\\'\\)")
+                     '(0 font-lock-string-face))
+
+               (list (concat "\\_<\\(" bang-keywords "\\)!" "\\|"
+                             "^#[ \t]*\\(" preprocessor-keywords "\\)\\_>"
+                             "\\|"
+                             "\\_<\\(" fsharp-keywords "\\)\\_>")
+                     '(0 font-lock-keyword-face))
+               (list (concat "\\<\\(" fsharp-builtins "\\)\\_>")
+                     '(0 font-lock-variable-name-face))
+
+               (list (concat "\\_<"
+                             "\\(" "0[bB][01]+" "\\|"
+                                   "0[oO][0-7]+" "\\|"
+                                   "0[xX][0-9a-fA-F]+" "\\)"
+                             "\\(" "lf\\|LF" "\\|"
+                                   "[uU]?[ysnlL]?" "\\)"
+                             "\\|"
+                             "\\_<"
+                             "[0-9]+" "\\("
+                               "[mMQRZING]"
+                               "\\|"
+                               "\\(\\.[0-9]*\\)?"
+                               "\\([eE][-+]?[0-9]+\\)?"
+                               "[fFmM]?"
+                               "\\|"
+                               "[uU]?[ysnlL]?"
+                             "\\)")
+                     '(0 mdw-number-face))
+
+               (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+                     '(0 mdw-punct-face)))))
+
+  (mdw-post-config-mode-hack))
+
+(defun mdw-fontify-inferior-fsharp ()
+  (mdw-fontify-fsharp)
+  (setq font-lock-keywords
+       (append (list (list "^[#-]" '(0 font-lock-comment-face))
+                     (list "^>" '(0 font-lock-keyword-face)))
+               font-lock-keywords)))
+
+;;;--------------------------------------------------------------------------
 ;;; Go programming configuration.
 
 (defun mdw-fontify-go ()
@@ -1969,6 +2089,50 @@ strip numbers instead."
   (mdw-post-config-mode-hack))
 
 ;;;--------------------------------------------------------------------------
+;;; Algol 68 configuration.
+
+(setq a68-indent-step 2)
+
+(defun mdw-fontify-algol-68 ()
+
+  ;; Fix up the syntax table.
+  (modify-syntax-entry ?# "!" a68-mode-syntax-table)
+  (dolist (ch '(?- ?+ ?= ?< ?> ?* ?/ ?| ?&))
+    (modify-syntax-entry ch "." a68-mode-syntax-table))
+
+  (make-local-variable 'font-lock-keywords)
+
+  (let ((not-comment
+        (let ((word "COMMENT"))
+          (do ((regexp (concat "[^" (substring word 0 1) "]+")
+                       (concat regexp "\\|"
+                               (substring word 0 i)
+                               "[^" (substring word i (1+ i)) "]"))
+               (i 1 (1+ i)))
+              ((>= i (length word)) regexp)))))
+    (setq font-lock-keywords
+         (list (list (concat "\\<COMMENT\\>"
+                             "\\(" not-comment "\\)\\{0,5\\}"
+                             "\\(\\'\\|\\<COMMENT\\>\\)")
+                     '(0 font-lock-comment-face))
+               (list (concat "\\<CO\\>"
+                             "\\([^C]+\\|C[^O]\\)\\{0,5\\}"
+                             "\\($\\|\\<CO\\>\\)")
+                     '(0 font-lock-comment-face))
+               (list "\\<[A-Z_]+\\>"
+                     '(0 font-lock-keyword-face))
+               (list (concat "\\<"
+                             "[0-9]+"
+                             "\\(\\.[0-9]+\\)?"
+                             "\\([eE][-+]?[0-9]+\\)?"
+                             "\\>")
+                     '(0 mdw-number-face))
+               (list "\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/"
+                     '(0 mdw-punct-face)))))
+
+  (mdw-post-config-mode-hack))
+
+;;;--------------------------------------------------------------------------
 ;;; REXX configuration.
 
 (defun mdw-rexx-electric-* ()
@@ -2107,6 +2271,12 @@ strip numbers instead."
   (modify-syntax-entry ?} ". 4b")
   (modify-syntax-entry ?\n ">")
 
+  ;; Make punctuation be punctuation
+  (let ((punct "=<>+-*/|&%!@?$.^:#`"))
+    (do ((i 0 (1+ i)))
+       ((>= i (length punct)))
+      (modify-syntax-entry (aref punct i) ".")))
+
   ;; Set fill prefix.
   (mdw-standard-fill-prefix "\\([ \t]*{?--?[ \t]*\\)")