<commit_before><?php

include("./common.php");

class Cycle
{
	var $values;
	var $i;
	var $count;

	function Cycle($v)
	{
		$this->values = func_get_args();
		$this->i = -1;
		$this->count = count($this->values);
	}

	function next()
	{
		$this->i = ($this->i + 1) % $this->count;
		return $this->values[$this->i];
	}

	function cur()
	{
		return $this->values[$this->i];
	}

	function reset()
	{
		$this->i = -1;
	}
}

class XcacheCoverageViewer
{
	var $syntaxhiglight = true;
	var $usecache = false;
	var $include_paths = array();
	var $exclude_paths = array();
	var $charset = 'UTF-8';
	var $lang = 'en-us';
	var $datadir = null;
	var $datadir_len = null;
	var $path = null;
	var $outpath = null;

	function XcacheCoverageViewer()
	{
		$this->datadir = ini_get('xcache.coveragedump_directory');

		// copy config
		foreach (array('charset', 'include_paths', 'exclude_paths', 'syntaxhiglight', 'usecache', 'datadir', 'lang') as $k) {
			if (isset($GLOBALS[$k])) {
				$this->{$k} = $GLOBALS[$k];
			}
		}

		$this->datadir = preg_replace('!/$!', '', $this->datadir);
		$this->datadir_len = strlen($this->datadir);

		$this->path = isset($_GET['path']) ? $_GET['path'] : '';
		$this->path = preg_replace('!\.{2,}!', '.', $this->path);
		$qsep = preg_quote(DIRECTORY_SEPARATOR, '!');
		$this->path = preg_replace("![\\\\$qsep]{2,}!", DIRECTORY_SEPARATOR, $this->path);
		$this->path = preg_replace("!$qsep$!", '', $this->path);
		if ($this->path == '/') {
			$this->path = '';
		}
		$this->outpath = $this->datadir . $this->path;
	}

	function main()
	{
		$path = $this->path;

		if (is_dir($this->outpath)) {
			$action = 'dir';
			$prefix_len = strlen($path) + 1;
			$dirinfo = $this->loadDir($this->outpath);
			if (!$this->usecache) {
				ksort($dirinfo['subdirs']);
				ksort($dirinfo['files']);
			}
		}
		else if (is_file($this->outpath . ".pcov")) {
			$action = 'file';

			$dir = dirname($path);
			$filename = basename($path);

			$fileinfo = $this->loadCov($this->outpath . ".pcov");

			$lines = file($path);
			// fix the tabs not in the middle
			foreach ($lines as $l => $line) {
				if (preg_match('!^(\\t*)([^\\t]+\\t.*)$!s', $line, $m)) {
					$lines[$l] = $m[1];
					$chunks = explode("\t", $m[2]);
					for ($i = 0, $c = count($chunks) - 1; $i < $c; $i ++) {
						$lines[$l] .= $chunks[$i] . str_repeat(" ", 4 - (strlen($chunks[$i]) % 4));
					}
					$lines[$l] .= $chunks[$c];
				}
			}
			if ($this->syntaxhiglight) {
				$source = implode('', $lines);
				ob_start();
				highlight_string($source);
				$lines = explode('<br />', str_replace("\n", "", ob_get_clean()));
				$last = array_pop($lines);
				$filecov = sprint_cov($fileinfo['cov'], $lines, false);
				$filecov .= $last;
				unset($source);
			}
			else {
				$filecov = sprint_cov($fileinfo['cov'], $lines);
			}

			list($tplfile, $tpllines, $tplcov) = $this->loadTplCov($fileinfo['cov'], substr($this->outpath, $this->datadir_len));
			if ($tplfile) {
				$tplcov = sprint_cov($tplinfo['tplcov'], $tpllines);
				unset($tpllines);
			}
		}
		else if (!$this->datadir) {
			$action = 'require xcache.coveragedump_directory';
		}
		else {
			$action = "no data";
		}

		$xcache_version = defined('XCACHE_VERSION') ? XCACHE_VERSION : '';
		include("coverager.tpl.php");
	}

