File size: 2,530 Bytes
7c062a8
 
b972f61
7c062a8
b972f61
7c062a8
49bea70
 
 
 
 
 
b22e396
b972f61
 
 
 
 
 
 
 
 
 
 
49bea70
9b50500
7c062a8
f8a5639
7c062a8
49bea70
 
 
 
 
 
 
 
b972f61
9b50500
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 Space', 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}")