Create engine.nim

This commit is contained in:
witer33 2020-11-02 19:01:53 +01:00 committed by GitHub
parent b8864a58b1
commit 75fc5ba216
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 56 additions and 0 deletions

56
src/engine.nim Normal file
View File

@ -0,0 +1,56 @@
import builder, parser, types, strtabs
type Engine* = ref object of RootObj
html*: string
tags: seq[Tag]
method run*(this: Engine) {.base.} =
var parser = Parser(html: this.html)
var builder = Builder(parser: parser)
parser.parse_tokens()
builder.build()
this.tags = builder.get_tags()
method get_tags*(this: Engine): seq[Tag] {.base.} = this.tags
method find*(this: Engine, name: string, args: StringTableRef = newStringTable(), level: int = -1, after: int = 0): Tag {.base.} =
var breaked = false
for index, tag in this.tags[after..^1]:
breaked = false
if tag.name == name or name == "":
if level == -1 or level == tag.level:
for arg, value in args.pairs():
if tag.args[arg] != value:
breaked = true
break
if not breaked:
return tag
raise newException(ValueError, "Tag not found.")
method findAll*(this: Engine, name: string, args: StringTableRef = newStringTable(), level: int = -1, after: int = 0): seq[Tag] {.base.} =
var breaked = false
var tags: seq[Tag]
for index, tag in this.tags[after..^1]:
breaked = false
if tag.name == name or name == "":
if level == -1 or level == tag.level:
for arg, value in args.pairs():
if tag.args[arg] != value:
breaked = true
break
if not breaked:
tags.add(tag)
if len(tags) == 0:
raise newException(ValueError, "Tag not found.")
else:
return tags
method get*(this: Tag, arg: string): string {.base.} = this.args[arg]
method getText*(this: Tag, index: int): string {.base.} = this.texts[index]
method getAllText*(this: Tag): string {.base.} =
var all_texts = ""
for text in this.texts:
all_texts.add(text)
return all_texts