SYMBOL INDEX (54 symbols across 11 files) FILE: docs/search.js constant MAX_RESULTS (line 3) | const MAX_RESULTS = 100; function loadBooks (line 5) | async function loadBooks() { function searchBooks (line 52) | function searchBooks(keyword) { function escapeHtml (line 75) | function escapeHtml(text) { function escapeRegex (line 83) | function escapeRegex(str) { function highlightText (line 88) | function highlightText(text, keyword) { function renderResults (line 100) | function renderResults(results, keyword) { function onSearch (line 202) | function onSearch(e) { FILE: scripts/generate_index.py function load_books (line 14) | def load_books(): function load_stats (line 32) | def load_stats(): function group_books (line 43) | def group_books(books): function render_overview (line 61) | def render_overview(total_books, total_categories, languages, levels): function render_search_ui (line 92) | def render_search_ui(): function render_content (line 119) | def render_content(grouped, stats=None): function markdown_to_html (line 184) | def markdown_to_html(md_content): function generate_html (line 323) | def generate_html(md_content): function main (line 860) | def main(): FILE: scripts/generate_search_demo_gif.py function check_dependencies (line 19) | def check_dependencies(): function wait_for_search_results (line 47) | async def wait_for_search_results(page, timeout=5000): function scroll_to_search_results (line 66) | async def scroll_to_search_results(page): function generate_gif (line 81) | async def generate_gif(): function main (line 209) | def main(): FILE: scripts/parse_md_to_json.py function extract_category_from_file (line 18) | def extract_category_from_file(file_path): function extract_category_from_content (line 25) | def extract_category_from_content(content): function parse_markdown_table (line 38) | def parse_markdown_table(content): function parse_single_file (line 86) | def parse_single_file(file_path): function main (line 117) | def main(): FILE: scripts/sync/backup_md.py function backup_md_directory (line 17) | def backup_md_directory(): FILE: scripts/sync/find_max_book_id.py function extract_book_id_from_url (line 26) | def extract_book_id_from_url(url: str) -> Optional[int]: function find_max_book_id_from_homepage (line 34) | def find_max_book_id_from_homepage() -> Optional[int]: function find_max_book_id_by_binary_search (line 87) | def find_max_book_id_by_binary_search(start: int = 1, end: int = 100000)... function find_max_book_id_from_latest_books (line 159) | def find_max_book_id_from_latest_books(max_pages: int = 10) -> Optional[... function main (line 227) | def main(): FILE: scripts/sync/incremental_sync.py function incremental_sync (line 24) | async def incremental_sync(): FILE: scripts/sync/parse_book_detail_enhanced.py function parse_download_page (line 26) | def parse_download_page(url: str) -> Optional[Dict[str, str]]: function extract_book_id (line 140) | def extract_book_id(url: str) -> Optional[str]: function parse_book_detail_enhanced (line 156) | def parse_book_detail_enhanced(url: str) -> Dict: function main (line 392) | def main(): FILE: scripts/sync/sync_all_books.py function main (line 21) | def main(): FILE: scripts/sync/test_batch_sync.py function sanitize_filename (line 53) | def sanitize_filename(filename: str) -> str: function generate_md_file (line 78) | def generate_md_file(tag_name: str, books: List[Dict], output_dir: Path)... function fetch_book_async (line 145) | async def fetch_book_async(session: aiohttp.ClientSession, book_id: int,... function batch_process_books (line 181) | async def batch_process_books(book_ids: List[int]) -> Dict[str, List[Dic... function save_processed_ids (line 234) | def save_processed_ids(book_ids: Set[int]): function load_processed_ids (line 241) | def load_processed_ids() -> Set[int]: function save_stats (line 249) | def save_stats(stats: Dict): function save_max_book_id (line 255) | def save_max_book_id(max_id: int): function load_max_book_id (line 262) | def load_max_book_id() -> int: function generate_hot_categories_index (line 271) | def generate_hot_categories_index(books_by_tag: Dict[str, List[Dict]], o... function main (line 319) | async def main(start_id: int = 1, end_id: int = 1000): FILE: scripts/sync/update_readme_hot_categories.py function count_books_in_md_file (line 17) | def count_books_in_md_file(md_file: Path) -> int: function get_all_categories (line 39) | def get_all_categories() -> dict: function generate_hot_categories_section (line 61) | def generate_hot_categories_section(categories: dict) -> str: function update_readme (line 87) | def update_readme():