Current section

Files

Jump to
urbit_ex lib api utils.ex
Raw

lib/api/utils.ex

defmodule UrbitEx.Utils do
def random_hex(num) do
:crypto.strong_rand_bytes(num) |> Base.encode16(case: :lower)
end
def tokenize(string) do
urls = tokenize_item(string, :url)
mentions = tokenize_item(string, :mention)
non_text = [urls, mentions] |> List.flatten()
text = extract_text(string)
[text, non_text]
|> List.flatten()
|> Enum.sort_by(fn {_token, index} -> index end)
|> Enum.map(fn {token, _ind} -> token end)
end
def tokenize_item(string, type) do
list = extract_token(string, type)
indexes = Regex.scan(regexes()[type], string, return: :index) |> List.flatten()
list
|> Enum.with_index()
|> Enum.map(fn {item, index} -> {item, indexes |> Enum.at(index) |> elem(0)} end)
|> Enum.map(fn {item, ind} -> {%{type => item}, ind} end)
end
def extract_text(string) do
t =
string
|> String.split(regexes().url)
|> Enum.map(&String.split(&1, regexes().mention))
|> List.flatten()
indexes =
t
|> Enum.map(fn x -> Regex.scan(Regex.compile!(x), string, return: :index) end)
|> List.flatten()
|> Enum.map(fn {ind, _length} -> ind end)
t
|> Enum.with_index()
|> Enum.map(fn {item, ind} -> {item, Enum.at(indexes, ind)} end)
|> Enum.map(fn {item, ind} -> {%{text: item}, ind} end)
end
def extract_token(string, type) do
Regex.scan(regexes()[type], string) |> List.flatten()
end
# defp check_patp(shipname) do
# syllables = syllabize(shipname)
# case syllables.length do
# 1 -> syllable_list().s.include?(syllables[0])
# 2 -> check_bisyllable(syllables)
# 4 -> check_long(syllables)
# 8 -> check_long(syllables)
# 16 -> check_long(syllables)
# _ -> false
# end
# end
# defp check_long(shipname) do
# join = shipname.join("")
# pairs = join.scan(/.{6}/).map {|p| p.scan(/.{3}/)}
# return pairs.all? { |p| check_bisyllable(p)}
# end
# defp check_bisyllable(pair) do
# pref = pair[0]
# suf = pair[1]
# return syllable_list[:p].include?(pref) && syllable_list[:s].include?(suf)
# end
# defp syllabize(shipname) do
# clean = shipname.gsub(/[~^-]/, "")
# syllables = clean.scan(/.{3}/)
# end
defp regexes do
%{
url: ~r/\w+:\/\/[-a-zA-Z0-9:@;?&=\/%\+\.\*!'\(\),\$_\{\}\^~\[\]`#|]+\w/,
mention: ~r/~[bcdfghjlmnprstwz][aeiouy][\w^-]+/,
code: ~r/`.+`/
}
end
defp syllable_list do
%{
p: [
"doz",
"mar",
"bin",
"wan",
"sam",
"lit",
"sig",
"hid",
"fid",
"lis",
"sog",
"dir",
"wac",
"sab",
"wis",
"sib",
"rig",
"sol",
"dop",
"mod",
"fog",
"lid",
"hop",
"dar",
"dor",
"lor",
"hod",
"fol",
"rin",
"tog",
"sil",
"mir",
"hol",
"pas",
"lac",
"rov",
"liv",
"dal",
"sat",
"lib",
"tab",
"han",
"tic",
"pid",
"tor",
"bol",
"fos",
"dot",
"los",
"dil",
"for",
"pil",
"ram",
"tir",
"win",
"tad",
"bic",
"dif",
"roc",
"wid",
"bis",
"das",
"mid",
"lop",
"ril",
"nar",
"dap",
"mol",
"san",
"loc",
"nov",
"sit",
"nid",
"tip",
"sic",
"rop",
"wit",
"nat",
"pan",
"min",
"rit",
"pod",
"mot",
"tam",
"tol",
"sav",
"pos",
"nap",
"nop",
"som",
"fin",
"fon",
"ban",
"mor",
"wor",
"sip",
"ron",
"nor",
"bot",
"wic",
"soc",
"wat",
"dol",
"mag",
"pic",
"dav",
"bid",
"bal",
"tim",
"tas",
"mal",
"lig",
"siv",
"tag",
"pad",
"sal",
"div",
"dac",
"tan",
"sid",
"fab",
"tar",
"mon",
"ran",
"nis",
"wol",
"mis",
"pal",
"las",
"dis",
"map",
"rab",
"tob",
"rol",
"lat",
"lon",
"nod",
"nav",
"fig",
"nom",
"nib",
"pag",
"sop",
"ral",
"bil",
"had",
"doc",
"rid",
"moc",
"pac",
"rav",
"rip",
"fal",
"tod",
"til",
"tin",
"hap",
"mic",
"fan",
"pat",
"tac",
"lab",
"mog",
"sim",
"son",
"pin",
"lom",
"ric",
"tap",
"fir",
"has",
"bos",
"bat",
"poc",
"hac",
"tid",
"hav",
"sap",
"lin",
"dib",
"hos",
"dab",
"bit",
"bar",
"rac",
"par",
"lod",
"dos",
"bor",
"toc",
"hil",
"mac",
"tom",
"dig",
"fil",
"fas",
"mit",
"hob",
"har",
"mig",
"hin",
"rad",
"mas",
"hal",
"rag",
"lag",
"fad",
"top",
"mop",
"hab",
"nil",
"nos",
"mil",
"fop",
"fam",
"dat",
"nol",
"din",
"hat",
"nac",
"ris",
"fot",
"rib",
"hoc",
"nim",
"lar",
"fit",
"wal",
"rap",
"sar",
"nal",
"mos",
"lan",
"don",
"dan",
"lad",
"dov",
"riv",
"bac",
"pol",
"lap",
"tal",
"pit",
"nam",
"bon",
"ros",
"ton",
"fod",
"pon",
"sov",
"noc",
"sor",
"lav",
"mat",
"mip",
"fip"
],
s: [
"zod",
"nec",
"bud",
"wes",
"sev",
"per",
"sut",
"let",
"ful",
"pen",
"syt",
"dur",
"wep",
"ser",
"wyl",
"sun",
"ryp",
"syx",
"dyr",
"nup",
"heb",
"peg",
"lup",
"dep",
"dys",
"put",
"lug",
"hec",
"ryt",
"tyv",
"syd",
"nex",
"lun",
"mep",
"lut",
"sep",
"pes",
"del",
"sul",
"ped",
"tem",
"led",
"tul",
"met",
"wen",
"byn",
"hex",
"feb",
"pyl",
"dul",
"het",
"mev",
"rut",
"tyl",
"wyd",
"tep",
"bes",
"dex",
"sef",
"wyc",
"bur",
"der",
"nep",
"pur",
"rys",
"reb",
"den",
"nut",
"sub",
"pet",
"rul",
"syn",
"reg",
"tyd",
"sup",
"sem",
"wyn",
"rec",
"meg",
"net",
"sec",
"mul",
"nym",
"tev",
"web",
"sum",
"mut",
"nyx",
"rex",
"teb",
"fus",
"hep",
"ben",
"mus",
"wyx",
"sym",
"sel",
"ruc",
"dec",
"wex",
"syr",
"wet",
"dyl",
"myn",
"mes",
"det",
"bet",
"bel",
"tux",
"tug",
"myr",
"pel",
"syp",
"ter",
"meb",
"set",
"dut",
"deg",
"tex",
"sur",
"fel",
"tud",
"nux",
"rux",
"ren",
"wyt",
"nub",
"med",
"lyt",
"dus",
"neb",
"rum",
"tyn",
"seg",
"lyx",
"pun",
"res",
"red",
"fun",
"rev",
"ref",
"mec",
"ted",
"rus",
"bex",
"leb",
"dux",
"ryn",
"num",
"pyx",
"ryg",
"ryx",
"fep",
"tyr",
"tus",
"tyc",
"leg",
"nem",
"fer",
"mer",
"ten",
"lus",
"nus",
"syl",
"tec",
"mex",
"pub",
"rym",
"tuc",
"fyl",
"lep",
"deb",
"ber",
"mug",
"hut",
"tun",
"byl",
"sud",
"pem",
"dev",
"lur",
"def",
"bus",
"bep",
"run",
"mel",
"pex",
"dyt",
"byt",
"typ",
"lev",
"myl",
"wed",
"duc",
"fur",
"fex",
"nul",
"luc",
"len",
"ner",
"lex",
"rup",
"ned",
"lec",
"ryd",
"lyd",
"fen",
"wel",
"nyd",
"hus",
"rel",
"rud",
"nes",
"hes",
"fet",
"des",
"ret",
"dun",
"ler",
"nyr",
"seb",
"hul",
"ryl",
"lud",
"rem",
"lys",
"fyn",
"wer",
"ryc",
"sug",
"nys",
"nyl",
"lyn",
"dyn",
"dem",
"lux",
"fed",
"sed",
"bec",
"mun",
"lyr",
"tes",
"mud",
"nyt",
"byr",
"sen",
"weg",
"fyr",
"mur",
"tel",
"rep",
"teg",
"pec",
"nel",
"nev",
"fes"
]
}
end
end