import json import os import re # ========================================== # CONFIGURATION # ========================================== # Point this to your new flat JSON generated by split_syllabus.py INPUT_FILE = 'syllabus_flat.json' OUTPUT_DIR = 'syllabus_out' # Rename to 'syllabus' before pushing to GitHub # Load JSON Data with open(INPUT_FILE, 'r', encoding='utf-8') as f: flat_data = json.load(f) os.makedirs(OUTPUT_DIR, exist_ok=True) # ========================================== # RESTRUCTURE FLAT JSON TO GROUPED DICTIONARY # ========================================== # Converts flat array into: { "Branch": { "S1": [subjects], "S2": [subjects] } } data = {} for item in flat_data: branch = item['branch'] sem = item['semester'] if branch not in data: data[branch] = {} if sem not in data[branch]: data[branch][sem] = [] data[branch][sem].append(item) # ========================================== # HELPER FUNCTIONS & SORTING # ========================================== def slugify(text): text = text.lower() text = re.sub(r'[^a-z0-9]+', '-', text) return text.strip('-') def clean_name(name): return re.sub(r'\s*-\s*\(.*?\)', '', name).strip() def get_branch_acronym(branch_name): b = branch_name.upper() if 'COMPUTER' in b: return 'CSE' if 'MECHANICAL' in b: return 'ME' if 'CIVIL' in b: return 'CE' if 'ELECTRICAL AND ELECTRONICS' in b: return 'EEE' if 'ELECTRONICS AND COMMUNICATION' in b: return 'ECE' if 'INFORMATION TECHNOLOGY' in b: return 'IT' return "".join([word[0] for word in branch_name.split() if word.isalpha()]) def get_branch_priority(branch_name): b = branch_name.upper() if 'COMPUTER' in b: return 1 # CSE First if 'CIVIL' in b: return 2 # Civil Second if 'MECHANICAL' in b: return 3 if 'ELECTRICAL AND ELECTRONICS' in b: return 4 if 'ELECTRONICS AND COMMUNICATION' in b: return 5 return 99 def get_branch_theme(branch_name): b = branch_name.upper() if 'COMPUTER' in b: return ('indigo', 'fa-laptop-code') if 'CIVIL' in b: return ('emerald', 'fa-building') if 'MECHANICAL' in b: return ('orange', 'fa-cogs') if 'ELECTRICAL AND ELECTRONICS' in b: return ('amber', 'fa-bolt') if 'ELECTRONICS AND COMMUNICATION' in b: return ('purple', 'fa-microchip') return ('blue', 'fa-graduation-cap') # ========================================== # HTML TEMPLATES # ========================================== def get_header(title, desc): return f"""
Select your engineering branch below to access beautifully organized, semester-wise syllabus PDFs.
{branch}
""" main_html += "B.Tech 2024 Scheme • {branch}
{sub_count} Subjects
2024 Scheme • {sub_count} Subjects Available