;;; gvpr-mode.el --- A major mode offering basic syntax coloring for gvpr scripts. ;; Copyright (C) 2013 Rod Waldhoff ;; ;; Author: Rod Waldhoff ;; Maintainer: Rod Waldhoff ;; Created: 7 Dec 2013 ;; Version: 0.1.0 ;; Keywords: graphviz, gv, dot, gvpr, graph ;; URL: https://raw.github.com/rodw/gvpr-lib/master/extra/gvpr-mode.el ;; This file is NOT part of GNU Emacs. ;; ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. or visit . ;;; Commentary: ;; `gvpr` is the "graph pattern recognizer", a graph processing and ;; transformation tool that is part of the Graphviz open-source graph ;; visualization suite (). ;; ;; `gvpr` is an `awk`-like processor for graphs defined in Graphviz's ;; DOT language. `gvpr` can apply a user-specified *action* to every ;; graph, node, or edge that meets the conditions of the corresponding ;; *predicate*. ;; ;; `gvpr` defines a C-like language for this. ;; ;; This file defines a very basic emacs mode for syntax coloring ;; of `gvpr` scripts. ;; ;; To use it simply load` or `require` this file. ;; You can then enable this mode by executing `M-x gvpr-mode`. ;; The `.gvpr` file extension is associated with this mode ;; by default. ;; ;;; Code: (require 'generic-x) ;;;###autoload (define-generic-mode 'gvpr-mode ;; name of the mode '("//") ;; comments '( ;; keywords "void" "int" "char" "float" "long" "unsigned" "double" "string" "node_t" "edge_t" "graph_t" "obj_t" "if" "else" "for" "forr" "while" "switch" "case" "break" "continue" "return" ) '( ;; other syntax-colored terms ;; clauses ("\\" . 'font-lock-preprocessor-face) ("\\" . 'font-lock-preprocessor-face) ("\\" . 'font-lock-preprocessor-face) ("\\" . 'font-lock-preprocessor-face) ("\\" . 'font-lock-preprocessor-face) ("\\" . 'font-lock-preprocessor-face) ;; operators ("--" . 'font-lock-constant-face) ("->" . 'font-lock-constant-face) ("==" . 'font-lock-constant-face) ("!=" . 'font-lock-constant-face) ("+" . 'font-lock-constant-face) ("-" . 'font-lock-constant-face) ("*" . 'font-lock-constant-face) ("/" . 'font-lock-constant-face) ("=" . 'font-lock-constant-face) ("<" . 'font-lock-constant-face) (">" . 'font-lock-constant-face) ("<=" . 'font-lock-constant-face) (">=" . 'font-lock-constant-face) ("#" . 'font-lock-constant-face) ("\\" . 'font-lock-constant-face) ;; common attributes ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ;; built-in functions ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ;; built-in variables ("\\<$\\>" . 'font-lock-builtin-face) ("\\<$F\\>" . 'font-lock-builtin-face) ("\\<$G\\>" . 'font-lock-builtin-face) ("\\<$NG\\>" . 'font-lock-builtin-face) ("\\<$O\\>" . 'font-lock-builtin-face) ("\\<$T\\>" . 'font-lock-builtin-face) ("\\<$trgname\\>" . 'font-lock-builtin-face) ("\\<$tvroot\\>" . 'font-lock-builtin-face) ("\\<$tvnext\\>" . 'font-lock-builtin-face) ("\\<$tvnext\\>" . 'font-lock-builtin-face) ("\\<$tvedge\\>" . 'font-lock-builtin-face) ("\\<$tvtype\\>" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ;; built-in constants ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ("\\" . 'font-lock-builtin-face) ) '("\\.gvpr$") ;; files for which to activate this mode nil ;; other functions "A basic mode for gvpr scripts" ;; doc string ) (provide 'gvpr-mode) ;;; gvpr-mode.el ends here