File: php.lang

package info (click to toggle)
highlight 4.10-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,556 kB
  • sloc: cpp: 27,579; makefile: 411; sh: 341; ansic: 264; php: 236; python: 217; ruby: 132; perl: 61; tcl: 1
file content (88 lines) | stat: -rw-r--r-- 2,543 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

Description="PHP"

Categories = {"source", "script"}

Keywords={
  { Id=1,
    List={
      "abstract", "and", "array", "as", "break", "case",
      "catch",   "cfunction", "class", "clone", "const",
      "continue", "declare", "default", "do", "else", "elseif",
      "enddeclare", "endfor", "endforeach", "endif", "endswitch",
      "endwhile", "extends", "final", "for", "foreach",
      "function", "global", "goto", "if", "implements",
      "interface", "instanceof", "namespace",  "new",
      "old_function", "or", "private", "protected",  "public",
      "static", "switch", "throw", "try",  "use", "var", "while",
      "xor", "__CLASS__", "__DIR__",  "__LINE__", "__FILE__",
      "__FUNCTION__", "__TRAIT__", "__METHOD__",  "__NAMESPACE__",
      "die", "echo", "empty", "exit", "eval", "include",
      "include_once", "isset", "list", "require", "require_once",
      "return", "print", "unset",  "true", "false", "null", "resource"
    },
  },
  { Id=2,
    List={"int", "integer", "real", "double", "float", "string", "array", "object", "bool", "mixed", "numeric", "void" },
  },
  { Id=3,
    Regex=[[\$[\w\-"|']+|\$?\{.+?\}]],
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]],
  },
}

-- hereDoc opening delimiter, see OnStateChange to handle end of string
Strings={
  Delimiter=[["|'|<<<'?[\w_]+'?]],
  Escape=[=[ \\\d{3}|\\u\d{4}|\\x[[:xdigit:]]{2}|\\[ntvbrfa\\\?'"\$] ]=],
  --Interpolation = [[ \$\w+\[.+?\] ]]
}

IgnoreCase=true

Comments={
  { Block=false,
    Delimiter= { [[\/\/|\#(?!\[)]] }, -- distinct comment from PHP8 attribute
  },
  { Block=true,
    Nested=false,
    Delimiter= { [[\/\*]],[[\*\/]],}
  }
}

-- add #\[ as opening delimiter for PHP 8 attributes
Operators=[=[ \(|\)|\[|\]|\{|\}|\,|\;|\:|\&|<|>|\!|\=|\/|\*|\|\+|\-|\.|\@|\||#\[|\? ]=]

function OnStateChange(oldState, newState, token)

  if oldState==HL_STRING and token==hereDoc then
    hereDoc = nil
    return HL_STRING_END
  end


  if (string.sub(token,1,1) =="$" or string.sub(token,1,1) =="{") and oldState==HL_STRING and newState==HL_KEYWORD then
    return HL_INTERPOLATION
  end

  if (string.sub(token,1,1) =="{") and  oldState~=HL_STRING and newState==HL_KEYWORD then
    return HL_REJECT
  end

  if hereDoc~=nil then
    return HL_STRING
  end

  --recognize hereDoc multine strings
  if oldState==HL_STANDARD and newState==HL_STRING and not string.find("\"'", token) then
    hereDoc = string.match(token, "<<<'?([%a_]+)" )
  end

  if oldState~=HL_STRING and newState==HL_ESC_SEQ then
    return oldState
  end

  return newState
end