Packages
text_stemmer
0.1.0
Pre-compiled Snowball stemmers for Elixir. Ships 36 stemming algorithms covering a wide range of natural languages, accessible through a single `Text.Stemmer.stem/2` entry point.
Current section
Files
Jump to
Current section
Files
lib/text/stemmer/stemmers/basque.ex
# Generated by Snowball.Generator — do not edit by hand.
defmodule Text.Stemmer.Stemmers.Basque do
@moduledoc """
Snowball stemmer for basque.
Generated from the canonical Snowball algorithm source.
"""
alias Snowball.Runtime
alias Snowball.Grouping
# Groupings
@g_v Grouping.from_string("aeiou")
# Among tables
@a_0 [
{"zlea", -1, 2, nil},
{"keria", -1, 1, nil},
{"la", -1, 1, nil},
{"era", -1, 1, nil},
{"dade", -1, 1, nil},
{"tade", -1, 1, nil},
{"date", -1, 1, nil},
{"tate", -1, 1, nil},
{"gi", -1, 1, nil},
{"ki", -1, 1, nil},
{"ik", -1, 1, nil},
{"lanik", 10, 1, nil},
{"rik", 10, 1, nil},
{"larik", 12, 1, nil},
{"ztik", 10, 1, nil},
{"go", -1, 1, nil},
{"ro", -1, 1, nil},
{"ero", 16, 1, nil},
{"to", -1, 1, nil}
]
@a_1 [
{"ada", -1, 1, nil},
{"kada", 0, 1, nil},
{"anda", -1, 1, nil},
{"denda", -1, 1, nil},
{"gabea", -1, 1, nil},
{"kabea", -1, 1, nil},
{"aldea", -1, 1, nil},
{"kaldea", 6, 1, nil},
{"taldea", 6, 1, nil},
{"ordea", -1, 1, nil},
{"zalea", -1, 1, nil},
{"tzalea", 10, 1, nil},
{"gilea", -1, 1, nil},
{"emea", -1, 1, nil},
{"kumea", -1, 1, nil},
{"nea", -1, 1, nil},
{"enea", 15, 1, nil},
{"zionea", 15, 1, nil},
{"unea", 15, 1, nil},
{"gunea", 18, 1, nil},
{"pea", -1, 1, nil},
{"aurrea", -1, 1, nil},
{"tea", -1, 1, nil},
{"kotea", 22, 1, nil},
{"artea", 22, 1, nil},
{"ostea", 22, 1, nil},
{"etxea", -1, 1, nil},
{"ga", -1, 1, nil},
{"anga", 27, 1, nil},
{"gaia", -1, 1, nil},
{"aldia", -1, 1, nil},
{"taldia", 30, 1, nil},
{"handia", -1, 1, nil},
{"mendia", -1, 1, nil},
{"geia", -1, 1, nil},
{"egia", -1, 1, nil},
{"degia", 35, 1, nil},
{"tegia", 35, 1, nil},
{"nahia", -1, 1, nil},
{"ohia", -1, 1, nil},
{"kia", -1, 1, nil},
{"tokia", 40, 1, nil},
{"oia", -1, 1, nil},
{"koia", 42, 1, nil},
{"aria", -1, 1, nil},
{"karia", 44, 1, nil},
{"laria", 44, 1, nil},
{"taria", 44, 1, nil},
{"eria", -1, 1, nil},
{"keria", 48, 1, nil},
{"teria", 48, 1, nil},
{"garria", -1, 2, nil},
{"larria", -1, 1, nil},
{"kirria", -1, 1, nil},
{"duria", -1, 1, nil},
{"asia", -1, 1, nil},
{"tia", -1, 1, nil},
{"ezia", -1, 1, nil},
{"bizia", -1, 1, nil},
{"ontzia", -1, 1, nil},
{"ka", -1, 1, nil},
{"joka", 60, 3, nil},
{"aurka", 60, -1, nil},
{"ska", 60, 1, nil},
{"xka", 60, 1, nil},
{"zka", 60, 1, nil},
{"gibela", -1, 1, nil},
{"gela", -1, 1, nil},
{"kaila", -1, 1, nil},
{"skila", -1, 1, nil},
{"tila", -1, 1, nil},
{"ola", -1, 1, nil},
{"na", -1, 1, nil},
{"kana", 72, 1, nil},
{"ena", 72, 1, nil},
{"garrena", 74, 1, nil},
{"gerrena", 74, 1, nil},
{"urrena", 74, 1, nil},
{"zaina", 72, 1, nil},
{"tzaina", 78, 1, nil},
{"kina", 72, 1, nil},
{"mina", 72, 1, nil},
{"garna", 72, 1, nil},
{"una", 72, 1, nil},
{"duna", 83, 1, nil},
{"asuna", 83, 1, nil},
{"tasuna", 85, 1, nil},
{"ondoa", -1, 1, nil},
{"kondoa", 87, 1, nil},
{"ngoa", -1, 1, nil},
{"zioa", -1, 1, nil},
{"koa", -1, 1, nil},
{"takoa", 91, 1, nil},
{"zkoa", 91, 1, nil},
{"noa", -1, 1, nil},
{"zinoa", 94, 1, nil},
{"aroa", -1, 1, nil},
{"taroa", 96, 1, nil},
{"zaroa", 96, 1, nil},
{"eroa", -1, 1, nil},
{"oroa", -1, 1, nil},
{"osoa", -1, 1, nil},
{"toa", -1, 1, nil},
{"ttoa", 102, 1, nil},
{"ztoa", 102, 1, nil},
{"txoa", -1, 1, nil},
{"tzoa", -1, 1, nil},
{"ñoa", -1, 1, nil},
{"ra", -1, 1, nil},
{"ara", 108, 1, nil},
{"dara", 109, 1, nil},
{"liara", 109, 1, nil},
{"tiara", 109, 1, nil},
{"tara", 109, 1, nil},
{"etara", 113, 1, nil},
{"tzara", 109, 1, nil},
{"bera", 108, 1, nil},
{"kera", 108, 1, nil},
{"pera", 108, 1, nil},
{"ora", 108, 2, nil},
{"tzarra", 108, 1, nil},
{"korra", 108, 1, nil},
{"tra", 108, 1, nil},
{"sa", -1, 1, nil},
{"osa", 123, 1, nil},
{"ta", -1, 1, nil},
{"eta", 125, 1, nil},
{"keta", 126, 1, nil},
{"sta", 125, 1, nil},
{"dua", -1, 1, nil},
{"mendua", 129, 1, nil},
{"ordua", 129, 1, nil},
{"lekua", -1, 1, nil},
{"burua", -1, 1, nil},
{"durua", -1, 1, nil},
{"tsua", -1, 1, nil},
{"tua", -1, 1, nil},
{"mentua", 136, 1, nil},
{"estua", 136, 1, nil},
{"txua", -1, 1, nil},
{"zua", -1, 1, nil},
{"tzua", 140, 1, nil},
{"za", -1, 1, nil},
{"eza", 142, 1, nil},
{"eroza", 142, 1, nil},
{"tza", 142, 2, nil},
{"koitza", 145, 1, nil},
{"antza", 145, 1, nil},
{"gintza", 145, 1, nil},
{"kintza", 145, 1, nil},
{"kuntza", 145, 1, nil},
{"gabe", -1, 1, nil},
{"kabe", -1, 1, nil},
{"kide", -1, 1, nil},
{"alde", -1, 1, nil},
{"kalde", 154, 1, nil},
{"talde", 154, 1, nil},
{"orde", -1, 1, nil},
{"ge", -1, 1, nil},
{"zale", -1, 1, nil},
{"tzale", 159, 1, nil},
{"gile", -1, 1, nil},
{"eme", -1, 1, nil},
{"kume", -1, 1, nil},
{"ne", -1, 1, nil},
{"zione", 164, 1, nil},
{"une", 164, 1, nil},
{"gune", 166, 1, nil},
{"pe", -1, 1, nil},
{"aurre", -1, 1, nil},
{"te", -1, 1, nil},
{"kote", 170, 1, nil},
{"arte", 170, 1, nil},
{"oste", 170, 1, nil},
{"etxe", -1, 1, nil},
{"gai", -1, 1, nil},
{"di", -1, 1, nil},
{"aldi", 176, 1, nil},
{"taldi", 177, 1, nil},
{"geldi", 176, -1, nil},
{"handi", 176, 1, nil},
{"mendi", 176, 1, nil},
{"gei", -1, 1, nil},
{"egi", -1, 1, nil},
{"degi", 183, 1, nil},
{"tegi", 183, 1, nil},
{"nahi", -1, 1, nil},
{"ohi", -1, 1, nil},
{"ki", -1, 1, nil},
{"toki", 188, 1, nil},
{"oi", -1, 1, nil},
{"goi", 190, 1, nil},
{"koi", 190, 1, nil},
{"ari", -1, 1, nil},
{"kari", 193, 1, nil},
{"lari", 193, 1, nil},
{"tari", 193, 1, nil},
{"garri", -1, 2, nil},
{"larri", -1, 1, nil},
{"kirri", -1, 1, nil},
{"duri", -1, 1, nil},
{"asi", -1, 1, nil},
{"ti", -1, 1, nil},
{"ontzi", -1, 1, nil},
{"ñi", -1, 1, nil},
{"ak", -1, 1, nil},
{"ek", -1, 1, nil},
{"tarik", -1, 1, nil},
{"gibel", -1, 1, nil},
{"ail", -1, 1, nil},
{"kail", 209, 1, nil},
{"kan", -1, 1, nil},
{"tan", -1, 1, nil},
{"etan", 212, 1, nil},
{"en", -1, 4, nil},
{"ren", 214, 2, nil},
{"garren", 215, 1, nil},
{"gerren", 215, 1, nil},
{"urren", 215, 1, nil},
{"ten", 214, 4, nil},
{"tzen", 214, 4, nil},
{"zain", -1, 1, nil},
{"tzain", 221, 1, nil},
{"kin", -1, 1, nil},
{"min", -1, 1, nil},
{"dun", -1, 1, nil},
{"asun", -1, 1, nil},
{"tasun", 226, 1, nil},
{"aizun", -1, 1, nil},
{"ondo", -1, 1, nil},
{"kondo", 229, 1, nil},
{"go", -1, 1, nil},
{"ngo", 231, 1, nil},
{"zio", -1, 1, nil},
{"ko", -1, 1, nil},
{"trako", 234, 5, nil},
{"tako", 234, 1, nil},
{"etako", 236, 1, nil},
{"eko", 234, 1, nil},
{"tariko", 234, 1, nil},
{"sko", 234, 1, nil},
{"tuko", 234, 1, nil},
{"minutuko", 241, 6, nil},
{"zko", 234, 1, nil},
{"no", -1, 1, nil},
{"zino", 244, 1, nil},
{"ro", -1, 1, nil},
{"aro", 246, 1, nil},
{"igaro", 247, -1, nil},
{"taro", 247, 1, nil},
{"zaro", 247, 1, nil},
{"ero", 246, 1, nil},
{"giro", 246, 1, nil},
{"oro", 246, 1, nil},
{"oso", -1, 1, nil},
{"to", -1, 1, nil},
{"tto", 255, 1, nil},
{"zto", 255, 1, nil},
{"txo", -1, 1, nil},
{"tzo", -1, 1, nil},
{"gintzo", 259, 1, nil},
{"ño", -1, 1, nil},
{"zp", -1, 1, nil},
{"ar", -1, 1, nil},
{"dar", 263, 1, nil},
{"behar", 263, 1, nil},
{"zehar", 263, -1, nil},
{"liar", 263, 1, nil},
{"tiar", 263, 1, nil},
{"tar", 263, 1, nil},
{"tzar", 263, 1, nil},
{"or", -1, 2, nil},
{"kor", 271, 1, nil},
{"os", -1, 1, nil},
{"ket", -1, 1, nil},
{"du", -1, 1, nil},
{"mendu", 275, 1, nil},
{"ordu", 275, 1, nil},
{"leku", -1, 1, nil},
{"buru", -1, 2, nil},
{"duru", -1, 1, nil},
{"tsu", -1, 1, nil},
{"tu", -1, 1, nil},
{"tatu", 282, 4, nil},
{"mentu", 282, 1, nil},
{"estu", 282, 1, nil},
{"txu", -1, 1, nil},
{"zu", -1, 1, nil},
{"tzu", 287, 1, nil},
{"gintzu", 288, 1, nil},
{"z", -1, 1, nil},
{"ez", 290, 1, nil},
{"eroz", 290, 1, nil},
{"tz", 290, 1, nil},
{"koitz", 293, 1, nil}
]
@a_2 [
{"idea", -1, 1, nil},
{"bidea", 0, 1, nil},
{"kidea", 0, 1, nil},
{"pidea", 0, 1, nil},
{"kundea", -1, 1, nil},
{"galea", -1, 1, nil},
{"tailea", -1, 1, nil},
{"tzailea", -1, 1, nil},
{"gunea", -1, 1, nil},
{"kunea", -1, 1, nil},
{"tzaga", -1, 1, nil},
{"gaia", -1, 1, nil},
{"aldia", -1, 1, nil},
{"taldia", 12, 1, nil},
{"karia", -1, 1, nil},
{"garria", -1, 2, nil},
{"karria", -1, 1, nil},
{"ka", -1, 1, nil},
{"tzaka", 17, 1, nil},
{"la", -1, 1, nil},
{"mena", -1, 1, nil},
{"pena", -1, 1, nil},
{"kina", -1, 1, nil},
{"ezina", -1, 1, nil},
{"tezina", 23, 1, nil},
{"kuna", -1, 1, nil},
{"tuna", -1, 1, nil},
{"kizuna", -1, 1, nil},
{"era", -1, 1, nil},
{"bera", 28, 1, nil},
{"arabera", 29, -1, nil},
{"kera", 28, 1, nil},
{"pera", 28, 1, nil},
{"orra", -1, 1, nil},
{"korra", 33, 1, nil},
{"dura", -1, 1, nil},
{"gura", -1, 1, nil},
{"kura", -1, 1, nil},
{"tura", -1, 1, nil},
{"eta", -1, 1, nil},
{"keta", 39, 1, nil},
{"gailua", -1, 1, nil},
{"eza", -1, 1, nil},
{"erreza", 42, 1, nil},
{"tza", -1, 2, nil},
{"gaitza", 44, 1, nil},
{"kaitza", 44, 1, nil},
{"kuntza", 44, 1, nil},
{"ide", -1, 1, nil},
{"bide", 48, 1, nil},
{"kide", 48, 1, nil},
{"pide", 48, 1, nil},
{"kunde", -1, 1, nil},
{"tzake", -1, 1, nil},
{"tzeke", -1, 1, nil},
{"le", -1, 1, nil},
{"gale", 55, 1, nil},
{"taile", 55, 1, nil},
{"tzaile", 55, 1, nil},
{"gune", -1, 1, nil},
{"kune", -1, 1, nil},
{"tze", -1, 1, nil},
{"atze", 61, 1, nil},
{"gai", -1, 1, nil},
{"aldi", -1, 1, nil},
{"taldi", 64, 1, nil},
{"ki", -1, 1, nil},
{"ari", -1, 1, nil},
{"kari", 67, 1, nil},
{"lari", 67, 1, nil},
{"tari", 67, 1, nil},
{"etari", 70, 1, nil},
{"garri", -1, 2, nil},
{"karri", -1, 1, nil},
{"arazi", -1, 1, nil},
{"tarazi", 74, 1, nil},
{"an", -1, 1, nil},
{"ean", 76, 1, nil},
{"rean", 77, 1, nil},
{"kan", 76, 1, nil},
{"etan", 76, 1, nil},
{"atseden", -1, -1, nil},
{"men", -1, 1, nil},
{"pen", -1, 1, nil},
{"kin", -1, 1, nil},
{"rekin", 84, 1, nil},
{"ezin", -1, 1, nil},
{"tezin", 86, 1, nil},
{"tun", -1, 1, nil},
{"kizun", -1, 1, nil},
{"go", -1, 1, nil},
{"ago", 90, 1, nil},
{"tio", -1, 1, nil},
{"dako", -1, 1, nil},
{"or", -1, 1, nil},
{"kor", 94, 1, nil},
{"tzat", -1, 1, nil},
{"du", -1, 1, nil},
{"gailu", -1, 1, nil},
{"tu", -1, 1, nil},
{"atu", 99, 1, nil},
{"aldatu", 100, 1, nil},
{"tatu", 100, 1, nil},
{"baditu", 99, -1, nil},
{"ez", -1, 1, nil},
{"errez", 104, 1, nil},
{"tzez", 104, 1, nil},
{"gaitz", -1, 1, nil},
{"kaitz", -1, 1, nil}
]
@doc """
Stem a word.
### Arguments
* `word` is a UTF-8 binary.
### Returns
* The stemmed UTF-8 binary.
"""
@spec stem(binary()) :: binary()
def stem(word) when is_binary(word) do
state = Runtime.new(word) |> init_vars()
state = run_stem(state)
Runtime.assign_to(state)
end
defp init_vars(state), do: %{state | vars: %{p1: 0, p2: 0, pV: 0}}
defp run_stem(%Runtime{} = state) do
{_, state} = r_stem(state)
state
end
# Snowball runtime helpers.
defp snowball_do_f(state, fun) do
saved_c = state.cursor
{_, s} = fun.(state)
%{s | cursor: saved_c}
end
defp snowball_do_b(state, fun) do
rel = state.limit - state.cursor
{_, s} = fun.(state)
%{s | cursor: s.limit - rel}
end
defp snowball_or(state, fun1, fun2) do
rel = state.limit - state.cursor
case fun1.(state) do
{:ok, s} -> {:ok, s}
{:fail, s} -> fun2.(%{s | cursor: s.limit - rel})
end
end
defp lift(state, :fail), do: {:fail, state}
defp lift(_state, %Runtime{} = s), do: {:ok, s}
defp next_codepoint(%Runtime{cursor: c, limit: lim, current: cur} = state) do
case Runtime.codepoint_at(cur, c, lim) do
{_cp, size} -> {:ok, %{state | cursor: c + size}}
:error -> {:fail, state}
end
end
defp r_adjetiboak(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_0) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_RV(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
{:ok, Runtime.slice_from(state, "z")}
_ -> {:ok, state}
end
end
end).()
end
defp r_izenak(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_1) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_RV(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
case (fn state ->
r_R2(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
3 ->
{:ok, Runtime.slice_from(state, "jok")}
4 ->
case (fn state ->
r_R1(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
5 ->
{:ok, Runtime.slice_from(state, "tra")}
6 ->
{:ok, Runtime.slice_from(state, "minutu")}
_ -> {:ok, state}
end
end
end).()
end
defp r_aditzak(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_2) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
case (fn state ->
r_RV(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
case (fn state ->
r_R2(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
_ -> {:ok, state}
end
end
end).()
end
defp r_R1(%Runtime{} = state) do
if state.vars[:p1] <= state.cursor, do: {:ok, state}, else: {:fail, state}
end
defp r_R2(%Runtime{} = state) do
if state.vars[:p2] <= state.cursor, do: {:ok, state}, else: {:fail, state}
end
defp r_RV(%Runtime{} = state) do
if state.vars[:pV] <= state.cursor, do: {:ok, state}, else: {:fail, state}
end
defp r_mark_regions(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:pV], state.limit)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:p1], state.limit)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:p2], state.limit)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
case (fn state ->
snowball_or(state,
fn state ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
snowball_or(state,
fn state ->
case (fn state ->
lift(state, Runtime.out_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
r -> r
end
end,
fn state ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
case Runtime.go_in_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
r -> r
end
end)
r -> r
end
end,
fn state ->
case (fn state ->
lift(state, Runtime.out_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
snowball_or(state,
fn state ->
case (fn state ->
lift(state, Runtime.out_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
r -> r
end
end,
fn state ->
case (fn state ->
lift(state, Runtime.in_grouping(state, @g_v))
end).(state) do
{:ok, state} ->
next_codepoint(state)
r -> r
end
end)
r -> r
end
end)
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:pV], state.cursor)}
r -> r
end
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
case (fn state ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_in_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:p1], state.cursor)}
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_in_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:p2], state.cursor)}
r -> r
end
r -> r
end
end
r -> r
end
r -> r
end
end)}
end
end
end
end
end
defp r_stem(%Runtime{} = state) do
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_mark_regions(state)
end)}
end).(state) do
{:ok, state} ->
(fn state ->
old_cursor = state.cursor
old_lb = state.limit_backward
state = %{state | cursor: state.limit, limit_backward: old_cursor}
{tag, s} = (fn state ->
case (fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
r_aditzak(state)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end).(state) do
{:ok, state} ->
case (fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
r_izenak(state)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end).(state) do
{:ok, state} ->
{:ok, snowball_do_b(state, fn state ->
r_adjetiboak(state)
end)}
end
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end
end
end