Advertisement
Thunder-Menu

Hierarchy_Class_Enum_Struct_template.ps1

Mar 21st, 2023 (edited)
990
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PowerShell 3.98 KB | Source Code | 0 0
  1. # Redémarrage en administrateur si nécessaire
  2. if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
  3.   $arguments = "& '" + $myinvocation.mycommand.definition + "'"
  4.   Start-Process powershell -Verb runAs -ArgumentList $arguments
  5.   exit
  6. }
  7.  
  8. Add-Type -AssemblyName System.Windows.Forms
  9.  
  10. $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
  11. $dialog.RootFolder = [System.Environment+SpecialFolder]::MyComputer
  12. $dialog.Description = "Sélectionnez le dossier à parcourir pour extraire les classes"
  13.  
  14. if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
  15.     $folder_path = $dialog.SelectedPath
  16. } else {
  17.     exit
  18. }
  19.  
  20. $output_file = "output.txt"
  21. Remove-Item $output_file -ErrorAction SilentlyContinue
  22.  
  23.  
  24. # Fonction pour ajouter une classe au dictionnaire
  25. function Add-Class($class_name, $parent_name) {
  26.     if (-not $classes.ContainsKey($class_name)) {
  27.         $classes[$class_name] = @{
  28.             Parent = $parent_name
  29.             Content = ""
  30.             Depth = 0
  31.         }
  32.         if ($parent_name) {
  33.             $depth = $classes[$parent_name].Depth + 1
  34.             $classes[$class_name]["Depth"] = $depth
  35.         }
  36.     }
  37. }
  38.  
  39. # Fonction pour ajouter le contenu d'une classe au dictionnaire
  40. function Add-Class-Content($class_name, $class_content) {
  41.     $classes[$class_name]["Content"] = $class_content
  42. }
  43.  
  44. # Fonction pour obtenir la hiérarchie des classes
  45. function Get-Class-Hierarchy($class_name) {
  46.     $parent_name = $classes[$class_name]["Parent"]
  47.     if ($parent_name) {
  48.         $parent_hierarchy = Get-Class-Hierarchy $parent_name
  49.         $parent_hierarchy += $parent_name
  50.         return ,$parent_hierarchy
  51.     } else {
  52.         return ,$class_name
  53.     }
  54. }
  55.  
  56. # Dictionnaire pour stocker les classes
  57. $classes = @{}
  58.  
  59. # Parcourir les fichiers hpp dans le dossier et ses sous-dossiers
  60. Get-ChildItem -Path $folder_path -Recurse -Include *.hpp | ForEach-Object {
  61.     $file_content = Get-Content -Path $_.FullName -Raw
  62.  
  63. # Extraire les classes et les templates de classe du fichier
  64. $class_blocks = [Regex]::Matches($file_content, "(?:(?:\s*template\s*<[^{}]*>\s*)?(?:\s*(?:enum|struct|class|enum\s+class)\s+))+\s*(\S+)\s*(?::\s*\S+)?\s*(?::\s*.*)?\s*(?:{\s*(?>[^{}]+|(?<open>{)|(?<-open>}))*(?(open)(?!))\s*};)")
  65.  
  66. foreach ($class_block in $class_blocks) {
  67.     $class_content = $class_block.Value
  68.     $class_name_match = [Regex]::Match($class_content, "(?:(?:\s*template\s*<[^{}]*>\s*)?(?:\s*(?:enum|struct|class|enum\s+class)\s+))+\s*(\S+)\s*")
  69.  
  70.     if ($class_name_match.Success) {
  71.         $class_name = $class_name_match.Groups[1].Value.Trim()
  72.  
  73.         # Trouver le nom de la classe parente, s'il y en a une
  74.         $parent_name_match = [Regex]::Match($class_content, "(?<=^\s*:\s*)\S+")
  75.         if ($parent_name_match.Success) {
  76.             $parent_name = $parent_name_match.Value.Trim()
  77.         } else {
  78.             $parent_name = $null
  79.         }
  80.     }
  81.  
  82.     # Ajouter la classe au dictionnaire
  83.     Add-Class $class_name $parent_name
  84.  
  85.     # Ajouter le contenu de la classe au dictionnaire
  86.     Add-Class-Content $class_name $class_content
  87. }
  88.  
  89. }
  90.  
  91.  
  92. # Trier les classes par ordre hiérarchique
  93. foreach ($class_name in $classes.Keys) {
  94.     $class_hierarchy = Get-Class-Hierarchy $class_name
  95.     $classes[$class_name]["Depth"] = $class_hierarchy.Count
  96. }
  97.  
  98. $classes_sorted = $classes.GetEnumerator() | Sort-Object Depth, Key
  99.  
  100. # Écrire les classes dans le fichier de sortie
  101. foreach ($class_entry in $classes_sorted) {
  102.     $class_name = $class_entry.Key
  103.     $class_depth = $class_entry.Value.Depth
  104.  
  105.     # Ajouter des espaces selon la profondeur de la classe
  106.     $class_indent = " " * ($class_depth * 4)
  107.  
  108.     # Écrire le nom de la classe et son contenu dans le fichier
  109.     Add-Content -Path $output_file -Value "$($class_entry.Value.Content)`n"
  110. }
  111.  
  112. #GetClass
  113. #https://github.com/Yimura/GTAV-Classes
  114. #https://pastebin.com/MGftkz0B
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement