code: protected function splitChangelog($file, $version)
      {
          $lines = explode("\n", file_get_contents($file));
  
          // split the file into relevant parts
          $start = [];
          $changelog = [];
          $end = [];
  
          $state = 'start';
          foreach ($lines as $l => $line) {
              // starting from the changelogs headline
              if (isset($lines[$l - 2]) && strpos($lines[$l - 2], $version) !== false &&
                  isset($lines[$l - 1]) && strncmp($lines[$l - 1], '---', 3) === 0) {
                  $state = 'changelog';
              }
              if ($state === 'changelog' && isset($lines[$l + 1]) && strncmp($lines[$l + 1], '---', 3) === 0) {
                  $state = 'end';
              }
              // add continued lines to the last item to keep them together
              if (!empty(${$state}) && trim($line) !== '' && strncmp($line, '- ', 2) !== 0) {
                  end(${$state});
                  ${$state}[key(${$state})] .= "\n" . $line;
              } else {
                  ${$state}[] = $line;
              }
          }
  
          return [$start, $changelog, $end];
      }
docs: Extract changelog content for a specific version.
  @param string $file
  @param string $version
  @return array