XUICEXojoFormatter
Inherits XUICEAbstractFormatter
Implements XUICEFormatter
Description
A formatter for the Xojo language. In addition to tokenising the language components you'd expect (keywords,
operators, etc) it also tokenises the components of Color
literals (like the Xojo IDE) and escaped double
quotes within strings.
Properties
Name | Type | Read-Only |
---|---|---|
BlockBoundaries() | XUICELineToken |
|
Keywords | Dictionary |
✔ |
MatchedLeftParentheses() | XUICELineToken |
|
MatchedParentheses | Dictionary |
|
Parentheses() | XUICELineToken |
Methods
Name | Parameters | Returns |
---|---|---|
AddComment | Boolean |
|
AddIdentifierOrKeywordToken | ||
AddMatchingParentheses | lparen As XUICELineToken , rparen As XUICELineToken |
|
AddNumberToken | ||
AddPragmaToken | ||
AddStringToken | ||
AllowsLeadingWhitespace | Boolean |
|
CanCloseBlock | blockStart As XojoKeywords , blockEnd As XojoKeywords |
Boolean |
ClosestCodeLineAbove | lines() As XUICELine , lineNumber As Integer |
XUICELine |
FirstNonCommentToken | line As XUICELine |
XUICELineToken |
IndentLines | lines() As XUICELine |
|
IsCommentLine | line As XUICELine |
Boolean |
IsCommentToken | token As XUICELineToken |
Boolean |
IsSingleLineIfStatement | line As XUICELine |
Boolean |
LastNonCommentToken | line As XUICELine |
XUICELineToken |
Name | String |
|
NearestDelimitersForCaretPos | caretPos As Integer |
XUICEDelimiter |
NextToken | ||
Parse | lines() As XUICELine |
|
ProcessParentheses | ||
SkipWhitespace | ||
SupportsDelimiterHighlighting | Boolean |
|
SupportsUnmatchedBlockHighlighting | Boolean |
|
TokenIsComment | token As XUICELineToken |
Boolean |
Tokenise | lines() As XUICELine , firstVisibleLineNumber As Integer , lastVisibleLineNumber As Integer |
|
TokeniseAll | lines() As XUICELine |
|
TokenTypes | String() |
|
TryAddBinaryLiteral | Boolean |
|
TryAddColorLiteral | Boolean |
|
TryAddHexLiteral | Boolean |
|
TryAddOctalLiteral | Boolean |
|
TryAddUnicodeLiteral | Boolean |
Constants
Name | Type |
---|---|
TOKEN_ALPHA_COMPONENT | String |
TOKEN_BLUE_COMPONENT | String |
TOKEN_COLOR_PREFIX | String |
TOKEN_ESCAPE | String |
TOKEN_GREEN_COMPONENT | String |
TOKEN_PRAGMA | String |
TOKEN_RED_COMPONENT | String |
TOKEN_ALPHA_COMPONENT As String The alpha component of a color literal.
TOKEN_BLUE_COMPONENT As String The blue component of a color literal.
TOKEN_COLOR_PREFIX As String
Used for the &c
prefix in Color literals.
TOKEN_ESCAPE As String Used for escape sequences.
TOKEN_GREEN_COMPONENT As String The green component of a color literal.
TOKEN_PRAGMA As String Used for the pragma keyword.
TOKEN_RED_COMPONENT As String The red component of a color literal.
Enumerations
XojoKeywords
Xojo's keywords.
Name |
---|
AddHandler_ |
AddressOf_ |
Array_ |
As_ |
Assigns_ |
Break_ |
ByRef_ |
ByVal_ |
Call_ |
Case_ |
Catch_ |
Class_ |
Const_ |
Continue_ |
CType_ |
Declare_ |
Dim_ |
Do_ |
DownTo_ |
Each_ |
Else_ |
ElseIf_ |
End_ |
Event_ |
Exception_ |
Exit_ |
Extends_ |
Finally_ |
For_ |
Function_ |
GetTypeInfo_ |
Global_ |
GoTo_ |
If_ |
Implements_ |
Inherits_ |
Interface_ |
Loop_ |
Module_ |
Next_ |
Optional_ |
ParamArray_ |
Private_ |
Property_ |
Protected_ |
Public_ |
Raise_ |
RaiseEvent_ |
Redim_ |
RemoveHandler_ |
Return_ |
Select_ |
Self_ |
Shared_ |
Static_ |
Sub_ |
Super_ |
Then_ |
Try_ |
Until_ |
Using_ |
Var_ |
While_ |
Wend_ |
Property Descriptions
BlockBoundaries() As XUICELineToken
A sorted array of all tokens that mark the start or end of a block.
Keywords As Dictionary
Case insensitive dictionary of keywords. Key = Keyword, Value = XojoKeywords enumeration.
MatchedLeftParentheses() As XUICELineToken
An array of all left parentheses with a matching right parenthesis sorted by their position in the source code (index 0 = first matched pair of parentheses in the source code).
MatchedParentheses As Dictionary
All pairs of matching parentheses in the source code. Key = Left parenthesis (XUICELineToken
), Value = Matching right parenthesis (XUICELineToken
).
Parentheses() As XUICELineToken
A sorted array of all parenthesis tokens in the source code.
Method Descriptions
AddComment() As Boolean
Attempts to add a comment beginning from the current position. Returns True if successful.
Assumes the pointer is yet to consume the opening delimiter.
Comments start with //
, '
or rem
and end at the end of the line:
// This is comment.
var age = 40 ' This is also a comment.
rem This is also a comment
AddIdentifierOrKeywordToken()
Adds either an identifier or keyword beginning at mTokenStartLocal
.
Assumes that mTokenStartLocal
is a valid identifier or keyword starting
character and that mCurrent
is pointing to the character immediately following the starting character.
AddMatchingParentheses(lparen As XUICELineToken, rparen As XUICELineToken)
Adds the passed matching parentheses to the MatchedParentheses
dictionary and
the MatchedOpeningParentheses
array.
We add both parentheses as keys so we can find either.
AddNumberToken()
Consumes and adds a number token starting at mCurrent
.
Assumes that mCurrent
points at a digit.
AddPragmaToken()
Attempts to consume and add a pragma token starting at mCurrent
.
Assumes we have just consumed the #
character.
#Pragma Something
^
AddStringToken()
Attempts to consume and add a string token starting at mCurrent
.
Assumes we have just consumed a double quote ("
):
name = "Hello"
^
A successful string will have seaprate tokens for its opening and closing delimiters. This allows us to tokenise escaped quotes differently from the rest of the string.
AllowsLeadingWhitespace() As Boolean
True if this formatter allows whitespace at the beginning of a line. If False, the editor will strip it when pasting and prevent it from being typed.
Part of the XUICEFormatter
interface.
CanCloseBlock(blockStart As XojoKeywords, blockEnd As XojoKeywords) As Boolean
Returns True if blockEnd
can close blockStart
.
ClosestCodeLineAbove(lines() As XUICELine, lineNumber As Integer) As XUICELine
Returns the line above lineNumber
that is not blank not just a comment line. May return Nil.
FirstNonCommentToken(line As XUICELine) As XUICELineToken
Returns the first token on line
that is not a comment or Nil if there are none.
Assumes line
is not Nil.
IndentLines(lines() As XUICELine)
Sets the indentation / continuation status of the passed lines
.
IsCommentLine(line As XUICELine) As Boolean
True if this entire line is a comment.
Part of the XUICEFormatter
interface.
IsCommentToken(token As XUICELineToken) As Boolean
True if token
is a comment.
Assumes token
is not Nil.
IsSingleLineIfStatement(line As XUICELine) As Boolean
True if line
is a single line if statement.
LastNonCommentToken(line As XUICELine) As XUICELineToken
Returns the last token on line
that is not a comment or Nil if there is none.
Assumes line
is not Nil.
Name() As String
The name of this formatter.
Part of the XUICEFormatter
interface.
NearestDelimitersForCaretPos(caretPos As Integer) As XUICEDelimiter
Returns the nearest delimiters at the given caretPos
. May be Nil.
Part of the XUICEFormatter
interface.
NextToken()
Generates the next token and appends it to mLine.Tokens
.
Parse(lines() As XUICELine)
Called periodically by the editor. An opportunity to parse the tokenised lines. Will always be called after the lines have been tokenised.
Part of the XUICEFormatter
interface.
ProcessParentheses()
Finds the locations of parentheses and adds them to MatchedParentheses
.
SkipWhitespace()
Advances past whitespace.
SupportsDelimiterHighlighting() As Boolean
Returns True as this formatter supports highlighting the parentheses around the caret.
Part of the XUICEFormatter
interface.
SupportsUnmatchedBlockHighlighting() As Boolean
True if this formatter highlights unmatched blocks.
Part of the XUICEFormatter
interface.
TokenIsComment(token As XUICELineToken) As Boolean
True if token
is considered to be a comment.
Part of the XUICEFormatter
interface.
Tokenise(lines() As XUICELine, firstVisibleLineNumber As Integer, lastVisibleLineNumber As Integer)
Tokenises a portion of lines
.
Note that we tokenise all lines, even though this method is passed the visible line numbers.
Part of the XUICEFormatter
interface.
TokeniseAll(lines() As XUICELine)
Tokenises an array of lines.
Part of the XUICEFormatter
interface.
TokenTypes() As String()
Returns an array of any non standard token types used by this formatter.
Part of the XUICEFormatter
interface.
TryAddBinaryLiteral() As Boolean
Tries to consume and add a binary literal token. Returns True if successful.
Assumes that mCurrent
points here:
&b0110
^
TryAddColorLiteral() As Boolean
Tries to consume and add a Color literal token. Returns True if successful.
Assumes that mCurrent
points here:
&c123456
^
Valid tokens (where R, G, B & A are hex digits):
&cRGB
&cRRGGBB
&cRRGGBBAA
TryAddHexLiteral() As Boolean
Tries to consume and add a hexadecimal literal token. Returns True if successful.
Assumes that mCurrent
points here:
&hAB19
^
TryAddOctalLiteral() As Boolean
Tries to consume and add an octal literal token. Returns True if successful.
Assumes that mCurrent
points here:
&o0134
^
TryAddUnicodeLiteral() As Boolean
Tries to consume and add a unicode literal token. Returns True if successful.
Assumes that mCurrent
points here:
&u13
^