Spaces:
Sleeping
Sleeping
File size: 2,534 Bytes
7c062a8 b972f61 7c062a8 b972f61 7c062a8 49bea70 b22e396 b972f61 49bea70 9b50500 7c062a8 f8a5639 7c062a8 49bea70 b972f61 735fee2 49bea70 9b50500 49bea70 b972f61 49bea70 b972f61 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import streamlit as st
import os
import re
# Function to read markdown files with error handling
def load_markdown_file(path):
try:
with open(path, 'r', encoding='utf-8') as file:
content = file.read()
return content
except Exception as e:
return f"Error reading file: {e}"
# Function to create a simple TOC from markdown content
def create_toc(markdown_content):
toc = []
for line in markdown_content.split('\n'):
if line.startswith('#'):
level = line.count('#')
title = line.strip('# ').strip()
anchor = title.lower().replace(' ', '-').replace('/', '-').replace('.', '')
toc.append((level, title, anchor))
return toc
# Streamlit UI Enhancements
st.title('π Documentation')
docs_base_path = './docs'
if not os.path.exists(docs_base_path):
st.error('Documentation directory does not exist.')
else:
try:
categories = [d for d in os.listdir(docs_base_path) if os.path.isdir(os.path.join(docs_base_path, d))]
if not categories:
st.error('No categories found in the documentation directory.')
else:
st.sidebar.markdown('# π§· Navigation')
category = st.sidebar.selectbox('π Select the Categorie', categories)
pages_path = os.path.join(docs_base_path, category)
pages = [f for f in os.listdir(pages_path) if os.path.isfile(os.path.join(pages_path, f)) and f.endswith('.md')]
if not pages:
st.error('No markdown pages found in the selected category.')
else:
page = st.sidebar.selectbox('π Select the Page', pages)
markdown_path = os.path.join(pages_path, page)
markdown_content = load_markdown_file(markdown_path)
# Create TOC
toc = create_toc(markdown_content)
if toc:
st.sidebar.markdown('# π Table of Contents')
for level, title, anchor in toc:
st.sidebar.markdown(f"{' ' * (level-1) * 2}- [{title}](#{anchor})")
# Display markdown with potential anchors
modified_markdown_content = re.sub(r'(#{1,6}) (.*)', r'\1 <a name="\2"></a>\2', markdown_content)
st.markdown(modified_markdown_content, unsafe_allow_html=True)
except Exception as e:
st.error(f"Error listing categories or pages: {e}")
|