diff options
author | Ludovic Court`es | 2007-07-09 12:03:47 +0000 |
---|---|---|
committer | Ludovic Court`es | 2007-07-09 12:03:47 +0000 |
commit | 1d28b0859878efcc1a204c9f2232926cf74ae380 (patch) | |
tree | 25a706c0a9e4c3340da5380d8109f131c65c184d /src/guile/skribilo/source/c-lex.l | |
parent | f9392ad8b5d8af05d7f59757507c94044cc343af (diff) | |
parent | a26d762e7274adac7f828e546e615fab31eb3038 (diff) | |
download | skribilo-1d28b0859878efcc1a204c9f2232926cf74ae380.tar.gz skribilo-1d28b0859878efcc1a204c9f2232926cf74ae380.tar.lz skribilo-1d28b0859878efcc1a204c9f2232926cf74ae380.zip |
Merge from skribilo@sv.gnu.org--2006
Patches applied:
* lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2 (patch 118-121)
* skribilo@sv.gnu.org--2006/skribilo--devo--1.2 (patch 134-137)
- Renamed the `coloring' module tree to `source' for consistency.
- Fixed the `sui' module.
- Moved SUI stuff from `html.scm' to `sui.scm'.
- Linted documentation modules.
git-archimport-id: lcourtes@laas.fr--2006-libre/skribilo--devo--1.2--patch-84
Diffstat (limited to 'src/guile/skribilo/source/c-lex.l')
-rw-r--r-- | src/guile/skribilo/source/c-lex.l | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/guile/skribilo/source/c-lex.l b/src/guile/skribilo/source/c-lex.l new file mode 100644 index 0000000..b28a91a --- /dev/null +++ b/src/guile/skribilo/source/c-lex.l @@ -0,0 +1,73 @@ +;;; c-lex.l -- C fontifier for Skribilo. +;;; +;;; Copyright 2004 Erick Gallesio - I3S-CNRS/ESSI <eg@essi.fr> +;;; Copyright 2007 Ludovic Courtès <ludo@gnu.org> +;;; +;;; 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 of the License, 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; if not, write to the Free Software +;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +;;; USA. + +space [ \n\9] +letter [_a-zA-Z] +alphanum [_a-zA-Z0-9] + +%% + +;; Strings +\"[^\"]*\" (new markup + (markup '&source-string) + (body yytext)) +;; Comments +;; FIXME: We shouldn't exclude `/' from comments but we do so to match the +;; shortest multi-line comment. +/\*(\n|[^/])*\*/ (let* ((not-line (char-set-complement (char-set #\newline))) + (lines (string-tokenize yytext not-line))) + (reverse! + (pair-fold (lambda (line* result) + (let* ((line (car line*)) + (last? (null? (cdr line*))) + (markup + (new markup + (markup '&source-line-comment) + (body line)))) + (if last? + (cons markup result) + (cons* (string #\newline) + markup result)))) + '() + lines))) + +//.* (new markup + (markup '&source-line-comment) + (body yytext)) + +;; Identifiers (only letters since we are interested in keywords only) +[_a-zA-Z]+ (let* ((ident (string->symbol yytext)) + (tmp (memq ident (*the-keys*)))) + (if tmp + (new markup + (markup '&source-module) + (body yytext)) + yytext)) + +;; Regular text (excluding `/' and `*') +[^\"a-zA-Z/*]+ (begin yytext) + +;; `/' and `*' alone. +/[^\*] (begin yytext) +\*[^/] (begin yytext) + + +<<EOF>> 'eof +<<ERROR>> (skribe-error 'c-fontifier "Parse error" yytext) |