From fb5143a95c94a6a0e73460ddff4dec9a65e4d165 Mon Sep 17 00:00:00 2001 From: Wcowin <1135801806@qq.com> Date: Fri, 6 Jun 2025 20:22:49 +0800 Subject: [PATCH] 25/6/6 --- .ai_cache/service_config.json | 2 +- .../plugin/git-committers/page-authors.json | 2 +- docs/about/test.md | 9 + ...kDocs-AI-Hooks.md => Mkdocs-AI-Summary.md} | 7 +- docs/blog/websitebeauty/reading_time.md | 374 ++++++++++++++++++ .../__pycache__/ai_summary.cpython-311.pyc | Bin 49380 -> 49402 bytes docs/overrides/hooks/reading_time.py | 2 +- mkdocs.yml | 5 +- 8 files changed, 393 insertions(+), 8 deletions(-) rename docs/blog/websitebeauty/{MkDocs-AI-Hooks.md => Mkdocs-AI-Summary.md} (98%) create mode 100644 docs/blog/websitebeauty/reading_time.md diff --git a/.ai_cache/service_config.json b/.ai_cache/service_config.json index b0a4a59..7915dfa 100644 --- a/.ai_cache/service_config.json +++ b/.ai_cache/service_config.json @@ -6,5 +6,5 @@ "gemini" ], "summary_language": "zh", - "check_time": "2025-06-04T11:03:04.808361" + "check_time": "2025-06-06T19:19:56.275939" } \ No newline at end of file diff --git a/.cache/plugin/git-committers/page-authors.json b/.cache/plugin/git-committers/page-authors.json index d6004e2..363e1af 100644 --- a/.cache/plugin/git-committers/page-authors.json +++ b/.cache/plugin/git-committers/page-authors.json @@ -1 +1 @@ -{"cache_date": "2025-06-04", "page_authors": {}} \ No newline at end of file +{"cache_date": "2025-06-06", "page_authors": {}} \ No newline at end of file diff --git a/docs/about/test.md b/docs/about/test.md index e9f7197..a60f133 100644 --- a/docs/about/test.md +++ b/docs/about/test.md @@ -1,6 +1,15 @@ +--- +title: 测试小组件 +# status: new +--- + +# 测试小组件 + !!!info 测试中的小组件,可看源代码自行取用 + +
“循此苦旅 以达星辰”
diff --git a/docs/blog/websitebeauty/MkDocs-AI-Hooks.md b/docs/blog/websitebeauty/Mkdocs-AI-Summary.md similarity index 98% rename from docs/blog/websitebeauty/MkDocs-AI-Hooks.md rename to docs/blog/websitebeauty/Mkdocs-AI-Summary.md index 0a3421b..c30e2af 100644 --- a/docs/blog/websitebeauty/MkDocs-AI-Hooks.md +++ b/docs/blog/websitebeauty/Mkdocs-AI-Summary.md @@ -7,8 +7,10 @@ status: new # MkDocs AI Hooks -仓库地址:https://github.com/Wcowin/mkdocs-ai-hooks -在线预览:https://wcowin.work/mkdocs-ai-hooks/ +![logo 2](https://s1.imagehub.cc/images/2025/06/06/ee327dc2912fd2f31d38ee8a16a1e1ff.png){.img1} + +仓库地址:[https://github.com/Wcowin/Mkdocs-AI-Summary](https://github.com/Wcowin/Mkdocs-AI-Summary) +🌐 **在线演示**:[https://wcowin.work/Mkdocs-AI-Summary/](https://wcowin.work/Mkdocs-AI-Summary/)

