]*)>(((?!<\/code\-sample\-block>)(.|[\r\n]+))+)<\/code\-sample\-block>', RE_IGNORE_CASE)),
"paragraph" : (WMarkDown.RAW, RECompile(r'^(([^\r\n]+(\n|\r\n|\r)?)+)', RE_MULTILINE)),
- # "bold_italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\*{3}(([^\*]+|\*{1,2}[^\*]|[\r\n]+|\\\*)*)\*{3}')),
- # "bold_italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'(? str:
+ def __id(self:Self, string:str) -> str:
id:str = WMarkDown.re_characters_no_id.sub(r'-', string).lower()
@@ -120,7 +117,7 @@ class WMarkDown:
def reset_ids(self):
self.__ids_cache = tuple()
- def module_title(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_title(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
level:str = str(len(matches.group(2) or matches.group(4)))
@@ -135,37 +132,37 @@ class WMarkDown:
'')
return None
- def module_paragraph(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_paragraph(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(0).strip(), language, WMarkDown.SUBITEM, path) + '
'
return None
- def module_bold_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_bold_italic(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + ''
return None
- def module_bold(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_bold(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + ''
return None
- def module_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_italic(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + ''
return None
- def module_strike(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_strike(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + ''
return None
- def module_underline(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_underline(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + ''
return None
- def module_code_item(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_code_item(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return '' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '
'
return None
@@ -184,21 +181,21 @@ class WMarkDown:
'')
@classmethod
- def module_checkbox(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
- return WMarkDown.__check_html_module("checkbox", matches)
+ def module_checkbox(cls:type[Self], matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
+ return cls.__check_html_module("checkbox", matches)
return None
@classmethod
- def module_radio(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
- return WMarkDown.__check_html_module("radio", matches)
+ def module_radio(cls:type[Self], matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
+ return cls.__check_html_module("radio", matches)
return None
@classmethod
- def module_tick(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
- return WMarkDown.__check_html_module("tick", matches)
+ def module_tick(cls:type[Self], matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
+ return cls.__check_html_module("tick", matches)
return None
@staticmethod
@@ -214,14 +211,14 @@ class WMarkDown:
return ' data-deployed="' + deployed + '"' + (' data-list-unprocessed="true"' if deployable else '')
@classmethod
- def __list_start(self, unordered:bool, _type:str) -> str:
+ def __list_start(cls:type[Self], unordered:bool, _type:str) -> str:
if not unordered:
_type = _type[:-1]
- if WMarkDown.re_integer.search(_type):
+ if cls.re_integer.search(_type):
return ' start="' + _type + '"'
return ''
- def module_list(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_list(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
html:str = ''
@@ -280,7 +277,7 @@ class WMarkDown:
return None
@classmethod
- def set_class(self, html:str, _class:str|list|tuple) -> str:
+ def set_class(cls:type[Self], html:str, _class:str|list|tuple) -> str:
if not isinstance(_class, (list, tuple)):
_class = (_class,)
@@ -297,15 +294,15 @@ class WMarkDown:
class_key:str
attribute, classes_str, closer = matches.groups()
- classes = WMarkDown.re_white_spaces.split(classes_str)
+ classes = cls.re_white_spaces.split(classes_str)
return attribute + classes_str + (' ' if classes_str else '') + " ".join([
class_key for class_key in _class if class_key not in classes
]) + closer
- return WMarkDown.re_class_attribute.sub(callback, html)
+ return cls.re_class_attribute.sub(callback, html)
- def module_table(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_table(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
html:dict[str, str] = {
@@ -374,12 +371,12 @@ class WMarkDown:
return None
@classmethod
- def module_exclude(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
+ def module_exclude(cls:type[Self], matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
return '' + (matches.group(1) or "") + ''
return None
- def module_link(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_link(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
raw_url:str = (matches.group(4) or matches.group(11) or matches.group(14) or "").strip()
@@ -397,7 +394,7 @@ class WMarkDown:
) + '">' + self.analyse(text.strip(), language, WMarkDown.SUBITEM | self.LINKED, path) + ''
return None
- def module_quote(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_quote(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
_type:str|None = matches.group(2)
@@ -419,8 +416,8 @@ class WMarkDown:
return None
@classmethod
- def code_block_data(self, key:str, value:str|int, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
+ def code_block_data(cls:type[Self], key:str, value:str|int, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
return ('' +
'' +
'' + key + '' +
@@ -429,13 +426,13 @@ class WMarkDown:
return None
@classmethod
- def filter_html_special_characters(self, string:str) -> str:
+ def filter_html_special_characters(cls:type[Self], string:str) -> str:
- l:int = len(WMarkDown.html_special_characters)
+ l:int = len(cls.html_special_characters)
_:int
index:list[int] = [-1 for _ in range(l)]
response:str = ''
- characters:tuple[str] = tuple(WMarkDown.html_special_characters.keys())
+ characters:tuple[str] = tuple(cls.html_special_characters.keys())
while True:
@@ -463,7 +460,7 @@ class WMarkDown:
length:int = index[i]
- response += string[:length] + '&' + WMarkDown.html_special_characters[characters[i]] + ';'
+ response += string[:length] + '&' + cls.html_special_characters[characters[i]] + ';'
string = string[length + 1:]
for j in range(l):
@@ -471,47 +468,69 @@ class WMarkDown:
index[j] -= length + 1
return response
+
+ @staticmethod
+ def get_code_block_data(matches:REMatch) -> str:
+
+ _type:str
+ i:int
+ content:str
+
+ for i in range(6):
+
+ j:int = 2 + i * 4
+
+ _type = matches.group(j)
+ content = matches.group(j + 1)
+ if _type or content:
+ _type = (_type or "unamed").strip().lower()
+ content = (content or "")
+ break
+
+ return (_type, content)
@classmethod
- def module_code_block(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
- if language & WMarkDown.HTML:
+ def module_code_block(cls:type[Self], matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & cls.HTML:
_type:str
content:str
- i:int
+ # i:int
- for i in range(6):
+ (_type, content) = cls.get_code_block_data(matches)
- j:int = 2 + i * 4
+ # for i in range(6):
- _type = matches.group(j)
- content = matches.group(j + 1)
- if _type or content:
- _type = (_type or "unamed").strip().lower()
- content = (content or "")
- break
+ # j:int = 2 + i * 4
+
+ # _type = matches.group(j)
+ # content = matches.group(j + 1)
+ # if _type or content:
+ # _type = (_type or "unamed").strip().lower()
+ # content = (content or "")
+ # break
if _type:
- lines:list[str] = WMarkDown.re_new_line.split(content)[2:]
+ lines:list[str] = cls.re_new_line.split(content)[2:]
_:str
return (''
'' +
' ' +
- WMarkDown.code_block_data("type", _type, language) +
- WMarkDown.code_block_data("characters", len(content), language) +
- WMarkDown.code_block_data("lines", len(lines), language) +
+ cls.code_block_data("type", _type, language) +
+ cls.code_block_data("characters", len(content), language) +
+ cls.code_block_data("lines", len(lines), language) +
'
' +
'' +
'' + ''.join(['' for _ in lines]) + '
' +
- '' + WMarkDown.filter_html_special_characters(content) + '
' +
+ '' + cls.filter_html_special_characters(content) + '
' +
'' +
'')
return 'UNKNOWN_BLOCK'
return None
- def module_special_characters(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_special_characters(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
return matches.group(1)
return None
@@ -526,7 +545,7 @@ class WMarkDown:
pass
return None
- def module_include(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_include(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
relative_path:str = matches.group(1)
@@ -560,7 +579,7 @@ class WMarkDown:
('' + title + '' if title else '') +
'')
- def module_media(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_media(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
_type:str = matches.group(1).lower()
@@ -601,7 +620,7 @@ class WMarkDown:
return None
@classmethod
- def mark_replace(self, string:str, matches:REMatch, fragments:list[str]) -> str:
+ def mark_replace(cls:type[Self], string:str, matches:REMatch, fragments:list[str]) -> str:
if matches:
@@ -611,17 +630,17 @@ class WMarkDown:
start, end = matches.span()
- string = string[:start] + WMarkDown.item_mark[0] + str(len(fragments)) + WMarkDown.item_mark[1] + string[end:]
+ string = string[:start] + cls.item_mark[0] + str(len(fragments)) + cls.item_mark[1] + string[end:]
fragments += [matches.group(0)]
return string
@classmethod
- def restore_marks(self, string:str, fragments:list[str]) -> str:
+ def restore_marks(cls:type[Self], string:str, fragments:list[str]) -> str:
while True:
- matches:REMatch = WMarkDown.item_mark[2].search(string)
+ matches:REMatch = cls.item_mark[2].search(string)
if not matches:
break
@@ -637,8 +656,8 @@ class WMarkDown:
return string
@classmethod
- def __doc_typed_format(self, typed:str) -> str:
- return WMarkDown.filter_html_special_characters(typed.replace(' ', "").replace(',', ", "))
+ def __doc_typed_format(cls:type[Self], typed:str) -> str:
+ return cls.filter_html_special_characters(typed.replace(' ', "").replace(',', ", "))
@staticmethod
def is_reference(scope:str) -> str|None:
@@ -647,11 +666,9 @@ class WMarkDown:
"pointer" if '*' in scope else
None)
- def module_code_doc(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_code_doc(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
- # print(matches.groups())
-
data:str = matches.group(1).strip()
base:REMatch = WMarkDown.re_code_doc.search(data)
return_type:str = WMarkDown.__doc_typed_format(base.group(2) or "void")
@@ -753,7 +770,7 @@ class WMarkDown:
'')
return None
- def module_color_sample(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_color_sample(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
color:str = matches.group(2) or matches.group(3)
@@ -764,7 +781,7 @@ class WMarkDown:
'')
return None
- def module_presentation_links(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ def module_presentation_links(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & WMarkDown.HTML:
items:list = []
@@ -823,11 +840,47 @@ class WMarkDown:
'')
return None
+ def module_code_sample_block(self:Self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
+ if language & WMarkDown.HTML:
+
+ attributes:str = matches.group(1) or ''
+ submatches:REMatch = WMarkDown.re_class_attribute.search(attributes)
+ classes:list[str] = WMarkDown.re_white_spaces.split((submatches.group(1) if submatches else '').strip())
+ content:str = matches.group(2)
+ languages:str = ''
+ html = ''
+ i:int = 0
+
+ while True:
+
+ submatches = self.modules["code_block"][1].search(content)
+
+ if not submatches:
+ break
+
+ _type:str = WMarkDown.get_code_block_data(submatches)[0]
+ span:tuple[int, int] = submatches.span()
+
+ languages += ' ' + _type + ' '
+ html += self.module_code_block(submatches, language, path)
+
+ print(span + (len(content),))
+
+ content = content[span[1]:]
+
+ "wmd-code-sample-block" in classes or classes.insert(0, "wmd-code-sample-block")
+
+ return ('' +
+ '' +
+ '' + html + '' +
+ '')
+ return None
+
@classmethod
- def remove_default_tabulations(self, data:str) -> str:
+ def remove_default_tabulations(cls:type[Self], data:str) -> str:
line:str
- lines:list[str] = WMarkDown.re_new_lines.split(data)
+ lines:list[str] = cls.re_new_lines.split(data)
spaces:int = len(data)
def callback(matches:REMatch):
@@ -837,20 +890,20 @@ class WMarkDown:
if not line:
continue
- white_spaces:int = len(WMarkDown.re_started_white_spaces.search(line).group(0))
+ white_spaces:int = len(cls.re_started_white_spaces.search(line).group(0))
if white_spaces < spaces:
spaces = white_spaces
- return WMarkDown.re_lines.sub(callback, data)
+ return cls.re_lines.sub(callback, data)
- def __build(self, data:str, language:int, path:str|None) -> str:
+ def __build(self:Self, data:str, language:int, path:str|None) -> str:
return ('' +
self.analyse(WMarkDown.remove_default_tabulations(data), language, WMarkDown.RAW, path) +
'' +
'')
- def process(self, data:str, language:Optional[int] = HTML, path:Optional[str] = None) -> str:
+ def process(self:Self, data:str, language:Optional[int] = HTML, path:Optional[str] = None) -> str:
results:str = ""
variables:dict[str, str] = {}
@@ -871,7 +924,7 @@ class WMarkDown:
if not option:
break
- variables[option.group(1).strip()] = option.group(2).strip()
+ variables[str(option.group(1)).strip()] = str(option.group(2)).strip()
options_data = options_data[option.span()[1]:]
data = data[:_from] + data[_to:]
@@ -911,7 +964,7 @@ class WMarkDown:
return results, variables
- def analyse(self, data:str, language:Optional[int] = HTML, mode:Optional[int] = RAW, path:Optional[str] = None) -> str:
+ def analyse(self:Self, data:str, language:Optional[int] = HTML, mode:Optional[int] = RAW, path:Optional[str] = None) -> str:
response:str = ""
item_mode:int
@@ -967,5 +1020,5 @@ class WMarkDown:
return response
- def to_html(self, data:str, path:Optional[str] = None) -> str:
+ def to_html(self:Self, data:str, path:Optional[str] = None) -> str:
return self.analyse(data, WMarkDown.HTML, WMarkDown.RAW, path)
\ No newline at end of file
diff --git a/version b/version
index 8da807f..9676eb0 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-0.0.3.6
\ No newline at end of file
+0.0.3.7
\ No newline at end of file