;;; gvpr-mode.el --- A major mode offering basic syntax coloring for gvpr scripts. ;; Copyright (C) 2013 Rod Waldhoff ;; ;; Author: Rod Waldhoff <r.waldhoff@gmail.com> ;; Maintainer: Rod Waldhoff <r.waldhoff@gmail.com> ;; 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 <http://www.gnu.org/licenses/>. ;;; Commentary: ;; `gvpr` is the "graph pattern recognizer", a graph processing and ;; transformation tool that is part of the Graphviz open-source graph ;; visualization suite (<http://www.graphviz.org/>). ;; ;; `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 ("\\<BEGIN\\>" . 'font-lock-preprocessor-face) ("\\<BEG\\(?:IN\\)?_G\\>" . 'font-lock-preprocessor-face) ("\\<N\\>" . 'font-lock-preprocessor-face) ("\\<E\\>" . 'font-lock-preprocessor-face) ("\\<END_G\\>" . 'font-lock-preprocessor-face) ("\\<END\\>" . '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) ("\\<in\\>" . 'font-lock-constant-face) ;; common attributes ("\\<head\\>" . 'font-lock-builtin-face) ("\\<tail\\>" . 'font-lock-builtin-face) ("\\<name\\>" . 'font-lock-builtin-face) ("\\<indegree\\>" . 'font-lock-builtin-face) ("\\<outdegree\\>" . 'font-lock-builtin-face) ("\\<degree\\>" . 'font-lock-builtin-face) ("\\<root\\>" . 'font-lock-builtin-face) ("\\<parent\\>" . 'font-lock-builtin-face) ("\\<n_edges\\>" . 'font-lock-builtin-face) ("\\<n_nodes\\>" . 'font-lock-builtin-face) ("\\<directed\\>" . 'font-lock-builtin-face) ("\\<strict\\>" . 'font-lock-builtin-face) ;; built-in functions ("\\<graph\\>" . 'font-lock-builtin-face) ("\\<sugb\\>" . 'font-lock-builtin-face) ("\\<isSubg\\>" . 'font-lock-builtin-face) ("\\<fstsubg\\>" . 'font-lock-builtin-face) ("\\<nxtsugb\\>" . 'font-lock-builtin-face) ("\\<isDirect\\>" . 'font-lock-builtin-face) ("\\<isStrict\\>" . 'font-lock-builtin-face) ("\\<nNodes\\>" . 'font-lock-builtin-face) ("\\<nEdges\\>" . 'font-lock-builtin-face) ("\\<node\\>" . 'font-lock-builtin-face) ("\\<subnode\\>" . 'font-lock-builtin-face) ("\\<fstnode\\>" . 'font-lock-builtin-face) ("\\<nxtnode\\>" . 'font-lock-builtin-face) ("\\<isNode\\>" . 'font-lock-builtin-face) ("\\<isSubnode\\>" . 'font-lock-builtin-face) ("\\<indegreeOf\\>" . 'font-lock-builtin-face) ("\\<outdegreeOf\\>" . 'font-lock-builtin-face) ("\\<degreeOf\\>" . 'font-lock-builtin-face) ("\\<edge\\>" . 'font-lock-builtin-face) ("\\<edge_sg\\>" . 'font-lock-builtin-face) ("\\<subedge\\>" . 'font-lock-builtin-face) ("\\<isEdge\\>" . 'font-lock-builtin-face) ("\\<isSubedge\\>" . 'font-lock-builtin-face) ("\\<fstout\\>" . 'font-lock-builtin-face) ("\\<fstout_sg\\>" . 'font-lock-builtin-face) ("\\<nxtout\\>" . 'font-lock-builtin-face) ("\\<nxtout_sg\\>" . 'font-lock-builtin-face) ("\\<fstin\\>" . 'font-lock-builtin-face) ("\\<fstin_sg\\>" . 'font-lock-builtin-face) ("\\<nxtin\\>" . 'font-lock-builtin-face) ("\\<nxtin_sg\\>" . 'font-lock-builtin-face) ("\\<fstedge\\>" . 'font-lock-builtin-face) ("\\<nxtedge\\>" . 'font-lock-builtin-face) ("\\<opp\\>" . 'font-lock-builtin-face) ("\\<write\\>" . 'font-lock-builtin-face) ("\\<writeG\\>" . 'font-lock-builtin-face) ("\\<fwriteG\\>" . 'font-lock-builtin-face) ("\\<readG\\>" . 'font-lock-builtin-face) ("\\<freadG\\>" . 'font-lock-builtin-face) ("\\<delete\\>" . 'font-lock-builtin-face) ("\\<isIn\\>" . 'font-lock-builtin-face) ("\\<cloneG\\>" . 'font-lock-builtin-face) ("\\<clone\\>" . 'font-lock-builtin-face) ("\\<copy\\>" . 'font-lock-builtin-face) ("\\<copyA\\>" . 'font-lock-builtin-face) ("\\<induce\\>" . 'font-lock-builtin-face) ("\\<hasAttr\\>" . 'font-lock-builtin-face) ("\\<isAttr\\>" . 'font-lock-builtin-face) ("\\<aget\\>" . 'font-lock-builtin-face) ("\\<aset\\>" . 'font-lock-builtin-face) ("\\<getDflt\\>" . 'font-lock-builtin-face) ("\\<setDflt\\>" . 'font-lock-builtin-face) ("\\<fstAttr\\>" . 'font-lock-builtin-face) ("\\<nxtAttr\\>" . 'font-lock-builtin-face) ("\\<copmOf\\>" . 'font-lock-builtin-face) ("\\<kindOf\\>" . 'font-lock-builtin-face) ("\\<lock\\>" . 'font-lock-builtin-face) ("\\<sprintf\\>" . 'font-lock-builtin-face) ("\\<gsub\\>" . 'font-lock-builtin-face) ("\\<sub\\>" . 'font-lock-builtin-face) ("\\<substr\\>" . 'font-lock-builtin-face) ("\\<strcmp\\>" . 'font-lock-builtin-face) ("\\<length\\>" . 'font-lock-builtin-face) ("\\<index\\>" . 'font-lock-builtin-face) ("\\<rindex\\>" . 'font-lock-builtin-face) ("\\<match\\>" . 'font-lock-builtin-face) ("\\<toupper\\>" . 'font-lock-builtin-face) ("\\<tolower\\>" . 'font-lock-builtin-face) ("\\<canon\\>" . 'font-lock-builtin-face) ("\\<html\\>" . 'font-lock-builtin-face) ("\\<ishtml\\>" . 'font-lock-builtin-face) ("\\<xOf\\>" . 'font-lock-builtin-face) ("\\<yOf\\>" . 'font-lock-builtin-face) ("\\<llOf\\>" . 'font-lock-builtin-face) ("\\<urOf\\>" . 'font-lock-builtin-face) ("\\<sscanf\\>" . 'font-lock-builtin-face) ("\\<split\\>" . 'font-lock-builtin-face) ("\\<tokens\\>" . 'font-lock-builtin-face) ("\\<print\\>" . 'font-lock-builtin-face) ("\\<printf\\>" . 'font-lock-builtin-face) ("\\<scanf\\>" . 'font-lock-builtin-face) ("\\<openF\\>" . 'font-lock-builtin-face) ("\\<closeF\\>" . 'font-lock-builtin-face) ("\\<readL\\>" . 'font-lock-builtin-face) ("\\<exp\\>" . 'font-lock-builtin-face) ("\\<log\\>" . 'font-lock-builtin-face) ("\\<sqrt\\>" . 'font-lock-builtin-face) ("\\<pow\\>" . 'font-lock-builtin-face) ("\\<cos\\>" . 'font-lock-builtin-face) ("\\<sin\\>" . 'font-lock-builtin-face) ("\\<atan2\\>" . 'font-lock-builtin-face) ("\\<MIN\\>" . 'font-lock-builtin-face) ("\\<MAX\\>" . 'font-lock-builtin-face) ("\\<unset\\>" . 'font-lock-builtin-face) ("\\<exit\\>" . 'font-lock-builtin-face) ("\\<system\\>" . 'font-lock-builtin-face) ("\\<rand\\>" . 'font-lock-builtin-face) ("\\<srand\\>" . 'font-lock-builtin-face) ("\\<colorx\\>" . '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) ("\\<ARGC\\>" . 'font-lock-builtin-face) ("\\<ARGV\\>" . 'font-lock-builtin-face) ;; built-in constants ("\\<NULL\\>" . 'font-lock-builtin-face) ("\\<TV_flat\\>" . 'font-lock-builtin-face) ("\\<TV_ne\\>" . 'font-lock-builtin-face) ("\\<TV_en\\>" . 'font-lock-builtin-face) ("\\<TV_dfs\\>" . 'font-lock-builtin-face) ("\\<TV_postdfs\\>" . 'font-lock-builtin-face) ("\\<TV_prepostdfs\\>" . 'font-lock-builtin-face) ("\\<TV_fwd\\>" . 'font-lock-builtin-face) ("\\<TV_postfwd\\>" . 'font-lock-builtin-face) ("\\<TV_prepostfwd\\>" . 'font-lock-builtin-face) ("\\<TV_rev\\>" . 'font-lock-builtin-face) ("\\<TV_postrev\\>" . 'font-lock-builtin-face) ("\\<TV_prepostrev\\>" . 'font-lock-builtin-face) ("\\<TV_bfs\\>" . '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