	function loadDir($outdir, $addtodo = null)
	{
		if ($this->usecache) {
			$cachefile = $outdir . "/.pcovcache";
			if (file_exists($cachefile)) {
				return unserialize(file_get_contents($cachefile));
			}
		}
		$srcdir = substr($outdir, $this->datadir_len);

		$total = $hits = $todos = 0;
		$files = array();
		$subdirs = array();
		if (!isset($addtodo)) {<commit_msg>fix tplcov<commit_after><?php

include("./common.php");

class Cycle
{
	var $values;
	var $i;
	var $count;

	function Cycle($v)
	{
		$this->values = func_get_args();
		$this->i = -1;
		$this->count = count($this->values);
	}

	function next()
	{
		$this->i = ($this->i + 1) % $this->count;
		return $this->values[$this->i];
	}

	function cur()
	{
		return $this->values[$this->i];
	}

	function reset()
	{
		$this->i = -1;
	}
}

class XcacheCoverageViewer
{
	var $syntaxhiglight = true;
	var $usecache = false;
	var $include_paths = array();
	var $exclude_paths = array();
	var $charset = 'UTF-8';
	var $lang = 'en-us';
	var $datadir = null;
	var $datadir_len = null;
	var $path = null;
	var $outpath = null;

	function XcacheCoverageViewer()
	{
		$this->datadir = ini_get('xcache.coveragedump_directory');

		// copy config
		foreach (array('charset', 'include_paths', 'exclude_paths', 'syntaxhiglight', 'usecache', 'datadir', 'lang') as $k) {
			if (isset($GLOBALS[$k])) {
				$this->{$k} = $GLOBALS[$k];
			}
		}

		$this->datadir = preg_replace('!/$!', '', $this->datadir);
		$this->datadir_len = strlen($this->datadir);

		$this->path = isset($_GET['path']) ? $_GET['path'] : '';
		$this->path = preg_replace('!\.{2,}!', '.', $this->path);
		$qsep = preg_quote(DIRECTORY_SEPARATOR, '!');
		$this->path = preg_replace("![\\\\$qsep]{2,}!", DIRECTORY_SEPARATOR, $this->path);
		$this->path = preg_replace("!$qsep$!", '', $this->path);
		if ($this->path == '/') {
			$this->path = '';
		}
		$this->outpath = $this->datadir . $this->path;
	}

	function main()
	{
		$path = $this->path;

		if (is_dir($this->outpath)) {
			$action = 'dir';
			$prefix_len = strlen($path) + 1;
			$dirinfo = $this->loadDir($this->outpath);
			if (!$this->usecache) {
				ksort($dirinfo['subdirs']);
				ksort($dirinfo['files']);
			}
		}
		else if (is_file($this->outpath . ".pcov")) {
			$action = 'file';

			$dir = dirname($path);
			$filename = basename($path);

			$fileinfo = $this->loadCov($this->outpath . ".pcov");

			$lines = file($path);
			// fix the tabs not in the middle
			foreach ($lines as $l => $line) {
				if (preg_match('!^(\\t*)([^\\t]+\\t.*)$!s', $line, $m)) {
					$lines[$l] = $m[1];
					$chunks = explode("\t", $m[2]);
					for ($i = 0, $c = count($chunks) - 1; $i < $c; $i ++) {
						$lines[$l] .= $chunks[$i] . str_repeat(" ", 4 - (strlen($chunks[$i]) % 4));
					}
					$lines[$l] .= $chunks[$c];
				}
			}
			if ($this->syntaxhiglight) {
				$source = implode('', $lines);
				ob_start();
				highlight_string($source);
				$lines = explode('<br />', str_replace("\n", "", ob_get_clean()));
				$last = array_pop($lines);
				$filecov = sprint_cov($fileinfo['cov'], $lines, false);
				$filecov .= $last;
				unset($source);
			}
			else {
				$filecov = sprint_cov($fileinfo['cov'], $lines);
			}

			list($tplfile, $tpllines, $tplcov) = $this->loadTplCov($fileinfo['cov'], substr($this->outpath, $this->datadir_len));
			if ($tplfile) {
				$tplcov = sprint_cov($tplcov, $tpllines);
				unset($tpllines);
			}
		}
		else if (!$this->datadir) {
			$action = 'require xcache.coveragedump_directory';
		}
		else {
			$action = "no data";
		}

		$xcache_version = defined('XCACHE_VERSION') ? XCACHE_VERSION : '';
		include("coverager.tpl.php");
	}

	function loadDir($outdir, $addtodo = null)
	{
		if ($this->usecache) {
			$cachefile = $outdir . "/.pcovcache";
			if (file_exists($cachefile)) {
				return unserialize(file_get_contents($cachefile));
			}
		}
		$srcdir = substr($outdir, $this->datadir_len);

		$total = $hits = $todos = 0;
		$files = array();
		$subdirs = array();
		if (!isset($addtodo)) {
{'fraction_non_alphanumeric': 0.23477542022595757, 'fraction_numerical': 0.0038578120694406173, 'mean_word_length': 3.5031017369727047, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 97, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6475532', 'n_tokens_mistral': 3275, 'n_tokens_neox': 2883, 'n_words': 517}