| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2023-01-01 06:19:35 +00:00
										 |  |  | # Copyright (C) 2006-2023  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'html/pipeline' | 
					
						
							| 
									
										
										
										
											2022-01-22 09:24:43 +00:00
										 |  |  | require 'task_list/filter' | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Redmine | 
					
						
							|  |  |  |   module WikiFormatting | 
					
						
							|  |  |  |     module CommonMark | 
					
						
							|  |  |  |       # configuration of the rendering pipeline | 
					
						
							|  |  |  |       PIPELINE_CONFIG = { | 
					
						
							| 
									
										
										
										
											2023-01-31 23:55:55 +00:00
										 |  |  |         # https://github.com/gjtorikian/commonmarker#extension-options | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  |         commonmarker_extensions: [ | 
					
						
							|  |  |  |           :table, | 
					
						
							|  |  |  |           :strikethrough, | 
					
						
							|  |  |  |           :tagfilter, | 
					
						
							|  |  |  |           :autolink | 
					
						
							|  |  |  |         ].freeze, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # https://github.com/gjtorikian/commonmarker#parse-options | 
					
						
							|  |  |  |         commonmarker_parse_options: [ | 
					
						
							|  |  |  |           :FOOTNOTES, | 
					
						
							|  |  |  |           :STRIKETHROUGH_DOUBLE_TILDE, | 
					
						
							|  |  |  |           :UNSAFE, | 
					
						
							|  |  |  |           :VALIDATE_UTF8 | 
					
						
							|  |  |  |         ].freeze, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # https://github.com/gjtorikian/commonmarker#render-options | 
					
						
							|  |  |  |         commonmarker_render_options: [ | 
					
						
							|  |  |  |           :UNSAFE | 
					
						
							| 
									
										
										
										
											2021-10-03 05:17:18 +00:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  |       }.freeze | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-03 19:20:04 +00:00
										 |  |  |       if Redmine::Configuration['common_mark_enable_hardbreaks'] == true | 
					
						
							| 
									
										
										
										
											2021-10-03 05:17:18 +00:00
										 |  |  |         PIPELINE_CONFIG[:commonmarker_render_options].push(:HARDBREAKS) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       PIPELINE_CONFIG[:commonmarker_render_options].freeze | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  |       MarkdownPipeline = HTML::Pipeline.new [ | 
					
						
							|  |  |  |         MarkdownFilter, | 
					
						
							|  |  |  |         SanitizationFilter, | 
					
						
							|  |  |  |         SyntaxHighlightFilter, | 
					
						
							|  |  |  |         FixupAutoLinksFilter, | 
					
						
							|  |  |  |         ExternalLinksFilter, | 
					
						
							| 
									
										
										
										
											2022-01-22 09:24:43 +00:00
										 |  |  |         TaskList::Filter | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  |       ], PIPELINE_CONFIG | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-16 21:39:27 +00:00
										 |  |  |       class Formatter | 
					
						
							|  |  |  |         include Redmine::WikiFormatting::SectionHelper | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def initialize(text) | 
					
						
							|  |  |  |           @text = text | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-11 21:40:56 +00:00
										 |  |  |         def to_html(*args) | 
					
						
							|  |  |  |           result = MarkdownPipeline.call @text | 
					
						
							|  |  |  |           result[:output].to_s | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |