NLdoc.Conversion.Reader.Docx.Files.Numberings (NLdoc.Conversion.Reader.Docx v1.1.2)

View Source

This 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

abstract_numberings()

@type abstract_numberings() :: [NLdoc.Conversion.Reader.Docx.AST.Numbering.t()]

t()

@type t() :: %{
  required({id :: String.t(), level :: integer()}) =>
    NLdoc.Conversion.Reader.Docx.AST.Numbering.t()
}

Functions

get(numberings, arg2)

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

get(numberings, id, level)

@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

parse(arg)

@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.

read!(filepath)

@spec read!(filepath :: String.t()) :: t()
@spec read!(filepaths :: [String.t()]) :: t()

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.