Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/CssRenderException.php
<?php

namespace XF;

use function
count, intval;

class
CssRenderException extends \Exception
{
    const
LINE = 0;
    const
INDEX = 1;

    public
$templateName = '';

    public
$contents = '';

    public
$renderErrorLine;

    public function
__construct($message, $templateName, $contents, $errorRefType, $errorReference, $previous = null)
    {
       
$this->templateName = $templateName;
       
$this->contents = $contents;

        if (
$errorRefType == self::LINE)
        {
           
$this->renderErrorLine = intval($errorReference);
        }
        else
        {
           
$this->renderErrorLine = substr_count($contents, "\n", 0, intval($errorReference)) + 1;
        }

       
$message .= " (on or near line $this->renderErrorLine)";

       
parent::__construct($message, 0, $previous);
    }

    public function
getContextLines()
    {
        if (
$this->renderErrorLine === null)
        {
            return [];
        }

       
$lines = explode("\n", $this->contents);

       
$start = max(0, $this->renderErrorLine - 4);
       
$end = min(count($lines), $this->renderErrorLine + 3);

       
$context = [];

        for (
$i = $start; $i < $end; $i++)
        {
           
$context[$i + 1] = rtrim($lines[$i]);
           
// + 1 as indexes are 0 based
       
}

        return
$context;
    }

    public function
getContextLinesPrintable()
    {
        if (
$this->renderErrorLine === null)
        {
            return [];
        }

       
$output = [];
        foreach (
$this->getContextLines() AS $lineNum => $code)
        {
            if (
$this->renderErrorLine === $lineNum)
            {
               
$output[] = "*$lineNum*| " . $code;
            }
            else
            {
               
$output[] = " $lineNum | " . $code;
            }
        }

        return
$output;
    }

    public static function
createFromLessException(\Less_Exception_Parser $e, $templateName, $contents)
    {
       
$parts = explode("\n", $e->getMessage());
       
$message = $parts[0];
       
$message = preg_replace("/anonymous-file-\d+\.less/i", $templateName, $message);

        return new
self($message, $templateName, $contents, self::INDEX, $e->index, $e);
    }
}