diff --git a/autotests/folding/highlight.pony.fold b/autotests/folding/highlight.pony.fold index 12b0ccc..95eaf7e 100644 --- a/autotests/folding/highlight.pony.fold +++ b/autotests/folding/highlight.pony.fold @@ -1,201 +1,213 @@ // Test file for Pony syntax highlighting, released under MIT License primitive Red fun apply(): U32 => 0xFFFF0000 primitive Colours fun black(): U32 => 0xFF000000 fun red(): U32 => 0xFFFF0000 primitive Black primitive Blue type Colour is (Black | Blue ) primitive ColourList fun tag apply(): Array[Colour] => [Black; Blue] for colour in ColourList().values() do end type EGLEvent is (U8, F32, F32) (var code, var x, var y) = @getEvent[EGLEvent]() primitive _XDisplayHandle primitive _EGLDisplayHandle let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0)) if x_dpy.is_null() then env.out.print("XOpenDisplay failed") end let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy) if e_dpy.is_null() then env.out.print("eglGetDisplay failed") end primitive _EGLConfigHandle let a = Array[U16](8) a.push(0x3040) a.push(0b01011) let config = Pointer[_EGLConfigHandle] if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then env.out.print("eglChooseConfig failed") end actor Main new create(env: Env) => // The no of arguments env.out.print(env.args.size().string()) for value in env.args.values() do env.out.print(value) end // Access the arguments the first one will always be the the appication name try env.out.print(env.args(0)?) end actor Main new create(env: Env) => var options = Options(env) options .add("output", "o", StringArgument) env.out.print(options.has_argument()) for option in options do match option | ("output", var arg: String) => _outputFileName = arg.string() | let err: ParseError => err.report(env.out) env.out.print( """ pony-embed [OPTIONS] --output name string output filename. """ ) end end use "ponytest" actor Main is TestList new create(env: Env) => PonyTest(env, this) new make() => None fun tag tests(test: PonyTest) => test(_TestAddition) class iso _TestAddition is UnitTest """ Adding 2 numbers """ fun name(): String => "u32/add" fun apply(h: TestHelper): TestResult => h.expect_eq[U32](2 + 2, 4) fun tag log(msg: String, verbose: Bool = false) be fail() => be assert_failed(msg: String) => fun tag assert_true(actual: Bool, msg: String = "") ? fun tag expect_true(actual: Bool, msg: String = ""): Bool fun tag expect_eq[A: (Equatable[A] #read & Stringable)] (expect: A, actual: A, msg: String = ""): Bool fun add(other: A): A fun sub(other: A): A fun mul(other: A): A fun div(other: A): A fun mod(other: A): A fun eq(other: A): Bool fun ne(other: A): Bool fun lt(other: A): Bool fun le(other: A): Bool fun ge(other: A): Bool fun gt(other: A): Bool fun shl(other: A): A fun shr(other: A): A fun op_and(other:A): A fun op_or(other: A): A fun op_xor(othr: A): A class Test fun alpha() => """ """ let dice: Array[U32] = [1; 2; 3 4 5 6 ] actor Main fun foo(n:U32): {ref(U32): U32} => var s: Array[U32] = Array[U32].init(n, 1) {ref(i:U32)(s): U32 => try s(0) = s(0) + i s(0) elseelse 0 end } new create(env:Env) => var f = foo(5) env.out.print(f(10).string()) env.out.print(f(20).string()) /* nested /* commentary */ */ -// simgle comment +// single comment +class A +class _A +x' +x'' +x'.string() '\uaaaa' '\Ubbbbbb' '\xcc' "\uaaaaa" "\Ubbbbbbb" "\xccc" 34.4 34.4e43 43e4 0x3040 0xaF 0b01 3_43_4 0x0_4 fun create(): U32 => 0 fun iso create(): U32 => 0 fun \\ abc \\ iso create(): U32 => 0 class \\ packet, blah \\ iso Xyz if \\ likely \\ a then end a.endnormal +print();print() + /* syntactically false: */ +class _aA +class _a +class a 0b2332 0b 0x 0xgf 0f00 3. .3 3.e3 3_ 3__43_4 '' '\u' '\ua' '\uaaa' '\uaaaaa' '\uyyyy' "\u" "\ua" "\uaaa" "\uyyyy" +a'a class badType +print(); diff --git a/autotests/html/highlight.pony.html b/autotests/html/highlight.pony.html index ee470cf..2a0538a 100644 --- a/autotests/html/highlight.pony.html +++ b/autotests/html/highlight.pony.html @@ -1,208 +1,220 @@ highlight.pony
 // Test file for Pony syntax highlighting, released under MIT License
 
