feat: 飞书知识库工具集
This commit is contained in:
@@ -12,8 +12,23 @@ import re, json, sys
|
|||||||
TABLE_BLOCK = 31
|
TABLE_BLOCK = 31
|
||||||
CELL_BLOCK = 32
|
CELL_BLOCK = 32
|
||||||
TEXT_BLOCK = 2
|
TEXT_BLOCK = 2
|
||||||
|
CODE_BLOCK = 14
|
||||||
PREFIX = 'ecc_'
|
PREFIX = 'ecc_'
|
||||||
|
|
||||||
|
LANG_CODES = {
|
||||||
|
'': 1, 'text': 1, 'plain': 1,
|
||||||
|
'bash': 7, 'sh': 7, 'shell': 7,
|
||||||
|
'python': 11, 'py': 11,
|
||||||
|
'go': 5, 'golang': 5,
|
||||||
|
'js': 12, 'javascript': 12, 'json': 14,
|
||||||
|
'yaml': 33, 'yml': 33,
|
||||||
|
'sql': 25,
|
||||||
|
}
|
||||||
|
|
||||||
|
def lang_code(lang):
|
||||||
|
"""Map markdown code fence language to Feishu code block language id."""
|
||||||
|
return LANG_CODES.get(lang.lower(), 1)
|
||||||
|
|
||||||
def parse_inline(text):
|
def parse_inline(text):
|
||||||
"""Parse a line of inline markdown into text_run elements."""
|
"""Parse a line of inline markdown into text_run elements."""
|
||||||
elements = []
|
elements = []
|
||||||
@@ -176,6 +191,26 @@ def md_to_blocks(md_text):
|
|||||||
while i < len(lines):
|
while i < len(lines):
|
||||||
line = lines[i]
|
line = lines[i]
|
||||||
|
|
||||||
|
# Fenced code block: ```lang ... ```
|
||||||
|
fence = re.match(r'^```(\w*)\s*$', line.strip())
|
||||||
|
if fence:
|
||||||
|
lang = fence.group(1)
|
||||||
|
code_lines = []
|
||||||
|
i += 1
|
||||||
|
while i < len(lines) and not lines[i].strip().startswith('```'):
|
||||||
|
code_lines.append(lines[i])
|
||||||
|
i += 1
|
||||||
|
i += 1 # skip closing fence
|
||||||
|
code_text = '\n'.join(code_lines)
|
||||||
|
blocks.append({
|
||||||
|
'block_type': CODE_BLOCK,
|
||||||
|
'code': {
|
||||||
|
'elements': [{'text_run': {'content': code_text, 'text_element_style': {}}}],
|
||||||
|
'style': {'language': lang_code(lang)}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
|
||||||
# Empty line
|
# Empty line
|
||||||
if not line.strip():
|
if not line.strip():
|
||||||
if i + 1 < len(lines) and lines[i + 1].strip() and not lines[i + 1].strip().startswith(('#', '-', '*', '`', '---', '|')):
|
if i + 1 < len(lines) and lines[i + 1].strip() and not lines[i + 1].strip().startswith(('#', '-', '*', '`', '---', '|')):
|
||||||
|
|||||||
Reference in New Issue
Block a user