Class: Slamdown::Conversion::Normaliser

Inherits:
Object
  • Object
show all
Defined in:
lib/slamdown/conversion/normaliser.rb,
lib/slamdown/conversion/normaliser/breaks.rb,
lib/slamdown/conversion/normaliser/content.rb,
lib/slamdown/conversion/normaliser/node_factory.rb,
lib/slamdown/conversion/normaliser/url_rewriter.rb,
lib/slamdown/conversion/normaliser/heading_levels.rb,
lib/slamdown/conversion/normaliser/element_actions.rb,
lib/slamdown/conversion/normaliser/inline_semantics.rb,
lib/slamdown/conversion/normaliser/correction_diagnostics.rb

Overview

Coordinates one renderer-independent normalisation run through focused element, content, break and heading collaborators.

Defined Under Namespace

Classes: Breaks, Content, CorrectionDiagnostics, ElementActions, HeadingLevels, InlineSemantics, NodeFactory, UrlRewriter

Constant Summary collapse

BLOCK_SEMANTICS =
Content::BLOCK_SEMANTICS

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Normaliser

Returns a new instance of Normaliser.

Raises:

  • (ArgumentError)


16
17
18
19
20
# File 'lib/slamdown/conversion/normaliser.rb', line 16

def initialize(configuration)
	raise ArgumentError, "configuration must be a Slamdown conversion configuration" unless configuration.is_a?(Configuration)

	@configuration = configuration
end

Class Method Details

.normalise(root, configuration) ⇒ Object



11
12
13
# File 'lib/slamdown/conversion/normaliser.rb', line 11

def normalise(root, configuration)
	new(configuration).normalise(root)
end

Instance Method Details

#normalise(root) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/slamdown/conversion/normaliser.rb', line 22

def normalise(root)
	validate_root(root)
	node_factory = NodeFactory.new
	diagnostics = CorrectionDiagnostics.new
	content = Content.new(node_factory)
	breaks = Breaks.new(node_factory, content, diagnostics)
	element_actions = ElementActions.new(@configuration, node_factory, content, breaks, diagnostics)
	children = element_actions.normalise_root(root)

	if @configuration.inline
		children = content.normalise_inline_sequence(children, :trim => true)
	else
		children = content.wrap_phrasing_runs(children)
		children = HeadingLevels.new(@configuration, content, diagnostics).adjust(children)
	end

	tree = node_factory.build(
		:kind => :document,
		:children => children,
		:properties => root.kind == :document ? root.properties : {},
		:source_path => []
	)
	Normalisation.new(tree, diagnostics.to_a)
end