-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAlexML.py
80 lines (58 loc) · 2.38 KB
/
AlexML.py
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
## @file
## @brief пример генерации HTML/JS кода по методу `metaL`
from metaL import *
# для настройки нового типа проекта наследуем шаблон проекта-прототипа
class alexModule(anyModule):
# подправляем .gitignore
def init_giti(self):
super().init_giti()
self.giti.bot // 'LICENSE'
self.giti.sync() # записать изменения
# создать модуль = каталог /AlexML/
MODULE = alexModule()
# после выполнения строки уже будет создан набор файлов типового проекта: .vscode Makefile apt.txt ...
# создать целевой файл
html = File('index.html', comment=None)
MODULE.diroot // html
# каждый файл имеет 3 секции .top .mid .bot
html.top // '<!DOCTYPE html>'
# с JavaScript работаем так-же: используем универсальные узлы исходного кода S() или наследуюем специальные
script = H('script')
script['type'] = 'text/javascript'
html.bot // script
# корневой элемент
root = H('html')
# сделать push в файл
html.mid // root
head = H('head')
root // head
# 2й параметр H(V,closing=True) указывает что нужно закрывающий тег
charset = H('meta', 0)
charset['charset'] = '"utf8"'
head // charset
# для демонстрации определим спец-класс для тега
class hTitle(H):
def __init__(self, V):
super().__init__('title', block=False)
self // V
title = hTitle(MODULE)
head // title
body = H('body')
root // body
# создаем новый тег
class newTag(H):
def __init__(self):
super().__init__('new-tag', closing=True, block=True)
# запихиваем пример кода как вложенный подграф
self //\
(H('a') //
H('bunch') //
H('of-old-plain-html', closing=False)
)
# определяем дополнительный метод генерации кода
def html(self, depth=0, block=False):
return "<a><bunch/><of-old-plain-html/></a>"
newtag = newTag()
body // newtag // (H('P') // newtag.html())
# записать изменения
html.sync()