[ Index ]

PHP Cross Reference of Moodle 310

title

Body

[close]

/lib/php-css-parser/Value/ -> Color.php (source)

   1  <?php
   2  
   3  namespace Sabberworm\CSS\Value;
   4  
   5  use Sabberworm\CSS\Parsing\ParserState;
   6  
   7  class Color extends CSSFunction {
   8  
   9  	public function __construct($aColor, $iLineNo = 0) {
  10          parent::__construct(implode('', array_keys($aColor)), $aColor, ',', $iLineNo);
  11      }
  12  
  13  	public static function parse(ParserState $oParserState) {
  14          $aColor = array();
  15          if ($oParserState->comes('#')) {
  16              $oParserState->consume('#');
  17              $sValue = $oParserState->parseIdentifier(false);
  18              if ($oParserState->strlen($sValue) === 3) {
  19                  $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2];
  20              } else if ($oParserState->strlen($sValue) === 4) {
  21                  $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2] . $sValue[3] . $sValue[3];
  22              }
  23  
  24              if ($oParserState->strlen($sValue) === 8) {
  25                  $aColor = array(
  26                      'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
  27                      'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
  28                      'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()),
  29                      'a' => new Size(round(self::mapRange(intval($sValue[6] . $sValue[7], 16), 0, 255, 0, 1), 2), null, true, $oParserState->currentLine())
  30                  );
  31              } else {
  32                  $aColor = array(
  33                      'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
  34                      'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
  35                      'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine())
  36                  );
  37              }
  38          } else {
  39              $sColorMode = $oParserState->parseIdentifier(true);
  40              $oParserState->consumeWhiteSpace();
  41              $oParserState->consume('(');
  42              $iLength = $oParserState->strlen($sColorMode);
  43              for ($i = 0; $i < $iLength; ++$i) {
  44                  $oParserState->consumeWhiteSpace();
  45                  $aColor[$sColorMode[$i]] = Size::parse($oParserState, true);
  46                  $oParserState->consumeWhiteSpace();
  47                  if ($i < ($iLength - 1)) {
  48                      $oParserState->consume(',');
  49                  }
  50              }
  51              $oParserState->consume(')');
  52          }
  53          return new Color($aColor, $oParserState->currentLine());
  54      }
  55  
  56  	private static function mapRange($fVal, $fFromMin, $fFromMax, $fToMin, $fToMax) {
  57          $fFromRange = $fFromMax - $fFromMin;
  58          $fToRange = $fToMax - $fToMin;
  59          $fMultiplier = $fToRange / $fFromRange;
  60          $fNewVal = $fVal - $fFromMin;
  61          $fNewVal *= $fMultiplier;
  62          return $fNewVal + $fToMin;
  63      }
  64  
  65  	public function getColor() {
  66          return $this->aComponents;
  67      }
  68  
  69  	public function setColor($aColor) {
  70          $this->setName(implode('', array_keys($aColor)));
  71          $this->aComponents = $aColor;
  72      }
  73  
  74  	public function getColorDescription() {
  75          return $this->getName();
  76      }
  77  
  78  	public function __toString() {
  79          return $this->render(new \Sabberworm\CSS\OutputFormat());
  80      }
  81  
  82  	public function render(\Sabberworm\CSS\OutputFormat $oOutputFormat) {
  83          // Shorthand RGB color values
  84          if($oOutputFormat->getRGBHashNotation() && implode('', array_keys($this->aComponents)) === 'rgb') {
  85              $sResult = sprintf(
  86                  '%02x%02x%02x',
  87                  $this->aComponents['r']->getSize(),
  88                  $this->aComponents['g']->getSize(),
  89                  $this->aComponents['b']->getSize()
  90              );
  91              return '#'.(($sResult[0] == $sResult[1]) && ($sResult[2] == $sResult[3]) && ($sResult[4] == $sResult[5]) ? "$sResult[0]$sResult[2]$sResult[4]" : $sResult);
  92          }
  93          return parent::render($oOutputFormat);
  94      }
  95  }


Generated: Wed Jan 22 11:59:49 2025 Cross-referenced by PHPXref 0.7.1