From a3be150f8e5d4c01785d5722c871bc56a0efcff9 Mon Sep 17 00:00:00 2001 From: jun-shiromizu Date: Mon, 2 Feb 2026 10:35:28 +0900 Subject: [PATCH] fix: Revised error messages and filename sanitization processing - Improved error messages within the `find_library_file` function to include directory names - Organized comments within the `sanitize_filename` function - Improved error messages within the `split_library` function to include directory names --- .../scripts/split-excalidraw-library.py | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py b/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py index 97a5e141..ec903dd2 100644 --- a/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +++ b/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py @@ -26,121 +26,121 @@ from pathlib import Path def sanitize_filename(name: str) -> str: """ Sanitize icon name to create a valid filename. - + Args: name: Original icon name - + Returns: Sanitized filename safe for all platforms """ # Replace spaces with hyphens filename = name.replace(' ', '-') - + # Remove or replace special characters filename = re.sub(r'[^\w\-.]', '', filename) - + # Remove multiple consecutive hyphens filename = re.sub(r'-+', '-', filename) - + # Remove leading/trailing hyphens filename = filename.strip('-') - + return filename def find_library_file(directory: Path) -> Path: """ Find the .excalidrawlib file in the given directory. - + Args: directory: Directory to search - + Returns: Path to the library file - + Raises: SystemExit: If no library file or multiple library files found """ library_files = list(directory.glob('*.excalidrawlib')) - + if len(library_files) == 0: print(f"Error: No .excalidrawlib file found in {directory}") - print(f"Please place a .excalidrawlib file in this directory first.") + print(f"Please place a .excalidrawlib file in {directory} first.") sys.exit(1) - + if len(library_files) > 1: print(f"Error: Multiple .excalidrawlib files found in {directory}") - print(f"Please keep only one library file in the directory.") + print(f"Please keep only one library file in {directory}.") sys.exit(1) - + return library_files[0] def split_library(library_dir: str) -> None: """ Split an Excalidraw library file into individual icon files. - + Args: library_dir: Path to the directory containing the .excalidrawlib file """ library_dir = Path(library_dir) - + if not library_dir.exists(): print(f"Error: Directory not found: {library_dir}") sys.exit(1) - + if not library_dir.is_dir(): print(f"Error: Path is not a directory: {library_dir}") sys.exit(1) - + # Find the library file library_path = find_library_file(library_dir) print(f"Found library: {library_path.name}") - + # Load library file print(f"Loading library data...") with open(library_path, 'r', encoding='utf-8') as f: library_data = json.load(f) - + # Validate library structure if 'libraryItems' not in library_data: print("Error: Invalid library file format (missing 'libraryItems')") sys.exit(1) - + # Create icons directory icons_dir = library_dir / 'icons' icons_dir.mkdir(exist_ok=True) print(f"Output directory: {library_dir}") - + # Process each library item (icon) library_items = library_data['libraryItems'] icon_list = [] - + print(f"Processing {len(library_items)} icons...") - + for item in library_items: # Get icon name icon_name = item.get('name', 'Unnamed') - + # Create sanitized filename filename = sanitize_filename(icon_name) + '.json' - + # Save icon data icon_path = icons_dir / filename with open(icon_path, 'w', encoding='utf-8') as f: json.dump(item, f, ensure_ascii=False, indent=2) - + # Add to reference list icon_list.append({ 'name': icon_name, 'filename': filename }) - + print(f" āœ“ {icon_name} → {filename}") - + # Sort icon list by name icon_list.sort(key=lambda x: x['name']) - + # Generate reference.md library_name = library_path.stem reference_path = library_dir / 'reference.md' @@ -150,14 +150,14 @@ def split_library(library_dir: str) -> None: f.write("## Available Icons\n\n") f.write("| Icon Name | Filename |\n") f.write("|-----------|----------|\n") - + for icon in icon_list: f.write(f"| {icon['name']} | `icons/{icon['filename']}` |\n") - + f.write("\n## Usage\n\n") f.write("Each icon JSON file contains the complete `elements` array needed to render that icon in Excalidraw.\n") f.write("You can copy the elements from these files into your Excalidraw diagrams.\n") - + print(f"\nāœ… Successfully split library into {len(icon_list)} icons") print(f"šŸ“„ Reference file created: {reference_path}") print(f"šŸ“ Icons directory: {icons_dir}") @@ -174,7 +174,7 @@ def main(): print(" python split-excalidraw-library.py skills/excalidraw-diagram-generator/libraries/aws-architecture-icons/") print("\nNote: The directory should contain a .excalidrawlib file.") sys.exit(1) - + library_dir = sys.argv[1] split_library(library_dir)