214 lines
4.1 KiB
PHP

<?php
/**
* Author: Nil Portugués Calderó <contact@nilportugues.com>
* Date: 12/22/14
* Time: 11:37 AM.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace NilPortugues\Sql\QueryFormatter\Helper;
use NilPortugues\Sql\QueryFormatter\Formatter;
/**
* Class Indent.
*/
class Indent
{
/**
* @var bool
*/
protected $inlineIndented = false;
/**
* @var bool
*/
protected $increaseSpecialIndent = false;
/**
* @var int
*/
protected $indentLvl = 0;
/**
* @var bool
*/
protected $increaseBlockIndent = false;
/**
* @var array
*/
protected $indentTypes = [];
/**
* Increase the Special Indent if increaseSpecialIndent is true after the current iteration.
*
* @return $this
*/
public function increaseSpecialIndent()
{
if ($this->increaseSpecialIndent) {
++$this->indentLvl;
$this->increaseSpecialIndent = false;
\array_unshift($this->indentTypes, 'special');
}
return $this;
}
/**
* Increase the Block Indent if increaseBlockIndent is true after the current iteration.
*
* @return $this
*/
public function increaseBlockIndent()
{
if ($this->increaseBlockIndent) {
++$this->indentLvl;
$this->increaseBlockIndent = false;
\array_unshift($this->indentTypes, 'block');
}
return $this;
}
/**
* Closing parentheses decrease the block indent level.
*
* @param Formatter $formatter
*
* @return $this
*/
public function decreaseIndentLevelUntilIndentTypeIsSpecial(Formatter $formatter)
{
$formatter->setFormattedSql(\rtrim($formatter->getFormattedSql(), ' '));
--$this->indentLvl;
while ($j = \array_shift($this->indentTypes)) {
if ('special' !== $j) {
break;
}
--$this->indentLvl;
}
return $this;
}
/**
* @return $this
*/
public function decreaseSpecialIndentIfCurrentIndentTypeIsSpecial()
{
\reset($this->indentTypes);
if (\current($this->indentTypes) === 'special') {
--$this->indentLvl;
\array_shift($this->indentTypes);
}
return $this;
}
/**
* @return bool
*/
public function getIncreaseBlockIndent()
{
return $this->increaseBlockIndent;
}
/**
* @return bool
*/
public function getIncreaseSpecialIndent()
{
return $this->increaseSpecialIndent;
}
/**
* @return int
*/
public function getIndentLvl()
{
return $this->indentLvl;
}
/**
* @return mixed
*/
public function getIndentTypes()
{
return $this->indentTypes;
}
/**
* @param bool $increaseBlockIndent
*
* @return $this
*/
public function setIncreaseBlockIndent($increaseBlockIndent)
{
$this->increaseBlockIndent = $increaseBlockIndent;
return $this;
}
/**
* @param bool $increaseSpecialIndent
*
* @return $this
*/
public function setIncreaseSpecialIndent($increaseSpecialIndent)
{
$this->increaseSpecialIndent = $increaseSpecialIndent;
return $this;
}
/**
* @param int $indentLvl
*
* @return $this
*/
public function setIndentLvl($indentLvl)
{
$this->indentLvl = $indentLvl;
return $this;
}
/**
* @param array $indentTypes
*
* @return $this
*/
public function setIndentTypes($indentTypes)
{
$this->indentTypes = $indentTypes;
return $this;
}
/**
* @param bool $inlineIndented
*
* @return $this
*/
public function setInlineIndented($inlineIndented)
{
$this->inlineIndented = $inlineIndented;
return $this;
}
/**
* @return bool
*/
public function getInlineIndented()
{
return $this->inlineIndented;
}
}