Function list for Monkey language.

Syntax highlighting, code folding, brace matching, code indenting, and function list

Function list for Monkey language.

Postby AndyGFX » Wed Sep 21, 2011 12:30 pm

Hellou,

i have created syntax highlighting for Monkey language, and now i want make function list view with structure:
Import
Globals
Classes
- Fields
- Methods
Functions
.

I have define this here:
Code: Select all
/TGBegin "Classes"
   
   /TGFindStr = "%Class^([ ^t]+[a-z_0-9.*]+^)"               
   /TGFindBStart = "Class"
   /TGFindBEnd = "End Class"   
   
   /TGBegin "Fields"
      /TGFindStr = "[ ^t]Field[ ^t]"   
   /TGEnd      
   
   /TGBegin "Methods"
      /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
      /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
      /TGFindStr = "[ ^t]++Method[ ^t]++New++"
      /TGBegin "Argument"
         /TGFindStr = "[ ^t^p]++^([~,]+^)"
         /TGFindBStart = "("
         /TGFindBEnd = ")"      
      /TGEnd
      /TGBegin "Return"
            /TGFindStr = "^([a-z]+^)"
            /TGFindBStart = "Return"
            /TGFindBEnd = "End"
         /TGEnd
   /TGEnd
/TGEnd


/TGBegin "Function"
   /TGFindStr = "[ ^t]++Function[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
   /TGFindStr = "[ ^t]++Function[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
   /TGBegin "Argument"
      /TGFindStr = "[ ^t^p]++^([~,]+^)"
      /TGFindBStart = "("
      /TGFindBEnd = ")"      
   /TGEnd
   /TGBegin "Return"
         /TGFindStr = "^([a-z]+^)"
         /TGFindBStart = "Return"
         /TGFindBEnd = "End"
      /TGEnd
/TGEnd


Maybe is something is wrong because, group Fields and Methods doesn't work and are not included under Group "classes", when i use:

Code: Select all

/TGBegin "Fields"
   /TGFindStr = "[ ^t]Field[ ^t]"   
/TGEnd   

/TGBegin "Methods"
   /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
   /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
   /TGFindStr = "[ ^t]++Method[ ^t]++New++"
   /TGBegin "Argument"
      /TGFindStr = "[ ^t^p]++^([~,]+^)"
      /TGFindBStart = "("
      /TGFindBEnd = ")"      
   /TGEnd
   /TGBegin "Return"
         /TGFindStr = "^([a-z]+^)"
         /TGFindBStart = "Return"
         /TGFindBEnd = "End"
      /TGEnd
/TGEnd


out of group class, then all fields and methods are correctly readed.

Wordfile:
Code: Select all
/L15"MONKEY" MONKEY_LANG Line Comment = ' Block Comment On = #Rem Block Comment Off = #End Escape Char = \ File Extensions = MONKEY
/TGBegin "Global"
/TGFindStr = "%Global[ ^t]"
/TGEnd
/TGBegin "Local"
/TGFindStr = "%Local[ ^t]"
/TGEnd
/TGBegin "Import"
/TGFindStr = "%Import^([ ^t]+[a-z0-9.*]+^)"
/TGEnd

/TGBegin "Classes"
   
   /TGFindStr = "%Class^([ ^t]+[a-z_0-9.*]+^)"               
   /TGFindBStart = "Class"
   /TGFindBEnd = "End Class"   
   
   /TGBegin "Fields"
      /TGFindStr = "[ ^t]Field[ ^t]"   
   /TGEnd      
   
   /TGBegin "Methods"
      /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
      /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
      /TGFindStr = "[ ^t]++Method[ ^t]++New++"
      /TGBegin "Argument"
         /TGFindStr = "[ ^t^p]++^([~,]+^)"
         /TGFindBStart = "("
         /TGFindBEnd = ")"      
      /TGEnd
      /TGBegin "Return"
            /TGFindStr = "^([a-z]+^)"
            /TGFindBStart = "Return"
            /TGFindBEnd = "End"
         /TGEnd
   /TGEnd
