<?php
namespace eMacros\Exception;
class ParseException extends \Exception {
public $code, $offset, $sourceFile;
public function __construct($code, $offset, $file = null) {
$this->code = $code;
$this->offset = $offset;
$this->sourceFile = $file;
//build message
$this->message = is_null($file) ? sprintf("Parse error found on line %d, column %d.", $this->getSourceLine(), $this->getSourceColumn())
: sprintf("Parse error on file '%s' (Line %d, Column %d).", $file, $this->getSourceLine(), $this->getSourceColumn());
}
public function getSourceFile() {
return $this->sourceFile;
}
public function getSourceLine() {
if ($this->offset <= 0) {
return 1;
}
return substr_count($this->code, "\n", 0, $this->offset) + 1;
}
public function getSourceColumn() {
$pos = strrpos(substr($this->code, 0, $this->offset), "\n");
return $this->offset - ($pos === false ? -1 : $pos);
}
}
?>
|