Mercurial > emacs
diff etc/srecode/cpp.srt @ 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 | |
| children | 1d1d5d9bd884 |
line wrap: on
line diff
--- /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
