changeset 105407:84fc40980c51

* srecode: New directory for SRecode template files.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 03 Oct 2009 19:28:56 +0000
parents 5b8c8cd21526
children cc49bd9e784b
files etc/ChangeLog etc/srecode/cpp.srt etc/srecode/default.srt etc/srecode/doc-cpp.srt etc/srecode/doc-default.srt etc/srecode/doc-java.srt etc/srecode/ede-make.srt etc/srecode/el.srt etc/srecode/getset-cpp.srt etc/srecode/java.srt etc/srecode/make.srt etc/srecode/template.srt etc/srecode/test.srt etc/srecode/texi.srt etc/srecode/wisent.srt
diffstat 15 files changed, 1885 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/etc/ChangeLog	Sat Oct 03 19:28:05 2009 +0000
+++ b/etc/ChangeLog	Sat Oct 03 19:28:56 2009 +0000
@@ -1,3 +1,7 @@
+2009-10-03  Chong Yidong  <cyd@stupidchicken.com>
+
+	* srecode: New directory for SRecode template files.
+
 2009-10-01  Michael Albinus  <michael.albinus@gmx.de>
 
 	* NEWS: delete-directory has an optional parameter RECURSIVE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/cpp.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,260 @@
+;;; cpp.srt --- SRecode templates for c++-mode
+
+;; Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "c++-mode"
+
+set comment_start  "/**"
+set comment_end    " */"
+set comment_prefix " *"
+
+;; OVERRIDE THIS in your user or project template file to whatever
+;; you use for your project.
+set HEADEREXT ".h"
+
+context file
+
+template empty :time :user :file :cpp
+----
+{{>:filecomment}}
+
+{{#NOTHEADER}}
+
+{{^}}
+{{/NOTHEADER}}
+{{#HEADER}}
+{{>:header_guard}}
+{{/HEADER}}
+----
+
+template header_guard :file :blank
+----
+#ifndef {{FILENAME_SYMBOL}}
+#define {{FILENAME_SYMBOL}} 1
+
+{{^}}
+
+#endif // {{FILENAME_SYMBOL}}
+----
+
+context misc
+
+template arglist
+"Insert an argument list for a function.
+@todo - Support smart CR in a buffer for not too long lines."
+----
+({{#ARGS}}{{TYPE}} {{NAME}}{{#NOTLAST}},{{/NOTLAST}}{{/ARGS}})
+----
+
+context declaration
+
+prompt TYPE "Return Type: "
+
+template function :indent :blank
+"Insert a function declaration."
+----
+{{?TYPE}} {{?NAME}}{{>:misc:arglist}}
+{{#INITIALIZERS}}{{>B:initializers}}{{/INITIALIZERS}}
+{
+{{^}}
+}
+----
+bind "f"
+
+template function-prototype :indent :blank
+"Insert a function declaration."
+----
+{{?TYPE}} {{?NAME}}{{>:misc:arglist}};
+----
+
+
+prompt TYPE "Data Type: "
+
+template variable :indent :blank
+"Insert a variable declaration."
+----
+{{?TYPE}} {{?NAME}}{{#HAVEDEFAULT}} = {{DEFAULT}}{{/HAVEDEFAULT}};
+----
+bind "v"
+
+template variable-prototype :indent :blank
+"Insert a variable declaration."
+----
+{{?TYPE}} {{?NAME}};
+----
+bind "v"
+
+template class :indent :blank
+"Insert a C++ class.  For use by user insertion.
+Override this template to change contents of a class.
+Override `class-tag' to override the outer structure of the class."
+----
+{{<A:class-tag}}
+   public:
+     {{>CONSTRUCTOR:classdecl:constructor-tag}}
+     {{>DESTRUCTOR:classdecl:destructor-tag}}
+   private:
+   {{^}}
+
+{{/A}}
+----
+
+template subclass :indent :blank
+"Insert a C++ subclass of some other class."
+sectiondictionary "PARENTS"
+set NAME "?PARENTNAME"
+----
+{{>A:class}}
+----
+
+template class-tag :indent :blank
+"Insert a C++ class with the expectation of it being used by a tag inserter.
+Override this to affect applications, or the outer class structure for
+the user-facing template."
+----
+class {{?NAME}} {{#PARENTS}}{{#FIRST}}: {{/FIRST}}public {{NAME}}{{/PARENTS}}
+{     
+   {{^}}
+};
+----
+bind "c"
+
+template method :indent :blank
+"Method belonging to some class, declared externally."
+----
+{{?TYPE}} {{?PARENT}}::{{?NAME}}{{>:misc:arglist}}
+{{#INITIALIZERS}}{{>B:initializers}}{{/INITIALIZERS}}
+{
+{{^}}
+}
+----
+
+template include :blank
+"An include statement."
+----
+#include "{{?NAME}}"
+----
+bind "i"
+
+template label :blank :indent
+----
+  {{?NAME}}:
+----
+
+context classdecl
+
+template constructor-tag :indent :blank
+----
+{{?NAME}}{{>:misc:arglist}}
+{ {{^}} }
+----
+
+;; This one really sucks.  How can I finish it?
+template initializers :indent
+----
+{{#FIRST}}:
+{{/FIRST}}{{INITNAME}}(){{#NOTLAST}},{{/NOTLAST}}
+----
+
+template destructor-tag :indent :blank
+----
+~{{?NAME}}{{>:misc:arglist}}
+{ {{^}} }
+----
+
+;;; Base Comment functions for overriding.
+context classdecl
+
+template comment-function-group-start :indent :blank
+"Used for putting comments in front of a functional group of declarations.
+Override this with your own preference to avoid using doxygen."
+----
+{{>A:classdecl:doxygen-function-group-start}}
+----
+
+template comment-function-group-end :indent :blank
+"Used for putting comments in front of a functional group of declarations.
+Override this with your own preference to avoid using doxygen."
+----
+{{>A:classdecl:doxygen-function-group-end}}
+----
+
+context declaration
+
+template comment-function :indent :blank
+"Used to put a nice comment in front of a function.
+Override this with your own preference to avoid using doxygen"
+----
+{{>A:declaration:doxygen-function}}
+----
+
+;;; DOXYGEN FEATURES
+;; 
+;;
+context classdecl
+
+prompt GROUPNAME "Name of declaration group: "
+
+template doxygen-function-group-start :indent :blank
+----
+/**
+ * {{?GROUPNAME}}
+ * @{
+ */
+
+----
+
+template doxygen-function-group-end :indent :blank
+----
+/**
+ * @}
+ */
+
+----
+
+context declaration
+
+template doxygen-function :indent :blank
+----
+/**
+ * @name {{NAME}} - {{DOC}}{{^}}{{#ARGS}}
+ * @param {{NAME}} - {{DOC}}{{/ARGS}}
+ * @return {{TYPE}}
+ */
+----
+
+template doxygen-variable-same-line
+----
+/**< {{DOC}}{{^}} */
+----
+
+template doxygen-section-comment :blank :indent
+"Insert a comment that separates sections of an Emacs Lisp file."
+----
+
+/** {{?TITLE}}
+ *
+ * {{^}}
+ */
+
+----
+
+
+;; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/default.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,63 @@
+;;; default.srt --- SRecode templates for srecode-template-mode
+
+;; Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "default"
+
+set comment_start  "#"
+
+set COPYRIGHT "This program 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 program 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 this program; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA."
+
+set DOLLAR "$"
+
+context file
+
+template copyright
+----
+{{COPYRIGHT:srecode-comment-prefix}}
+----
+
+template filecomment :file :user :time
+----
+{{comment_start}} {{FILENAME}} --- {{^}}
+{{comment_prefix}}
+{{comment_prefix}} Copyright (C) {{YEAR}} {{?AUTHOR}}
+{{comment_prefix}}
+{{comment_prefix}} Author: {{AUTHOR}} <{{EMAIL}}>{{#RCS}}
+{{comment_prefix}} X-RCS: {{DOLLAR}}Id{{DOLLAR}}{{/RCS}}
+{{comment_prefix}}
+{{>:copyright}}
+{{comment_end}}
+----
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/doc-cpp.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,84 @@
+;; doc-c.srt --- SRecode templates for "document" applications
+
+;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "c++-mode"
+
+set application "document"
+context declaration
+
+;;; Notes on the DOCUMENT templates.
+;;
+;; These templates recycle existing templates for doxygen in the
+;; more general C++ template set.
+
+template section-comment :indent :blank
+"A comment separating major sections of a file."
+----
+{{>:declaration:doxygen-section-comment}}
+----
+
+template function-comment :tag :indent :blank
+"A comment occuring in front of a function.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:declaration:doxygen-function}}
+----
+
+template variable-same-line-comment :tag
+"A comment occuring after a veriable declaration.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:declaration:doxygen-variable-same-line}}
+----
+
+;; These happen to be the same as in a classdecl.
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:classdecl:doxygen-function-group-start}}
+----
+
+template group-comment-end :blank :indent
+"A comment occuring at the end of a a group of declarations.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:classdecl:doxygen-function-group-end}}
+----
+
+;; Some templates only show up in classdecls.
+context classdecl
+
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:classdecl:doxygen-function-group-start}}
+----
+
+template group-comment-end :blank :indent
+"A comment occuring at the end of a a group of declarations.
+Recycle doxygen comment code from the more general template set."
+----
+{{>:classdecl:doxygen-function-group-end}}
+----
+
+;; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/doc-default.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,80 @@
+;; doc-default.srt --- SRecode templates for "document" applications
+
+;; Copyright (C) 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "default"
+
+set application "document"
+
+context declaration
+
+template section-comment :blank :indent
+"A comment occuring in front of a group of declarations."
+----
+{{comment_start}} {{?TITLE}}
+{{comment_prefix}}
+{{comment_prefix}} {{^}}
+{{comment_end}}
+----
+
+template function-comment :tag :indent :blank
+"A comment occuring in front of a function."
+----
+{{comment_start}} {{?NAME}} --
+{{DOC:srecode-comment-prefix}}
+{{comment_end}}
+----
+
+template variable-same-line-comment :tag
+"A comment occuring after a veriable declaration."
+----
+{{comment_start}} {{?DOC}} {{comment_end}}
+----
+
+;; These happen to be the same as in a classdecl.
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations."
+----
+{{comment_start}} {{?GROUPNAME}} --
+{{comment_end}}
+----
+
+template group-comment-end :indent
+"A comment occuring at the end of a a group of declarations."
+----
+{{comment_start}} End {{?GROUPNAME}} {{comment_end}}
+----
+
+;; Some templates only show up in classdecls.
+context classdecl
+
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations."
+----
+{{>:declaration:group-comment-start}}
+----
+
+template group-comment-end :indent
+"A comment occuring at the end of a a group of declarations."
+----
+{{>:declaration:group-comment-end}}
+----
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/doc-java.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,85 @@
+;; doc-java.srt --- SRecode templates for "document" applications
+
+;; Copyright (C) 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "java-mode"
+
+set application "document"
+
+context declaration
+
+;;; Notes on the DOCUMENT templates.
+;;
+;; These templates recycle existing templates for javadoc in the
+;; more general C++ template set.
+
+template section-comment :indent :blank
+"A comment separating major sections of a file."
+----
+{{>:declaration:javadoc-section-comment}}
+----
+
+template function-comment :tag :indent :blank
+"A comment occuring in front of a function.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:declaration:javadoc-function}}
+----
+
+template variable-same-line-comment :tag
+"A comment occuring after a veriable declaration.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:declaration:javadoc-variable-same-line}}
+----
+
+;; These happen to be the same as in a classdecl.
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:classdecl:javadoc-function-group-start}}
+----
+
+template group-comment-end :blank :indent
+"A comment occuring at the end of a a group of declarations.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:classdecl:javadoc-function-group-end}}
+----
+
+;; Some templates only show up in classdecls.
+context classdecl
+
+template group-comment-start :blank :indent
+"A comment occuring in front of a group of declarations.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:classdecl:javadoc-function-group-start}}
+----
+
+template group-comment-end :blank :indent
+"A comment occuring at the end of a a group of declarations.
+Recycle javadoc comment code from the more general template set."
+----
+{{>:classdecl:javadoc-function-group-end}}
+----
+
+;; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/ede-make.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,49 @@
+;; ede-make.srt --- SRecode templates for Makefiles used by EDE.
+
+;; Copyright (C) 2008 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "makefile-mode"
+set escape_start "{{"
+set escape_end "}}"
+set application "ede"
+
+context file
+
+template ede-empty :file
+----
+# Automatically Generated {{FILE}} by EDE.
+# For use with: {{MAKETYPE}}
+#
+# DO NOT MODIFY THIS FILE OR YOUR CHANGES MAY BE LOST.
+# EDE is the Emacs Development Environment.
+# http://cedet.sourceforge.net/ede.shtml
+#
+
+----
+
+context declaration
+
+template ede-vars
+----
+{{#VARIABLE}}
+{{NAME}}={{#VALUE}} {{VAL}}{{/VALUE}}{{/VARIABLE}}
+----
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/el.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,311 @@
+;;; el.srt --- SRecode templates for Emacs Lisp mode
+
+;; Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric Ludlam <zappo@gnu.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set escape_start "$"
+set escape_end "$"
+
+set mode "emacs-lisp-mode"
+
+set comment_start  ";;;"
+set comment_prefix  ";;"
+set comment_end  ""
+
+set DOLLAR "$"
+
+context file
+
+template section-comment :blank
+"Insert a comment that separates sections of an Emacs Lisp file."
+----
+
+;;; $^$
+;;
+
+----
+bind "s"
+
+
+template empty :user :time :file
+"Insert a skeleton for an Emacs Lisp file."
+----
+$>:filecomment$
+
+;;; Commentary:
+;;
+;; $^$
+
+;;; Code:
+
+
+(provide '$FILE$)
+
+;;; $FILENAME$ ends here
+
+----
+
+prompt MODESYM "Major Mode Symbol (sans -mode): "
+prompt MODENAME "Nice Name of mode: " defaultmacro "MODESYM"
+prompt MODEEXTENSION "File name extension for mode: "
+
+template major-mode :file :blank :indent
+"Insert the framework needed for a major mode."
+sectiondictionary "FONTLOCK"
+set NAME macro "MODESYM" "-mode-font-lock-keywords"
+set DOC "Keywords for use with srecode macros and font-lock."
+sectiondictionary "MODEHOOK"
+set NAME macro "MODESYM" "-mode-hook"
+set DOC "Hook run when " macro "MODESYM" " starts."
+set GROUP macro "MODESYM" "-mode"
+set CUSTOMTYPE "'hook"
+sectiondictionary "MODEFCN"
+set NAME macro "MODESYM" "-mode"
+set DOC "Major-mode for " macro "MODESYM" "-mode buffers."
+set INTERACTIVE ""
+----
+$>:declaration:defgroup$
+
+$>:syntax-table$
+
+$<FONTLOCK:declaration:variable$
+   '(
+     )
+$/FONTLOCK$
+
+$>:declaration:keymap$
+
+$<MODEHOOK:declaration:variable-option$nil$/MODEHOOK$
+
+;;;###autoload
+$<MODEFCN:declaration:function$
+  (interactive)
+  (kill-all-local-variables)
+  (setq major-mode '$MODESYM$-mode
+        mode-name "$?MODENAME$"
+	comment-start ";;"
+	comment-end "")
+  (set (make-local-variable 'comment-start-skip)
+       "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
+  (set-syntax-table $MODESYM$-mode-syntax-table)
+  (use-local-map $MODESYM$-mode-map)
+  (set (make-local-variable 'font-lock-defaults)
+       '($MODESYM$-mode-font-lock-keywords
+         nil  ;; perform string/comment fontification
+         nil  ;; keywords are case sensitive.
+         ;; This puts _ & - as a word constituant,
+         ;; simplifying our keywords significantly
+         ((?_ . "w") (?- . "w"))))
+  (run-hooks '$MODESYM$-mode-hook)
+$/MODEFCN$
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.$?MODEEXTENSION$$DOLLAR$" . $MODESYM$-mode))
+
+$<A:section-comment$Commands for $MODESYM$$/A$
+
+$<B:section-comment$Utils for $MODESYM$$/B$
+----
+
+template syntax-table
+"Create a syntax table."
+sectiondictionary "A"
+set NAME macro "?MODESYM" "-mode-syntax-table"
+set DOC "Syntax table used in " macro "?MODESYM" " buffers."
+----
+$<A:declaration:variable$
+  (let ((table (make-syntax-table (standard-syntax-table))))
+    (modify-syntax-entry ?\; ". 12"  table) ;; SEMI, Comment start ;;
+    (modify-syntax-entry ?\n ">"     table) ;; Comment end
+    (modify-syntax-entry ?\" "\""    table) ;; String
+    (modify-syntax-entry ?\- "_"     table) ;; Symbol
+    (modify-syntax-entry ?\\ "\\"    table) ;; Quote
+    (modify-syntax-entry ?\` "'"     table) ;; Prefix ` (backquote)
+    (modify-syntax-entry ?\' "'"     table) ;; Prefix ' (quote)
+    (modify-syntax-entry ?\, "'"     table) ;; Prefix , (comma)
+
+    table)
+$/A$
+----
+
+
+context declaration
+
+template include :blank
+"Insert a require statement."
+----
+(require '$?NAME$)
+----
+bind "i"
+
+template include-protected :blank
+"Insert a require statement."
+----
+(condition-case nil
+     (require '$?NAME$)
+   (error nil))
+----
+
+prompt INTERACTIVE "Is this an interactive function? " default "  (interactive)\n  " read y-or-n-p
+prompt NAME "Name: " defaultmacro "PRENAME"
+
+template function :el :indent :blank
+"Insert a defun outline."
+----
+(defun $?NAME$ ($#ARGS$$NAME$$#NOTLAST$ $/NOTLAST$$/ARGS$)
+  "$DOC$"
+$?INTERACTIVE$$^$
+  )
+----
+bind "f"
+
+
+template variable :el :indent :blank
+"Inert a variable.
+DOC is optional."
+----
+(defvar $?NAME$ $^$
+  "$DOC$")
+----
+bind "v"
+
+template variable-const :el :indent :blank
+"Inert a variable."
+----
+(defconst $?NAME$ $^$
+  "$DOC$")
+----
+
+template variable-option :el :el-custom :indent :blank
+"Inert a variable created using defcustom."
+----
+(defcustom $?NAME$ $^$
+  "*$DOC$"
+  :group $GROUP$
+  :type $?CUSTOMTYPE$)
+----
+bind "o"
+
+template class :el :indent :blank
+"Insert a new class."
+----
+(defclass $?NAME$ ()
+   (($?ARG1$ :initarg :$ARG1$
+             :documentation
+	     "$^$")
+   )
+   "Class $NAME$ ")
+----
+bind "c"
+
+template class-tag :el :indent :blank
+"Insert a new class."
+----
+(defclass $?NAME$ ($#PARENTS$$NAME$ $/PARENTS$)
+   ($^$
+    )
+   "Class $NAME$ ")
+----
+
+template method :el :ctxt :indent :blank
+"Insert a new method."
+----
+(defmethod $?NAME$ ((this $?PARENT$))
+  "$DOC$"
+  $^$
+  )
+----
+bind "m"
+
+template method-tag :el :ctxt :indent :blank
+"Insert a new method for tag inserter."
+----
+(defmethod $NAME$ ($#ARGS$$#FIRST$($NAME$ $PARENT$)$/FIRST$$#NOTFIRST$ $NAME$$/NOTFIRST$$/ARGS$)
+  "$DOC$"
+  $^$
+  )
+----
+
+prompt NAME "Method to Override: " defaultmacro "PRENAME" read mode-local-read-function
+prompt PARENT "Major Mode for binding: " defaultmacro "MODESYM"
+
+;; Note: PARENT is used for override methods and for classes.  Handy!
+template modelocal :el :ctxt :indent :blank
+"Insert a new mode-local function."
+----
+(define-mode-local-override $?NAME$ $?PARENT$ ()
+  "$DOC$"
+  $^$)
+----
+bind "l"
+
+
+template defgroup :indent :blank
+"Create a custom group."
+----
+(defgroup $?MODESYM$-mode nil
+  "$MODESYM$ group."
+  :group 'langauges)
+----
+bind "g"
+
+
+template keymap :indent :blank
+"Insert a keymap of some sort"
+----
+(defvar $?MODESYM$-mode-map
+  (let ((km (make-sparse-keymap)))
+    (define-key km "\C-c\C-c" '$MODESYM$-mode$^$)
+    km)
+  "Keymap used in `$MODESYM$-mode'.")
+----
+bind "k"
+
+
+context classdecl
+
+prompt NAME "Slot Name: "
+
+template variable-tag :indent :indent :blank
+"A field in a class."
+----
+($?NAME$ :initarg :$NAME$
+	 $#DEFAULTVALUE$:initform $VALUE$$/DEFAULTVALUE$
+	 :documentation
+	 "$DOC$")
+
+----
+
+template variable :indent :indent :blank
+"A field in a class."
+----
+($?NAME$ :initarg :$NAME$
+	 :initform nil
+	 :type list
+	 :documentation
+	 "$DOC$")
+
+----
+bind "s"
+
+
+
+;; end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/getset-cpp.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,50 @@
+;;; getset-cpp.srt --- SRecode templates for C++ class getter/setters.
+
+;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "c++-mode"
+set application "getset"
+
+context declaration
+
+template getset-in-class :tag :indent :blank
+----
+{{>A:classdecl:comment-function-group-start}}
+{{TYPE}} get{{NICENAME}}() const {
+   return {{NAME}};
+}
+void set{{NICENAME}}({{TYPE}} {{NICENAME}}) {
+   {{NAME}} = {{NICENAME}};
+}
+{{>A:classdecl:comment-function-group-end}}
+----
+
+template getset-field :blank :indent
+----
+{{?TYPE}} f{{?NAME}};
+----
+
+template getset-initializer :indent
+----
+f{{NAME}}(){{#NOTLAST}},{{/NOTLAST}}
+----
+
+;; end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/java.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,181 @@
+;; java.srt
+
+;; Copyright (C) 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "java-mode"
+set escape_start "{{"
+set escape_end "}}"
+
+context file
+
+set comment_start  "/**"
+set comment_end    " */"
+set comment_prefix " *"
+
+template empty :file :user :time :java :indent
+"Fill out an empty file."
+sectiondictionary "CLASSSECTION"
+set NAME macro "FILENAME_AS_CLASS"
+----
+{{>:filecomment}}
+
+package {{FILENAME_AS_PACKAGE}};
+
+{{>CLASSSECTION:declaration:class}}
+
+----
+bind "e"
+
+context declaration
+
+template import :blank :indent
+"Template to import a package."
+----
+{{>:declaration:include}}
+----
+bind "i"
+
+template class :blank :indent
+"Template to declare a variable."
+sectiondictionary "DOCSECTION"
+set NAME macro "NAME"
+----
+{{>DOCSECTION:declaration:javadoc-class}}
+public class {{?NAME}} {
+
+   {{^}}
+
+} // {{NAME}}
+----
+bind "c"
+
+;;; Semantic Tag support
+;;
+template class-tag :indent :blank
+"Insert a Java class with the expectation of it being used by a tag inserter.
+Override this to affect applications, or the outer class structure for
+the user-facing template."
+----
+{{>:declaration:javadoc-class}}
+public Class {{?NAME}} {{#PARENTS}}{{#FIRST}}extends {{/FIRST}}{{#NOTFIRST}}implements {{/NOTFIRST}}{{NAME}}{{/PARENTS}}
+{     
+   {{^}}
+};
+----
+
+template include :blank
+"An include statement."
+----
+import {{NAME}};
+----
+
+context misc
+
+template arglist
+"Insert an argument list for a function.
+@todo - Support smart CR in a buffer for not too long lines."
+----
+({{#ARGS}}{{TYPE}} {{NAME}}{{#NOTLAST}},{{/NOTLAST}}{{/ARGS}})
+----
+
+context classdecl
+
+template function :indent :blank
+----
+public {{?TYPE}} {{?NAME}}{{>:misc:arglist}} {
+{{^}}
+}
+----
+bind "m"
+
+template variable :indent :blank
+"Insert a variable declaration."
+----
+{{?TYPE}} {{?NAME}}{{#HAVEDEFAULT}} = {{DEFAULT}}{{/HAVEDEFAULT}};
+----
+bind "v"
+
+;;; Java Doc Comments
+;;
+context classdecl
+
+prompt GROUPNAME "Name of declaration group: "
+
+template javadoc-function-group-start :indent :blank
+----
+/**
+ * {{?GROUPNAME}}
+ * @{
+ */
+
+----
+
+template javadoc-function-group-end :indent :blank
+----
+/**
+ * @}
+ */
+
+----
+
+context declaration
+
+template javadoc-class :indent :blank :time :user :tag
+----
+/**
+ * {{DOC}}{{^}}
+ *
+ * Created: {{DATE}}
+ *
+ * @author {{AUTHOR}}
+ * @version 
+ * @since 
+ */
+----
+
+template javadoc-function :indent :blank :tag
+----
+/**
+ * {{DOC}}{{^}}
+ * {{#ARGS}}
+ * @param {{?NAME}} - {{DOC}}{{/ARGS}}
+ * @return {{TYPE}}{{#THROWS}}
+ * @exception {{NAME}} - {{EXDOC}}{{/THROWS}}
+ */
+----
+
+template javadoc-variable-same-line
+----
+/**< {{DOC}}{{^}} */
+----
+
+template javadoc-section-comment :blank :indent
+"Insert a comment that separates sections of an Emacs Lisp file."
+----
+
+/** {{?TITLE}}
+ *
+ * {{^}}
+ */
+
+----
+
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/make.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,79 @@
+;; make.srt
+
+;; Copyright (C) 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "makefile-mode"
+set escape_start "{{"
+set escape_end "}}"
+set comment_start "#"
+set comment_prefix "#"
+set TAB "\t"
+
+context file
+
+template empty :file :user
+----
+{{>:filecomment}}
+
+all: {{^}}
+
+{{comment_start}} end
+----
+
+context declaration
+
+;; GNU Make has real functions you can define, but semantic uses
+;; 'function for rules.  This is unfortunate, and should be fixed.
+template rule :blank
+----
+{{?NAME}}:
+{{TAB}}{{^}}
+----
+bind "r"
+
+template inferencerule :blank
+----
+%.{{?SRCEXTENSION}}: %.{{?DESTEXTENSION}}
+{{TAB}}{{^}}
+----
+bind "i"
+
+template phonyrule :blank
+----
+.PHONY {{?NAME}}
+{{NAME}}:
+{{TAB}}{{^}}
+----
+bind "p"
+
+
+template variable :blank
+"Insert a variable declaration."
+----
+{{?NAME}}:= {{^}}
+----
+bind "v"
+
+template include :blank
+----
+include {{?NAME}}
+----
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/template.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,224 @@
+;;; template.srt --- Templates for Semantic Recoders
+
+;; Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric Ludlam <zappo@gnu.org>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set escape_start "$"
+set escape_end "$"
+set mode "srecode-template-mode"
+set priority "70"
+
+set comment_start  ";;"
+set comment_end    ""
+set comment_prefix ";;"
+
+set SEPARATOR "----"
+
+set DOLLAR "$"
+
+context file
+
+prompt MAJORMODE "Major Mode for templates: " read srecode-read-major-mode-name
+prompt START "Escape Start Characters: " default "{{"
+prompt END "Escape End Characters: " default "}}"
+
+template empty :file :user :time :srt
+"Insert a skeleton for a template file."
+----
+$>:filecomment$
+
+set mode "$?MAJORMODE$"
+set escape_start "$?START$"
+set escape_end "$?END$"
+
+context file
+
+$^$
+
+
+;; end
+----
+
+template mode-basics :srt
+"Fill out a full template including parts for basic new mode stuff."
+sectiondictionary "E"
+set NAME "empty :file :user :time"
+set DOC "Fill out an empty file."
+set KEY "e"
+sectiondictionary "C1"
+set NAME "declaration"
+sectiondictionary "DTF"
+set NAME "function :blank :indent"
+set DOC "Template to declare a function."
+set KEY "f"
+sectiondictionary "DTV"
+set NAME "variable :blank :indent"
+set DOC "Template to declare a variable."
+set KEY "v"
+sectiondictionary "PR"
+set NAME "NAME"
+set PROMPT "Name for declaration: "
+----
+$>:declaration:commentchars$
+
+$<E:declaration:function$
+$ESCAPE_START$>:filecomment$ESCAPE_END$
+$/E$
+
+$>C1:declaration:context$
+
+$>PR:declaration:prompt$
+
+$>DTF:declaration:function$
+$>DTV:declaration:function$
+----
+bind "m"
+
+
+context declaration
+
+prompt NAME "Name of new template: "
+prompt KEY "Key Binding: " read read-char
+
+template function :blank
+"Insert a template block for Srecoder templates."
+----
+template $?NAME$$#ARG$$NAME$$/ARG$
+"$DOC$"
+$SEPARATOR$
+$^$
+$SEPARATOR$
+bind "$?KEY$"
+----
+bind "f"
+
+prompt NAME "Name of new variable: "
+
+template variable :blank
+"Inert a variable."
+----
+set $?NAME$ "$^$"
+----
+bind "v"
+
+template prompt :blank
+"Insert a prompt."
+----
+prompt $?NAME$ "$?PROMPT$"
+----
+bind "p"
+
+template priority :blank
+"Insert a priority statemept."
+----
+set priority $^$
+----
+
+template application :blank
+"Insert a priority statemept."
+----
+set application "$^$"
+----
+
+template context :blank
+"Insert a context statement."
+----
+context $NAME$
+----
+bind "c"
+
+template commentchars :blank
+"Insert the variables for handling comments."
+----
+set comment_start  ""
+set comment_end    ""
+set comment_prefix ""
+----
+
+context code
+
+prompt NAME "Name of variable: " read srecode-read-variable-name
+
+template variable :srt
+"Insert a variable with completion from the current file."
+----
+$ESCAPE_START$$?NAME$$ESCAPE_END$
+----
+bind "v"
+
+prompt NAME "Name of macro: "
+
+template ask :srt
+"Insert a prompting variable."
+----
+$ESCAPE_START$?$?NAME$$ESCAPE_END$
+----
+bind "a"
+
+template comment :srt
+----
+$ESCAPE_START$!$^$$ESCAPE_END$
+----
+bind "c"
+
+prompt TEMPLATE "Template to include: " read srecode-read-template-name
+
+template include :srt
+----
+$ESCAPE_START$>:$?TEMPLATE$$ESCAPE_END$
+----
+bind "i"
+
+template includewrap :srt
+----
+$ESCAPE_START$<:$?TEMPLATE$$ESCAPE_END$$^$$ESCAPE_START$/$NAME$$ESCAPE_END$
+----
+bind "w"
+
+template point :srt
+----
+$ESCAPE_START$^$ESCAPE_END$
+----
+bind "p"
+
+template section :srt
+"Insert a section, or looping construct."
+----
+$ESCAPE_START$#$?NAME$$ESCAPE_END$
+$^$
+$ESCAPE_START$/$NAME$$ESCAPE_END$
+----
+bind "s"
+
+template escape-start-quoted :srt
+"Escape Start"
+----
+$ESCAPE_START$ESCAPE_START$ESCAPE_END$
+----
+bind "q"
+
+template escape-end-quoted :srt
+"Escape Start"
+----
+$ESCAPE_START$ESCAPE_END$ESCAPE_END$
+----
+bind "e"
+
+
+;; end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/test.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,148 @@
+;; test.srt --- SRecode templates for testing
+
+;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "srecode-template-mode"
+set escape_start "$"
+set escape_end "$"
+set application "tests"
+
+set UTESTVAR1 ".SRT VAR 1"
+;;
+;; These are for testing features of template files.
+;;
+context test
+
+template test :user
+----
+$! This is a comment in the template. $
+;; $AUTHOR$
+;; $AUTHOR:upcase$
+----
+
+template subs :blank
+----
+;; Before Loop
+$#LOOP$
+;;  - loop stuff
+$/LOOP$
+;; After Loop
+----
+
+;; Before insertion
+;; After insertion
+
+template firstlast
+sectiondictionary "A"
+set MOOSE "FIRST"
+sectiondictionary "A"
+set MOOSE "MIDDLE"
+sectiondictionary "A"
+set MOOSE "LAST"
+----
+$#A$
+;; << -- $MOOSE$
+$#FIRST$;; I'm First$/FIRST$
+$#NOTFIRST$;; I'm Not First$/NOTFIRST$
+$#LAST$;; I'm Last$/LAST$
+$#NOTLAST$;; I'm Not Last$/NOTLAST$
+;; -- >>
+$/A$
+----
+
+
+template wrapsomething :region
+----
+;; Put this line in front:
+$REGIONTEXT$
+;; Put this line at the end:
+----
+
+template gapsomething :blank
+----
+### ALL ALONE ON A LINE ###
+----
+
+template inlinetext
+"Insert text that has no nelines"
+----
+ *In the middle* 
+----
+
+template includable :blank
+----
+;; An includable $COMMENT$ we could use.
+;; $^$
+;; Text after a point inserter.
+----
+
+template wrapinclude-basic
+----
+$>WI1:includable$
+----
+
+template wrapinclude-around
+----
+$<WI1:includable$Intermediate Comments$/WI1$
+----
+
+template complex-subdict
+sectiondictionary "A"
+set MYVAR1 "cow"
+set MYVAR2 "dog"
+set CPLX "I have a " macro "MYVAR1" " and a " macro "MYVAR2" "."
+----
+;; $#A$$CPLX$$/A$
+----
+
+template wrap-new-template
+sectiondictionary "NEWTMP"
+set DOC "A nice doc string goes here."
+----
+$<NEWTMP:declaration:function$Random text in the new template
+$/NEWTMP$
+----
+
+template column-data
+sectiondictionary "A"
+set MOOSE "FIRST"
+sectiondictionary "A"
+set MOOSE "VERY VERY LONG STRING THAT WILL BE CROPPED."
+sectiondictionary "A"
+set MOOSE "MIDDLE"
+sectiondictionary "A"
+set MOOSE "S"
+sectiondictionary "A"
+set MOOSE "LAST"
+----
+Table of Values:
+Left Justified       | Right Justified$#A$
+$|MOOSE:20:right$ | $|MOOSE:20:left$$/A$
+----
+
+template custom-arg-handler :utest
+sectiondictionary "A"
+set MOOSE "why"
+----
+OUTSIDE SECTION: $UTESTVAR1$
+INSIDE SECTION: $#A$$UTESTVAR1$$/A$
+----
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/texi.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,173 @@
+;; texi.srt --- SRecode templates for Texinfo
+
+;; Copyright (C) 2008 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "texinfo-mode"
+
+set escape_start "$"
+set escape_end "$"
+set DOLLAR "$"
+
+context file
+
+prompt NAME "Name of manual: "
+
+template empty :file :user :time
+"Fill a new texinfo file with some baseline stuff."
+----
+\input texinfo   @c -*-texinfo-*-
+$#RCS$
+@c
+@c $Id: srecode-texi.srt,v 1.5 2009/01/01 19:01:42 zappo Exp $
+@c
+$/RCS$
+@c %**start of header
+@setfilename $FILE$.info
+@set TITLE $?NAME$
+@set AUTHOR $?AUTHOR$
+@settitle @value{TITLE}
+@c %**end of header
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* $FILE$: ($FILE$).       $NAME$
+END-INFO-DIR-ENTRY
+@end format
+@end ifinfo
+
+@titlepage
+@sp 10
+@center @titlefont{$FILE$}
+@vskip 0pt plus 1 fill
+Copyright @copyright{} $YEAR$ $AUTHOR$
+@end titlepage
+
+@node Top
+@top @value{TITLE}
+
+$^$
+
+@menu
+* Index::
+@end menu
+
+
+
+
+@node Index
+@chapter Index
+
+@contents
+
+@bye
+----
+
+prompt NAME "Name of item: "
+
+context declaration
+
+;; Note to self: It would be cool to replace the junk in
+;; semantic/document.el with macros from here.
+template function :blank :texitag
+"Import some function tag into texinfo."
+----
+
+@defun $NAME$$#ARGS$ $NAME$$/ARGS$
+@anchor{$NAME$}
+$TAGDOC$
+@end defun
+
+----
+bind "f"
+
+template function-command :blank :texitag
+"Import some function tag into texinfo."
+----
+
+@deffn Command $NAME$$#ARGS$ $NAME$$/ARGS$
+@anchor{$NAME$}
+$TAGDOC$
+@end deffn
+
+----
+bind "f"
+
+
+template variable :blank :texitag
+"Import some variable tag into texinfo"
+----
+
+@defvar $NAME$$#ARGS$ $NAME$$/ARGS$
+@anchor{$NAME$}
+$TAGDOC$
+@end defvar
+
+----
+bind "v"
+
+prompt NAME "Name of node: "
+
+template node :texi
+"Insert a node right about here."
+----
+
+@node $?NAME$
+@$?LEVEL$ $NAME$
+
+$^$
+
+----
+bind "n"
+
+template subnode :texi
+"Insert a node right about here."
+----
+
+@node $?NAME$
+@$?NEXTLEVEL$ $NAME$
+
+$^$
+
+----
+bind "n"
+
+
+template menu :blank
+"Menu items for texinfo."
+----
+
+@menu
+$^$
+@end menu
+
+----
+bind "m"
+
+prompt NAME "Menu item: "
+
+template menuitem :blank
+"Insert a menu item."
+----
+* $?NAME$::	$^$
+----
+
+
+;; end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/srecode/wisent.srt	Sat Oct 03 19:28:56 2009 +0000
@@ -0,0 +1,94 @@
+;; wisent.srt --- SRecode templates for Emacs/WISENT grammar files.
+
+;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+
+;; Author: Eric M. Ludlam <eric@siege-engine.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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.  If not, see <http://www.gnu.org/licenses/>.
+
+set mode "wisent-grammar-mode"
+set comment_start  ";;"
+set comment_prefix  ";;"
+set comment_end  ""
+
+context file
+
+template empty :file :user :time
+"Insert a skeleton for a grammar file."
+----
+{{>:filecomment}}
+
+;;; Commentary:
+;;
+;; Parser for {{?TARGETMODE}} mode
+
+%languagemode {{TARGETMODE}}-mode
+%parsetable    wisent-{{TARGETMODE}}-parser-tables
+%keywordtable  wisent-{{TARGETMODE}}-keywords
+%tokentable    wisent-{{TARGETMODE}}-tokens
+%languagemode  {{TARGETMODE}}-mode
+%setupfunction wisent-{{TARGETMODE}}-default-setup
+
+%start goal
+
+;;; KEYWORDS
+%type <keyword>
+
+%%
+
+goal
+  : {{^}}
+  ;
+
+%%
+(define-lex wisent-{{TARGETMODE}}-lexer
+  "Lexical analzer to handle {{TARGETMODE}} buffers."
+  ;; semantic-lex-newline
+  semantic-lex-ignore-whitespace
+  semantic-lex-ignore-newline
+  semantic-lex-ignore-comments
+
+  semantic-lex-default-action
+  )
+
+;; {{FILENAME}} ends here
+----
+
+context declaration
+
+template function
+----
+{{?NAME}}
+  : {{^}}
+  ;
+----
+bind "f"
+
+template keyword
+----
+%keyword {{?NAME:upcase}} "{{NAME:downcase}}"
+%put     {{NAME:upcase}} summary "{{NAME}} {{^}}"
+----
+bind "k"
+
+template token
+----
+%type <{{?LEXTOKEN}}>
+%token <{{LEXTOKEN}}> {{LEXTOKEN}}
+----
+bind "t"
+
+;; end
\ No newline at end of file