feat: 飞书知识库工具集

This commit is contained in:
NightStar
2026-08-04 20:25:22 +08:00
parent 4105f8521a
commit 4357de7ad6
+35
View File
@@ -12,8 +12,23 @@ import re, json, sys
TABLE_BLOCK = 31
CELL_BLOCK = 32
TEXT_BLOCK = 2
CODE_BLOCK = 14
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):
"""Parse a line of inline markdown into text_run elements."""
elements = []
@@ -176,6 +191,26 @@ def md_to_blocks(md_text):
while i < len(lines):
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
if not line.strip():
if i + 1 < len(lines) and lines[i + 1].strip() and not lines[i + 1].strip().startswith(('#', '-', '*', '`', '---', '|')):