Skip to content

Commit

Permalink
enh(php) highlight variables (#2785)
Browse files Browse the repository at this point in the history
Resolves #2778.

* Also modernize a bit.
  • Loading branch information
taufik-nurrohman committed Oct 27, 2020
1 parent a636dad commit 95ad819
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
4 changes: 3 additions & 1 deletion CHANGES.md
Expand Up @@ -5,6 +5,7 @@ Language Improvements:
- enh(julia) Update keyword lists for Julia 1.x (#2781) [Fredrik Ekre][]
- enh(python) Match numeric literals per the language reference [Richard Gibson][]
- enh(ruby) Match numeric literals per language documentation [Richard Gibson][]
- enh(php) highlight variables (#2785) [Taufik Nurrohman][]

Dev Improvements:

Expand All @@ -13,6 +14,7 @@ Dev Improvements:
[Fredrik Ekre]: https://github.com/fredrikekre
[Richard Gibson]: https://github.com/gibson042
[Josh Goebel]: https://github.com/joshgoebel
[Taufik Nurrohman]: https://github.com/taufik-nurrohman


## Version 10.3.1
Expand Down Expand Up @@ -1323,7 +1325,7 @@ Notable fixes and improvements to existing languages:
- HTML `<script>` tag now allows any language, not just JavaScript.
- Multi-line comments are supported now in MatLab.

[Taufik Nurrohman]: https://github.com/tovic
[Taufik Nurrohman]: https://github.com/taufik-nurrohman
[Jet Brains]: https://www.jetbrains.com/
[Peter Piwowarski]: https://github.com/oldlaptop
[Kenta Sato]: https://github.com/bicycle1885
Expand Down
19 changes: 10 additions & 9 deletions src/languages/php.js
Expand Up @@ -11,37 +11,38 @@ Category: common
* @returns {LanguageDetail}
* */
export default function(hljs) {
var VARIABLE = {
const VARIABLE = {
className: 'variable',
begin: '\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
};
var PREPROCESSOR = {
const PREPROCESSOR = {
className: 'meta',
variants: [
{ begin: /<\?php/, relevance: 10 }, // boost for obvious PHP
{ begin: /<\?[=]?/ },
{ begin: /\?>/ } // end php tag
]
};
var SUBST = {
const SUBST = {
className: 'subst',
variants: [
{ begin: /\$\w+/ },
{ begin: /\{\$/, end: /\}/ }
]
};
var SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, {
const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, {
illegal: null,
});
var DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {
const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {
illegal: null,
contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),
});
var HEREDOC = hljs.END_SAME_AS_BEGIN({
const HEREDOC = hljs.END_SAME_AS_BEGIN({
begin: /<<<[ \t]*(\w+)\n/,
end: /[ \t]*(\w+)\b/,
contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),
});
var STRING = {
const STRING = {
className: 'string',
contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],
variants: [
Expand All @@ -56,8 +57,8 @@ export default function(hljs) {
HEREDOC
]
};
var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
var KEYWORDS = {
const NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
const KEYWORDS = {
keyword:
// Magic constants:
// <https://www.php.net/manual/en/language.constants.predefined.php>
Expand Down
8 changes: 4 additions & 4 deletions test/markup/php/comments.expect.txt
Expand Up @@ -4,8 +4,8 @@
* <span class="hljs-doctag">@param</span> int $a
* <span class="hljs-doctag">@return</span> bool
*/</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isEven</span>(<span class="hljs-params">$a</span>) </span>{
<span class="hljs-keyword">return</span> ($a % <span class="hljs-number">2</span>) === <span class="hljs-number">0</span>;
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isEven</span>(<span class="hljs-params"><span class="hljs-variable">$a</span></span>) </span>{
<span class="hljs-keyword">return</span> (<span class="hljs-variable">$a</span> % <span class="hljs-number">2</span>) === <span class="hljs-number">0</span>;
}

<span class="hljs-comment">/**
Expand All @@ -14,6 +14,6 @@
* <span class="hljs-doctag">@param</span> int $a
* <span class="hljs-doctag">@return</span> bool
*/</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isOdd</span>(<span class="hljs-params">$a</span>) </span>{
<span class="hljs-keyword">return</span> ($a % <span class="hljs-number">2</span>) === <span class="hljs-number">1</span>;
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isOdd</span>(<span class="hljs-params"><span class="hljs-variable">$a</span></span>) </span>{
<span class="hljs-keyword">return</span> (<span class="hljs-variable">$a</span> % <span class="hljs-number">2</span>) === <span class="hljs-number">1</span>;
}

0 comments on commit 95ad819

Please sign in to comment.