-primitive Red   fun apply(): U32 => 0xFFFF0000
+primitive Red   fun apply(): U32 => 0xFFFF0000
 
 primitive Colours
-  fun black(): U32 => 0xFF000000
-  fun red(): U32 => 0xFFFF0000
+  fun black(): U32 => 0xFF000000
+  fun red(): U32 => 0xFFFF0000
 
 primitive Black
 primitive Blue
 
 type Colour is (Black | Blue )
 
 primitive ColourList
   fun tag apply(): Array[Colour] =>
     [Black; Blue]
 
 for colour in ColourList().values() do
 end
 
-type EGLEvent is (U8, F32, F32)
+type EGLEvent is (U8, F32, F32)
 (var code, var x, var y) = @getEvent[EGLEvent]()
 
 primitive _XDisplayHandle
 primitive _EGLDisplayHandle
 
-let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
+let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
 if x_dpy.is_null() then
   env.out.print("XOpenDisplay failed")
 end
 
-let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
+let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
 if e_dpy.is_null() then
   env.out.print("eglGetDisplay failed")
 end
 
 primitive _EGLConfigHandle
-let a = Array[U16](8)
+let a = Array[U16](8)
 a.push(0x3040)
 a.push(0b01011)
-let config = Pointer[_EGLConfigHandle]
-if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
+let config = Pointer[_EGLConfigHandle]
+if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
     env.out.print("eglChooseConfig failed")
 end
 
 
 actor Main
   new create(env: Env) =>
     // The no of arguments
     env.out.print(env.args.size().string())
     for value in env.args.values() do
       env.out.print(value)
     end
     // Access the arguments the first one will always be the the appication name
     try env.out.print(env.args(0)?) end
 
 actor Main
   new create(env: Env) =>
     var options = Options(env)
 
     options
       .add("output", "o", StringArgument)
 
     env.out.print(options.has_argument())
 
     for option in options do
       match option
       | ("output", var arg: String) => _outputFileName = arg.string()
       | let err: ParseError =>
           err.report(env.out)
           env.out.print(
             """
             pony-embed [OPTIONS]
               --output     name   string output filename.
             """
           )
       end
     end
 
 use "ponytest"
 
 actor Main is TestList
-  new create(env: Env) => PonyTest(env, this)
+  new create(env: Env) => PonyTest(env, this)
   new make() => None
 
   fun tag tests(test: PonyTest) =>
-    test(_TestAddition)
+    test(_TestAddition)
 
 class iso _TestAddition is UnitTest
   """
   Adding 2 numbers
   """
   fun name(): String => "u32/add"
 
   fun apply(h: TestHelper): TestResult =>
-    h.expect_eq[U32](2 + 2, 4)
+    h.expect_eq[U32](2 + 2, 4)
 
