Property definitions

markdown2 $ MdEmphasisDelimiterProcessor :: defaultinit
# A processor for emphasis tokens
class MdEmphasisDelimiterProcessor
	super MdDelimiterProcessor

	# Delimiter character
	var delimiter_char: Char

	redef var min_length = 1
	redef fun opening_delimiter do return delimiter_char
	redef fun closing_delimiter do return delimiter_char

	redef fun delimiter_use(opener, closer) do
		# "multiple of 3" rule for internal delimiter runs
		if (opener.can_close or closer.can_open) and
		   ((opener.original_length + closer.original_length) % 3 == 0) then
			return 0
		end
		# calculate actual number of delimiters used from this closer
		if opener.length >= 2 and closer.length >= 2 then
			return 2
		end
		return 1
	end

	redef fun process(opener, closer, delimiter_use) do
		var single_delimiter = opening_delimiter.to_s
		var emphasis: MdNode
		if delimiter_use == 1 then
			emphasis = new MdEmphasis(
				new MdLocation(
					opener.location.line_start,
					opener.location.column_start,
					closer.location.line_end,
					closer.location.column_end),
				single_delimiter)
		else
			emphasis = new MdStrongEmphasis(
				new MdLocation(
					opener.location.line_start,
					opener.location.column_start + opener.literal.length,
					closer.location.line_end,
					closer.location.column_end - closer.literal.length),
				"{single_delimiter}{single_delimiter}")
		end
		var tmp = opener.next
		while tmp != null and tmp != closer do
			var next = tmp.next
			emphasis.append_child(tmp)
			tmp = next
		end
		opener.insert_after(emphasis)
	end
end
lib/markdown2/markdown_inline_parsing.nit:1296,1--1348,3