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
							 |