/TGEnd

/TGBegin "Fields"
   /TGFindStr = "[ ^t]Field[ ^t]"   
/TGEnd   

/TGBegin "Methods"
   /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
   /TGFindStr = "[ ^t]++Method[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
   /TGFindStr = "[ ^t]++Method[ ^t]++New++"
   /TGBegin "Argument"
      /TGFindStr = "[ ^t^p]++^([~,]+^)"
      /TGFindBStart = "("
      /TGFindBEnd = ")"      
   /TGEnd
   /TGBegin "Return"
         /TGFindStr = "^([a-z]+^)"
         /TGFindBStart = "Return"
         /TGFindBEnd = "End"
      /TGEnd
/TGEnd

/TGBegin "Function"
   /TGFindStr = "[ ^t]++Function[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)[ ^t^p]++([^p*&:, ^t^[^]/*^-'=:&a-z_0-9./(!]++)"
   /TGFindStr = "[ ^t]++Function[ ^t]++^([a-z_][a-z_0-9]++:[a-z_^~][a-z_0-9]++^)"
   /TGBegin "Argument"
      /TGFindStr = "[ ^t^p]++^([~,]+^)"
      /TGFindBStart = "("
      /TGFindBEnd = ")"      
   /TGEnd
   /TGBegin "Return"
         /TGFindStr = "^([a-z]+^)"
         /TGFindBStart = "Return"
         /TGFindBEnd = "End"
      /TGEnd
/TGEnd

/Colors = 12632256,4259584,16711680,16744448,16711935,
/Colors Back = 16777215,16777215,16777215,16777215,16777215,
/Colors Auto Back = 1,1,1,1,1,
/Font Style = 0,1,1,0,0,
/Delimiters = ~!@%^&*()-+=|\/{}[]:;"'<> ,   .?
/Member String = "^([A-Za-z0-9_:.]+^)[ ^t*&]+$S[ ^t]++[(=);,]"
/Variable String = "^([A-Za-z0-9_:.]+^)[ ^t*&]+$S[ ^t]++[(=);,]"
/Indent Strings = "{"
/Unindent Strings = "}"
/Open Brace Strings =  "("
/Close Brace Strings = ")"
/Open Fold Strings = "Function" "Method" "Class"
/Close Fold Strings = "End Function" "End Method" "End Class"
/C1"Keywords" STYLE_KEYWORD Colors = 33023 Colors Back = 16777215 Colors Auto Back = 1 Font Style = 1
#End
#Else
#If
#Rem
Abstract
Bool
Case
Class
Else
ElseIf
End
Endif
Extends
Extern
False
Field
Float
For
Function
Global
If
Import
Int
Local
Method
Next
New
Private
Public
Repeat
Return
Select
Self
Step
Strict
String
Then
To
True
Void
WEnd
/C2"Classes" STYLE_FUNCTION Colors = 8421440 Colors Back = 16777215 Colors Auto Back = 1 Font Style = 1
Abs
AccelX
AccelY
AccelZ
ACos
AddFirst
AddLast
ASin
ATan
ATan2
Ceil
Clamp
Class
Cls
Const
Contains
Cos
DeviceHeight
DeviceWidth
DrawCircle
DrawEllipse
DrawImage
DrawImageRect
DrawLine
DrawOval
DrawRect
DrawText
Eachin
EndsWith
Error
Find
FindLast
Floor
FromChar
Function
Get
GetAlpha
GetBlend
GetColor
GetFont
GetChar
GetMatrix
GetScissor
GrabImage
ChannelState
Join
JoyDown
JoyHit
KeyDown
KeyHit
Length
LoadImage
LoadSound
LoadState
LoadString
Log
Max
Method
Millisecs
Min
MouseDown
MouseHit
MouseX
MouseY
PlaySound
PopMatrix
Pow
PushMatrix
Remove
RemoveEach
Replace
Rnd
Rotate
SaveState
Scale
Select
SetAlpha
SetBlend
SetColor
SetFont
SetHandle
SetChannelPan
SetChannelRate
SetChannelVolume
SetMatrix
SetScissor
SetUpdateRate
Sgn
Shl
Shr
Sin
Split
Sqrt
StartsWith
StopChannel
Tan
TouchDown
TouchHit
TouchX
TouchY
Transform
Translate
Until
ValueForKey
Wend
While
/C3"Operators" STYLE_OPERATOR Colors = 33023 Colors Back = 16777215 Colors Auto Back = 1 Font Style = 0
!
%
&
*
+
-
// /
<
=
>
^
|
~
/C4"Braces, comma, semicolon" Colors = 16777215 Colors Back = 16777215 Colors Auto Back = 1 Font Style = 1
(
)
,
;
[
]
{
}


