diff --git a/utils/Sync/kazimir/CSVToken.py b/utils/Sync/kazimir/CSVToken.py
new file mode 100644
index 00000000..8ffd0733
--- /dev/null
+++ b/utils/Sync/kazimir/CSVToken.py
@@ -0,0 +1,46 @@
+import csv
+import io
+
+from kazimir.Token import FileToken, is_file
+
+extensions = ['.csv']
+
+
+class CSVToken(FileToken):
+ @staticmethod
+ def test(data: str):
+ return is_file(data, extensions)
+
+ def __init__(self, data) -> None:
+ super().__init__(data=data)
+ self.name = 'csv'
+ self.joinable = False
+ self.build = None
+
+ async def compile(self):
+ data = await self.build(self.data)
+
+ f = io.StringIO(data)
+ reader = csv.reader(f, delimiter=',', quotechar='|')
+
+ headers = next(reader, None)
+
+ row = lambda xs: '\n'.join([
+ f'
{x} | ' for x in xs
+ ])
+
+ head = '\n'.join([
+ f'{x} | ' for x in headers
+ ])
+ body = '\n'.join([
+ f'{row(x)}
' for x in reader
+ ])
+
+ return f'''
+
+ '''.strip()
diff --git a/utils/Sync/kazimir/Marker.py b/utils/Sync/kazimir/Marker.py
index 14cc3982..c351797f 100644
--- a/utils/Sync/kazimir/Marker.py
+++ b/utils/Sync/kazimir/Marker.py
@@ -1,6 +1,8 @@
import asyncio
import lxml.html
from markdown import markdown
+
+from kazimir.CSVToken import CSVToken
from kazimir.InstagramToken import InstagramToken
from kazimir.YoutubeToken import YoutubeToken
from kazimir.Token import SplitToken, ImageToken, UrlToken, FileToken, TextToken, DocumentToken, TokenFactory, \
@@ -156,6 +158,8 @@ Fye!
["Ya"](http://ya.ru)
More text
+
+file.csv
'''
@@ -172,6 +176,14 @@ More text
}
return document
+ async def read_csv(data):
+ return '\n'.join([
+ 'N,Name',
+ f'0,{data}',
+ '1,Pop',
+ '2,Top',
+ ])
+
async def run():
from kazimir.fix_links_quotes import fix_links_quotes
@@ -183,6 +195,7 @@ More text
m.add_token_factory(TokenFactory(UrlToken))
m.add_token_factory(TokenFactory(ImageToken))
m.add_token_factory(BuildTokenFactory(build=build_document))
+ m.add_token_factory(BuildTokenFactory(CSVToken, build=read_csv))
m.add_token_factory(TokenFactory(FileToken))
m.add_token_factory(TokenFactory(TextToken))
m.add_tree_middleware(fix_links_quotes)