diff --git a/README.md b/README.md
index 6a354b6..e65991a 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,29 @@
# NOBORU - Parsers
This repo is created to store parsers for NOBORU app on PS vita
## Supported Parsers:
-| Different | Russian | English | Japan | Spanish | Portuguese | French | Turkish | Italian | Vietnamese | Polish | German | Brazil | Indonesian | Korean | Thai |
-| :---------------: | :-------------: | :---------------: | :-----------: | :----------------: | :--------------: | :---------------: | :-------------: | :-----------: | :---------: | :-----------: | :--------: | :-------: | :--------: | :--------: | :------------: |
-| MangaDex | ~~ReadManga~~ | ~~MangaHub~~ | SenManga | ~~LeoManga~~ | Animaregia | ~~LelScanVF~~ | ~~Mabushimajo~~ | ~~MangaEden~~ | TruyenQQ | Phoenix-Scans | NineManga | NineManga | Komikid | manatoki95 | NiceOppai |
-| ~~Bato.to*~~ | МангаПоиск | ~~MangaReader~~ | ~~Manga1000~~ | InManga | UnionMangas | ScanFR | Puzzmos | NineManga | TruyengiHot | | Wie Manga! | | | | Oremanga |
-| ~~LoveHug (RAW)~~ | ~~MintManga~~ | ~~MangaPanda~~ | | ~~Submanga~~ | ~~GoldenMangas~~ | NineManga | ~~MangaTR~~ | | | | | | | | CartoonClub-TH |
-| RawDevArt (RAW) | ~~SelfManga~~ | MangaTown | | NineManga | BRMangas | | SeriManga | | | | | | | | |
-| | Desu | ~~MangaOwl~~ | | HeavenManga | | | MangaDenizi | | | | | | | | |
-| | NineManga | ReadComicsOnline | | ~~TumangaOnline~~ | | | | | | | | | | | |
-| | MangaOneLove | MangaKakalot | | ~~MangaDoor~~ | | | | | | | | | | | |
-| | Манга-Тян! | MangaNelo | | MangaLibros | | | | | | | | | | | |
-| | MangaHubRu | ~~VLComic~~ | | LeoMangas | | | | | | | | | | | |
-| | | ~~MangaEden~~ | | | | | | | | | | | | | |
-| | | NineManga | | | | | | | | | | | | | |
-| | | ~~MangaSee~~ | | | | | | | | | | | | | |
-| | | XoXoComics | | | | | | | | | | | | | |
-| | | ReadComicOnlineTo | | | | | | | | | | | | | |
-| | | ~~Mangafast~~ | | | | | | | | | | | | | |
-| | | ~~Reaper Scans~~ | | | | | | | | | | | | | |
-| **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** |
-| nhentai | Nude-Moon | PervEden | | DoujinHentai | | Histoire d'Hentai | | PervEden | | | | | | | |
-| HentaiRead | ~~AllHentai~~ | HentaiCafe | | VerComicsPorno.xxx | | | | | | | | | | | |
-| 9hentai | Яой-Тян! | MyHentaiGallery | | | | | | | | | | | | | |
-| ~~Hentai Shark~~ | ~~Хентай-Тян!~~ | Hentai20 | | | | | | | | | | | | | |
+| Different | Russian | English | Japan | Spanish | Portuguese | French | Turkish | Italian | Vietnamese | Polish | German | Brazil | Indonesian | Korean | Thai | Arab |
+| :---------------: | :-------------: | :---------------: | :-----------: | :----------------: | :--------------: | :---------------: | :-------------: | :-----------: | :---------: | :-----------: | :--------: | :-------: | :--------: | :--------: | :------------: | :---: |
+| MangaDex | ~~ReadManga~~ | ~~MangaHub~~ | SenManga | ~~LeoManga~~ | Animaregia | ~~LelScanVF~~ | ~~Mabushimajo~~ | ~~MangaEden~~ | TruyenQQ | Phoenix-Scans | NineManga | NineManga | Komikid | manatoki95 | NiceOppai | Onma |
+| ~~Bato.to*~~ | МангаПоиск | ~~MangaReader~~ | ~~Manga1000~~ | InManga | UnionMangas | ScanFR | ~~Puzzmos~~ | NineManga | TruyengiHot | | Wie Manga! | | | | Oremanga | |
+| ~~LoveHug (RAW)~~ | ~~MintManga~~ | ~~MangaPanda~~ | | ~~Submanga~~ | ~~GoldenMangas~~ | NineManga | ~~MangaTR~~ | | | | | | | | CartoonClub-TH | |
+| RawDevArt (RAW) | ~~SelfManga~~ | MangaTown | | NineManga | BRMangas | | SeriManga | | | | | | | | | |
+| | Desu | ~~MangaOwl~~ | | HeavenManga | | | MangaDenizi | | | | | | | | | |
+| | NineManga | ReadComicsOnline | | ~~TumangaOnline~~ | | | | | | | | | | | | |
+| | MangaOneLove | MangaKakalot | | ~~MangaDoor~~ | | | | | | | | | | | | |
+| | Манга-Тян! | MangaNelo | | MangaLibros | | | | | | | | | | | | |
+| | MangaHubRu | ~~VLComic~~ | | LeoMangas | | | | | | | | | | | | |
+| | | ~~MangaEden~~ | | | | | | | | | | | | | | |
+| | | NineManga | | | | | | | | | | | | | | |
+| | | ~~MangaSee~~ | | | | | | | | | | | | | | |
+| | | XoXoComics | | | | | | | | | | | | | | |
+| | | ReadComicOnlineTo | | | | | | | | | | | | | | |
+| | | ~~Mangafast~~ | | | | | | | | | | | | | | |
+| | | ~~Reaper Scans~~ | | | | | | | | | | | | | | |
+| **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | **NSFW** | |
+| nhentai | Nude-Moon | PervEden | | DoujinHentai | | Histoire d'Hentai | | PervEden | | | | | | | | |
+| HentaiRead | ~~AllHentai~~ | HentaiCafe | | VerComicsPorno.xxx | | | | | | | | | | | | |
+| 9hentai | Яой-Тян! | MyHentaiGallery | | | | | | | | | | | | | | |
+| ~~Hentai Shark~~ | ~~Хентай-Тян!~~ | Hentai20 | | | | | | | | | | | | | | |
**Catalog works with option Preferred Language and deletes extra manga from it*
*strikethrough parsers don't work*
diff --git a/parsers/[AR]Onma.lua b/parsers/[AR]Onma.lua
new file mode 100644
index 0000000..2b4275e
--- /dev/null
+++ b/parsers/[AR]Onma.lua
@@ -0,0 +1 @@
+Onma=Parser:new("Onma","https://onma.me","ARA","ONMAARA",1)Onma.Tags={"أكشن","مغامرة","كوميدي","شياطين","دراما","إيتشي","خيال","انحراف جنسي","حريم","تاريخي","رعب","جوسي","فنون قتالية","ناضج","ميكا","غموض","وان شوت","نفسي","رومنسي","حياة مدرسية","خيال علمي","سينين","شوجو","شوجو أي","شونين","شونين أي","شريحة من الحياة","رياضة","خارق للطبيعة","مأساة","مصاصي الدماء","سحر","ويب تون","دوجينشي"}Onma.TagValues={["أكشن"]=1,["مغامرة"]=2,["كوميدي"]=3,["شياطين"]=4,["دراما"]=5,["إيتشي"]=6,["خيال"]=7,["انحراف جنسي"]=8,["حريم"]=9,["تاريخي"]=10,["رعب"]=11,["جوسي"]=12,["فنون قتالية"]=13,["ناضج"]=14,["ميكا"]=15,["غموض"]=16,["وان شوت"]=17,["نفسي"]=18,["رومنسي"]=19,["حياة مدرسية"]=20,["خيال علمي"]=21,["سينين"]=22,["شوجو"]=23,["شوجو أي"]=24,["شونين"]=25,["شونين أي"]=26,["شريحة من الحياة"]=27,["رياضة"]=28,["خارق للطبيعة"]=29,["مأساة"]=30,["مصاصي الدماء"]=31,["سحر"]=32,["ويب تون"]=35,["دوجينشي"]=36}local function a(b)return b:gsub("([^;]-);",function(c)local d=tonumber("0"..c)or tonumber(c)return d and u8c(d)or""..c..";"end):gsub("&(.-);",function(c)return HTML_entities and HTML_entities[c]and u8c(HTML_entities[c])or"&"..c..";"end)end;local function e(b)return b:gsub("\\u(....)",function(c)return u8c(tonumber("0x"..c))end)end;local function f(g)local h={}Threads.insertTask(h,{Type="StringRequest",Link=g,Table=h,Index="text"})while Threads.check(h)do coroutine.yield(false)end;return h.text or""end;function Onma:getManga(g,i)local j=f(g)i.NoPages=true;for k,l,m in j:gmatch(']->[^>]-src=\'([^\']-)\'[^>]*alt=\'([^\']-)\'>[^<]-')do i[#i+1]=CreateManga(a(m),k,l,self.ID,self.Link.."/manga/"..k,self.Link.."/manga/"..k)i.NoPages=false;coroutine.yield(false)end end;function Onma:getPopularManga(n,i)self:getManga(self.Link.."/filterList?sortBy=views&asc=false&page="..n,i)end;function Onma:getAZManga(n,i)self:getManga(self.Link.."/filterList?sortBy=name&asc=true&page="..n,i)end;function Onma:getTagManga(n,i,o)self:getManga(self.Link.."/filterList?alpha=&cat="..(self.TagValues[o]or"0").."&sortBy=name&asc=true&page="..n,i)end;function Onma:searchManga(p,n,i)local j=f(self.Link.."/search?query="..p)i.NoPages=true;for q,r in j:gmatch('{"value":"(.-)","data":"(.-)"}')do i[#i+1]=CreateManga(e(q),r,self.Link.."/uploads/manga/"..r.."/cover/cover_250x350.jpg",self.ID,self.Link.."/manga/"..r,self.Link.."/manga/"..r)coroutine.yield(false)end end;function Onma:getChapters(s,i)local j=f(self.Link.."/manga/"..s.Link)local t=j:match('class="well">.-
]->(.-)')or""i.Description=a(t:gsub("<.->",""):gsub("^%s+",""):gsub("%s+$",""))local u={}for k,m,v in j:gmatch('chapter%-title%-rtl">[^<]-([^<]-)(.-)')do v=v:match("([^<]-)")u[#u+1]={Name=a(m..(v and": "..v or"")),Link=k,Pages={},Manga=s}end;for w=#u,1,-1 do i[#i+1]=u[w]end end;function Onma:prepareChapter(x,i)local j=f(self.Link.."/manga/"..x.Link)for k in j:gmatch('img%-responsive"[^>]-data%-src=\' ([^\']-) \'')do i[#i+1]=k end end;function Onma:loadChapterPage(g,i)i.Link=g end \ No newline at end of file diff --git a/source/[AR]Onma.lua b/source/[AR]Onma.lua new file mode 100644 index 0000000..d015ec9 --- /dev/null +++ b/source/[AR]Onma.lua @@ -0,0 +1,178 @@ +Onma = Parser:new("Onma", "https://onma.me", "ARA", "ONMAARA", 1) + +Onma.Tags = { + "أكشن", + "مغامرة", + "كوميدي", + "شياطين", + "دراما", + "إيتشي", + "خيال", + "انحراف جنسي", + "حريم", + "تاريخي", + "رعب", + "جوسي", + "فنون قتالية", + "ناضج", + "ميكا", + "غموض", + "وان شوت", + "نفسي", + "رومنسي", + "حياة مدرسية", + "خيال علمي", + "سينين", + "شوجو", + "شوجو أي", + "شونين", + "شونين أي", + "شريحة من الحياة", + "رياضة", + "خارق للطبيعة", + "مأساة", + "مصاصي الدماء", + "سحر", + "ويب تون", + "دوجينشي" +} + +Onma.TagValues = { + ["أكشن"] = 1, + ["مغامرة"] = 2, + ["كوميدي"] = 3, + ["شياطين"] = 4, + ["دراما"] = 5, + ["إيتشي"] = 6, + ["خيال"] = 7, + ["انحراف جنسي"] = 8, + ["حريم"] = 9, + ["تاريخي"] = 10, + ["رعب"] = 11, + ["جوسي"] = 12, + ["فنون قتالية"] = 13, + ["ناضج"] = 14, + ["ميكا"] = 15, + ["غموض"] = 16, + ["وان شوت"] = 17, + ["نفسي"] = 18, + ["رومنسي"] = 19, + ["حياة مدرسية"] = 20, + ["خيال علمي"] = 21, + ["سينين"] = 22, + ["شوجو"] = 23, + ["شوجو أي"] = 24, + ["شونين"] = 25, + ["شونين أي"] = 26, + ["شريحة من الحياة"] = 27, + ["رياضة"] = 28, + ["خارق للطبيعة"] = 29, + ["مأساة"] = 30, + ["مصاصي الدماء"] = 31, + ["سحر"] = 32, + ["ويب تون"] = 35, + ["دوجينشي"] = 36, +} + + +local function stringify(string) + return string:gsub( + "([^;]-);", + function(a) + local number = tonumber("0" .. a) or tonumber(a) + return number and u8c(number) or "" .. a .. ";" + end + ):gsub( + "&(.-);", + function(a) + return HTML_entities and HTML_entities[a] and u8c(HTML_entities[a]) or "&" .. a .. ";" + end + ) +end + +local function stringify2(string) + return string:gsub( + "\\u(....)", + function(a) + return u8c(tonumber("0x" .. a)) + end + ) +end + +local function downloadContent(link) + local f = {} + Threads.insertTask( + f, + { + Type = "StringRequest", + Link = link, + Table = f, + Index = "text" + } + ) + while Threads.check(f) do + coroutine.yield(false) + end + return f.text or "" +end + +function Onma:getManga(link, dt) + local content = downloadContent(link) + dt.NoPages = true + for Link, ImageLink, Name in content:gmatch(']->[^>]-src=\'([^\']-)\'[^>]*alt=\'([^\']-)\'>[^<]-') do + dt[#dt + 1] = CreateManga(stringify(Name), Link, ImageLink, self.ID, self.Link .. "/manga/" .. Link, self.Link .. "/manga/" .. Link) + dt.NoPages = false + coroutine.yield(false) + end +end + +function Onma:getPopularManga(page, dt) + self:getManga(self.Link .. "/filterList?sortBy=views&asc=false&page=" .. page, dt) +end + +function Onma:getAZManga(page, dt) + self:getManga(self.Link .. "/filterList?sortBy=name&asc=true&page=" .. page, dt) +end + +function Onma:getTagManga(page, dt, tag) + self:getManga(self.Link .. "/filterList?alpha=&cat=" .. (self.TagValues[tag] or "0") .. "&sortBy=name&asc=true&page=" .. page, dt) +end + +function Onma:searchManga(search, page, dt) + local content = downloadContent(self.Link .. "/search?query=" .. search) + dt.NoPages = true + for value, data in content:gmatch('{"value":"(.-)","data":"(.-)"}') do + dt[#dt + 1] = CreateManga(stringify2(value), data, self.Link .. "/uploads/manga/" .. data .. "/cover/cover_250x350.jpg", self.ID, self.Link .. "/manga/" .. data, self.Link .. "/manga/" .. data) + coroutine.yield(false) + end +end + +function Onma:getChapters(manga, dt) + local content = downloadContent(self.Link .. "/manga/" .. manga.Link) + local description = content:match('class="well">.-
]->(.-)') or "" + dt.Description = stringify(description:gsub("<.->", ""):gsub("^%s+", ""):gsub("%s+$", "")) + local t = {} + for Link, Name, SubName in content:gmatch('chapter%-title%-rtl">[^<]-([^<]-)(.-)') do + SubName = SubName:match("([^<]-)") + t[#t + 1] = { + Name = stringify(Name .. (SubName and (": " .. SubName) or "")), + Link = Link, + Pages = {}, + Manga = manga + } + end + for i = #t, 1, -1 do + dt[#dt + 1] = t[i] + end +end + +function Onma:prepareChapter(chapter, dt) + local content = downloadContent(self.Link .. "/manga/" .. chapter.Link) + for Link in content:gmatch('img%-responsive"[^>]-data%-src=\' ([^\']-) \'') do + dt[#dt + 1] = Link + end +end + +function Onma:loadChapterPage(link, dt) + dt.Link = link +end