module MiniSyntax::Highlighter::CSS
Public Class Methods
highlight(code)
click to toggle source
# File lib/minisyntax/highlighter/css.rb, line 4 def self.highlight(code) code.gsub! %r(( *)((\$[a-z\-_]+):(.+?);|([_\*]?[a-z\-]+:)(("|[^&])+?);|@import (.+?);|(([\.\#]?[a-z0-9\-_&:]+([,\s]\s*[\.\#]?[a-z0-9\-_&:]+)*))(\s*)\{(.*?\n\1)\})|@media (.+?)\{|@include (.+?);|@extend (.+?);)im do intendation = $1 if $3 %Q(#{intendation}<var>#{$3}</var>:#{highlight_value($4)};) elsif $5 %Q(#{intendation}<b>#{$5}</b>#{highlight_value($6)};) elsif $8 %Q(#{intendation}@<em>import</em> <q>#{$8}</q>;) elsif $10 whitespace = $12 rules = $13 # selector = $10.gsub(/([\.\#\b])([a-z0-9\-_]+)\b/i) do # if $1 == '.' # %Q(<b><i>#{$1}#{$2}</i></b>) # elsif $1 == '#' # %Q(<b>#{$1}#{$2}</b>) # else # %Q(<em>#{$2}</em>) # end # end selector = %Q(<b><i>#{$10}</i></b>) %Q(#{intendation}#{selector}#{whitespace}{#{highlight(rules)}}) elsif $14 %Q(#{intendation}@<em>media</em> #{$14.gsub('and', '<em>and</em>')}{) elsif $15 call = $15 mixin = call.gsub(/^([a-z\-_]+).*$/, '<b>\\1</b>') parameter = call.gsub(/^.*?\((.+?)\)/) { "(#{highlight_value($1)})" } %Q(#{intendation}@<em>include</em> #{mixin}#{parameter};) elsif $16 call = $16 rule = call.gsub(/^([\.#%]?[a-z\-_]+).*$/, '<b>\\1</b>') %Q(#{intendation}@<em>extend</em> #{rule};) end end code.gsub! %r((<i>)?(//.*?$|/\*.*?\*/)) do comment = $2 if $1 == '<i>' or comment.gsub(%r(<q>(.*?)</q>), "\\1") =~ %r(</q>) comment else comment.gsub! %r(</?(b|i|em|var|code)>), "" %Q(<i>#{comment}</i>) end end code end
Private Class Methods
highlight_value(code)
click to toggle source
# File lib/minisyntax/highlighter/css.rb, line 53 def self.highlight_value(code) keywords = %w(!important left-side far-left left center-left center center-right right far-right right-side behind leftwards rightwards inherit) keywords << %w(scroll fixed transparent none top center bottom middle) keywords << %w(repeat repeat-x repeat-y no-repeat collapse separate auto both normal) keywords << %w(attr open-quote close-quote no-open-quote no-close-quote) keywords << %w(crosshair default pointer move e-resize ne-resize nw-resize n-resize se-resize sw-resize s-resize w-resize text wait help progress) keywords << %w(ltr rtl) keywords << %w(inline block list-item run-in inline-block table inline-table table-row-group table-header-group table-footer-group table-row table-column-group table-column table-cell table-caption) keywords << %w(below level above higher lower) keywords << %w(show hide italic oblique small-caps bold bolder lighter) keywords << %w(caption icon menu message-box small-caption status-bar) keywords << %w(inside outside disc circle square decimal decimal-leading-zero lower-roman upper-roman lower-greek lower-latin upper-latin armenian georgian lower-alpha upper-alpha) keywords << %w(invert) keywords << %w(visible hidden scroll) keywords << %w(always avoid) keywords << %w(x-low low medium high x-high) keywords << %w(static relative absolute fixed) keywords << %w(spell-out) keywords << %w(x-slow slow medium fast x-fast faster slower) keywords << %w(left right center justify) keywords << %w(underline overline line-through blink) keywords << %w(capitalize uppercase lowercase) keywords << %w(embed bidi-override) keywords << %w(baseline sub super top text-top middle bottom text-bottom) keywords << %w(silent x-soft soft medium loud x-loud) keywords << %w(normal pre nowrap pre-wrap pre-line) keywords << %w(maroon red yellow olive purple fuchsia white lime green navy blue aqua teal black silver gray orange) code.gsub! /\$[a-z\-_]+/, "<var>\\0</var>" code.gsub! /\b#{keywords.join('|')}\b/, "<b>\\0</b>" code.gsub! /("|')(.*?)\1/ do |q| q.gsub! %r(<(b|i|em|var)>(.*?)</\1>), "\\2" q.gsub!(/#\{(.*?)\}/) do %Q(<code>\#{#{highlight_value($1)}}</code>) end %Q(<q>#{q}</q>) end code.gsub! %r(<var>(.+?)</var>) do |var| "<var>#{var.gsub(%r(</?[a-z]+>), '')}</var>" end code end