mirror of
https://github.com/php/php-langspec.git
synced 2026-03-24 07:12:08 +01:00
- Redundant final newlines trimmed into one - Missing final newlines added where can be added According to POSIX, a line is a sequence of zero or more non-' <newline>' characters plus a terminating '<newline>' character. [1] Files should normally have at least one final newline character although not mandatory. [1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206
65 lines
2.2 KiB
PHP
65 lines
2.2 KiB
PHP
<?php
|
|
$data = file($argv[1]);
|
|
$filename = null;
|
|
$counter = 0;
|
|
$split_data = [];
|
|
$counts = [];
|
|
$filerefs = [];
|
|
$filecounts = [];
|
|
|
|
foreach($data as $line) {
|
|
if($line[0] == '#') {
|
|
// main header
|
|
if($line[1] != '#') {
|
|
$filename = sprintf("%02d-%s.md", $counter, strtolower(str_replace(" ", "-", trim(substr($line, 1)))));
|
|
echo $filename, "\n";
|
|
$counter++;
|
|
$split_data[$filename] = '';
|
|
}
|
|
// sub-header
|
|
$refname = trim(ltrim($line, '#'));
|
|
$refname = str_replace(" ", "-", $refname);
|
|
$refname = strtolower(preg_replace("/[^-_A-Za-z0-9]/", "", $refname));
|
|
if(!empty($references[$refname])) {
|
|
@$counts[$refname]++;
|
|
$orig_refname = $refname;
|
|
$refname .= "-".$counts[$refname];
|
|
// Local references for repeating names may be different from global ones
|
|
if(!isset($filecounts[$filename][$orig_refname])) {
|
|
$filecounts[$filename][$orig_refname] = 0;
|
|
$filerefs[$filename][$refname] = $orig_refname;
|
|
} else {
|
|
@$filecounts[$filename][$orig_refname]++;
|
|
$filerefs[$filename][$refname] = $orig_refname . "-" . $filecounts[$filename][$orig_refname];
|
|
}
|
|
}
|
|
$references[$refname] = $filename;
|
|
}
|
|
$split_data[$filename] .= $line;
|
|
}
|
|
|
|
foreach($split_data as $filename => $contents) {
|
|
$contents = preg_replace_callback('@\[(.*?)\]\(#(.*?)\)@', function($data) use($references, $filename, $filerefs) {
|
|
if(empty($references[$data[2]])) {
|
|
return $data[0];
|
|
}
|
|
if($references[$data[2]]) {
|
|
$filepart = $references[$data[2]];
|
|
} else {
|
|
$filepart = $filename;
|
|
}
|
|
if(!empty($filerefs[$filepart][$data[2]])) {
|
|
// replace global ref with local one
|
|
$refname = $filerefs[$filepart][$data[2]];
|
|
} else {
|
|
$refname = $data[2];
|
|
}
|
|
if($filepart == $filename) {
|
|
$filepart = "";
|
|
}
|
|
$res = sprintf("[%s](%s#%s)", $data[1], $filepart, $refname);
|
|
return $res;
|
|
}, $contents);
|
|
file_put_contents($filename, $contents);
|
|
}
|