Changeset 18643 in project


Ignore:
Timestamp:
06/27/10 17:30:45 (11 years ago)
Author:
sjamaan
Message:

colorize: Implement initial support for Ruby syntax highlighting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/colorize/coloring-types.scm

    r18638 r18643  
    740740    (lambda (type s)
    741741      (if (member s (*python-reserved-words*))
     742          (format #f "<span class=\"symbol\">~A</span>"
     743                  s)
     744          s)))))
     745
     746(define *ruby-reserved-words*
     747  (make-parameter
     748   '("BEGIN"    "class"    "ensure"   "nil"      "self"     "when"
     749     "END"      "def"      "false"    "not"      "super"    "while"
     750     "alias"    "defined"  "for"      "or"       "then"     "yield"
     751     "and"      "do"       "if"       "redo"     "true"     "begin"
     752     "else"     "in"       "rescue"   "undef"    "break"    "elsif"
     753     "module"   "retry"    "unless"   "case"     "end"      "next"
     754     "return"   "until")))
     755
     756(define *ruby-special-procs*
     757  (make-parameter
     758   '("include"  "require"  "lambda"   "proc"     "raise")))
     759
     760(define-coloring-type :ruby "Ruby"
     761  :default-mode :normal
     762  :transitions
     763  ((:normal
     764    ((or
     765      (scan-any (*c-open-parens*))
     766      (scan-any (*c-close-parens*)))
     767     (set-mode :paren-ish
     768               :until (advance 1)
     769               :advancing #f))
     770    ((scan #\#)
     771     (set-mode :comment
     772               :until (scan-any '(#\return #\newline))))
     773    ((scan ":\"")
     774     (set-mode :quoted-symbol
     775               :until (scan #\")))
     776    ((scan ":\'")
     777     (set-mode :quoted-symbol
     778               :until (scan #\')))
     779    ((and (not (peek "::")) (scan #\: :not-preceded-by #\:))
     780     (set-mode :symbol
     781               :until (scan-any (*non-constituent*))
     782               :advancing #f))
     783    ((scan #\")
     784     (set-mode :string
     785               :until (scan #\")))
     786    ((scan #\')
     787     (set-mode :string
     788               :until (scan #\')))
     789    ((scan "=begin")
     790     (set-mode :comment
     791               :until (scan "=end")))
     792    ((scan "@")
     793     (set-mode :instance-var
     794               :until (scan-any (*non-constituent*))
     795               :advancing #f))
     796    ((scan-any (*c-begin-word*))
     797     (set-mode :word-ish
     798               :until (scan-any (*c-terminators*))
     799               :advancing #f)))
     800   ((:string :quoted-symbol)
     801    ((scan #\\)
     802     (set-mode :single-escape
     803               :until (advance 1)))))
     804  :formatter-variables ((paren-counter 0))
     805  :formatters
     806  ((:normal
     807    (lambda (type s)
     808      s))
     809   (:comment
     810    (lambda (type s)
     811      (format #f "<span class=\"comment\">~A</span>"
     812              s)))
     813   (:string
     814    (lambda (type s)
     815      (format #f "<span class=\"string\">~A</span>"
     816              s)))
     817   (:single-escape
     818    (lambda (type s)
     819      (call-formatter (cdr type) s)))
     820   (:paren-ish
     821    (lambda (type s)
     822      (let ((open #f)
     823            (count 0))
     824        (if (= (string-length s) 1)
     825            (begin
     826              (when (member (string-ref s 0) (string->list (*c-open-parens*)))
     827                (set! open #t)
     828                (set! count (modulo paren-counter 6))
     829                (set! paren-counter (add1 paren-counter)))
     830              (when (member (string-ref s 0) (string->list (*c-close-parens*)))
     831                (set! open #f)
     832                (set! paren-counter (sub1 paren-counter))
     833                (set! count (modulo paren-counter 6)))
     834              (if open
     835                  (format #f "<span class=\"paren~A\">~A<span class=\"~A\">"
     836                          (add1 count) s (*css-background-class*))
     837                  (format #f "</span>~A</span>"
     838                          s)))
     839            s))))
     840   (:instance-var
     841    (lambda (type s)
     842      (format #f "<span class=\"special\">~A</span>" s)))
     843   ((:symbol :quoted-symbol)
     844    (lambda (type s)
     845      (format #f "<span class=\"keyword\">~A</span>" s)))
     846   (:word-ish
     847    (lambda (type s)
     848      (if (or (member s (*ruby-reserved-words*))
     849              (member s (*ruby-special-procs*)))
    742850          (format #f "<span class=\"symbol\">~A</span>"
    743851                  s)
Note: See TracChangeset for help on using the changeset viewer.