From: Caleb Clausen Date: 2009-08-26T12:24:14+09:00 Subject: Re: [QUIZ] Syntax Highlighting (#218) --000e0cd488b21fe2ae047202fc67 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 8/23/09, Daniel Moore wrote: > This week's quiz is to write a syntax highlighter. Your program or > method will take as input unadorned Ruby code and return marked-up > code. Different syntactical elements of the code should have different > styles. As an additional challenge you may wish to indicate syntax > errors at the point in which they occur in the code. You may choose > any output style that you like. If you are unsure of what to use to > colorize output, then check out Term::ANSIColor[1]. This was a fun little quiz. Of course, I cheated like mad. (I think that was the point, tho.) My entry uses RubyLexer, my own stand-alone lexer for ruby. It'll be interesting to see what other submissions look like. --000e0cd488b21fe2ae047202fc67 Content-Type: application/x-ruby; name="coloruby.rb" Content-Disposition: attachment; filename="coloruby.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 cmVxdWlyZSAncnVieWdlbXMnCnJlcXVpcmUgJ3J1YnlsZXhlcicKcmVxdWlyZSAndGVybS9hbnNp Y29sb3InCgoKZGVmIGNvbG9ydWJ5IGZpbGUsZmQ9b3BlbihmaWxlKQogIGxleGVyPVJ1YnlMZXhl ci5uZXcoZmlsZSxmZCkKICBiZWdpbgogICAgdG9rZW49bGV4ZXIuZ2V0MXRva2VuCiAgICBwcmlu dCB0b2tlbi5jb2xvcml6ZQogIGVuZCB1bnRpbCBSdWJ5TGV4ZXI6OkVvaVRva2VuPT09dG9rZW4K ZW5zdXJlCiAgcHJpbnQgVGVybTo6QU5TSUNvbG9yLnJlc2V0CmVuZAoKY2xhc3MgUnVieUxleGVy CiAgY2xhc3MgVG9rZW4KICAgIGluY2x1ZGUgVGVybTo6QU5TSUNvbG9yCgogICAgZGVmIGNvbG9y aXplCiAgICAgIGNvbG9yK2lkZW50LnRvX3MKICAgIGVuZAogIGVuZAoKICBjbGFzcyBWYXJOYW1l VG9rZW4KICAgIGFsaWFzIGNvbG9yIGJsdWUKICBlbmQKCiAgY2xhc3MgTWV0aE5hbWVUb2tlbgog ICAgYWxpYXMgY29sb3IgZ3JlZW4KICBlbmQKCiAgY2xhc3MgT3BlcmF0b3JUb2tlbgogICAgYWxp YXMgY29sb3IgY3lhbgogIGVuZAoKICBjbGFzcyBLZXl3b3JkVG9rZW4KICAgIGRlZiBjb2xvcml6 ZQogICAgICBpZiAvW15hLXpdL2k9PT1pZGVudAogICAgICAgIHllbGxvdytpZGVudAogICAgICBl bHNlCiAgICAgICAgcmVkK2lkZW50CiAgICAgIGVuZAogICAgZW5kCiAgZW5kCgogIGNsYXNzIFdz VG9rZW4KICAgIGRlZiBjb2xvcml6ZQogICAgICBibGFjaytpZGVudAogICAgZW5kCiAgZW5kCgog IGNsYXNzIE5ld2xpbmVUb2tlbgogICAgYWxpYXMgY29sb3IgYmxhY2sKICBlbmQKCiAgY2xhc3Mg WndUb2tlbgogICAgZGVmIGNvbG9yaXplOyAnJyBlbmQKICBlbmQKCiAgY2xhc3MgRmlsZUFuZExp bmVUb2tlbgogICAgZGVmIGNvbG9yaXplOyAnJyBlbmQKICBlbmQKCiAgY2xhc3MgSW1wbGljaXRQ YXJhbUxpc3RTdGFydFRva2VuCiAgICBkZWYgY29sb3JpemU7ICcnIGVuZCAgICAKICBlbmQKCiAg Y2xhc3MgSW1wbGljaXRQYXJhbUxpc3RFbmRUb2tlbgogICAgZGVmIGNvbG9yaXplOyAnJyBlbmQg ICAgCiAgZW5kCgogIGNsYXNzIElnbm9yZVRva2VuCiAgICBkZWYgY29sb3JpemUKICAgICAgZGFy aytncmVlbitpZGVudCtyZXNldAogICAgZW5kCiAgZW5kCiAKICBjbGFzcyBFc2NObFRva2VuCiAg ICBkZWYgY29sb3JpemUKICAgICAgeWVsbG93K2lkZW50CiAgICBlbmQKICBlbmQKCiAgY2xhc3Mg TnVtYmVyVG9rZW4KICAgIGRlZiBjb2xvcml6ZQogICAgICBkYXJrK2JsdWUraWRlbnQrcmVzZXQK ICAgIGVuZAogIGVuZAoKICBjbGFzcyBTeW1ib2xUb2tlbgogICAgZGVmIGNvbG9yaXplCiAgICAg IGlmIFN0cmluZ1Rva2VuPT09aWRlbnQKICAgICAgICBkYXJrK2JsdWUrJzonK2lkZW50LmNvbG9y aXplK3Jlc2V0CiAgICAgIGVsc2UKICAgICAgICBkYXJrK2JsdWUraWRlbnQrcmVzZXQKICAgICAg ZW5kCiAgICBlbmQKICBlbmQKCiAgY2xhc3MgU3RyaW5nVG9rZW4KICAgIGRlZiBjb2xvcml6ZQog ICAgICBtYWdlbnRhK29wZW4rCiAgICAgICAgZWxlbXMubWFwe3xlbGVtfAogICAgICAgICAgaWYg U3RyaW5nPT09ZWxlbQogICAgICAgICAgICBtYWdlbnRhK2VsZW0KICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgeWVsbG93KycjJytlbGVtLmNvbG9yaXplCiAgICAgICAgICBlbmQKICAgICAgICB9 LmpvaW4rCiAgICAgIG1hZ2VudGErY2xvc2UKICAgIGVuZAogIGVuZAoKICBjbGFzcyBSdWJ5Q29k ZQogICAgZGVmIGNvbG9yaXplCiAgICAgIGlkZW50Lm1hcHt8dG9rfCB0b2suY29sb3JpemUgfS5q b2luCiAgICBlbmQKICBlbmQKCiAgY2xhc3MgSGVyZVBsYWNlaG9sZGVyVG9rZW4KICAgIGRlZiBj b2xvcml6ZQogICAgICAiI3tibHVlfTw8I3snLScgaWYgQGRhc2h9I3tlbmRlcn0iCiAgICBlbmQK ICBlbmQKCiAgY2xhc3MgSGVyZUJvZHlUb2tlbgogICAgZGVmIGNvbG9yaXplCiAgICAgIGhlYWR0 b2suc3RyaW5nLmNvbG9yaXplCiAgICBlbmQKICBlbmQKCiAgY2xhc3MgRW9pVG9rZW4KICAgIGRl ZiBjb2xvcml6ZQogICAgICByZXR1cm4gJycgI2d5YWFoLCBAb2Zmc2V0IGhhcyBvZmYgYnkgb25l IGVycm9ycwogICAgICBkYXRhPWJlZ2luCiAgICAgICAgICAgICBAZmlsZS5wb3M9QG9mZnNldC0x CiAgICAgICAgICAgICBAZmlsZS5yZWFkCiAgICAgICAgICAgcmVzY3VlCiAgICAgICAgICAgICBA ZmlsZVtAb2Zmc2V0LTEuLi0xXQogICAgICAgICAgIGVuZAogICAgICBkYXJrK2dyZWVuK2RhdGEr cmVzZXQKICAgIGVuZAogIGVuZAplbmQKCmlmIF9fRklMRV9fPT0kMAogIGlmIEFSR1YuZmlyc3Q9 PSctZScKICAgIGNvbG9ydWJ5IEFSR1ZbMV0sQVJHVlsxXQogIGVsc2UKICAgIGNvbG9ydWJ5IEFS R1YuZmlyc3QKICBlbmQKZW5kCgo= --000e0cd488b21fe2ae047202fc67--