Packages

Library that enables programs to write Data Matrix barcodes of the modern ECC200 variety.

Current section

Files

Jump to
data_matrix lib datamatrix.ex
Raw

lib/datamatrix.ex

defmodule DataMatrix do
@moduledoc """
Library that enables programs to write Data Matrix barcodes of the modern ECC200 variety.
Docs: https://github.com/0x8b/datamatrix
"""
alias DataMatrix.{Bits, Encode, Matrix, ReedSolomon, Render}
@default_opts [
quiet_zone: 1,
shape: :square
]
@doc """
"""
def encode(data, opts \\ [])
def encode(data, opts) when is_binary(data) do
opts = Keyword.merge(@default_opts, opts)
case Encode.encode(data, opts[:version] || opts[:shape] || :square) do
{:ok, version, data_codewords} -> {:ok, do_encode(version, data_codewords, opts)}
{:error, error} -> {:error, error}
end
end
def encode(data, _opts) when is_nil(data) or data == <<>> do
{:error, "Zero length data"}
end
defp do_encode(version, data_codewords, opts) do
error_codewords = ReedSolomon.encode(version, data_codewords)
Matrix.new(version)
|> Matrix.draw_patterns()
|> Matrix.draw_data(Bits.extract(data_codewords <> error_codewords))
|> Matrix.draw_quiet_zone(opts[:quiet_zone] || 1)
|> Matrix.export()
end
@doc """
"""
def format(matrix, _, opts \\ [])
def format(matrix, :svg, opts) do
Render.SVG.format(matrix, opts)
end
def format(matrix, :png, opts) do
Render.PNG.format(matrix, opts)
end
def format(matrix, :text, opts) do
Render.Text.format(matrix, opts)
end
end