# Generated by Snowball.Generator — do not edit by hand. defmodule Text.Stemmer.Stemmers.Tamil do @moduledoc """ Snowball stemmer for tamil. Generated from the canonical Snowball algorithm source. """ alias Snowball.Runtime # Among tables @a_0 [ {"வு", -1, 3, nil}, {"வூ", -1, 4, nil}, {"வொ", -1, 2, nil}, {"வோ", -1, 1, nil} ] @a_1 [ {"க", -1, -1, nil}, {"ங", -1, -1, nil}, {"ச", -1, -1, nil}, {"ஞ", -1, -1, nil}, {"த", -1, -1, nil}, {"ந", -1, -1, nil}, {"ப", -1, -1, nil}, {"ம", -1, -1, nil}, {"ய", -1, -1, nil}, {"வ", -1, -1, nil} ] @a_2 [ {"ீ", -1, -1, nil}, {"ை", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_3 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_4 [ {"", -1, 3, nil}, {"ை", 0, 1, nil}, {"்", 0, 2, nil} ] @a_5 [ {"னு", -1, 10, nil}, {"ுக்", -1, 8, nil}, {"ுக்க்", -1, 8, nil}, {"ட்க்", -1, 3, nil}, {"ற்க்", -1, 5, nil}, {"ங்", -1, 11, nil}, {"ட்ட்", -1, 6, nil}, {"த்த்", -1, 7, nil}, {"ந்த்", -1, 1, nil}, {"ந்", -1, 1, nil}, {"ட்ப்", -1, 3, nil}, {"ய்", -1, 2, nil}, {"ன்ற்", -1, 4, nil}, {"வ்", -1, 9, nil}, {"ந்த", -1, 1, nil}, {"ய", -1, 9, nil}, {"வ", -1, 9, nil} ] @a_6 [ {"க", -1, -1, nil}, {"ச", -1, -1, nil}, {"ட", -1, -1, nil}, {"த", -1, -1, nil}, {"ப", -1, -1, nil}, {"ற", -1, -1, nil} ] @a_7 [ {"க", -1, -1, nil}, {"ச", -1, -1, nil}, {"ட", -1, -1, nil}, {"த", -1, -1, nil}, {"ப", -1, -1, nil}, {"ற", -1, -1, nil} ] @a_8 [ {"ஞ", -1, -1, nil}, {"ண", -1, -1, nil}, {"ந", -1, -1, nil}, {"ன", -1, -1, nil}, {"ம", -1, -1, nil}, {"ய", -1, -1, nil}, {"ர", -1, -1, nil}, {"ல", -1, -1, nil}, {"ள", -1, -1, nil}, {"ழ", -1, -1, nil}, {"வ", -1, -1, nil} ] @a_9 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"்", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_10 [ {"அ", -1, -1, nil}, {"இ", -1, -1, nil}, {"உ", -1, -1, nil} ] @a_11 [ {"க", -1, -1, nil}, {"ங", -1, -1, nil}, {"ச", -1, -1, nil}, {"ஞ", -1, -1, nil}, {"த", -1, -1, nil}, {"ந", -1, -1, nil}, {"ப", -1, -1, nil}, {"ம", -1, -1, nil}, {"ய", -1, -1, nil}, {"வ", -1, -1, nil} ] @a_12 [ {"க", -1, -1, nil}, {"ச", -1, -1, nil}, {"ட", -1, -1, nil}, {"த", -1, -1, nil}, {"ப", -1, -1, nil}, {"ற", -1, -1, nil} ] @a_13 [ {"கள்", -1, 4, nil}, {"ுங்கள்", 0, 1, nil}, {"ட்கள்", 0, 3, nil}, {"ற்கள்", 0, 2, nil} ] @a_14 [ {"ே", -1, -1, nil}, {"ோ", -1, -1, nil}, {"ா", -1, -1, nil} ] @a_15 [ {"பி", -1, -1, nil}, {"வி", -1, -1, nil} ] @a_16 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_17 [ {"பட்டு", -1, 3, nil}, {"விட்டு", -1, 3, nil}, {"படு", -1, 3, nil}, {"விடு", -1, 3, nil}, {"பட்டது", -1, 3, nil}, {"ென்று", -1, 1, nil}, {"ுடை", -1, 1, nil}, {"ில்லை", -1, 1, nil}, {"ுடன்", -1, 1, nil}, {"ெனும்", -1, 1, nil}, {"ிடம்", -1, 1, nil}, {"ெல்லாம்", -1, 3, nil}, {"பட்ட", -1, 3, nil}, {"பட்டண", -1, 3, nil}, {"ென", -1, 1, nil}, {"தான", -1, 3, nil}, {"படிதான", 15, 3, nil}, {"ுடைய", -1, 1, nil}, {"ாகிய", -1, 1, nil}, {"குரிய", -1, 3, nil}, {"ல்ல", -1, 2, nil}, {"ுள்ள", -1, 1, nil}, {"ாகி", -1, 1, nil}, {"படி", -1, 3, nil}, {"ின்றி", -1, 1, nil}, {"பற்றி", -1, 3, nil} ] @a_18 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_19 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_20 [ {"ீ", -1, 8, nil}, {"ொடு", -1, 2, nil}, {"ோடு", -1, 2, nil}, {"து", -1, 7, nil}, {"ிருந்து", 3, 2, nil}, {"ின்று", -1, 2, nil}, {"ுடை", -1, 2, nil}, {"னை", -1, 1, nil}, {"கண்", -1, 6, nil}, {"முன்", -1, 6, nil}, {"ின்", -1, 3, nil}, {"ிடம்", -1, 4, nil}, {"மேற்", -1, 6, nil}, {"ிற்", -1, 2, nil}, {"ல்", -1, 5, nil}, {"மேல்", 14, 6, nil}, {"ாமல்", 14, 2, nil}, {"ால்", 14, 2, nil}, {"ில்", 14, 2, nil}, {"ுள்", -1, 2, nil}, {"கீழ்", -1, 6, nil}, {"விட", -1, 2, nil} ] @a_21 [ {"க", -1, -1, nil}, {"ச", -1, -1, nil}, {"ட", -1, -1, nil}, {"த", -1, -1, nil}, {"ப", -1, -1, nil}, {"ற", -1, -1, nil} ] @a_22 [ {"க", -1, -1, nil}, {"ச", -1, -1, nil}, {"ட", -1, -1, nil}, {"த", -1, -1, nil}, {"ப", -1, -1, nil}, {"ற", -1, -1, nil} ] @a_23 [ {"அ", -1, -1, nil}, {"ஆ", -1, -1, nil}, {"இ", -1, -1, nil}, {"ஈ", -1, -1, nil}, {"உ", -1, -1, nil}, {"ஊ", -1, -1, nil}, {"எ", -1, -1, nil}, {"ஏ", -1, -1, nil}, {"ஐ", -1, -1, nil}, {"ஒ", -1, -1, nil}, {"ஓ", -1, -1, nil}, {"ஔ", -1, -1, nil} ] @a_24 [ {"ீ", -1, -1, nil}, {"ு", -1, -1, nil}, {"ூ", -1, -1, nil}, {"ெ", -1, -1, nil}, {"ே", -1, -1, nil}, {"ை", -1, -1, nil}, {"ா", -1, -1, nil}, {"ி", -1, -1, nil} ] @a_25 [ {"கு", -1, 6, nil}, {"படு", -1, 1, nil}, {"து", -1, 3, nil}, {"ிற்று", -1, 1, nil}, {"னை", -1, 1, nil}, {"வை", -1, 1, nil}, {"னென்", -1, 1, nil}, {"ேன்", -1, 5, nil}, {"னன்", -1, 1, nil}, {"பன்", -1, 1, nil}, {"வன்", -1, 2, nil}, {"ான்", -1, 4, nil}, {"னான்", 11, 1, nil}, {"மின்", -1, 1, nil}, {"கும்", -1, 1, nil}, {"டும்", -1, 5, nil}, {"தும்", -1, 1, nil}, {"றும்", -1, 1, nil}, {"ெம்", -1, 5, nil}, {"ேம்", -1, 5, nil}, {"ோம்", -1, 5, nil}, {"னம்", -1, 1, nil}, {"பம்", -1, 1, nil}, {"ாம்", -1, 5, nil}, {"ாய்", -1, 5, nil}, {"ீர்", -1, 5, nil}, {"னர்", -1, 1, nil}, {"பர்", -1, 1, nil}, {"ீயர்", -1, 5, nil}, {"வர்", -1, 1, nil}, {"ார்", -1, 5, nil}, {"னார்", 30, 1, nil}, {"மார்", 30, 1, nil}, {"கொண்டிர்", -1, 1, nil}, {"னிர்", -1, 5, nil}, {"னள்", -1, 1, nil}, {"பள்", -1, 1, nil}, {"வள்", -1, 1, nil}, {"ாள்", -1, 5, nil}, {"னாள்", 38, 1, nil}, {"க", -1, 1, nil}, {"த", -1, 1, nil}, {"ன", -1, 1, nil}, {"ப", -1, 1, nil}, {"ய", -1, 1, nil}, {"ா", -1, 5, nil} ] @a_26 [ {"கின்ற்", -1, -1, nil}, {"ாநின்ற்", -1, -1, nil}, {"கிற்", -1, -1, nil}, {"கின்ற", -1, -1, nil}, {"ாநின்ற", -1, -1, nil}, {"கிற", -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: %{found_a_match: false, found_vetrumai_urupu: false}} 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_test_b(state, fun) do rel = state.limit - state.cursor case fun.(state) do {:ok, s} -> {:ok, %{s | cursor: s.limit - rel}} {:fail, s} -> {:fail, %{s | cursor: s.limit - rel}} end end defp snowball_try(state, fun) do rel = state.limit - state.cursor case fun.(state) do {:ok, s} -> s {:fail, s} -> %{s | cursor: s.limit - rel} end 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 r_has_min_length(%Runtime{} = state) do if Runtime.codepoint_length(state.current) > 4, do: {:ok, state}, else: {:fail, state} end defp r_fix_va_start(%Runtime{} = state) do (fn -> state = %{state | bra: state.cursor} case Runtime.find_among(state, @a_0) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | ket: s.cursor} case result do 1 -> {:ok, Runtime.slice_from(state, "ஓ")} 2 -> {:ok, Runtime.slice_from(state, "ஒ")} 3 -> {:ok, Runtime.slice_from(state, "உ")} 4 -> {:ok, Runtime.slice_from(state, "ஊ")} _ -> {:ok, state} end end end).() end defp r_fix_endings(%Runtime{} = state) do {:ok, snowball_do_f(state, fn state -> (fn loop_fn -> loop_fn.(loop_fn, state) end).(fn loop_fn, state -> case (fn state -> r_fix_ending(state) end).(state) do {:ok, s} -> loop_fn.(loop_fn, s) {:fail, s} -> {:ok, %{s | cursor: state.cursor}} end end) end)} end defp r_remove_question_prefixes(%Runtime{} = state) do case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s(state, "எ")) end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among(state, @a_1) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s(state, "்")) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> {:ok, Runtime.slice_del(state)} end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_va_start(state) end)} end end r -> r end r -> r end r -> r end end end defp r_fix_ending(%Runtime{} = state) do case (fn state -> if Runtime.codepoint_length(state.current) > 3, do: {:ok, state}, else: {:fail, state} 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 -> snowball_or(state, fn state -> (fn -> state = %{state | ket: state.cursor} case Runtime.find_among_b(state, @a_5) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | bra: s.cursor} case result do 1 -> {:ok, Runtime.slice_del(state)} 2 -> case (fn state -> snowball_test_b(state, fn state -> (fn -> case Runtime.find_among_b(state, @a_2) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end 3 -> {:ok, Runtime.slice_from(state, "ள்")} 4 -> {:ok, Runtime.slice_from(state, "ல்")} 5 -> {:ok, Runtime.slice_from(state, "ல்")} 6 -> {:ok, Runtime.slice_from(state, "டு")} 7 -> case (fn state -> if state.vars[:found_vetrumai_urupu], do: {:ok, state}, else: {:fail, state} end).(state) do {:ok, state} -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> lift(state, Runtime.eq_s_b(state, "ை")) end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "ம்")} r -> r end r -> r end 8 -> {:ok, Runtime.slice_from(state, "்")} 9 -> {:ok, Runtime.slice_del(state)} 10 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_3) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end 11 -> (fn -> case Runtime.find_among_b(state, @a_4) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = s case result do 1 -> {:ok, Runtime.slice_del(state)} 2 -> {:ok, Runtime.slice_del(state)} 3 -> {:ok, Runtime.slice_from(state, "ம்")} _ -> {:ok, s} end end end).() _ -> {:ok, state} end end end).() end, fn state -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s_b(state, "்")) end).(state) do {:ok, state} -> snowball_or(state, fn state -> snowball_or(state, fn state -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_6) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_try(state, fn state -> case (fn state -> lift(state, Runtime.eq_s_b(state, "்")) end).(state) do {:ok, state} -> (fn -> case Runtime.find_among_b(state, @a_7) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() r -> r end end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} end end r -> r end end, fn state -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_8) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s_b(state, "்")) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end end r -> r end end) end, fn state -> case (fn state -> snowball_test_b(state, fn state -> (fn -> case Runtime.find_among_b(state, @a_9) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} end r -> r end end) r -> r end end end) end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) r -> r end end defp r_remove_pronoun_prefixes(%Runtime{} = state) do case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among(state, @a_10) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among(state, @a_11) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s(state, "்")) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> {:ok, Runtime.slice_del(state)} end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_va_start(state) end)} end end r -> r end r -> r end r -> r end end end defp r_remove_plural_suffix(%Runtime{} = state) do (fn state -> old_cursor = state.cursor old_lb = state.limit_backward state = %{state | cursor: state.limit, limit_backward: old_cursor} {tag, s} = (fn state -> (fn -> state = %{state | ket: state.cursor} case Runtime.find_among_b(state, @a_13) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | bra: s.cursor} case result do 1 -> snowball_or(state, fn state -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_12) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "ுங்")} r -> r end end, fn state -> {:ok, Runtime.slice_from(state, "்")} end) 2 -> {:ok, Runtime.slice_from(state, "ல்")} 3 -> {:ok, Runtime.slice_from(state, "ள்")} 4 -> {:ok, Runtime.slice_del(state)} _ -> {:ok, state} end end end).() end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end defp r_remove_question_suffixes(%Runtime{} = state) do case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn 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 -> {:ok, snowball_do_b(state, fn state -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_14) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} end r -> r end end end)} end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_endings(state) end)} end r -> r end end defp r_remove_command_suffixes(%Runtime{} = state) do case (fn state -> r_has_min_length(state) 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 -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_15) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} end r -> r end end end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) r -> r end end defp r_remove_um(%Runtime{} = state) do case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn 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 -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s_b(state, "ும்")) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} end r -> r end end end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_ending(state) end)} r -> r end r -> r end end defp r_remove_common_word_endings(%Runtime{} = state) do case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn 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 -> (fn -> state = %{state | ket: state.cursor} case Runtime.find_among_b(state, @a_17) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | bra: s.cursor} case result do 1 -> {:ok, Runtime.slice_from(state, "்")} 2 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_16) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} r -> r end 3 -> {:ok, Runtime.slice_del(state)} _ -> {:ok, state} end end end).() end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_endings(state) end)} r -> r end r -> r end end defp r_remove_vetrumai_urupukal(%Runtime{} = state) do case (fn state -> {:ok, put_in(state.vars[:found_vetrumai_urupu], false)} end).(state) do {:ok, state} -> case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn 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 -> snowball_or(state, fn state -> snowball_test_b(state, fn state -> (fn -> state = %{state | ket: state.cursor} case Runtime.find_among_b(state, @a_20) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | bra: s.cursor} case result do 1 -> {:ok, Runtime.slice_del(state)} 2 -> {:ok, Runtime.slice_from(state, "்")} 3 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> lift(state, Runtime.eq_s_b(state, "ம")) end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} r -> r end 4 -> case (fn state -> if Runtime.codepoint_length(state.current) >= 7, do: {:ok, state}, else: {:fail, state} end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} r -> r end 5 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_18) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} r -> r end 6 -> {:ok, Runtime.slice_del(state)} 7 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_19) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end 8 -> {:ok, Runtime.slice_from(state, "ி")} _ -> {:ok, state} end end end).() end) end, fn state -> snowball_test_b(state, fn state -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s_b(state, "ை")) end).(state) do {:ok, state} -> case (fn state -> snowball_or(state, fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_21) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end, fn state -> snowball_test_b(state, fn state -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_22) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> lift(state, Runtime.eq_s_b(state, "்")) r -> r end end) end) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} end r -> r end r -> r end end end) end) end).(state) do {:ok, state} -> case (fn state -> {:ok, put_in(state.vars[:found_vetrumai_urupu], true)} end).(state) do {:ok, state} -> {:ok, snowball_do_b(state, fn state -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> lift(state, Runtime.eq_s_b(state, "ின்")) end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} end r -> r end end end)} end r -> r end end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_fix_endings(state) end)} r -> r end r -> r end end end defp r_remove_tense_suffixes(%Runtime{} = state) do (fn loop_fn -> loop_fn.(loop_fn, state) end).(fn loop_fn, state -> case (fn state -> r_remove_tense_suffix(state) end).(state) do {:ok, s} -> loop_fn.(loop_fn, s) {:fail, s} -> {:ok, %{s | cursor: state.cursor}} end end) end defp r_remove_tense_suffix(%Runtime{} = state) do case (fn state -> {:ok, put_in(state.vars[:found_a_match], false)} end).(state) do {:ok, state} -> case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn 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 -> {:ok, snowball_do_b(state, fn state -> snowball_test_b(state, fn state -> case (fn state -> (fn -> state = %{state | ket: state.cursor} case Runtime.find_among_b(state, @a_25) do :fail -> {:fail, state} {%Runtime{} = s, result} -> state = %{s | bra: s.cursor} case result do 1 -> {:ok, Runtime.slice_del(state)} 2 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_23) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end 3 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> (fn -> case Runtime.find_among_b(state, @a_24) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end 4 -> case (fn state -> (fn state -> saved_c = state.cursor case (fn state -> lift(state, Runtime.eq_s_b(state, "ச")) end).(state) do {:ok, s} -> {:fail, %{s | cursor: saved_c}} {:fail, s} -> {:ok, %{s | cursor: saved_c}} end end).(state) end).(state) do {:ok, state} -> {:ok, Runtime.slice_from(state, "்")} r -> r end 5 -> {:ok, Runtime.slice_from(state, "்")} 6 -> case (fn state -> snowball_test_b(state, fn state -> lift(state, Runtime.eq_s_b(state, "்")) end) end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end _ -> {:ok, state} end end end).() end).(state) do {:ok, state} -> {:ok, put_in(state.vars[:found_a_match], true)} r -> r end end) end)} end).(state) do {:ok, state} -> {:ok, snowball_do_b(state, fn state -> case (fn state -> {:ok, %{state | ket: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> (fn -> case Runtime.find_among_b(state, @a_26) do :fail -> {:fail, state} {%Runtime{} = s, _} -> {:ok, s} end end).() end).(state) do {:ok, state} -> case (fn state -> {:ok, %{state | bra: state.cursor}} end).(state) do {:ok, state} -> case (fn state -> {:ok, Runtime.slice_del(state)} end).(state) do {:ok, state} -> {:ok, put_in(state.vars[:found_a_match], true)} end end r -> r end end end)} end end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_fix_endings(state) end)} end).(state) do {:ok, state} -> if state.vars[:found_a_match], do: {:ok, state}, else: {:fail, state} end end r -> r end end end defp r_stem(%Runtime{} = state) do case (fn state -> {:ok, put_in(state.vars[:found_vetrumai_urupu], false)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_fix_ending(state) end)} end).(state) do {:ok, state} -> case (fn state -> r_has_min_length(state) end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_question_prefixes(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_pronoun_prefixes(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_question_suffixes(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_um(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_common_word_endings(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_vetrumai_urupukal(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_plural_suffix(state) end)} end).(state) do {:ok, state} -> case (fn state -> {:ok, snowball_do_f(state, fn state -> r_remove_command_suffixes(state) end)} end).(state) do {:ok, state} -> {:ok, snowball_do_f(state, fn state -> r_remove_tense_suffixes(state) end)} end end end end end end end end r -> r end end end end end