* extending c-mode
@ 2006-12-15 14:03 Laurent Deniau
0 siblings, 0 replies; only message in thread
From: Laurent Deniau @ 2006-12-15 14:03 UTC (permalink / raw)
Dear all,
I have been through the cc-mode documentation and it seems that what I
would like to do is not so obvious, at least for me, while I am sure
that there is a simple way to do it with cc-mode. My problem concerns
both highlight and indentation extension of the c-mode since my code is
pure ISO C99 code and therefore I would like to keep the default
highlights and indentation of C.
I have the following valid syntax (inspired from Objective-C) which
defines a multimethod:
**Simple version:
defmethod(ret-type, method-name, receiver, argtype)
// C code ...
endmethod
**Advanced version:
defmethod(ret-type,
(method-name, alt-next-method-name),
(receiver1, receiver2),
(argtype1)argname1, (argtype2)argname2)
// C code...
endmethod
**Simple uncommon version:
defmethod(ret-type, (method-name), (receiver), (argtype))
// C code ...
endmethod
where
- ret-type and argtype are C types or typedef like void, int or int*
- method-name, alt-next-method-name, argname1 and argname2 are all
user-defined valid C tokens, that is [A-Za-z_][A-Za-z0-9_]*
- parentheses around method-name are required only if a
alt-next-method-name is specified.
- parentheses around receiver are required only if more than one
receiver is specified.
- parentheses around argtype are required only if an argname is
specified.
Here are the points:
1) Indentation:
I would like defmethod() to behave like { and endmethod like }.
2) Highlight:
I would like to color the foreground of each of the following points:
- the keywords defmethod and endmethod.
- method-name whether alt-next-method-name is present or not
taking care of the presence of the enclosing ().
- receivers whether there is 1, 2, 3 or 4 receivers
taking care of the presence of the enclosing ().
- argtypes whether argname is present or not
taking care of the presence of the enclosing ().
Since the arguments of defmethod look-like a list (at least this is how
it is processed by the cpp defmethod() macro), I expect that it should
be easy to process it by emacs-lisp.
So, what should I put in my .emacs to make these points effective? Since
I am not an expect in emacs programming (I know a bit Lisp) and I will
have to extend the answer to the rest of my syntax, a clear and simple
example/code would be very helpful.
Any help will be very appreciated. Thanks.
a+, ld.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-12-15 14:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-15 14:03 extending c-mode Laurent Deniau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).