;;; cpp.srt --- SRecode templates for c++-mode ;; Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam ;; 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 . 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." ---- {{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