- 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.
90 lines
4.5 KiB
Markdown
90 lines
4.5 KiB
Markdown
```mermaid
|
|
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;
|
|
```
|