-fun tag log(msg: String, verbose: Bool = false)
+fun tag log(msg: String, verbose: Bool = false)
 be fail() =>
 be assert_failed(msg: String) =>
 fun tag assert_true(actual: Bool, msg: String = "") ?
 fun tag expect_true(actual: Bool, msg: String = ""): Bool
 fun tag expect_eq[A: (Equatable[A] #read & Stringable)]
   (expect: A, actual: A, msg: String = ""): Bool
 
 fun add(other: A): A
 fun sub(other: A): A
 fun mul(other: A): A
 fun div(other: A): A
 fun mod(other: A): A
 fun eq(other: A): Bool
 fun ne(other: A): Bool
 fun lt(other: A): Bool
 fun le(other: A): Bool
 fun ge(other: A): Bool
 fun gt(other: A): Bool
 fun shl(other: A): A
 fun shr(other: A): A
 fun op_and(other:A): A
 fun op_or(other: A): A
 fun op_xor(othr: A): A
 
 class Test
   fun alpha() =>
     """
     """
 
-let dice: Array[U32] = [1; 2; 3
+let dice: Array[U32] = [1; 2; 3
   4
   5
   6
 ]
 
 actor Main
-  fun foo(n:U32): {ref(U32): U32} =>
-    var s: Array[U32] = Array[U32].init(n, 1)
-    {ref(i:U32)(s): U32 =>
+  fun foo(n:U32): {ref(U32): U32} =>
+    var s: Array[U32] = Array[U32].init(n, 1)
+    {ref(i:U32)(s): U32 =>
       try
         s(0) = s(0) + i
         s(0)
       else
         0
       end
     }
 
   new create(env:Env) =>
     var f = foo(5)
     env.out.print(f(10).string())
     env.out.print(f(20).string())
 
 /* nested /* commentary */ */
-// simgle comment
+// single comment
 
+class A
+class _A
+x'
+x''
+x'.string()
 '\uaaaa'
 '\Ubbbbbb'
 '\xcc'
 "\uaaaaa"
 "\Ubbbbbbb"
 "\xccc"
 34.4
 34.4e43
 43e4
 0x3040
 0xaF
 0b01
 3_43_4
 0x0_4
 
-fun create(): U32 => 0
-fun iso create(): U32 => 0
-fun \\ abc \\  iso create(): U32 => 0
+fun create(): U32 => 0
+fun iso create(): U32 => 0
+fun \\ abc \\  iso create(): U32 => 0
 class \\ packet, blah \\ iso Xyz
 if \\ likely \\ a then
 end
 
 a.endnormal
 
+print();print()
+
 /* syntactically false: */
 
+class _aA
+class _a
+class a
 0b2332
 0b
 0x
 0xgf
 0f00
-3.
+3.
 .3
-3.e3
+3.e3
 3_
 3__43_4
 ''
-'\u'
-'\ua'
-'\uaaa'
-'\uaaaaa'
-'\uyyyy'
+'\u'
+'\ua'
+'\uaaa'
+'\uaaaaa'
+'\uyyyy'
 "\u"
 "\ua"
 "\uaaa"
 "\uyyyy"
+a'a
 
 class badType
+print();
 
diff --git a/autotests/input/highlight.pony b/autotests/input/highlight.pony index 043b1e5..3583167 100644 --- a/autotests/input/highlight.pony +++ b/autotests/input/highlight.pony @@ -1,201 +1,213 @@ // Test file for Pony syntax highlighting, released under MIT License primitive Red fun apply(): U32 => 0xFFFF0000 primitive Colours fun black(): U32 => 0xFF000000 fun red(): U32 => 0xFFFF0000 primitive Black primitive Blue type Colour is (Black | Blue ) primitive ColourList fun tag apply(): Array[Colour] => [Black; Blue] for colour in ColourList().values() do end type EGLEvent is (U8, F32, F32) (var code, var x, var y) = @getEvent[EGLEvent]() primitive _XDisplayHandle primitive _EGLDisplayHandle let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0)) if x_dpy.is_null() then env.out.print("XOpenDisplay failed") end let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy) if e_dpy.is_null() then env.out.print("eglGetDisplay failed") end primitive _EGLConfigHandle let a = Array[U16](8) a.push(0x3040) a.push(0b01011) let config = Pointer[_EGLConfigHandle] if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then env.out.print("eglChooseConfig failed") end actor Main new create(env: Env) => // The no of arguments env.out.print(env.args.size().string()) for value in env.args.values() do env.out.print(value) end // Access the arguments the first one will always be the the appication name try env.out.print(env.args(0)?) end actor Main new create(env: Env) => var options = Options(env) options .add("output", "o", StringArgument) env.out.print(options.has_argument()) for option in options do match option | ("output", var arg: String) => _outputFileName = arg.string() | let err: ParseError => err.report(env.out) env.out.print( """ pony-embed [OPTIONS] --output name string output filename. """ ) end end use "ponytest" actor Main is TestList new create(env: Env) => PonyTest(env, this) new make() => None fun tag tests(test: PonyTest) => test(_TestAddition) class iso _TestAddition is UnitTest """ Adding 2 numbers """ fun name(): String => "u32/add" fun apply(h: TestHelper): TestResult => h.expect_eq[U32](2 + 2, 4) fun tag log(msg: String, verbose: Bool = false) be fail() => be assert_failed(msg: String) => fun tag assert_true(actual: Bool, msg: String = "") ? fun tag expect_true(actual: Bool, msg: String = ""): Bool fun tag expect_eq[A: (Equatable[A] #read & Stringable)] (expect: A, actual: A, msg: String = ""): Bool fun add(other: A): A fun sub(other: A): A fun mul(other: A): A fun div(other: A): A fun mod(other: A): A fun eq(other: A): Bool fun ne(other: A): Bool fun lt(other: A): Bool fun le(other: A): Bool fun ge(other: A): Bool fun gt(other: A): Bool fun shl(other: A): A fun shr(other: A): A fun op_and(other:A): A fun op_or(other: A): A fun op_xor(othr: A): A class Test fun alpha() => """ """ let dice: Array[U32] = [1; 2; 3 4 5 6 ] actor Main fun foo(n:U32): {ref(U32): U32} => var s: Array[U32] = Array[U32].init(n, 1) {ref(i:U32)(s): U32 => try s(0) = s(0) + i s(0) else 0 end } new create(env:Env) => var f = foo(5) env.out.print(f(10).string()) env.out.print(f(20).string()) /* nested /* commentary */ */ -// simgle comment +// single comment +class A +class _A +x' +x'' +x'.string() '\uaaaa' '\Ubbbbbb' '\xcc' "\uaaaaa" "\Ubbbbbbb" "\xccc" 34.4 34.4e43 43e4 0x3040 0xaF 0b01 3_43_4 0x0_4 fun create(): U32 => 0 fun iso create(): U32 => 0 fun \\ abc \\ iso create(): U32 => 0 class \\ packet, blah \\ iso Xyz if \\ likely \\ a then end a.endnormal +print();print() + /* syntactically false: */ +class _aA +class _a +class a 0b2332 0b 0x 0xgf 0f00 3. .3 3.e3 3_ 3__43_4 '' '\u' '\ua' '\uaaa' '\uaaaaa' '\uyyyy' "\u" "\ua" "\uaaa" "\uyyyy" +a'a class badType +print(); diff --git a/autotests/reference/highlight.pony.ref b/autotests/reference/highlight.pony.ref index 4512c45..c14323d 100644 --- a/autotests/reference/highlight.pony.ref +++ b/autotests/reference/highlight.pony.ref @@ -1,201 +1,213 @@ // Test file for Pony syntax highlighting, released under MIT License

-primitive Red fun apply(): U32 => 0xFFFF0000
+primitive Red fun apply(): U32 => 0xFFFF0000

primitive Colours
- fun black(): U32 => 0xFF000000
- fun red(): U32 => 0xFFFF0000
+ fun black(): U32 => 0xFF000000
+ fun red(): U32 => 0xFFFF0000

primitive Black
primitive Blue

type Colour is (Black | Blue )

primitive ColourList
fun tag apply(): Array[Colour] =>
[Black; Blue]

for colour in ColourList().values() do
end

-type EGLEvent is (U8, F32, F32)
+type EGLEvent is (U8, F32, F32)
(var code, var x, var y) = @getEvent[EGLEvent]()

primitive _XDisplayHandle
primitive _EGLDisplayHandle

-let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
+let x_dpy = @XOpenDisplay[Pointer[_XDisplayHandle]](U32(0))
if x_dpy.is_null() then
env.out.print("XOpenDisplay failed")
end

-let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
+let e_dpy = @eglGetDisplay[Pointer[_EGLDisplayHandle]](x_dpy)
if e_dpy.is_null() then
env.out.print("eglGetDisplay failed")
end

primitive _EGLConfigHandle
-let a = Array[U16](8)
+let a = Array[U16](8)
a.push(0x3040)
a.push(0b01011)
-let config = Pointer[_EGLConfigHandle]
-if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
+let config = Pointer[_EGLConfigHandle]
+if @eglChooseConfig[U32](e_dpy, a, config, U32(1), Pointer[U32]) == 0 then
env.out.print("eglChooseConfig failed")
end


actor Main
new create(env: Env) =>
// The no of arguments
env.out.print(env.args.size().string())
for value in env.args.values() do
env.out.print(value)
end
// Access the arguments the first one will always be the the appication name
try env.out.print(env.args(0)?) end

actor Main
new create(env: Env) =>
var options = Options(env)

options
.add("output", "o", StringArgument)

env.out.print(options.has_argument())

for option in options do
match option
| ("output", var arg: String) => _outputFileName = arg.string()
| let err: ParseError =>
err.report(env.out)
env.out.print(
"""
pony-embed [OPTIONS]
--output name string output filename.
"""
)
end
end

use "ponytest"

actor Main is TestList
- new create(env: Env) => PonyTest(env, this)
+ new create(env: Env) => PonyTest(env, this)
new make() => None

fun tag tests(test: PonyTest) =>
- test(_TestAddition)
+ test(_TestAddition)

class iso _TestAddition is UnitTest
"""
Adding 2 numbers
"""
fun name(): String => "u32/add"

fun apply(h: TestHelper): TestResult =>
- h.expect_eq[U32](2 + 2, 4)
+ h.expect_eq[U32](2 + 2, 4)

-fun tag log(msg: String, verbose: Bool = false)
+fun tag log(msg: String, verbose: Bool = false)
be fail() =>
be assert_failed(msg: String) =>
fun tag assert_true(actual: Bool, msg: String = "") ?
fun tag expect_true(actual: Bool, msg: String = ""): Bool
fun tag expect_eq[A: (Equatable[A] #read & Stringable)]
(expect: A, actual: A, msg: String = ""): Bool

fun add(other: A): A
fun sub(other: A): A
fun mul(other: A): A
fun div(other: A): A
fun mod(other: A): A
fun eq(other: A): Bool
fun ne(other: A): Bool
fun lt(other: A): Bool
fun le(other: A): Bool
fun ge(other: A): Bool
fun gt(other: A): Bool
fun shl(other: A): A
fun shr(other: A): A
fun op_and(other:A): A
fun op_or(other: A): A
fun op_xor(othr: A): A

class Test
fun alpha() =>
"""
"""

-let dice: Array[U32] = [1; 2; 3
+let dice: Array[U32] = [1; 2; 3
4
5
6
]

actor Main
- fun foo(n:U32): {ref(U32): U32} =>
- var s: Array[U32] = Array[U32].init(n, 1)
- {ref(i:U32)(s): U32 =>
+ fun foo(n:U32): {ref(U32): U32} =>
+ var s: Array[U32] = Array[U32].init(n, 1)
+ {ref(i:U32)(s): U32 =>
try
s(0) = s(0) + i
s(0)
else
0
end
}

new create(env:Env) =>
var f = foo(5)
env.out.print(f(10).string())
env.out.print(f(20).string())

/* nested /* commentary */ */
-// simgle comment
+// single comment

+class A
+class _A
+x'
+x''
+x'.string()
'\uaaaa'
'\Ubbbbbb'
'\xcc'
"\uaaaaa"
"\Ubbbbbbb"
"\xccc"
34.4
34.4e43
43e4
0x3040
0xaF
0b01
3_43_4
0x0_4

-fun create(): U32 => 0
-fun iso create(): U32 => 0
-fun \\ abc \\ iso create(): U32 => 0
+fun create(): U32 => 0
+fun iso create(): U32 => 0
+fun \\ abc \\ iso create(): U32 => 0
class \\ packet, blah \\ iso Xyz
if \\ likely \\ a then
end

a.endnormal

+print();print()
+
/* syntactically false: */

+class _aA
+class _a
+class a
0b2332
0b
0x
0xgf
0f00
-3.
+3.
.3
-3.e3
+3.e3
3_
3__43_4
''
-'\u'
-'\ua'
-'\uaaa'
-'\uaaaaa'
-'\uyyyy'
+'\u'
+'\ua'
+'\uaaa'
+'\uaaaaa'
+'\uyyyy'
"\u"
"\ua"
"\uaaa"
"\uyyyy"
+a'a

class badType
+print();
diff --git a/data/syntax/pony.xml b/data/syntax/pony.xml index 550511a..94101ea 100644 --- a/data/syntax/pony.xml +++ b/data/syntax/pony.xml @@ -1,318 +1,324 @@ - - - + + - + + + ]> type interface trait primitive struct class actor var let embed fun be new do then return break continue error compile_intrinsic compile_error recover until if ifdef iftype match while repeat for with try else elseif + elseiftype end and or xor create update apply add sub mul div mod eq ne lt le ge gt shl shr op_and op_or op_xor not iso trn ref val box tag #read #send #share #alias #any - + this use object as is isnt in where is consume addressof digestof + + true + false - + - - - - - + + + + + + + - - + - + + + - + - + - - + +