(* ocaml test file -- a big stew of Objective Caml syntax to use to
test Kate's syntax highlighting. This will not run! :-) *)
(* First a little piece of real OCaml that should look right: *)
#load "basic";;
(* Return a default value for a BASIC variable given its identifer. *)
let default_value (ident : string) : basic_value =
assert (String.length ident > 0);
match ident.[String.length ident - 1] with
| '$' -> Str ""
| '%' -> Int 0
| '!' -> Flt 0.0
| _ -> Flt 0.0
;;
(* Directives: *)
#load "pa_o";;
#load "pa_o";;
object # meth ;; (* not a directive - a method call *)
object
# meth ;; (* not a directive - a method call *)
(* OCaml keywords: *)
and as assert asr (* etc. there so many... *)
(* Additional OCaml Revised Syntax keywords: *)
(* These are in a seperate category so they can be coloured to look
like identifiers when ordinary OCaml syntax is being used: *)
declare where value
(* There's no way to reliably highlight all OCaml type expressions,
(they can be very complex) so just the built-in type names are highlighted.*)
exn lazy_t format unit int float char string ref array bool list option
type poly = [ `A | `BX ]
let _unused = "still an identifier"
let integers : int list = [
123456789; (* decimal *)
-0xabcedf0123456789; (* hexadecimal *)
0xABCDEF0123456789; (* hexadecimal *)
-0o1234567; (* octal *)
0b01001010101010; (* binary *)
-0Xabcedf0123456789; (* hexadecimal *)
0XABCDEF0123456789; (* hexadecimal *)
-0O1234567; (* octal *)
0B01001010101010; (* binary *)
-123_456_789; (* Underscores are allowed in numeric constants. *)
0x123n;456L;0o77l;0b11l (* int32,int64 and nativeint constants *)
0x_abce_df01_2345_6789;
-0o12_34_567;
0b_0100_1010_1010_1101;
];;
let floats : float list = [
12345.6789;
-1.23456789e4; (* All variations of the exponent form *)
1.23456789e+4;
-1.23456789e-4;
1.23456789E-4;
-1.23456789E+4;
12_345.6789; (* Underscores are allowed in numeric constants. *)
-1.23_456_789e+4;
12_345.6789;
0x1p-52 (* hexadecimal floating-point literals *)
];;
let characters : char list = [
'a';
' ';
'ä';
'\n'; '\r'; '\t'; '\b'; (* Control characters. Only these four: not the full C-language range. *)
'\000'; '\128'; (* Decimal character codes. These are always 3 digits. *)
'\x02'; '\xff'; '\xFF'; (* Hexadecimal character codes. These are always 3 digits. *)
'\\'; '\''; '\"'; '"' (* Quote character escapes. *)
;'\ '; '\o377'
];;
(* Quotes used to mark constants in parsers should
not be confused with character constant quotes.
"Ticks" at the end of identifiers should
not be confused with character constant quotes. *)
let basic_identifier =
parser
[< ''F'; ''N'; name = s >] -> ID (s, 'f')
| [< name = s' >] -> ID (s','i')
;;
let strings : string list = [
""; (* Empty string *)
"a"; " "; "ä"; "ab";
"A\nB"; "A\rB"; "A\tB"; "A\bB"; (* Control characters. Only these four: not the full C-language range. *)
"A\000B"; "A\128B"; (* Decimal character codes. These are always 3 digits. *)
"A\x02B"; "A\xffB"; "A\xFFB"; (* Hexadecimal character codes. These are always 3 digits. *)
"A\\B"; "A\'B"; "A'B"; "A\"B"; (* Quote character escapes. *)
"A multiline\
string";
"\u{207A}"; (* Unicode escapes *)
{|Simple quoted string, we can have " and ' inside, and even {|};
{another|quoted string|another};
{foo|More complicated quoted string where we can have {| inside|foo}
];
let camlp4_quotations = [
<> ;
<:QUOTE> ;
<:QUÖTÈ> ;
<< A quote with an escape: \>> (end-quote symbol) >> ;
<< A quote with an escape: \<< (plain start quote-symbol) >> ;
<< A quote with an escape: \<:Trouvé< (labelled start-quote symbol) >> ;
];;
(* end *)