Test file:
Code: Select all
Strict
Import mojo
Import agfx

Function CreateFlashArrayFromFile:FlashArray<b2Vec2>(filename:String)
   Local res:FlashArray<b2Vec2>= New FlashArray<b2Vec2>()
   Local file:String = LoadString("shapes/"+filename)
   
   If file.Length()=0 Then Error("Shape file: .data/shapes/"+filename+" doesn't exist!")
   Local verts:String[] = file.Split("|")
   For Local i:Int=0 to verts.Length()-1
      Local coord:String[]=verts[i].Split(",")
      Local x:Float = Float(coord[0])
      Local y:Float = Float(coord[1])
      res.Push(New b2Vec2(x,y))
   Next
   Return res
End Function

Class TPivot Extends TEntity
   
   
   Field offset:TVector2
   
   '|--------------------------------------------------------------------------------
   '| Constructor
   '|--------------------------------------------------------------------------------
   Method New(n:String,x:Float=0, y:Float=0,w:Int=32,h:Int=32)
   
      Self.name = n
      Self.speed = 1.0
      Self.position.Set(x,y)   
      Self.size.Set(w,h)
      Self.visible = True
      Self.rotation = 0
      Self.radius = w/2
      Self.offset = New TVector2(0,0)
      Self.velocity = New TVector2(0,0)
      Self.collision.Set(Self.position,Self.size,Self.radius)
   End Method
   
   '|--------------------------------------------------------------------------------
   '| UPDATE
   '|--------------------------------------------------------------------------------
   Method Update:Void()   
      Self.collision.UpdateByCenter(Self.position)
   End Method
   
   '|--------------------------------------------------------------------------------
   '| DRAW (add inside OnRender)
   '|--------------------------------------------------------------------------------
   Method Draw:Void()
      If DEBUG
               SetColor 255, 255, 0
               
               ' collision shape
               SetAlpha 0.15
               SetColor 255,255,255
               Self.collision.DebugDraw_Corners()
               
                  
               SetAlpha 1
               ' direction
               SetColor(0,255,0)
               DrawLine(   Self.position.x+Self.offset.x,
                        Self.position.y+Self.offset.y,
                        Self.position.x+Self.offset.x+Self.direction.x*32,
                        Self.position.y+Self.offset.y+Self.direction.y*32)
               
               ' center
               
               DrawCircle(   Self.position.x + Self.offset.x ,
                        Self.position.y + Self.offset.y ,2)
               
               ' inner circle
               SetAlpha 0.5
               SetColor(255,255,0)
               DrawCircle(   Self.position.x + Self.offset.x , Self.position.y + Self.offset.y ,Self.radius)
               SetColor(255,255,255)
               SetAlpha 1
               
               ' collision radius
               SetColor(255,0,0)
               SetAlpha 0.5
               DrawCircle(   Self.position.x + Self.offset.x , Self.position.y + Self.offset.y ,Self.collision.radius)
               SetColor(255,255,255)
               SetAlpha 1
               
               ' collision square
               
               
               Self.collision.DebugDraw_Corners()
               'SetAlpha 0.5
               'SetColor(255,0,0)
               'DrawRectOutline(Self.collision.A.x + Self.offset.x , Self.collision.A.y + Self.offset.y ,Self.collision.size.x,Self.collision.size.y)
               SetColor(255,255,255)
               SetAlpha 1
               
               'CONSOLE.fnt._DrawText("POS  :" + Self.position.ToString(),Self.position.x-Self.size.x/2,Self.position.y+Self.size.y)
               'CONSOLE.fnt._DrawText("DIR  :" + Self.direction.ToString(),Self.position.x-Self.size.x/2,Self.position.y+Self.size.y+10)
               'CONSOLE.fnt._DrawText("ANG  :" + FormatNumber(Self.rotation),Self.position.x-Self.size.x/2,Self.position.y+Self.size.y+20)
               'CONSOLE.fnt._DrawText("[" + Self.name+"]",Self.position.x-Self.size.x/2,Self.position.y+Self.size.y+30)
            EndIf
   End Method
   
