Syntax highlighting README
- From: Marco Ciampa <ciampix libero it>
- To: mc-devel gnome org
- Subject: Syntax highlighting README
- Date: Thu, 15 May 2003 17:52:56 +0200
On Wed, May 14, 2003 at 06:36:16PM -0400, Pavel Roskin wrote:
> On Wed, 14 May 2003, Marco Ciampa wrote:
>
> > file ..\*\\.(rb|RB)$ Ruby\sProgram ^#!\s\*/.\*/ruby
> > include ruby.syntax
>
> Thanks, applied!
>
> > Please note that this is a preliminary version and any comment and
> > suggestions are welcome!
>
> Some other rules highlight numbers, but I don't really care. I leave it
> to those who actually program in Ruby.
>
> You may want to consider brighter highlighting for function names after
> "def" because there are too few other syntax elements around to make
> function definitions easy to distinguish.
I'll investigate on how to do it.
I though that would be useful this 'cut & paste' from the cooledit
manual for syntax highlighting hacking to be put on the /syntax dir as a
README file.
bye
--
Marco Ciampa
_________________________________
Naviga www.numeroverdeweb.it
Syntax highlighting README (derived from cooledit manual)
Syntax highlighting means that keywords and contexts(like
C comments, string constants, etc) are highlighted in
different colours. The following section explains the
format of the file ~/.cedit/syntax.
The file ~/.mc/cedit/Syntax is rescanned on opening of any
new editor file. It contains a list of file types and how
to identify what rule set the text you are editing belongs
to. The file token dictates how to match up your text. On
the same line as a file token must appear a regular
expression to match the filename, a string to be displayed
on the left of the editor window for description purposes,
and a regular expression to match the first line of the
file. If either of the regular expressions match, the file
is deemed to have the particular type. For example
file ..\*\\.(py|PY])$ Python\sProgram ^#!\s\*/.\*/python
Will cause a file to be labelled as Python Program if it
contains say, #!/usr/bin/python, on the first line OR of
it ends in say
Note that *, + and \ have to be escaped with a \, and
space must be presented with a \s.
After the file keyword may come the include keyword. The
include keyword says to load a rule set from a separate
file, and is the preferred way of adding new rule sets.
The path from where it loads defaults to cooledit/syntax/
under the lib/ directory where you installed Cooledit. See
the examples in your own Syntax file and in this direc-
tory.
Each rule set is divided into contexts, and each context
contains keyword definitions. A context is a scope within
the text that a particular set of keywords applies to. For
instance, the region within a C style quote (i.e. between
" quotations) has its own separate colour and hence its
own separate context. Within it, the normal C tokens, like
if and while, will not apply, but %d should be highlighted
in a different colour. Contexts are usually for when you
have something that must be coloured across multiple
lines. The default context contains the list of keywords
to fall back on should there be no other applicable con-
text. This is usually normal programming code.
A trivial C programming rule set might look like this:
file .\*\\.c C\sProgram\sFile (#include|/\\\*)
wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
# default colors
context default
keyword whole if yellow/24
keyword whole else yellow/24
keyword whole for yellow/24
keyword whole while yellow/24
keyword whole do yellow/24
keyword whole switch yellow/24
keyword whole case yellow/24
keyword whole static yellow/24
keyword whole extern yellow/24
keyword { brightcyan/14
keyword } brightcyan/14
keyword '*' green/6
# C comments
context /\* \*/ brown/22
# C preprocessor directives
context linestart # \n brightred/18
keyword \\\n yellow/24
# C string constants
context " " green/6
keyword %d yellow/24
keyword %s yellow/24
keyword %c yellow/24
keyword \\" yellow/24
Each context starts with a line of the form:
context [exclusive] [whole|wholeright|wholeleft] [lines-
tart] delim [linestart] delim [foreground] [background]
One exception is the first context. It must start with the
command
context default [foreground] [background]
or else cooledit will return an error.
The linestart option dictates that delim must start at the
beginning of a line.
The whole option tells that delim must be a whole word.
What constitutes a whole word are a set of characters that
can be changed at any point in the file with the
wholechars command. The wholechars command at the top just
sets the set exactly to its default and could therefore
have been omitted. To specify that a word must be whole on
the left only, you can use the wholeleft option, and
similarly on the right. The left and right set of charac-
ters can be set separately with,
wholechars [left|right] characters
The exclusive option causes the text between the delim-
iters to be colourised, but not the delimiters themselves.
Each rule is a line of the form:
keyword [whole|wholeright|wholeleft] [linestart] string
foreground [background]
Important to note is the line
keyword \\\n yellow/24
This line defines a keyword containing the \ and newline
characters. Because keywords have a higher precedence
than context delimiters, this keyword prevents the context
from ending at the end of a line if the line ends in a \
thus allowing C preprocessor directive to continue across
multiple lines.
The colours themselves need to apply to the Midnight Com-
mander internal editor as well as to Cooledit. Therefore
the form
midnight-commander-color/cooledit-color
is used. See some of the many rule sets given, for exam-
ples on using this. Usually the background colour is omit-
ted, thus defaulting to the usual background colour.
Context or keyword strings are interpreted so that you can
include tabs and spaces with the sequences \t and \s. New-
lines and the \ are specified with \n and \\ respectively.
Since whitespace is used as a seperator, it may not be
used explicitedly. Also, \* must be used to specify a *,
and a \+ to specify a +. The * itself is a wildcard that
matches any length of characters. The + is like the * but
matches a length of non-whitespace characters only. For
example,
keyword '+' green/6
keyword '\s' green/6
colours all C single character constants green. You could
also have used
keyword "*" green/6
to colour string constants, except that the matched string
may not cross newlines.
The \{ wild card matches any characters that exists
between it and its matching \}. For example, the following
matches C style octals:
keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen/16
The \[ \] wild card is similar and matches any number of
characters.
All wild cards may be used within context delimiters as
well, but you cannot have a wildcard as the first charac-
ter of a context delimiter. In addition, using a wildcard
as the first character of a keyword, impacts hugely on
performance.
Comments may be included on a line of there own and begin
with a #.
Because of the simplicity of the implementation, there are
a few intricacies that will not be coped with correctly
but these are a minor irritation. On the whole, a broad
spectrum of quite complicated situations are handled with
these simple rules. It is a good idea to take a look at
the syntax file to see some of the nifty tricks you can do
with a little imagination. If you can't get by with the
rules I have coded, and you think you have a rule that
would be useful, please email me with your request. How-
ever, do not ask for regular expression support, because
this is flatly impossible.
A useful hint is to work as much as possible with the
things you can do rather than try to do things that this
implementation can't cope with. Also remember that the aim
of syntax highlighting is to make programming less prone
to error, not to make code look pretty.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]