131 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
use CondorcetPHP\Condorcet\Dev\CondorcetDocumentationGenerator\CondorcetDocAttributes\{PublicAPI};
 | 
						|
use Symfony\Component\Yaml\Yaml;
 | 
						|
 | 
						|
require_once __DIR__.str_replace('/', \DIRECTORY_SEPARATOR, '/../vendor/../vendor/autoload.php');
 | 
						|
 | 
						|
 | 
						|
$doc = Yaml::parseFile(__DIR__.'/../Documentation/doc.yaml');
 | 
						|
 | 
						|
// Header & Prefix
 | 
						|
$header = $doc[0]['header'];
 | 
						|
unset($doc[0]);
 | 
						|
 | 
						|
$undocumented_prefix = $doc[1]['undocumented_prefix'] . "\n";
 | 
						|
unset($doc[1]);
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
$index  = [];
 | 
						|
 | 
						|
foreach ($doc as &$entry) {
 | 
						|
    if (!\is_array($entry['class'])) {
 | 
						|
        $entry['class'] = [$entry['class']];
 | 
						|
    }
 | 
						|
 | 
						|
    foreach ($entry['class'] as $class) {
 | 
						|
        $method = $entry;
 | 
						|
        $method['class'] = $class;
 | 
						|
 | 
						|
        $index[$method['class']][$method['name']] = $method;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
$patternReplaceLastNewLine = '/(.*)\n$/';
 | 
						|
 | 
						|
foreach ($index as $ClassName => $ClassData) {
 | 
						|
    $path_to_file = [
 | 
						|
        __DIR__.'/../lib/'.str_replace('\\', '/', $ClassName).'.php',
 | 
						|
        __DIR__.'/../lib/CondorcetVersion.php',
 | 
						|
        __DIR__.'/../lib/Linkable.php',
 | 
						|
    ];
 | 
						|
 | 
						|
    if ($ClassName === 'Election') {
 | 
						|
        $path_to_file[] = __DIR__.'/../lib/ElectionProcess/CandidatesProcess.php';
 | 
						|
        $path_to_file[] = __DIR__.'/../lib/ElectionProcess/VotesProcess.php';
 | 
						|
        $path_to_file[] = __DIR__.'/../lib/ElectionProcess/ResultsProcess.php';
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    // var_dump($path_to_file);
 | 
						|
 | 
						|
    foreach ($path_to_file as $oneFile) {
 | 
						|
        $file_contents = file_get_contents($oneFile);
 | 
						|
 | 
						|
        foreach ($ClassData as $MethodName => $MethodData) {
 | 
						|
            var_dump($ClassName.'->'.$MethodName);
 | 
						|
 | 
						|
            $description = $MethodData['description'];
 | 
						|
            $description = str_replace('$', '\\\$', $description);
 | 
						|
            $description = preg_replace($patternReplaceLastNewLine, '$1', $description);
 | 
						|
            $description = str_replace(["\n    ", "\n"], '\\n', $description);
 | 
						|
            $description = str_replace('"', '\"', $description);
 | 
						|
 | 
						|
            $attributes =  '$3#[Description("'.$description.'")]$2';
 | 
						|
 | 
						|
            if (isset($MethodData['return'])) {
 | 
						|
                $returnV = $MethodData['return'];
 | 
						|
                $returnV = preg_replace($patternReplaceLastNewLine, '$1', $returnV);
 | 
						|
                $returnV = str_replace(["\n    ", "\n"], '\\n', $returnV);
 | 
						|
                $returnV = str_replace('"', '\"', $returnV);
 | 
						|
 | 
						|
                $attributes .= '$3#[FunctionReturn("'.$returnV.'")]$2';
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            if (isset($MethodData['examples'])) {
 | 
						|
                $examples = $MethodData['examples'];
 | 
						|
                $examples = preg_replace($patternReplaceLastNewLine, '$1', $examples);
 | 
						|
                $examples = str_replace(["\n    ", "\n"], '\\n', $examples);
 | 
						|
                $examples = str_replace('"', '\"', $examples);
 | 
						|
 | 
						|
                $arg = '';
 | 
						|
                $i = 1;
 | 
						|
                foreach ($examples as $oneExampleKey => $oneExample) {
 | 
						|
                    if ($i++ > 1) {
 | 
						|
                        $arg .= ', ';
 | 
						|
                    }
 | 
						|
 | 
						|
                    $arg .= '"'.$oneExampleKey.'||'.$oneExample.'"';
 | 
						|
                }
 | 
						|
 | 
						|
                $attributes .= '$3#[Examples('.$arg.')]$2';
 | 
						|
            }
 | 
						|
 | 
						|
            if (isset($MethodData['related'])) {
 | 
						|
                $related = $MethodData['related'];
 | 
						|
                $related = str_replace('"', '\"', $related);
 | 
						|
 | 
						|
                $arg = '';
 | 
						|
                $i = 1;
 | 
						|
                foreach ($related as $oneRelated) {
 | 
						|
                    if ($i++ > 1) {
 | 
						|
                        $arg .= ', ';
 | 
						|
                    }
 | 
						|
 | 
						|
                    $arg .= '"'.$oneRelated.'"';
 | 
						|
                }
 | 
						|
 | 
						|
                $attributes .= '$3#[Related('.$arg.')]$2';
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            $pattern = '/(#\[PublicAPI\])(\n)(.*)(public.*function '.$MethodName.' *\()/';
 | 
						|
            $replacement = '$1$2'.$attributes.'$3$4';
 | 
						|
 | 
						|
            $file_contents = preg_replace(
 | 
						|
                $pattern,
 | 
						|
                $replacement,
 | 
						|
                $file_contents
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        file_put_contents($oneFile, $file_contents);
 | 
						|
    }
 | 
						|
}
 |