1<?
2/* This is a pseudo PHP file to test Kate's PHP syntax highlighting. */
3# TODO: this is incomplete, add more syntax examples!
4# this is also a comment.
5// Even this is a comment
6/** \brief doxygen comment
7*/ /*normal comment*/
8// comment ?> normal text <?php
9function test($varname) {
10	return "bla";	# this is also a comment
11}
12?>
13
14<?php echo("hello test"); ?>
15
16<html>
17	<? print "<title>test</title>"; ?>
18
19	<!-- CSS -->
20	<style>
21		.inputText {
22			width: <?php echo $width; ?>px;
23			text-indent: 10px;
24		}
25	</style>
26
27	<!-- JavaScript -->
28	<script>
29		var some_js_var = <?php echo $somevar; ?> ;
30		<?php echo 'alert("Hello there.");'; ?>
31	</script>
32	<!-- JavaScript React -->
33	<script type="text/babel">
34		<Hello> <?php echo("Hello, hello!"); ?> </Hello> <?php /* aaa */ ?> <div></div>
35		function a(i) {
36			<?php echo "var j = 1;"; ?>
37			return <p>{ i + j }</p>;
38		}
39	</script>
40	<!-- TypeScript -->
41	<script type="text/typescript">
42		<?php $timestamp = time(); ?>
43		class DateTime {
44			info: string;
45			constructor() { this.info = <?php echo(date("F d, Y h:i:s", $timestamp)); ?>; }
46			get() { return this.info; }
47		}
48	</script>
49	<!-- MustacheJS -->
50	<script type="x-tmpl-mustache">
51		{{! <?php print "comment"; ?> }}
52		{{#movie}}
53			<div>
54				<h1>{{title}}</h1>
55				<img src="{{poster}}" alt="{{title}}"/>
56				<?php echo $movierating; ?> - {{ratings.critics_rating}}
57			</div>
58		{{/movie}}
59	</script>
60
61</html>
62
63<?php
64$var = <<<DOOH
65This is the $string inside the variable (which seems to be rendered as a string)
66It works well, I think.
67DOOH
68
69# bug 382527
70throw new ParserException("Test {$this->some_var[$index]}\nin {$this->file} is missing.\nThis is bad.");
71
72$arr = array();
73foreach($arr as $i => $v):
74	echo($i);
75endforeach
76
77echo " $var {$var} ${var} ";
78echo " $var[1] {$var[1]} ${var[1]} ";
79echo " $var[-1] {$var[-1]} ${var[-1]} ";
80echo " $var[i] {$var[i]} ${var[i]} ";
81echo " $var[-i] {$var[-i]} ${var[-i]} ";
82echo " $var[$i] {$var[$i]} ${var[$i]} ";
83echo " $var[-$i] {$var[-$i]} ${var[-$i]} ";
84echo " $var[$$i] {$var[$$i]} ${var[$$i]} ";
85echo " $var[$x->i] {$var[$x->i]} ${var[$x->i]} ";
86echo " $var[$x->$i] {$var[$x->$i]} ${var[$x->$i]} ";
87echo " $$var {$$var} $${var} ";
88echo " $$var[1] {$$var[1]} $${var[1]} ";
89echo " $$var[$i] {$$var[$i]} $${var[$i]} ";
90echo " $var[$i] {$var[$i]} ${var[$i]} ";
91echo " $var[1+1] {$var[1+1]} ${var[1+1]} ";
92echo " $var->mem {$var->mem} ${var->mem} ";
93echo " $var->3 {$var->3} ${var->3} ";
94echo " $var-> {$var->} ${var->} ";
95echo " $var->$mem {$var->$mem} ${var->$mem} ";
96echo " ${$x->{'mem'}} ";
97echo "\n \t \\ \xff \x";
98
99echo <<<HTML
100<p>bla $var \$var bla\'</p>
101HTML;
102echo <<<"HTML"
103<p>bla $var \$var bla\'</p>
104HTML;
105echo <<<'HTML'
106<p>bla $var \$var bla\'</p>
107HTML;
108echo <<<DOC
109<p>bla $var \$var bla\'</p>
110 DOC
111 DOC;
112DOC;blah
113DOC;
114
115echo 123456 1_2_34_5 1__2 1_;
116echo 0x12345af 0x1_2_3_45_a_f 0x1__2 0x_1 0x1_ 0x1g 0xg;
117echo 0b1011 0b1_01_1 0b1__0 0b_1 0b1_ 0b12 0b2;
118echo 01234 01_23_4 0_1 0__1 01_ 018 08;
119echo 0o1234 0O1_23_4 0o1_1_ 0o1__1 0o_1;
120echo 123. .45 123.45 1_23.4_5e1_2;
121echo 123.e1 .45e1 123.45e1;
122echo 123.e+1 .45e+1 123.45e+1;
123echo 123.e++1 ._45e+1 123._45e+1; // bad float
124
125echo 123...45;
126echo add(...[1, 2])."\n";
127
128function gen_three_nulls() {
129    foreach (range(1, 3) as $i) {
130        yield;
131    }
132}
133
134function &gen_reference() {
135    $value = 3;
136
137    while ($value > 0) {
138        yield $value;
139    }
140}
141
142function gen() {
143    yield 0; // key 0
144    yield from inner(); // keys 0-2
145    yield 4; // key 1
146}
147
148switch (1) {
149    case 1: echo 'plop';
150    case 1; echo 'plop';
151    default: echo 'plop';
152    default : echo 'plop';
153}
154
155class User
156{
157    public int $id;
158    public ?string $name;
159
160    public function __construct(int $id, ?string $name)  : void
161    {
162        $this->id = $id;
163        $this->name = $name;
164    }
165}
166
167class MyClass {
168    const CONST_VALUE = 'A constant value';
169}
170
171class OtherClass extends MyClass
172{
173    public static $my_static = 'static var';
174
175    public static function doubleColon() {
176        echo parent::CONST_VALUE . "\n";
177        echo self::$my_static . "\n";
178    }
179}
180
181$classname = 'MyClass';
182echo $classname::CONST_VALUE;
183
184echo MyClass::CONST_VALUE;
185
186$classname = 'OtherClass';
187$classname::doubleColon();
188
189OtherClass::doubleColon();
190new $classname::class;
191
192$user = new User(1234, null);
193
194$y = 1;
195$fn1 = fn($x) => $x + $y;
196$fn2 = function ($x) use ($y) {
197    return $x + $y;
198};
199
200$a = [1,2,3,'x'=>4];
201$b = array(1,2,3,'x'=>4);
202
203namespace A\B\C;
204class Exception extends \Exception {}
205
206$b = new \Exception('hi');
207$x = new A\B\Foo('hi');
208$n = \strlen($str) - 1;
209
210$r = $x <=> $y and $z;
211
212#[ExampleAttribute('Hello world', 42)]
213class Foo {}
214function foo(#[TestAttr] $bar){
215}
216
217enum Suit {
218    case Clubs;
219    case Diamonds;
220}
221?>
222
223<?php if (n): ?>
224<p>bla ba</p>
225<?php endif ?>
226