End Class



Please help. :)
AndyGFX.
AndyGFX
Newbie
 
Posts: 2
Joined: Wed Sep 21, 2011 11:51 am

Re: Function list for Monkey language.

Postby Mofi » Thu Sep 22, 2011 1:40 am

I hope the attached wordfile with your color settings is better. I removed 4 duplicate words, corrected "Endif" to "EndIf", added definitions for string highlighting and of course modified the function strings. Please note that you can right click on the function list view and left click on Configuration to open the dialog for editing function strings in the wordfile used to highlight the current file. For a grouped function list definition using the configuration dialog is at least at the beginning better than editing the strings directly in the wordfile.

As you can see on the screenshot I made there are 2 arguments wrong for method New. I changed the color to red of these 2 arguments. The reason is a bug in UltraEdit. It looks like UltraEdit is searching for arguments in string

w(n:String,x:Float=0, y:Float=0,w:Int=32,h:Int=

instead of

n:String,x:Float=0, y:Float=0,w:Int=32,h:Int=32

I had reported this character index problem already once a few weeks ago as I searched for a function string set for another language. But it looks like I'm the only user who reported that subgroup string searches is not working correct because of searching in wrongly extracted string which gives the bug a low priority on fixing it. So please report this issue by email to IDM. Pack your wordfile (without any color settings), the example file and the screenshot I made into a ZIP archive attached to the email and write what I have written here. I don't know why the same issue does not occur also on (filename:String) of the function.
Attachments
FunctionList.png
Function list displayed with the modified wordfile for the example file.
FunctionList.png (2.41 KiB) Viewed 1215 times
Monkey.zip
Updated wordfile for Monkey with color settings of Andy
(1.49 KiB) Downloaded 170 times
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4049
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna

Re: Function list for Monkey language.

Postby AndyGFX » Thu Sep 22, 2011 2:50 am

Wow. Thanks a lot.

One more question: I tried this wordfile under Mac version (trial), and Function list doesn't work. Do i have to, rewrite him, to linux regular expressions?

Andy.
AndyGFX
Newbie
 
Posts: 2
Joined: Wed Sep 21, 2011 11:51 am

Re: Function list for Monkey language.

Postby Mofi » Thu Sep 22, 2011 9:05 am

I don't know if UEM supports grouped function lists at all. I'm not using UEM. Does the standard wordfile c_cplusplus.uew of UEM contain also the function string definitions for grouped functions? If this is not the case, UEM probably does not yet support grouped function strings.

Update: I have just read in the UE for Mac Beta forum that next version of UEM has the enhancement of support for hierarchical function list.
User avatar
Mofi
Grand Master
Grand Master
 
Posts: 4049
Joined: Thu Jul 29, 2004 11:00 pm
Location: Vienna


Return to Syntax Highlighting