| 
									
										
										
										
											2024-08-12 10:30:59 +01:00
										 |  |  | # typed: true # rubocop:todo Sorbet/StrictSigil | 
					
						
							| 
									
										
										
										
											2024-03-10 03:22:53 +00:00
										 |  |  | # 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 |