Differential D20977 Diff 49988 src/infrastructure/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php
Changeset View
Changeset View
Standalone View
Standalone View
src/infrastructure/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php
- This file was added.
| <?php | |||||
| final class PhutilInvisibleSyntaxHighlighter extends Phobject { | |||||
| private $config = array(); | |||||
| public function setConfig($key, $value) { | |||||
| $this->config[$key] = $value; | |||||
| return $this; | |||||
| } | |||||
| public function getHighlightFuture($source) { | |||||
| $keys = array_map('chr', range(0x0, 0x1F)); | |||||
| $vals = array_map( | |||||
| array($this, 'decimalToHtmlEntityDecoded'), range(0x2400, 0x241F)); | |||||
| $invisible = array_combine($keys, $vals); | |||||
| $result = array(); | |||||
| foreach (str_split($source) as $character) { | |||||
| if (isset($invisible[$character])) { | |||||
| $result[] = phutil_tag( | |||||
| 'span', | |||||
| array('class' => 'invisible'), | |||||
| $invisible[$character]); | |||||
| if ($character === "\n") { | |||||
| $result[] = $character; | |||||
| } | |||||
| } else { | |||||
| $result[] = $character; | |||||
| } | |||||
| } | |||||
| $result = phutil_implode_html('', $result); | |||||
| return new ImmediateFuture($result); | |||||
| } | |||||
| private function decimalToHtmlEntityDecoded($dec) { | |||||
| return html_entity_decode("&#{$dec};"); | |||||
| } | |||||
| } | |||||