MkDocs Hooks @@ -26,7 +28,6 @@ status: new ![预览图1](https://s1.imagehub.cc/images/2025/06/03/d1563500263b22cfd0ffc3679993aa83.jpg) ![预览图2](https://s1.imagehub.cc/images/2025/06/03/526b59b6a2e478f2ffa1629320e3e2ce.png) -🌐 **在线演示**: https://wcowin.work/mkdocs-ai-hooks/ --- diff --git a/docs/blog/websitebeauty/reading_time.md b/docs/blog/websitebeauty/reading_time.md new file mode 100644 index 0000000..4a23047 --- /dev/null +++ b/docs/blog/websitebeauty/reading_time.md @@ -0,0 +1,374 @@ +--- +title: Mkdocs 阅读时间插件 +tags: + - Mkdocs +status: new +--- + +## 1. 基础配置 + +### **步骤1** + +创建reading_time.py + +??? note "reading_time.py" + ```python + import re + import threading + import time + from functools import lru_cache + from collections import OrderedDict + import hashlib + + # 预编译正则表达式(性能优化版本) + EXCLUDE_PATTERNS = [ + re.compile(r'^index\.md$'), + re.compile(r'^trip/index\.md$'), + re.compile(r'^relax/index\.md$'), + re.compile(r'^blog/indexblog\.md$'), + re.compile(r'^blog/posts\.md$'), + re.compile(r'^develop/index\.md$'), + re.compile(r'waline\.md$'), + re.compile(r'link\.md$'), + re.compile(r'404\.md$'), + ] + + # 高度优化的正则表达式(一次性编译) + CHINESE_CHARS_PATTERN = re.compile(r'[\u4e00-\u9fff\u3400-\u4dbf]') + CODE_BLOCK_PATTERN = re.compile(r'```.*?```', re.DOTALL) + INLINE_CODE_PATTERN = re.compile(r'`[^`]+`') + YAML_FRONT_PATTERN = re.compile(r'^---.*?---\s*', re.DOTALL) + HTML_TAG_PATTERN = re.compile(r'<[^>]+>') + IMAGE_PATTERN = re.compile(r'!\[.*?\]\([^)]+\)') + LINK_PATTERN = re.compile(r'\[([^\]]+)\]\([^)]+\)') + + # 预定义排除类型 + EXCLUDE_TYPES = frozenset({'landing', 'special', 'widget'}) + + # 扩展非编程行内代码词汇(更全面的过滤) + NON_CODE_WORDS = frozenset({ + 'markdown', 'target', 'blank', 'lg', 'middle', 'small', 'large', + 'left', 'right', 'center', 'top', 'bottom', 'primary', 'secondary', + 'success', 'warning', 'danger', 'info', 'light', 'dark', 'grid', + 'cards', 'octicons', 'bookmark', 'div', 'class', 'img', 'src', + 'alt', 'width', 'height', 'style', 'id', 'data', 'href', 'title' + }) + + # 支持的编程和标记语言(扩展版本) + PROGRAMMING_LANGUAGES = frozenset({ + # 编程语言 + 'python', 'py', 'javascript', 'js', 'typescript', 'ts', 'java', 'cpp', 'c', + 'go', 'rust', 'php', 'ruby', 'swift', 'kotlin', 'csharp', 'cs', + # 脚本语言 + 'bash', 'sh', 'powershell', 'ps1', 'zsh', 'fish', 'bat', 'cmd', + # 标记和配置语言 + 'html', 'css', 'scss', 'sass', 'less', 'yaml', 'yml', 'json', 'xml', + 'toml', 'ini', 'conf', 'dockerfile', 'makefile', + # 数据库和查询 + 'sql', 'mysql', 'postgresql', 'sqlite', 'mongodb', + # 其他 + 'r', 'matlab', 'scala', 'perl', 'lua', 'dart', 'tex', 'latex', + # 数据格式 + 'csv', 'properties', + # 无标识符(空字符串也算作有效语言) + '' + }) + + @lru_cache(maxsize=256) + def clean_markdown_content_for_chinese(content_hash, markdown): + """清理Markdown内容,只保留中文文本用于统计(添加缓存)""" + content = markdown + + # 使用预编译的正则表达式 + content = YAML_FRONT_PATTERN.sub('', content) + content = HTML_TAG_PATTERN.sub('', content) + content = IMAGE_PATTERN.sub('', content) + content = LINK_PATTERN.sub(r'\1', content) + content = CODE_BLOCK_PATTERN.sub('', content) + content = INLINE_CODE_PATTERN.sub('', content) + + return content + + def count_code_lines(markdown): + """统计代码行数(修复版本 - 正确处理所有代码行)""" + code_blocks = CODE_BLOCK_PATTERN.findall(markdown) + total_code_lines = 0 + + for i, block in enumerate(code_blocks): + # 提取语言标识 + lang_match = re.match(r'^```(\w*)', block) + language = lang_match.group(1).lower() if lang_match else '' + + # 移除开头的语言标识和结尾的``` + code_content = re.sub(r'^```\w*\n?', '', block) + code_content = re.sub(r'\n?```$', '', code_content) + + # 过滤空代码块 + if not code_content.strip(): + continue + + # 计算有效行数(包含所有非空行,包括注释行) + lines = [line for line in code_content.split('\n') if line.strip()] + line_count = len(lines) + + # 如果有明确的编程语言标识,直接统计 + if language and language in PROGRAMMING_LANGUAGES: + total_code_lines += line_count + continue + + # 增强的检测策略 - 更宽松的判断 + is_code = False + + # 1. 命令行检测 + command_indicators = [ + 'sudo ', 'npm ', 'pip ', 'git ', 'cd ', 'ls ', 'mkdir ', 'rm ', 'cp ', 'mv ', + 'chmod ', 'chown ', 'grep ', 'find ', 'ps ', 'kill ', 'top ', 'cat ', 'echo ', + 'wget ', 'curl ', 'tar ', 'zip ', 'unzip ', 'ssh ', 'scp ', 'rsync ', + 'xattr ', 'codesign ', 'xcode-select ', 'spctl ', 'launchctl ', + 'brew ', 'defaults ', 'ditto ', 'hdiutil ', 'diskutil ', + 'dir ', 'copy ', 'xcopy ', 'del ', 'rd ', 'md ', 'type ', 'attrib ', + '$ ', '# ', '% ', '> ', 'C:\\>', 'PS>', + '--', '-r', '-d', '-f', '-v', '-h', '--help', '--version', + '--force', '--deep', '--sign', '--master-disable', + '/Applications/', '/usr/', '/etc/', '/var/', '/home/', '~/', + 'C:\\', 'D:\\', '.app', '.exe', '.pkg', '.dmg', '.zip', '.tar', + '#!/', + ] + + if any(indicator in code_content for indicator in command_indicators): + is_code = True + + # 2. 编程语法检测(增强版) + if not is_code: + programming_indicators = [ + # Python语法特征 + 'def ', 'class ', 'import ', 'from ', 'return ', 'yield ', 'lambda ', + 'with ', 'as ', 'try:', 'except:', 'finally:', 'elif ', 'if __name__', + 'print(', '.append(', '.extend(', '.remove(', '.sort(', '.reverse(', + 'range(', 'len(', 'str(', 'int(', 'float(', 'list(', 'dict(', + # JavaScript/TypeScript语法 + 'function', 'var ', 'let ', 'const ', 'async ', 'await ', '=>', + 'console.log', 'document.', 'window.', 'require(', + # 通用编程语法 + 'public ', 'private ', 'protected ', 'static ', 'void ', 'int ', + 'string ', 'boolean ', 'float ', 'double ', 'char ', + # 操作符和结构 + '==', '!=', '<=', '>=', '&&', '||', '++', '--', '+=', '-=', '**', + # 特殊结构 + 'while ', 'for ', 'if ', 'else:', 'switch ', 'case ', + # HTML/XML语法 + '', + '', + # SQL语法 + 'SELECT ', 'FROM ', 'WHERE ', 'INSERT ', 'UPDATE ', 'DELETE ', + 'CREATE ', 'ALTER ', 'DROP ', 'INDEX ', 'TABLE ', + # 数学公式和LaTeX + '\\', '$', '$$', '\\begin', '\\end', '\\frac', '\\sum', + ] + + if any(indicator in code_content for indicator in programming_indicators): + is_code = True + + # 3. 结构化检测 + if not is_code: + # 缩进结构检测 + if len(lines) > 1 and any(line.startswith(' ') or line.startswith('\t') for line in lines): + is_code = True + + # HTML标签结构 + elif '<' in code_content and '>' in code_content: + is_code = True + + # 包含特殊字符组合 + elif any(char in code_content for char in ['{', '}', '(', ')', '[', ']']) and ('=' in code_content or ':' in code_content): + is_code = True + + # 4. 模式匹配检测(宽松策略) + if not is_code and len(lines) >= 1: + special_patterns = [ + r'\w+\(\)', r'\w+\[\]', r'\w+\{\}', r'\w+=\w+', r'\w+:\w+', + r'<\w+>', r'\$\w+', r'#\w+', r'@\w+', r'\w+\.\w+\(\)', + r'\d+\.\d+\.\d+', r'http[s]?://', r'ftp://', r'localhost', + r'def\s+\w+', r'class\s+\w+', r'import\s+\w+', r'from\s+\w+', + r'if\s+\w+', r'while\s+\w+', r'for\s+\w+', r'return\s+\w*', + r'\w+\s*=\s*\w+', r'\w+\.\w+', r'#.*输出', r'#.*结果' + ] + + if any(re.search(pattern, code_content) for pattern in special_patterns): + is_code = True + + # 如果判断为代码,则统计行数 + if is_code: + total_code_lines += line_count + + return total_code_lines + + def calculate_reading_stats(markdown): + """计算中文字符数和代码行数""" + # 生成内容哈希用于缓存 + content_hash = hash(markdown) + + # 使用缓存的清理函数 + clean_content = clean_markdown_content_for_chinese(content_hash, markdown) + chinese_chars = len(CHINESE_CHARS_PATTERN.findall(clean_content)) + + # 统计代码行数 + code_lines = count_code_lines(markdown) + + # 计算阅读时间(中文:400字/分钟) + reading_time = max(1, round(chinese_chars / 400)) + + return reading_time, chinese_chars, code_lines + + def on_page_markdown(markdown, **kwargs): + page = kwargs['page'] + + # 快速排除检查 + if page.meta.get('hide_reading_time', False): + return markdown + + # 保持原有的EXCLUDE_PATTERNS循环检查方式 + src_path = page.file.src_path + for pattern in EXCLUDE_PATTERNS: + if pattern.match(src_path): + return markdown + + # 优化类型检查 + page_type = page.meta.get('type', '') + if page_type in EXCLUDE_TYPES: + return markdown + + # 快速预检查 + if len(markdown) < 300: + return markdown + + # 计算统计信息 + reading_time, chinese_chars, code_lines = calculate_reading_stats(markdown) + + # 过滤太短的内容 + if chinese_chars < 50: + return markdown + + # 生成阅读信息 + if code_lines > 0: + reading_info = f"""!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}** | 有效代码行数:**{code_lines}** + + """ + else: + reading_info = f"""!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}** + + """ + + return reading_info + markdown + ``` + + + +### **步骤2** + +把reading_time.py放到docs/overrides/hooks目录下,然后在mkdocs.yml中添加: + +```yaml +# 在 mkdocs.yml 中添加 +hooks: + - docs/overrides/hooks/reading_time.py # 阅读时间统计 +``` + +### **步骤3** +配置MkDocs主题以及覆写路径custom_dir +```yaml +# 在 mkdocs.yml 中添加 +theme: + name: material + custom_dir: docs/overrides # 必需配置!!! + features: + - content.code.copy + - content.code.select +``` + +到这里检查下目录树状图: +``` +$ tree -a +文件名 +├── .github +│ ├── .DS_Store +│ └── workflows +│ └── ci.yml +├── docs +│ └── index.md +| └── overrides +│ └── hooks +│ └── reading_time.py +│ └── ... +└── mkdocs.yml +``` + +### **步骤4** + +```bash +mkdocs serve # 本地预览 +``` + + +## 2. 效果展示 + +![image](https://s1.imagehub.cc/images/2025/06/06/a4584dbad4da3f87eb5c2f1e7ed14a74.png) + + +## 3.高级配置 + +### 3.1 排除特定页面 +如果有一些页面不想统计阅读时间,可以在页面的元数据中添加 `hide_reading_time: true`。例如: + +```markdown +--- +title: 不统计阅读时间的页面 +hide_reading_time: true +--- +``` + +或者直接在reading_time.py中添加: +```python +# 你想排除的页面路径 +EXCLUDE_PATTERNS = [ + re.compile(r'^index\.md$'), + re.compile(r'^trip/index\.md$'), + re.compile(r'^relax/index\.md$'), + re.compile(r'^blog/indexblog\.md$'), + re.compile(r'^blog/posts\.md$'), + re.compile(r'^develop/index\.md$'), + re.compile(r'waline\.md$'), + re.compile(r'link\.md$'), + re.compile(r'404\.md$'), +] +``` + +### 3.2 自定义统计信息 +如果需要自定义统计信息的格式,可以修改reading_time.py中的calculate_reading_stats函数。例如: +```python +def calculate_reading_stats(markdown): + # 计算统计信息 + reading_time, chinese_chars, code_lines = calculate_reading_stats(markdown) + # 自定义统计信息格式 + if code_lines > 0: + reading_info = f"""!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}** | 有效代码行数:**{code_lines}** + """ + else: + reading_info = f"""!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}** + """ + return reading_info + markdown +``` + diff --git a/docs/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc b/docs/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc index 576fc3cdcc116b914844f7442284e45385c5e4cb..0087df8695804abd67e0bd0c994101eaec4c6db0 100644 GIT binary patch delta 4395 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 Sa5Ada@Y{`7kCihAZ2uQaYD>-l diff --git a/docs/overrides/hooks/reading_time.py b/docs/overrides/hooks/reading_time.py index fbc3731..cbf4ff7 100644 --- a/docs/overrides/hooks/reading_time.py +++ b/docs/overrides/hooks/reading_time.py @@ -237,7 +237,7 @@ def on_page_markdown(markdown, **kwargs): reading_time, chinese_chars, code_lines = calculate_reading_stats(markdown) # 过滤太短的内容 - if chinese_chars < 50: + if chinese_chars < 30: return markdown # 生成阅读信息 diff --git a/mkdocs.yml b/mkdocs.yml index 8b248e1..c54c386 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,7 +75,8 @@ nav: - 2.Mkdocs配置说明(mkdocs.yml): blog/Mkdocs/mkdocs2.md - 3.解决Github Pages部署mkdocs自定义域名失效的问题: blog/Mkdocs/mkdocs3.md - Mkdocs美化/补充: - - MkDocs文档AI摘要: blog/websitebeauty/MkDocs-AI-Hooks.md + - MkDocs文档AI摘要: blog/websitebeauty/Mkdocs-AI-Summary.md + - 添加阅读信息统计: blog/websitebeauty/reading_time.md - 添加Mkdocs博客: blog/Mkdocs/mkdocsblog.md - 网页圆角化设计: blog/websitebeauty/yuanjiaohua.md - 添加评论系统(giscus为例): blog/websitebeauty/mkcomments.md @@ -313,5 +314,5 @@ extra_css: hooks: - docs/overrides/hooks/socialmedia.py - # - docs/overrides/hooks/reading_time.py + - docs/overrides/hooks/reading_time.py - docs/overrides/hooks/ai_summary.py \ No newline at end of file