aboutsummaryrefslogtreecommitdiff
path: root/plugins/language_php.lua
diff options
context:
space:
mode:
authorJefferson González <jgmdev@gmail.com>2021-09-02 17:28:22 -0400
committerGitHub <noreply@github.com>2021-09-02 17:28:22 -0400
commitf119f2174a2e371a73cd963bdcd9e5cd9d232df0 (patch)
tree60725a6db66fe7997db25ca168bebcc78afa4726 /plugins/language_php.lua
parentada44aee90e00cdb69259112c345aba221dbf19d (diff)
parenta2ef6b0964d71a4353fe93ad1d1f5275123fa447 (diff)
downloadlite-xl-plugins-f119f2174a2e371a73cd963bdcd9e5cd9d232df0.tar.gz
lite-xl-plugins-f119f2174a2e371a73cd963bdcd9e5cd9d232df0.zip
Merge pull request #66 from jgmdev/php-improvements
Improved language_php plugin
Diffstat (limited to 'plugins/language_php.lua')
-rw-r--r--plugins/language_php.lua177
1 files changed, 172 insertions, 5 deletions
diff --git a/plugins/language_php.lua b/plugins/language_php.lua
index 4f107aa..5ee6a93 100644
--- a/plugins/language_php.lua
+++ b/plugins/language_php.lua
@@ -1,13 +1,149 @@
-- mod-version:2 -- lite-xl 2.0
--[[
- language_php.lua
- provides php syntax support allowing mixed html, css and js
- version: 20210513_144200
-
- Depends on plugin language_phps.lua version >= 20210512_181200
+ language_php.lua
+ provides php syntax support allowing mixed html, css and js
+ version: 20210902_1
--]]
local syntax = require "core.syntax"
+-- load syntax dependencies to add additional rules
+require "plugins.language_css"
+require "plugins.language_js"
+
+-- define the core php syntax coloring
+syntax.add {
+ files = { "%.phps$" },
+ headers = "^<%?php",
+ comment = "//",
+ patterns = {
+ -- Attributes
+ { pattern = {"#%[", "%]"}, type = "normal" },
+ -- Comments
+ { pattern = "//.-\n", type = "comment" },
+ { pattern = "#.-\n", type = "comment" },
+ { pattern = { "/%*", "%*/" }, type = "comment" },
+ -- The '\\' is for escaping to work on " or '
+ { pattern = { '"', '"', '\\' }, type = "string" },
+ { pattern = { "'", "'", '\\' }, type = "string" },
+ { pattern = "0[bB][%d]+", type = "number" },
+ { pattern = "0[xX][%da-fA-F]+", type = "number" },
+ { pattern = "-?%d[%d_%.eE]*", type = "number" },
+ { pattern = "-?%.?%d+", type = "number" },
+ { pattern = "[%.%+%-=/%*%^%%<>!~|&%?:]", type = "operator" },
+ -- Variables
+ { pattern = "%$[%w_]+", type = "keyword2" },
+ -- Respect control structures, treat as keyword not function
+ { pattern = "if[%s]*%f[(]", type = "keyword" },
+ { pattern = "else[%s]*%f[(]", type = "keyword" },
+ { pattern = "elseif[%s]*%f[(]", type = "keyword" },
+ { pattern = "for[%s]*%f[(]", type = "keyword" },
+ { pattern = "foreach[%s]*%f[(]", type = "keyword" },
+ { pattern = "while[%s]*%f[(]", type = "keyword" },
+ { pattern = "catch[%s]*%f[(]", type = "keyword" },
+ { pattern = "switch[%s]*%f[(]", type = "keyword" },
+ { pattern = "match[%s]*%f[(]", type = "keyword" },
+ { pattern = "fn[%s]*%f[(]", type = "keyword" },
+ -- All functions that aren't control structures
+ { pattern = "[%a_][%w_]*[%s]*%f[(]", type = "function" },
+ -- Array type hint not added on symbols to also make it work
+ -- as a function call
+ { pattern = "array", type = "literal" },
+ -- Match static or namespace container on sub element access
+ { pattern = "[%a_][%w_]*[%s]*%f[:]", type = "literal" },
+ -- Uppercase constants of at least 3 characters in len
+ { pattern = "%u[%u_][%u%d_]+", type = "number" },
+ -- Magic constants
+ { pattern = "__[%u]+__", type = "number" },
+ -- Everything else
+ { pattern = "[%a_][%w_]*", type = "symbol" },
+ },
+ symbols = {
+ ["return"] = "keyword",
+ ["if"] = "keyword",
+ ["else"] = "keyword",
+ ["elseif"] = "keyword",
+ ["endif"] = "keyword",
+ ["declare"] = "keyword",
+ ["enddeclare"] = "keyword",
+ ["switch"] = "keyword",
+ ["endswitch"] = "keyword",
+ ["as"] = "keyword",
+ ["do"] = "keyword",
+ ["for"] = "keyword",
+ ["endfor"] = "keyword",
+ ["foreach"] = "keyword",
+ ["endforeach"] = "keyword",
+ ["while"] = "keyword",
+ ["endwhile"] = "keyword",
+ ["match"] = "keyword",
+ ["case"] = "keyword",
+ ["continue"] = "keyword",
+ ["default"] = "keyword",
+ ["break"] = "keyword",
+ ["goto"] = "keyword",
+
+ ["try"] = "keyword",
+ ["catch"] = "keyword",
+ ["throw"] = "keyword",
+ ["finally"] = "keyword",
+
+ ["class"] = "keyword",
+ ["trait"] = "keyword",
+ ["interface"] = "keyword",
+ ["public"] = "keyword",
+ ["static"] = "keyword",
+ ["protected"] = "keyword",
+ ["private"] = "keyword",
+ ["abstract"] = "keyword",
+ ["final"] = "keyword",
+ ["$this"] = "literal",
+
+ ["function"] = "keyword",
+ ["fn"] = "keyword",
+ ["global"] = "keyword",
+ ["var"] = "keyword",
+ ["const"] = "keyword",
+
+ ["bool"] = "literal",
+ ["boolean"] = "literal",
+ ["int"] = "literal",
+ ["integer"] = "literal",
+ ["real"] = "literal",
+ ["double"] = "literal",
+ ["float"] = "literal",
+ ["string"] = "literal",
+ ["object"] = "literal",
+ ["callable"] = "literal",
+ ["iterable"] = "literal",
+ ["void"] = "literal",
+ ["parent"] = "literal",
+ ["self"] = "literal",
+ ["mixed"] = "literal",
+
+ ["namespace"] = "keyword",
+ ["extends"] = "keyword",
+ ["implements"] = "keyword",
+ ["instanceof"] = "keyword",
+ ["require"] = "keyword",
+ ["require_once"] = "keyword",
+ ["include"] = "keyword",
+ ["include_once"] = "keyword",
+ ["use"] = "keyword",
+ ["new"] = "keyword",
+ ["clone"] = "keyword",
+
+ ["true"] = "number",
+ ["false"] = "number",
+ ["NULL"] = "number",
+ ["null"] = "number",
+
+ ["print"] = "function",
+ ["echo"] = "function",
+ ["exit"] = "function",
+ },
+}
+
+-- allows html, css and js coloring on php files
syntax.add {
files = { "%.php$", "%.phtml" },
patterns = {
@@ -68,3 +204,34 @@ syntax.add {
symbols = {},
}
+-- allow coloring of php code inside css and js code
+local syntaxes = { "css", "js" }
+for _, ext in pairs(syntaxes) do
+ local syntax_table = syntax.get("file."..ext, "")
+
+ table.insert(
+ syntax_table.patterns,
+ 1,
+ {
+ pattern = {
+ "<%?=?",
+ "%?>"
+ },
+ syntax = ".phps",
+ type = "keyword2"
+ }
+ )
+
+ table.insert(
+ syntax_table.patterns,
+ 1,
+ {
+ pattern = {
+ "<%?php%s+",
+ "%?>"
+ },
+ syntax = ".phps",
+ type = "keyword2"
+ }
+ )
+end