Skip to content

Commit

Permalink
feat: implement DSL for defining alternate substitution lookup
Browse files Browse the repository at this point in the history
  • Loading branch information
Dalgona committed Jan 30, 2022
1 parent 7860962 commit ebe20b2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
20 changes: 20 additions & 0 deletions lib/pixel_font/dsl/otf_layout/lookups/gsub.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ defmodule PixelFont.DSL.OTFLayout.Lookups.GSUB do
alias PixelFont.DSL.OTFLayout.Lookups.Common
alias PixelFont.Glyph
alias PixelFont.TableSource.GSUB
alias PixelFont.TableSource.GSUB.Alternate1
alias PixelFont.TableSource.GSUB.Ligature1
alias PixelFont.TableSource.GSUB.ReverseChainingContext1
alias PixelFont.TableSource.GSUB.Single1
Expand All @@ -32,6 +33,15 @@ defmodule PixelFont.DSL.OTFLayout.Lookups.GSUB do
}
end

def __handle_lookup__(:alternate) do
%{
imports: [substitutions__3: 1],
type: 3,
ast_transform: &replace_call(&1, :substitutions, 1, :substitutions__3),
runtime_transform: & &1
}
end

def __handle_lookup__(:ligature) do
%{
imports: [substitutions__4: 1],
Expand Down Expand Up @@ -76,6 +86,16 @@ defmodule PixelFont.DSL.OTFLayout.Lookups.GSUB do
end
end

defmacro substitutions__3(do: do_block) do
quote do
(fn ->
import unquote(__MODULE__), only: [substitute: 2]

%Alternate1{alternatives: unquote(do_block |> get_exprs() |> elem(0))}
end).()
end
end

defmacro substitutions__4(do: do_block) do
quote do
(fn ->
Expand Down
2 changes: 1 addition & 1 deletion lib/pixel_font/table_source/gsub/alternate_1.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ defmodule PixelFont.TableSource.GSUB.Alternate1 do

defstruct alternatives: %{}

@type t :: %__MODULE__{alternatives: %{optional(Glyph.id()) => [Glyph.id()]}}
@type t :: %__MODULE__{alternatives: [{Glyph.id(), [Glyph.id()]}]}

defimpl PixelFont.TableSource.GSUB.Subtable do
require PixelFont.Util
Expand Down

0 comments on commit ebe20b2

Please sign in to comment.