Sha256: 7262aed1d469e2f18c941101a55fe5e6fbcd8b49607f30a2e31001572ce6a77a
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
# -*- coding: utf-8 -*- # # frozen_string_literal: true module Rouge module Lexers class HTTP < RegexLexer tag 'http' title "HTTP" desc 'http requests and responses' def self.http_methods @http_methods ||= %w(GET POST PUT DELETE HEAD OPTIONS TRACE PATCH) end def content_lexer return Lexers::PlainText unless @content_type @content_lexer ||= Lexer.guess_by_mimetype(@content_type) rescue Lexer::AmbiguousGuess @content_lexer = Lexers::PlainText end start { @content_type = 'text/plain' } state :root do # request rule %r( (#{HTTP.http_methods.join('|')})([ ]+) # method ([^ ]+)([ ]+) # path (HTTPS?)(/)(1[.][01])(\r?\n|$) # http version )ox do groups( Name::Function, Text, Name::Namespace, Text, Keyword, Operator, Num, Text ) push :headers end # response rule %r( (HTTPS?)(/)(1[.][01])([ ]+) # http version (\d{3})([ ]+) # status ([^\r\n]+)(\r?\n|$) # status message )x do groups( Keyword, Operator, Num, Text, Num, Text, Name::Exception, Text ) push :headers end end state :headers do rule %r/([^\s:]+)( *)(:)( *)([^\r\n]+)(\r?\n|$)/ do |m| key = m[1] value = m[5] if key.strip.casecmp('content-type').zero? @content_type = value.split(';')[0].downcase end groups Name::Attribute, Text, Punctuation, Text, Str, Text end rule %r/([^\r\n]+)(\r?\n|$)/ do groups Str, Text end rule %r/\r?\n/, Text, :content end state :content do rule %r/.+/m do delegate(content_lexer) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rouge-3.8.0 | lib/rouge/lexers/http.rb |
rouge-3.7.0 | lib/rouge/lexers/http.rb |
rouge-3.6.0 | lib/rouge/lexers/http.rb |