55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # typed: true | ||
|  | # frozen_string_literal: true | ||
|  | 
 | ||
|  | require "kramdown/converter/man" | ||
|  | 
 | ||
|  | module Homebrew | ||
|  |   module Manpages | ||
|  |     module Converter | ||
|  |       # Converts our Kramdown-like input to roff. | ||
|  |       class Roff < ::Kramdown::Converter::Man | ||
|  |         # Override that adds Homebrew metadata for the top level header | ||
|  |         # and doesn't escape the text inside subheaders. | ||
|  |         def convert_header(element, options) | ||
|  |           if element.options[:level] == 1
 | ||
|  |             element.attr["data-date"] = Date.today.strftime("%B %Y") | ||
|  |             element.attr["data-extra"] = "Homebrew" | ||
|  |             return super | ||
|  |           end | ||
|  | 
 | ||
|  |           result = +"" | ||
|  |           inner(element, options.merge(result:)) | ||
|  |           result.gsub!(" [", ' \fR[') # make args not bold | ||
|  | 
 | ||
|  |           options[:result] << if element.options[:level] == 2
 | ||
|  |             macro("SH", quote(result)) | ||
|  |           else | ||
|  |             macro("SS", quote(result)) | ||
|  |           end | ||
|  |         end | ||
|  | 
 | ||
|  |         def convert_variable(element, options) | ||
|  |           options[:result] << "\\fI#{escape(element.value)}\\fP" | ||
|  |         end | ||
|  | 
 | ||
|  |         def convert_a(element, options) | ||
|  |           if element.attr["href"].chr == "#" | ||
|  |             # Hide internal links - just make them italicised | ||
|  |             convert_em(element, options) | ||
|  |           else | ||
|  |             super | ||
|  |             # Remove the space after links if the next character is not a space | ||
|  |             if options[:result].end_with?(".UE\n") && | ||
|  |                (next_element = options[:next]) && | ||
|  |                next_element.type == :text && | ||
|  |                next_element.value.chr.present? # i.e. not a space character | ||
|  |               options[:result].chomp! | ||
|  |               options[:result] << " " | ||
|  |             end | ||
|  |           end | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |