| I would like to parse color names in X11's rgb.txt. They look like this:
|
| 119 136 153 light slate gray
| 119 136 153 LightSlateGray
|
| When parsing each line, I would like to get the color triplet, and the
| name. I tried it like this:
|
| (let ((color-scanner
| (cl-ppcre:create-scanner
| "^ +([0-9]{0,2}) +([0-9]{0,2}) +([0-9]{0,2}) +([ a-zA-Z0-9]+)")))
| (cl-ppcre:scan-to-strings color-scanner " 1 2 3 foo bar baz "))
|
| This gives #("1" "2" "3" "foo bar baz ") for the substrings. How can
| I get rid of the trailing spaces?
Use the right tool for the job :)
(defun parse-rgb-line (string &key (start 0) end)
(multiple-value-bind (r endr)
(parse-integer string :start start :end end :junk-allowed t)
(multiple-value-bind (g endg)
(parse-integer string :start (1+ endr) :end end :junk-allowed t)
(multiple-value-bind (b endb)
(parse-integer string :start (1+ endg) :end end :junk-allowed t)
(let ((name-startpos
(position-if-not (lambda (c) (case c ((#\Tab #\Space) t)))
string :start (1+ endb))))
(values (format nil "#~2,'0X~2,'0X~2,'0X" r g b)
(subseq string name-startpos end)))))))
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 388 |
Nodes: | 16 (2 / 14) |
Uptime: | 10:32:18 |
Calls: | 8,221 |
Files: | 13,122 |
Messages: | 5,872,709 |