1f14f4646Smrg;; Copyright (c) 2007,2008 Paulo Cesar Pereira de Andrade 2f14f4646Smrg;; 3f14f4646Smrg;; Permission is hereby granted, free of charge, to any person obtaining a 4f14f4646Smrg;; copy of this software and associated documentation files (the "Software"), 5f14f4646Smrg;; to deal in the Software without restriction, including without limitation 6f14f4646Smrg;; the rights to use, copy, modify, merge, publish, distribute, sublicense, 7f14f4646Smrg;; and/or sell copies of the Software, and to permit persons to whom the 8f14f4646Smrg;; Software is furnished to do so, subject to the following conditions: 9f14f4646Smrg;; 10f14f4646Smrg;; The above copyright notice and this permission notice (including the next 11f14f4646Smrg;; paragraph) shall be included in all copies or substantial portions of the 12f14f4646Smrg;; Software. 13f14f4646Smrg;; 14f14f4646Smrg;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15f14f4646Smrg;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16f14f4646Smrg;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17f14f4646Smrg;; THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18f14f4646Smrg;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19f14f4646Smrg;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20f14f4646Smrg;; DEALINGS IN THE SOFTWARE. 21f14f4646Smrg;; 22f14f4646Smrg;; Author: Paulo Cesar Pereira de Andrade 23f14f4646Smrg;; 24f14f4646Smrg 25f14f4646Smrg;; Mode for editing autoconf/automake m4 files 26f14f4646Smrg 27f14f4646Smrg(require "syntax") 28f14f4646Smrg(in-package "XEDIT") 29f14f4646Smrg 30f14f4646Smrg(defsynprop *prop-macro* 31f14f4646Smrg "macro" 32f14f4646Smrg :font "*courier-bold-r*-12-*" 33f14f4646Smrg :foreground "green4") 34f14f4646Smrg 35f14f4646Smrg(defsynprop *prop-separator* 36f14f4646Smrg "separator" 37f14f4646Smrg :font "*courier-bold-r*-12-*" 38f14f4646Smrg :foreground "Red3") 39f14f4646Smrg 40f14f4646Smrg(defsynprop *prop-variable* 41f14f4646Smrg "variable" 42f14f4646Smrg :font "*lucidatypewriter-medium-r*-12-*" 43f14f4646Smrg :foreground "Gold4") 44f14f4646Smrg 45f14f4646Smrg(defsynprop *prop-escape* 46f14f4646Smrg "escape" 47f14f4646Smrg :font "*lucidatypewriter-medium-r*-12-*" 48f14f4646Smrg :foreground "Red3") 49f14f4646Smrg 50f14f4646Smrg(defsyntax *auto-mode* :main nil nil nil 51f14f4646Smrg ;; dont consider dnl a macro call at top level 52f14f4646Smrg (syntoken "(#.*|\\<dnl($|\\>.*))" :property *prop-comment*) 53f14f4646Smrg 54f14f4646Smrg ;; shell keywords 55f14f4646Smrg (syntoken 56f14f4646Smrg (string-concat 57f14f4646Smrg "\\<(" 58f14f4646Smrg "if|then|else|elif|else|fi|case|in|esac|do|done" 59f14f4646Smrg ")\\>") :property *prop-keyword*) 60f14f4646Smrg 61f14f4646Smrg ;; toplevel no arguments macro 62f14f4646Smrg (syntoken "^[a-zA-Z0-9_]+$" :property *prop-macro*) 63f14f4646Smrg 64f14f4646Smrg (syntable :string *prop-string* nil 65f14f4646Smrg ;; ignore escaped characters 66f14f4646Smrg (syntoken "\\\\.") 67f14f4646Smrg (syntoken "\"" :nospec t :switch -1) 68f14f4646Smrg (synaugment :variables)) 69f14f4646Smrg (syntable :constant *prop-constant* nil 70f14f4646Smrg (syntoken "\\\\.") 71f14f4646Smrg (syntoken "'" :nospec t :switch -1) 72f14f4646Smrg (synaugment :variables)) 73f14f4646Smrg (syntable :escape *prop-escape* nil 74f14f4646Smrg (syntoken "\\\\.") 75f14f4646Smrg (syntoken "`" :nospec t :switch -1) 76f14f4646Smrg (synaugment :variables)) 77f14f4646Smrg 78f14f4646Smrg (syntable :quoted-string *prop-string* nil 79f14f4646Smrg (syntoken "\\\"" :nospec t :switch -1)) 80f14f4646Smrg 81f14f4646Smrg (syntable :macro *prop-default* nil 82f14f4646Smrg (syntoken "," :property *prop-separator*) 83f14f4646Smrg (syntoken "[" :nospec t :property *prop-separator* :begin :quoted) 84f14f4646Smrg (syntable :quoted *prop-default* nil 85f14f4646Smrg ;; allow nesting 86f14f4646Smrg (syntoken "[" :nospec t :property *prop-separator* :begin :quoted) 87f14f4646Smrg (syntoken "]" :nospec t :property *prop-separator* :switch -1) 88c05e22d7Smrg (synaugment :shared :comments :variables)) 89f14f4646Smrg (syntoken ")" :nospec t :property *prop-macro* :switch -1) 90c05e22d7Smrg (synaugment :shared :quotes :variables :comments)) 91f14f4646Smrg 92f14f4646Smrg (syntable :shared nil nil 93f14f4646Smrg (syntoken "[a-zA-Z0-9_]+\\(" :property *prop-macro* :begin :macro) 94f14f4646Smrg ;; variable assignment 95c05e22d7Smrg (syntoken "[a-zA-Z0-9_-]+=" :property *prop-keyword*)) 96c05e22d7Smrg 97c05e22d7Smrg (syntable :quotes nil nil 98f14f4646Smrg (syntoken "\"" :nospec t :begin :string :contained t) 99f14f4646Smrg (syntoken "'" :nospec t :begin :constant :contained t) 100f14f4646Smrg (syntoken "`" :nospec t :begin :escape :contained t) 101c05e22d7Smrg (syntoken "\\\"" :nospec t :begin :quoted-string :contained t)) 102f14f4646Smrg 103f14f4646Smrg (syntable :variables nil nil 104f14f4646Smrg (syntoken "\\$[a-zA-Z0-9_-]+" :property *prop-variable*) 105f14f4646Smrg (syntoken "\\$\\{[a-zA-Z0-9_-]+\\}" :property *prop-variable*) 106f14f4646Smrg (syntoken "\\$\\([a-zA-Z0-9_-]+\\)" :property *prop-variable*)) 107f14f4646Smrg 108f14f4646Smrg (syntable :comments nil nil 109f14f4646Smrg (syntoken "(#.*|\\<dnl($|\\>.*))" :property *prop-comment*)) 110f14f4646Smrg 111c05e22d7Smrg (synaugment :shared :quotes :variables)) 112