NLdoc.Conversion.Reader.Docx.Files.Numberings (NLdoc.Conversion.Reader.Docx v1.1.2)
View SourceThis module parses the numbering files (e.g. word/numbering.xml
) in a Docx document
into a map mapping {id, level}
tuples to numbering definitions, represented by
NLdoc.Conversion.Reader.Docx.AST.Numbering
structs.
How does it work?
Inside the numberings file, a set of numberings and abstract numberings are defined. The numberings inherit it's properties from an abstract numbering. An example of this is illustrated below.
<?xml version="1.0" encoding="UTF-8"?>
<w:numbering xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:abstractNum w:abstractNumId="990">
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="bullet"/>
</w:lvl>
<w:lvl w:ilvl="1">
<w:start w:val="1"/>
<w:numFmt w:val="bullet"/>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1000">
<w:abstractNumId w:val="990"/>
</w:num>
<w:num w:numId="1001">
<w:abstractNumId w:val="990"/>
<w:lvlOverride w:ilvl="0">
<w:startOverride w:val="3"/>
</w:lvlOverride>
</w:num>
</w:numbering>
An abstract numbering can define a set of properties, which the numberings can inherit and/or override.
Summary
Functions
Get the numbering definition referred to by a NumberingProperties
struct
or the numbering properties embedded in a ParagraphProperties
struct.
Get a numbering definition from a parsed map of numbering definitions by its ID and level.
Parses the numbering definitions in a word/numbering.xml
file into a map mapping
{id, level}
tuples to NLdoc.Conversion.Reader.Docx.AST.Numbering
structs.
Reads a (list of) Docx numbering.xml file(s) at the given path(s) and parses it/them into
a single map as returned by parse/1
.
Types
@type abstract_numberings() :: [NLdoc.Conversion.Reader.Docx.AST.Numbering.t()]
@type t() :: %{ required({id :: String.t(), level :: integer()}) => NLdoc.Conversion.Reader.Docx.AST.Numbering.t() }
Functions
@spec get( t(), NLdoc.Conversion.Reader.Docx.AST.NumberingProperties.t() | NLdoc.Conversion.Reader.Docx.AST.ParagraphProperties.t() ) :: NLdoc.Conversion.Reader.Docx.AST.Numbering.t() | nil
@spec get(t(), nil) :: nil
Get the numbering definition referred to by a NumberingProperties
struct
or the numbering properties embedded in a ParagraphProperties
struct.
Examples
iex> alias NLdoc.Conversion.Reader.Docx.AST.{Numbering, NumberingProperties, ParagraphProperties}
iex> import NLdoc.Conversion.Reader.Docx.Files.Numberings
iex> numberings = %{
...> {"3", 2} => %Numbering{id: "3", level: 2, format: "X", start: 3},
...> {"3", 1} => %Numbering{id: "3", level: 1, format: "Y", start: 2},
...> {"2", 1} => %Numbering{id: "2", level: 1, format: "Y", start: 2}}
iex> num_props = %NumberingProperties{num_id: "3", ilvl: 1}
iex> numberings |> get(num_props)
%Numbering{id: "3", level: 1, format: "Y", start: 2}
iex> numberings |> get(%ParagraphProperties{style_id: nil, num_properties: num_props})
%Numbering{id: "3", level: 1, format: "Y", start: 2}
iex> numberings |> get(nil)
nil
@spec get(t(), id :: String.t(), level :: integer()) :: NLdoc.Conversion.Reader.Docx.AST.Numbering.t() | nil
Get a numbering definition from a parsed map of numbering definitions by its ID and level.
Examples
iex> alias NLdoc.Conversion.Reader.Docx.AST.Numbering
iex> import NLdoc.Conversion.Reader.Docx.Files.Numberings
iex> numberings = %{
...> {"3", 2} => %Numbering{id: "3", level: 2, format: "X", start: 3},
...> {"3", 1} => %Numbering{id: "3", level: 1, format: "Y", start: 2},
...> {"2", 1} => %Numbering{id: "2", level: 1, format: "Y", start: 2}}
iex> get(numberings, "3", 1)
%Numbering{id: "3", level: 1, format: "Y", start: 2}
iex> get(numberings, "3", 5)
nil
iex> get(numberings, "5", 1)
nil
@spec parse(Saxy.XML.element()) :: t()
Parses the numbering definitions in a word/numbering.xml
file into a map mapping
{id, level}
tuples to NLdoc.Conversion.Reader.Docx.AST.Numbering
structs.
Reads a (list of) Docx numbering.xml file(s) at the given path(s) and parses it/them into
a single map as returned by parse/1
.