markdown_parser/diagram/flow_diagram.md
Bruno Charest 18ee8a1cfd feat: Add report generation module for tracking metadata changes
- Implemented `report.nim` to create structured reports on metadata modifications.
- Added functionality to merge reports and convert them to formatted strings.

docs: Create prompt documentation for Markdown parser project

- Added `prompt.md` detailing the requirements and functionalities for the Markdown parser.
- Included specifications, usage examples, and testing guidelines.

docs: Generate code review report for Markdown parser

- Created `rapport_revue_code.md` outlining security vulnerabilities, code quality issues, and suggested improvements.
- Provided a detailed analysis of the codebase with actionable recommendations.

test: Add test data for Markdown parser

- Included various Markdown files and a JPG image in `test_data` to simulate different scenarios.
- Ensured that the parser can handle both valid and invalid metadata.

chore: Add version management file

- Created `version.nim` for automatic versioning of the Markdown parser.
- Established constants for major, minor, patch, and build versions.
2026-04-19 12:56:55 -04:00

4.5 KiB

flowchart TD
    %% Main Program Flow
    Start([Start]) --> ParseCmdLine[Parse Command Line Arguments]
    ParseCmdLine --> ValidateConfig[Validate Configuration]
    ValidateConfig --> ShowHelp{Show Help?}
    ValidateConfig --> ShowVersion{Show Version?}
    
    ShowHelp -->|Yes| DisplayHelp[Display Help Text] --> Exit([Exit])
    ShowVersion -->|Yes| DisplayVersion[Display Version] --> Exit
    
    ShowHelp -->|No| ShowVersion
    ShowVersion -->|No| ProcessFiles[Process Markdown Files]
    
    %% Processing Files
    ProcessFiles --> SourceDir{Source Directory Specified?}
    
    %% Source Directory Branch
    SourceDir -->|Yes| BackupSource[Backup & Rename Source Directory]
    BackupSource --> WalkSourceDir[Walk Directory Recursively]
    WalkSourceDir --> ProcessEachFile[Process Each File]
    ProcessEachFile --> IsMarkdown{Is Markdown File?}
    IsMarkdown -->|Yes| ProcessMarkdown[Process Markdown File]
    IsMarkdown -->|No| CopyFile[Copy File to Target]
    ProcessMarkdown --> CleanupTemp[Clean Up Temporary Directory]
    CopyFile --> CleanupTemp
    
    %% Individual Files Branch
    SourceDir -->|No| FilesSpecified{Files Specified?}
    FilesSpecified -->|Yes| CreateTempDir[Create Temporary Directory]
    CreateTempDir --> ProcessEachSpecifiedFile[Process Each Specified File]
    ProcessEachSpecifiedFile --> IsSpecifiedMarkdown{Is Markdown File?}
    IsSpecifiedMarkdown -->|Yes| ProcessSpecifiedMarkdown[Process Markdown File]
    IsSpecifiedMarkdown -->|No| CopySpecifiedFile[Copy File to Target]
    ProcessSpecifiedMarkdown --> BackupTempDir[Backup Temporary Directory]
    CopySpecifiedFile --> BackupTempDir
    BackupTempDir --> CleanupTempDir[Clean Up Temporary Directory]
    
    %% Process Markdown File Subflow
    subgraph ProcessMarkdownFileFlow[Process Markdown File]
        ReadFile[Read File Content] --> ExtractMetadata[Extract YAML Metadata]
        ExtractMetadata --> HasMetadata{Has Metadata?}
        HasMetadata -->|Yes| UseExistingMetadata[Use Existing Metadata]
        HasMetadata -->|No| AnalyzeEnabled{AI Analysis Enabled?}
        AnalyzeEnabled -->|Yes| AnalyzeWithAI[Analyze Content with AI]
        AnalyzeEnabled -->|No| NoMetadata[No Metadata Added]
        AnalyzeWithAI --> GenerateMetadata[Generate Metadata]
        GenerateMetadata --> AddMetadataToContent[Add Metadata to Content]
        UseExistingMetadata --> WriteFile[Write Processed Content]
        AddMetadataToContent --> WriteFile
        NoMetadata --> WriteFile
    end
    
    ProcessMarkdown -.-> ProcessMarkdownFileFlow
    ProcessSpecifiedMarkdown -.-> ProcessMarkdownFileFlow
    
    %% AI Analysis Subflow
    subgraph AIAnalysisFlow[AI Analysis]
        LoadConfig[Load AI Configuration] --> GetActiveModel[Get Active AI Model]
        GetActiveModel --> IsModelAvailable{Is Model Available?}
        IsModelAvailable -->|Yes| PreparePrompt[Prepare AI Prompt]
        IsModelAvailable -->|No| ReturnEmpty[Return Empty Result]
        PreparePrompt --> SendRequest[Send API Request]
        SendRequest --> ParseResponse[Parse AI Response]
        ParseResponse --> ExtractTitleDescTags[Extract Title, Description, Tags]
        ExtractTitleDescTags --> ReturnResult[Return Analysis Result]
    end
    
    AnalyzeWithAI -.-> AIAnalysisFlow
    
    %% Final Steps
    CleanupTemp --> GenerateReport[Generate Processing Report]
    CleanupTempDir --> GenerateReport
    GenerateReport --> DisplayReport[Display Report]
    DisplayReport --> Exit
    
    %% Styling
    classDef process fill:#a8d5ba,stroke:#178a44,stroke-width:1px;
    classDef decision fill:#ffda9e,stroke:#d86018,stroke-width:1px;
    classDef io fill:#aac4f5,stroke:#1155cc,stroke-width:1px;
    classDef terminal fill:#f5b5c8,stroke:#be0d35,stroke-width:1px;
    classDef subgraphStyle fill:#f5f5f5,stroke:#666666,stroke-width:1px;
    
    class Start,Exit terminal;
    class ParseCmdLine,BackupSource,WalkSourceDir,ProcessEachFile,ProcessMarkdown,CopyFile,CleanupTemp,CreateTempDir,ProcessEachSpecifiedFile,ProcessSpecifiedMarkdown,CopySpecifiedFile,BackupTempDir,CleanupTempDir,GenerateReport,DisplayReport process;
    class ShowHelp,ShowVersion,SourceDir,IsMarkdown,FilesSpecified,IsSpecifiedMarkdown,HasMetadata,AnalyzeEnabled,IsModelAvailable decision;
    class DisplayHelp,DisplayVersion,ReadFile,ExtractMetadata,UseExistingMetadata,AnalyzeWithAI,GenerateMetadata,AddMetadataToContent,WriteFile,NoMetadata,LoadConfig,GetActiveModel,PreparePrompt,SendRequest,ParseResponse,ExtractTitleDescTags,ReturnResult,ReturnEmpty io;
    class ProcessMarkdownFileFlow,AIAnalysisFlow subgraphStyle;