mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
44 lines
1.2 KiB
Ruby
44 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
class CGI
|
|
module Util; end
|
|
include Util
|
|
extend Util
|
|
end
|
|
|
|
module CGI::Util
|
|
# Format a +Time+ object as a String using the format specified by RFC 1123.
|
|
#
|
|
# CGI.rfc1123_date(Time.now)
|
|
# # Sat, 01 Jan 2000 00:00:00 GMT
|
|
def rfc1123_date(time)
|
|
time.getgm.strftime("%a, %d %b %Y %T GMT")
|
|
end
|
|
|
|
# Prettify (indent) an HTML string.
|
|
#
|
|
# +string+ is the HTML string to indent. +shift+ is the indentation
|
|
# unit to use; it defaults to two spaces.
|
|
#
|
|
# print CGI.pretty("<HTML><BODY></BODY></HTML>")
|
|
# # <HTML>
|
|
# # <BODY>
|
|
# # </BODY>
|
|
# # </HTML>
|
|
#
|
|
# print CGI.pretty("<HTML><BODY></BODY></HTML>", "\t")
|
|
# # <HTML>
|
|
# # <BODY>
|
|
# # </BODY>
|
|
# # </HTML>
|
|
#
|
|
def pretty(string, shift = " ")
|
|
lines = string.gsub(/(?!\A)<.*?>/m, "\n\\0").gsub(/<.*?>(?!\n)/m, "\\0\n")
|
|
end_pos = 0
|
|
while end_pos = lines.index(/^<\/(\w+)/, end_pos)
|
|
element = $1.dup
|
|
start_pos = lines.rindex(/^\s*<#{element}/i, end_pos)
|
|
lines[start_pos ... end_pos] = "__" + lines[start_pos ... end_pos].gsub(/\n(?!\z)/, "\n" + shift) + "__"
|
|
end
|
|
lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1')
|
|
end
|
|
end
|