source: branches/NERC/dev_r5518_GO6_CO2_cmip/NEMOGCM/TOOLS/COMPILE/bash-font-lock.el @ 9298

Last change on this file since 9298 was 5157, checked in by nicolasmartin, 6 years ago

Bash optional coding conventions & Emacs fontification package

File size: 4.6 KB
Line 
1; Bash syntax highlighting
2
3(defvar bash-builtins  ;; Unrecognized UNIX commands
4  '("awk" "basename" "cat" "cp" "cut" "date" "diff" "dirname" "env" "find"
5    "grep" "head" "ls" "make" "mkdir" "mv" "rm" "sed" "sort" "svn" "tail" "tee"
6    "touch" "uniq" "xargs"                                                     ))
7
8(defvar bash-keywords  ;; Bash keywords (consistency with 'return' command fontification)
9  '("declare" "let" "local" "readonly" "typeset" "set" "unset"                 ))
10
11(defvar bash-functions ;; Sourced or declared fonctions
12  '("fake_func"                                                                   ;;
13    "em" "ev" "ge" "heil" "mkcd" "ok"                                             ;; Common
14    "nemch" "nemde" "nemid" "nemtr" "nemst"                                       ;; NEMO branchs
15    "cmpcf" "if90" "gf90"                                                         ;; NEMO cmp
16    "nemo_help" "nemo_cfg"                                                        ;; NEMO cfg
17    "append_output_file" "appech_output_file" "super_grep" "check_args_count"     ;; NEMO SETTE
18    "set_namelist" "set_xio" "post_test_tidyup"                                )) ;; Id
19
20(defvar bash-font-lock ;; Be careful with order
21  '(;; Variables
22    ;;; GLOBALS variables|arrays
23    ("\\(?:export +\\)?\\$?{?\\(#?[A-Z][A-Z_0-9]+\\)\\(?:\\[\\(?2:[@*]\\)\\]\\)?"
24     (1 font-lock-constant-face     ) (2 font-lock-constant-face      nil t))
25    ;;; Locals arrays
26    ("\\(?1:#?[a-z][a-z_0-9]+\\)\\[\\([@*]\\)?"
27     (1 font-lock-variable-name-face) (2 font-lock-variable-name-face nil t))
28    ;;; Shell specials variables
29    ("\\${?\\([#@?!_-]?[a-z]?[a-z_0-9]*\\)}?" 1 font-lock-variable-name-face)
30
31    ;; Tests  '[ ... ]' '[[ ... ]]' '(( ... ))'
32    ("\\((\\{2\\}\\) \\(?:.*\\) \\()\\{2\\}\\)"           
33     (1 font-lock-builtin-face) (2 font-lock-builtin-face))
34    ("\\(\\[\\{1,2\\}\\) \\(?:[^]]+\\) \\(\\]\\{1,2\\}\\)"
35     (1 font-lock-builtin-face) (2 font-lock-builtin-face))
36
37    ;; Operators  ' ! ' ' != ' ' ~= '  ' && ' ' || '
38    (" \\!=? \\| ~= " 0 font-lock-negation-char-face)
39    (" && \\| || "    0 font-lock-keyword-face      )
40
41    ;; Compound commands
42    ("\\\\$"                0 font-lock-warning-face) ; '\'
43    ("\\(?:[^;]\\)\\(;\\) " 1 font-lock-keyword-face) ; '; '
44     ;;; Function
45    ("^\\(?:function +\\)?\\(\\sw+\\)(?)? +\\({\\)"
46     (1 font-lock-function-name-face) (2 font-lock-warning-face      ))
47    ("^}$"                             0 font-lock-warning-face       )
48     ;;; Commands block ' { ...; }'
49    ("\\({\\) \\(?:[^}]*\\); +\\(}\\)?" (1 font-lock-warning-face) (2 font-lock-warning-face nil t))
50    ("\\(?:.*\\); +\\(}\\)$"          1 font-lock-warning-face                                  )
51     ;;; Sub-shell      '( ...  )'
52    ("\\((\\) \\(?:[^)]*\\) \\()\\)" (1 font-lock-warning-face) (2 font-lock-warning-face))
53
54    ;; 'case ... in ...) ...;; esac'
55    ("\\()\\)\\(?:[^)]*\\)\\(;;\\)" (1 font-lock-keyword-face) (2 font-lock-keyword-face))
56    ("^[^(]*\\()\\)$"                1 font-lock-keyword-face) ; Regular syntax
57    ("^\\s-+;;$"                     0 font-lock-keyword-face) ;    "      ""
58    )
59  )
60
61; Configuration loading
62(font-lock-add-keywords 'sh-mode `((,(regexp-opt bash-builtins  'words) 0 font-lock-builtin-face      )))
63(font-lock-add-keywords 'sh-mode `((,(regexp-opt bash-keywords  'words) 0 font-lock-keyword-face      )))
64(font-lock-add-keywords 'sh-mode `((,(regexp-opt bash-functions 'words) 0 font-lock-function-name-face)))
65(font-lock-add-keywords 'sh-mode bash-font-lock                                                         )
66
67; Highlighting example for font lock faces
68(font-lock-add-keywords 'sh-mode '(
69  ("font-lock-warning-face"           . font-lock-warning-face          )
70  ("font-lock-function-name-face"     . font-lock-function-name-face    )
71  ("font-lock-variable-name-face"     . font-lock-variable-name-face    )
72  ("font-lock-keyword-face"           . font-lock-keyword-face          )
73  ("font-lock-comment-face"           . font-lock-comment-face          )
74  ("font-lock-comment-delimiter-face" . font-lock-comment-delimiter-face)
75  ("font-lock-type-face"              . font-lock-type-face             )
76  ("font-lock-constant-face"          . font-lock-constant-face         )
77  ("font-lock-builtin-face"           . font-lock-builtin-face          )
78  ("font-lock-preprocessor-face"      . font-lock-preprocessor-face     )
79  ("font-lock-string-face"            . font-lock-string-face           )
80  ("font-lock-doc-face"               . font-lock-doc-face              )
81  ("font-lock-negation-char-face"     . font-lock-negation-char-face    )))
Note: See TracBrowser for help on using the repository browser.