SpelledOut.jl icon indicating copy to clipboard operation
SpelledOut.jl copied to clipboard

nicer way to add new languages

Open longemen3000 opened this issue 4 years ago • 3 comments
trafficstars

in master, the list of languages supported is hardcoded. what if we dispatch on Val{:sym}? something like:

function spelled_out(
    number::Number;
    lang::Symbol = Symbol(first(split(ENV["LANG"], '.'))),
    dict::Symbol = :modern
)
return spelled_out_impl(number,Val{lang},dict)
end
#catchall
function spelled_out_impl(number,lang,dict)
throw(error("We do not support $lang yet.  Please make an issue and someone might be able to help you, or feel free to contribute."))
end

and each impl. could just simply do:

function spelled_out_impl(number,lang::Type{Val{:ru}},dict)

the use of the type instead of building the val is because there is a cost on building the struct, that is elided completely when only using the type

as a nice consequence of using this, an external user could plug its own spelling function, or modify the output of existing ones

longemen3000 avatar Jan 15 '21 21:01 longemen3000

This is a good idea! Do you want to make a PR or should I do this?

jakewilliami avatar Jan 15 '21 23:01 jakewilliami

I'm writing the Spanish support, I could add the modification in that PR

longemen3000 avatar Jan 16 '21 17:01 longemen3000

That would be good, thank you Andrés.

Would it still be a keyword argument? I.e., would I be able to write

spelled_out(123467, lang = :ru)

?

And would we still be able to have aliases and equivalences?

jakewilliami avatar Jan 16 '21 22:01 jakewilliami