defmodule Infer.Font do @moduledoc """ Font type matchers based on the [magic number](https://en.wikipedia.org/wiki/Magic_number_(programming)) """ @doc """ Takes the binary file contents as arguments. Returns `true` if it's a woff font. """ @spec woff?(binary()) :: boolean() def woff?(<<0x77, 0x4F, 0x46, 0x46, 0x00, 0x01, 0x00, 0x00, _rest::binary>>), do: true def woff?(_binary), do: false @doc """ Takes the binary file contents as arguments. Returns `true` if it's a woff2 font. """ @spec woff2?(binary()) :: boolean() def woff2?(<<0x77, 0x4F, 0x46, 0x32, 0x00, 0x01, 0x00, 0x00, _rest::binary>>), do: true def woff2?(_binary), do: false @doc """ Takes the binary file contents as arguments. Returns `true` if it's a ttf font. ## Examples iex> binary = File.read!("test/fonts/sample.ttf") iex> Infer.Font.ttf?(binary) true """ @spec ttf?(binary()) :: boolean() def ttf?(<<0x00, 0x01, 0x00, 0x00, 0x00, _rest::binary>>), do: true def ttf?(_binary), do: false @doc """ Takes the binary file contents as arguments. Returns `true` if it's a otf font. """ @spec otf?(binary()) :: boolean() def otf?(<<0x4F, 0x54, 0x54, 0x4F, 0x00>>), do: true def otf?(_binary), do: false end