mirror of
https://github.com/Retera/WarsmashModEngine.git
synced 2022-07-31 17:38:59 +02:00
Beginning work on FDF parser
This commit is contained in:
parent
9bf38e0268
commit
29d72eac48
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 DrSuperGood
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
11
build.gradle
11
build.gradle
@ -30,6 +30,7 @@ allprojects {
|
|||||||
box2DLightsVersion = '1.4'
|
box2DLightsVersion = '1.4'
|
||||||
ashleyVersion = '1.7.0'
|
ashleyVersion = '1.7.0'
|
||||||
aiVersion = '1.8.0'
|
aiVersion = '1.8.0'
|
||||||
|
antlrVersion = '4.7'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@ -64,6 +65,7 @@ project(":core") {
|
|||||||
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
compile project(":fdfparser")
|
||||||
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
|
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
|
||||||
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
|
compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
|
||||||
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
|
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
|
||||||
@ -74,6 +76,15 @@ project(":core") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
project(":fdfparser") {
|
||||||
|
apply plugin: "antlr"
|
||||||
|
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
antlr "org.antlr:antlr4:$antlrVersion" // use antlr version 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tasks.eclipse.doLast {
|
tasks.eclipse.doLast {
|
||||||
delete ".project"
|
delete ".project"
|
||||||
}
|
}
|
317
fdfparser/antlr-src/FDF.g4
Normal file
317
fdfparser/antlr-src/FDF.g4
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
/**
|
||||||
|
* Define a grammar called FDF
|
||||||
|
*/
|
||||||
|
grammar FDF;
|
||||||
|
|
||||||
|
@header {
|
||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
}
|
||||||
|
|
||||||
|
program :
|
||||||
|
(statement)*
|
||||||
|
;
|
||||||
|
|
||||||
|
statement:
|
||||||
|
STRING_LIST OPEN_CURLY (ID STRING_LITERAL COMMA)*? CLOSE_CURLY # StringListStatement
|
||||||
|
|
|
||||||
|
INCLUDE_FILE STRING_LITERAL COMMA # IncludeStatement
|
||||||
|
|
|
||||||
|
frame # FrameStatement
|
||||||
|
;
|
||||||
|
|
||||||
|
frame:
|
||||||
|
FRAME STRING_LITERAL STRING_LITERAL OPEN_CURLY frame_element* CLOSE_CURLY # SimpleFrameDefinition
|
||||||
|
|
|
||||||
|
FRAME STRING_LITERAL STRING_LITERAL INHERITS STRING_LITERAL OPEN_CURLY frame_element* CLOSE_CURLY # FrameDefinition
|
||||||
|
|
|
||||||
|
FRAME STRING_LITERAL STRING_LITERAL INHERITS WITHCHILDREN STRING_LITERAL OPEN_CURLY frame_element* CLOSE_CURLY # FrameDefinitionWithChildren
|
||||||
|
;
|
||||||
|
|
||||||
|
frame_element:
|
||||||
|
frame # FrameFrameElement
|
||||||
|
|
|
||||||
|
HEIGHT FLOAT COMMA # HeightElement
|
||||||
|
|
|
||||||
|
WIDTH FLOAT COMMA # WidthElement
|
||||||
|
|
|
||||||
|
CONTROL_STYLE STRING_LITERAL COMMA # ControlStyleElement
|
||||||
|
|
|
||||||
|
CONTROL_BACKDROP STRING_LITERAL COMMA # ControlBackdropElement
|
||||||
|
|
|
||||||
|
CONTROL_PUSHED_BACKDROP STRING_LITERAL COMMA # ControlPushedBackdropElement
|
||||||
|
|
|
||||||
|
CONTROL_DISABLED_BACKDROP STRING_LITERAL COMMA # ControlDisabledBackdropElement
|
||||||
|
|
|
||||||
|
CONTROL_FOCUS_HIGHLIGHT STRING_LITERAL COMMA # ControlFocusHighlightElement
|
||||||
|
|
|
||||||
|
CONTROL_MOUSE_OVER_HIGHLIGHT STRING_LITERAL COMMA # ControlMouseOverHighlightElement
|
||||||
|
|
|
||||||
|
HIGHLIGHT_TYPE STRING_LITERAL COMMA # HighlightTypeElement
|
||||||
|
|
|
||||||
|
HIGHLIGHT_ALPHA_FILE STRING_LITERAL COMMA # HighlightAlphaFileElement
|
||||||
|
|
|
||||||
|
HIGHLIGHT_ALPHA_MODE STRING_LITERAL COMMA # HighlightAlphaModeElement
|
||||||
|
|
|
||||||
|
BUTTON_PUSHED_TEXT_OFFSET FLOAT FLOAT COMMA # ButtonPushedTextOffsetElement
|
||||||
|
|
|
||||||
|
DIALOG_BACKDROP STRING_LITERAL COMMA # DialogBackdropElement
|
||||||
|
|
|
||||||
|
BACKDROP_TILE_BACKGROUND COMMA # BackdropTileBackgroundElement
|
||||||
|
|
|
||||||
|
DECORATE_FILE_NAMES COMMA # DecorateFileNamesElement
|
||||||
|
|
|
||||||
|
BACKDROP_HALF_SIDES COMMA # BackdropHalfSidesElement
|
||||||
|
|
|
||||||
|
BACKDROP_BACKGROUND STRING_LITERAL COMMA # BackdropBackgroundElement
|
||||||
|
|
|
||||||
|
BACKDROP_CORNER_FLAGS STRING_LITERAL COMMA # BackdropCornerFlagsElement
|
||||||
|
|
|
||||||
|
BACKDROP_CORNER_SIZE FLOAT COMMA # BackdropCornerSizeElement
|
||||||
|
|
|
||||||
|
BACKDROP_BACKGROUND_SIZE FLOAT COMMA # BackdropBackgroundSizeElement
|
||||||
|
|
|
||||||
|
BACKDROP_BACKGROUND_INSETS FLOAT FLOAT FLOAT FLOAT COMMA # BackdropBackgroundInsetsElement
|
||||||
|
|
|
||||||
|
BACKDROP_EDGE_FILE STRING_LITERAL COMMA # BackdropEdgeFileElement
|
||||||
|
|
|
||||||
|
BACKDROP_BACKGROUND STRING_LITERAL COMMA # BackdropBackgroundElement
|
||||||
|
|
|
||||||
|
BACKDROP_BLEND_ALL COMMA # BackdropBlendAllElement
|
||||||
|
|
|
||||||
|
BUTTON_TEXT STRING_LITERAL COMMA #ButtonTextElement
|
||||||
|
|
|
||||||
|
TEXT STRING_LITERAL COMMA # TextElement
|
||||||
|
|
|
||||||
|
SETPOINT frame_point COMMA STRING_LITERAL COMMA frame_point COMMA FLOAT COMMA FLOAT COMMA # SetPointElement
|
||||||
|
|
|
||||||
|
BACKDROP_CORNER_FILE STRING_LITERAL COMMA # BackdropCornerFileElement
|
||||||
|
|
|
||||||
|
BACKDROP_LEFT_FILE STRING_LITERAL COMMA # BackdropLeftFileElement
|
||||||
|
|
|
||||||
|
BACKDROP_RIGHT_FILE STRING_LITERAL COMMA # BackdropRightFileElement
|
||||||
|
|
|
||||||
|
BACKDROP_TOP_FILE STRING_LITERAL COMMA # BackdropTopFileElement
|
||||||
|
|
|
||||||
|
BACKDROP_BOTTOM_FILE STRING_LITERAL COMMA # BackdropBottomFileElement
|
||||||
|
|
|
||||||
|
FRAME_FONT STRING_LITERAL COMMA FLOAT COMMA STRING_LITERAL COMMA # DecorateFileNamesElement
|
||||||
|
|
|
||||||
|
FONT_FLAGS STRING_LITERAL COMMA # FontFlagsElement
|
||||||
|
|
|
||||||
|
FONT_COLOR color COMMA # FontColorElement
|
||||||
|
|
|
||||||
|
FONT_HIGHLIGHT_COLOR color COMMA # FontHighlightColorElement
|
||||||
|
|
|
||||||
|
FONT_DISABLED_COLOR color COMMA # FontDisabledColorElement
|
||||||
|
|
|
||||||
|
FONT_SHADOW_COLOR color COMMA # FontShadowColorElement
|
||||||
|
|
|
||||||
|
FONT_SHADOW_OFFSET FLOAT FLOAT COMMA # FontShadowOffsetElement
|
||||||
|
|
|
||||||
|
FONT_JUSTIFICATION_H text_justify COMMA # FontJustificationHElement
|
||||||
|
|
|
||||||
|
FONT_JUSTIFICATION_V text_justify COMMA # FontJustificationVElement
|
||||||
|
|
|
||||||
|
FONT_JUSTIFICATION_OFFSET FLOAT FLOAT COMMA # FontJustificationOffsetElement
|
||||||
|
|
|
||||||
|
SLIDER_LAYOUT_HORIZONTAL COMMA # SliderLayoutHorizontalElement
|
||||||
|
|
|
||||||
|
SLIDER_LAYOUT_VERTICAL COMMA # SliderLayoutVerticalElement
|
||||||
|
|
|
||||||
|
SCROLL_BAR_INC_BUTTON_FRAME STRING_LITERAL COMMA # ScrollBarIncButtonFrameElement
|
||||||
|
|
|
||||||
|
SCROLL_BAR_DEC_BUTTON_FRAME STRING_LITERAL COMMA # ScrollBarDecButtonFrameElement
|
||||||
|
|
|
||||||
|
SLIDER_THUMB_BUTTON_FRAME STRING_LITERAL COMMA # SliderThumbButtonFrameElement
|
||||||
|
|
|
||||||
|
LIST_BOX_BORDER FLOAT COMMA # ListBoxBorderElement
|
||||||
|
|
|
||||||
|
LIST_BOX_SCROLL_BAR STRING_LITERAL COMMA # ListBoxScrollBarElement
|
||||||
|
|
|
||||||
|
EDIT_BORDER_SIZE FLOAT COMMA # EditBorderSizeElement
|
||||||
|
|
|
||||||
|
EDIT_CURSOR_COLOR color COMMA # EditCursorColorElement
|
||||||
|
|
|
||||||
|
MENU_TEXT_HIGHLIGHT_COLOR color COMMA # MenuTextHighlightColorElement
|
||||||
|
|
|
||||||
|
MENU_ITEM_HEIGHT FLOAT COMMA # MenuItemHighlightElement
|
||||||
|
|
|
||||||
|
MENU_BORDER FLOAT COMMA # MenuBorderElement
|
||||||
|
|
|
||||||
|
POPUP_BUTTON_INSET FLOAT COMMA # PopupButtonInsetElement
|
||||||
|
|
|
||||||
|
POPUP_TITLE_FRAME STRING_LITERAL COMMA # PopupTitleFrameElement
|
||||||
|
|
|
||||||
|
POPUP_ARROW_FRAME STRING_LITERAL COMMA # PopupArrowFrameElement
|
||||||
|
|
|
||||||
|
POPUP_MENU_FRAME STRING_LITERAL COMMA # PopupMenuFrameElement
|
||||||
|
|
|
||||||
|
CHECK_BOX_CHECK_HIGHLIGHT STRING_LITERAL COMMA # CheckBoxCheckHighlightElement
|
||||||
|
|
|
||||||
|
CHECK_BOX_DISABLED_CHECK_HIGHLIGHT STRING_LITERAL COMMA # CheckBoxDisabledCheckHighlightElement
|
||||||
|
|
|
||||||
|
TEXT_AREA_LINE_HEIGHT FLOAT COMMA # TextAreaLineHeightElement
|
||||||
|
|
|
||||||
|
TEXT_AREA_LINE_GAP FLOAT COMMA # TextAreaLineGapElement
|
||||||
|
|
|
||||||
|
TEXT_AREA_INSET FLOAT COMMA # TextAreaInsetElement
|
||||||
|
|
|
||||||
|
TEXT_AREA_SCROLL_BAR STRING_LITERAL COMMA # TextAreaScrollBarElement
|
||||||
|
|
|
||||||
|
CHAT_DISPLAY_LINE_HEIGHT FLOAT COMMA # ChatDisplayLineHeightElement
|
||||||
|
|
|
||||||
|
CHAT_DISPLAY_BORDER_SIZE FLOAT COMMA # ChatDisplayBorderSize
|
||||||
|
|
|
||||||
|
CHAT_DISPLAY_SCROLL_BAR STRING_LITERAL COMMA # ChatDisplayScrollBarElement
|
||||||
|
|
|
||||||
|
CHAT_DISPLAY_EDIT_BOX STRING_LITERAL COMMA # ChatDisplayEditBoxElement
|
||||||
|
;
|
||||||
|
|
||||||
|
text_justify:
|
||||||
|
JUSTIFYTOP | JUSTIFYMIDDLE | JUSTIFYBOTTOM | JUSTIFYLEFT | JUSTIFYCENTER | JUSTIFYRIGHT;
|
||||||
|
|
||||||
|
frame_point:
|
||||||
|
FRAMEPOINT_TOPLEFT
|
||||||
|
| FRAMEPOINT_TOP
|
||||||
|
| FRAMEPOINT_TOPRIGHT
|
||||||
|
| FRAMEPOINT_LEFT
|
||||||
|
| FRAMEPOINT_CENTER
|
||||||
|
| FRAMEPOINT_RIGHT
|
||||||
|
| FRAMEPOINT_BOTTOMLEFT
|
||||||
|
| FRAMEPOINT_BOTTOM
|
||||||
|
| FRAMEPOINT_BOTTOMRIGHT;
|
||||||
|
|
||||||
|
color:
|
||||||
|
FLOAT FLOAT FLOAT
|
||||||
|
|
|
||||||
|
FLOAT FLOAT FLOAT FLOAT
|
||||||
|
;
|
||||||
|
|
||||||
|
OPEN_CURLY : '{';
|
||||||
|
|
||||||
|
CLOSE_CURLY : '}';
|
||||||
|
|
||||||
|
STRING_LIST : 'StringList' ;
|
||||||
|
|
||||||
|
INCLUDE_FILE : 'IncludeFile' ;
|
||||||
|
|
||||||
|
FRAME : 'Frame' ;
|
||||||
|
|
||||||
|
INHERITS : 'INHERITS' ;
|
||||||
|
|
||||||
|
WITHCHILDREN : 'WITHCHILDREN' ;
|
||||||
|
|
||||||
|
DECORATE_FILE_NAMES : 'DecorateFileNames';
|
||||||
|
|
||||||
|
HEIGHT : 'Height';
|
||||||
|
|
||||||
|
WIDTH : 'Width';
|
||||||
|
|
||||||
|
HIGHLIGHT_TYPE : 'HighlightType';
|
||||||
|
HIGHLIGHT_ALPHA_FILE : 'HighlightAlphaFile';
|
||||||
|
HIGHLIGHT_ALPHA_MODE : 'HighlightAlphaMode';
|
||||||
|
|
||||||
|
CONTROL_STYLE : 'ControlStyle';
|
||||||
|
CONTROL_BACKDROP : 'ControlBackdrop';
|
||||||
|
CONTROL_PUSHED_BACKDROP : 'ControlPushedBackdrop';
|
||||||
|
CONTROL_DISABLED_BACKDROP : 'ControlDisabledBackdrop';
|
||||||
|
CONTROL_FOCUS_HIGHLIGHT : 'ControlFocusHighlight';
|
||||||
|
CONTROL_MOUSE_OVER_HIGHLIGHT : 'ControlMouseOverHighlight';
|
||||||
|
|
||||||
|
DIALOG_BACKDROP : 'DialogBackdrop';
|
||||||
|
|
||||||
|
BACKDROP_TILE_BACKGROUND : 'BackdropTileBackground';
|
||||||
|
BACKDROP_HALF_SIDES : 'BackdropHalfSides';
|
||||||
|
BACKDROP_BACKGROUND : 'BackdropBackground';
|
||||||
|
BACKDROP_BLEND_ALL : 'BackdropBlendAll';
|
||||||
|
BACKDROP_CORNER_FLAGS : 'BackdropCornerFlags';
|
||||||
|
BACKDROP_CORNER_SIZE : 'BackdropCornerSize';
|
||||||
|
BACKDROP_BACKGROUND_SIZE : 'BackdropBackgroundSize';
|
||||||
|
BACKDROP_BACKGROUND_INSETS : 'BackdropBackgroundInsets';
|
||||||
|
BACKDROP_EDGE_FILE : 'BackdropEdgeFile';
|
||||||
|
BACKDROP_CORNER_FILE : 'BackdropCornerFile';
|
||||||
|
BACKDROP_LEFT_FILE : 'BackdropLeftFile';
|
||||||
|
BACKDROP_RIGHT_FILE : 'BackdropRightFile';
|
||||||
|
BACKDROP_TOP_FILE : 'BackdropTopFile';
|
||||||
|
BACKDROP_BOTTOM_FILE : 'BackdropBottomFile';
|
||||||
|
|
||||||
|
FRAME_FONT : 'FrameFont';
|
||||||
|
FONT_FLAGS : 'FontFlags';
|
||||||
|
FONT_COLOR : 'FontColor';
|
||||||
|
FONT_HIGHLIGHT_COLOR : 'FontHighlightColor';
|
||||||
|
FONT_DISABLED_COLOR : 'FontDisabledColor';
|
||||||
|
FONT_SHADOW_COLOR : 'FontShadowColor';
|
||||||
|
FONT_SHADOW_OFFSET : 'FontShadowOffset';
|
||||||
|
FONT_JUSTIFICATION_H : 'FontJustificationH';
|
||||||
|
FONT_JUSTIFICATION_V : 'FontJustificationV';
|
||||||
|
FONT_JUSTIFICATION_OFFSET : 'FontJustificationOffset';
|
||||||
|
|
||||||
|
SLIDER_LAYOUT_HORIZONTAL : 'SliderLayoutHorizontal';
|
||||||
|
SLIDER_LAYOUT_VERTICAL : 'SliderLayoutVertical';
|
||||||
|
SLIDER_THUMB_BUTTON_FRAME : 'SliderThumbButtonFrame';
|
||||||
|
SCROLL_BAR_DEC_BUTTON_FRAME : 'ScrollBarDecButtonFrame';
|
||||||
|
SCROLL_BAR_INC_BUTTON_FRAME : 'ScrollBarIncButtonFrame';
|
||||||
|
|
||||||
|
LIST_BOX_BORDER : 'ListBoxBorder';
|
||||||
|
LIST_BOX_SCROLL_BAR : 'ListBoxScrollBar';
|
||||||
|
|
||||||
|
EDIT_BORDER_SIZE : 'EditBorderSize';
|
||||||
|
EDIT_CURSOR_COLOR : 'EditCursorColor';
|
||||||
|
|
||||||
|
MENU_TEXT_HIGHLIGHT_COLOR : 'MenuTextHighlightColor';
|
||||||
|
MENU_ITEM_HEIGHT : 'MenuItemHeight';
|
||||||
|
MENU_BORDER : 'MenuBorder';
|
||||||
|
|
||||||
|
POPUP_BUTTON_INSET : 'PopupButtonInset';
|
||||||
|
POPUP_TITLE_FRAME : 'PopupTitleFrame';
|
||||||
|
POPUP_ARROW_FRAME : 'PopupArrowFrame';
|
||||||
|
POPUP_MENU_FRAME : 'PopupMenuFrame';
|
||||||
|
CHECK_BOX_CHECK_HIGHLIGHT : 'CheckBoxCheckHighlight';
|
||||||
|
CHECK_BOX_DISABLED_CHECK_HIGHLIGHT : 'CheckBoxDisabledCheckHighlight';
|
||||||
|
|
||||||
|
TEXT_AREA_LINE_HEIGHT : 'TextAreaLineHeight';
|
||||||
|
TEXT_AREA_LINE_GAP : 'TextAreaLineGap';
|
||||||
|
TEXT_AREA_INSET : 'TextAreaInset';
|
||||||
|
TEXT_AREA_SCROLL_BAR : 'TextAreaScrollBar';
|
||||||
|
|
||||||
|
CHAT_DISPLAY_LINE_HEIGHT : 'ChatDisplayLineHeight';
|
||||||
|
CHAT_DISPLAY_BORDER_SIZE : 'ChatDisplayBorderSize';
|
||||||
|
CHAT_DISPLAY_SCROLL_BAR : 'ChatDisplayScrollBar';
|
||||||
|
CHAT_DISPLAY_EDIT_BOX : 'ChatDisplayEditBox';
|
||||||
|
|
||||||
|
BUTTON_TEXT : 'ButtonText';
|
||||||
|
BUTTON_PUSHED_TEXT_OFFSET : 'ButtonPushedTextOffset';
|
||||||
|
|
||||||
|
TEXT : 'Text';
|
||||||
|
|
||||||
|
SETPOINT : 'SetPoint';
|
||||||
|
|
||||||
|
JUSTIFYTOP : 'JUSTIFYTOP';
|
||||||
|
JUSTIFYMIDDLE : 'JUSTIFYMIDDLE';
|
||||||
|
JUSTIFYBOTTOM : 'JUSTIFYBOTTOM';
|
||||||
|
JUSTIFYLEFT : 'JUSTIFYLEFT';
|
||||||
|
JUSTIFYCENTER : 'JUSTIFYCENTER';
|
||||||
|
JUSTIFYRIGHT : 'JUSTIFYRIGHT';
|
||||||
|
|
||||||
|
FRAMEPOINT_TOPLEFT : 'TOPLEFT';
|
||||||
|
FRAMEPOINT_TOP : 'TOP';
|
||||||
|
FRAMEPOINT_TOPRIGHT : 'TOPRIGHT';
|
||||||
|
FRAMEPOINT_LEFT : 'LEFT';
|
||||||
|
FRAMEPOINT_CENTER : 'CENTER';
|
||||||
|
FRAMEPOINT_RIGHT : 'RIGHT';
|
||||||
|
FRAMEPOINT_BOTTOMLEFT : 'BOTTOMLEFT';
|
||||||
|
FRAMEPOINT_BOTTOM : 'BOTTOM';
|
||||||
|
FRAMEPOINT_BOTTOMRIGHT : 'BOTTOMRIGHT';
|
||||||
|
|
||||||
|
ID : ([a-zA-Z_][a-zA-Z_0-9]*) ;
|
||||||
|
|
||||||
|
COMMA : ',';
|
||||||
|
|
||||||
|
STRING_LITERAL : ('"'.*?'"');
|
||||||
|
|
||||||
|
WS : [ \t\r\n]+ -> skip ;
|
||||||
|
|
||||||
|
FLOAT : '-'?([0]|([1-9][0-9]*))('.'([0-9]*)?)?'f'? ;
|
||||||
|
|
||||||
|
MULTI_LINE_COMMENT : '/*'.*?'*/' -> skip ;
|
||||||
|
COMMENT : '//'.*?'\n' -> skip ;
|
49
fdfparser/build.gradle
Normal file
49
fdfparser/build.gradle
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
apply plugin: "antlr"
|
||||||
|
|
||||||
|
sourceCompatibility = 1.8
|
||||||
|
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||||
|
|
||||||
|
sourceSets.main.java.srcDirs = [ "src/", "build/generated-src" ]
|
||||||
|
sourceSets.main.antlr.srcDirs = [ "antlr-src/" ]
|
||||||
|
|
||||||
|
project.ext.mainClassName = "com.etheller.warsmash.fdfparser.Main"
|
||||||
|
|
||||||
|
task run(dependsOn: classes, type: JavaExec) {
|
||||||
|
main = project.mainClassName
|
||||||
|
classpath = sourceSets.main.runtimeClasspath
|
||||||
|
standardInput = System.in
|
||||||
|
ignoreExitValue = true
|
||||||
|
}
|
||||||
|
|
||||||
|
task dist(type: Jar) {
|
||||||
|
from files(sourceSets.main.output.classesDir)
|
||||||
|
from files(sourceSets.main.output.resourcesDir)
|
||||||
|
from {configurations.compile.collect {zipTree(it)}}
|
||||||
|
|
||||||
|
manifest {
|
||||||
|
attributes 'Main-Class': project.mainClassName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dist.dependsOn classes
|
||||||
|
|
||||||
|
eclipse.project {
|
||||||
|
name = appName + "-fdfparser"
|
||||||
|
}
|
||||||
|
|
||||||
|
task afterEclipseImport(description: "Post processing after project generation", group: "IDE") {
|
||||||
|
doLast {
|
||||||
|
def classpath = new XmlParser().parse(file(".classpath"))
|
||||||
|
def writer = new FileWriter(file(".classpath"))
|
||||||
|
def printer = new XmlNodePrinter(new PrintWriter(writer))
|
||||||
|
printer.setPreserveWhitespace(true)
|
||||||
|
printer.print(classpath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
generateGrammarSource {
|
||||||
|
maxHeapSize = "64m"
|
||||||
|
arguments += ["-visitor", "-no-listener"]
|
||||||
|
outputDirectory = file("build/generated-src/com/etheller/warsmash/fdfparser")
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
|
||||||
|
public interface FDFParserBuilder {
|
||||||
|
FDFParser build(String path);
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.fdfparser.FDFParser.IncludeStatementContext;
|
||||||
|
import com.etheller.warsmash.fdfparser.FDFParser.StringListStatementContext;
|
||||||
|
import com.etheller.warsmash.parsers.fdf.FDFNamedString;
|
||||||
|
import com.etheller.warsmash.parsers.fdf.FDFStatement;
|
||||||
|
import com.etheller.warsmash.parsers.fdf.FDFStringListStatement;
|
||||||
|
|
||||||
|
public class FDFStatementVisitor extends FDFBaseVisitor<FDFStatement> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FDFStatement visitStringListStatement(final StringListStatementContext ctx) {
|
||||||
|
final List<FDFNamedString> namedStrings = new ArrayList<>();
|
||||||
|
final List<TerminalNode> ids = ctx.ID();
|
||||||
|
final List<TerminalNode> strings = ctx.STRING_LITERAL();
|
||||||
|
for (int i = 0; i < ids.size(); i++) {
|
||||||
|
final String id = ids.get(i).getText();
|
||||||
|
String value = strings.get(i).getText();
|
||||||
|
value = value.substring(1, value.length() - 1);
|
||||||
|
namedStrings.add(new FDFNamedString(id, value));
|
||||||
|
}
|
||||||
|
return new FDFStringListStatement(namedStrings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FDFStatement visitIncludeStatement(final IncludeStatementContext ctx) {
|
||||||
|
String includeFilePath = ctx.STRING_LITERAL().getText();
|
||||||
|
includeFilePath = includeFilePath.substring(1, includeFilePath.length() - 1);
|
||||||
|
return super.visitIncludeStatement(ctx);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.fdfparser.FDFParser.IncludeStatementContext;
|
||||||
|
import com.etheller.warsmash.fdfparser.FDFParser.StringListStatementContext;
|
||||||
|
import com.etheller.warsmash.parsers.fdf.templates.FrameTemplateEnvironment;
|
||||||
|
|
||||||
|
public class FrameDefinitionVisitor extends FDFBaseVisitor<Void> {
|
||||||
|
private final FrameTemplateEnvironment templates;
|
||||||
|
private final FDFParserBuilder fdfParserBuilder;
|
||||||
|
|
||||||
|
public FrameDefinitionVisitor(final FrameTemplateEnvironment templates, final FDFParserBuilder fdfParserBuilder) {
|
||||||
|
this.templates = templates;
|
||||||
|
this.fdfParserBuilder = fdfParserBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitStringListStatement(final StringListStatementContext ctx) {
|
||||||
|
final List<TerminalNode> ids = ctx.ID();
|
||||||
|
final List<TerminalNode> strings = ctx.STRING_LITERAL();
|
||||||
|
for (int i = 0; i < ids.size(); i++) {
|
||||||
|
final String id = ids.get(i).getText();
|
||||||
|
String value = strings.get(i).getText();
|
||||||
|
value = value.substring(1, value.length() - 1);
|
||||||
|
this.templates.addDecoratedString(id, value);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitIncludeStatement(final IncludeStatementContext ctx) {
|
||||||
|
String includeFilePath = ctx.STRING_LITERAL().getText();
|
||||||
|
includeFilePath = includeFilePath.substring(1, includeFilePath.length() - 1);
|
||||||
|
final FDFParser parser = this.fdfParserBuilder.build(includeFilePath);
|
||||||
|
visit(parser.program());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
46
fdfparser/src/com/etheller/warsmash/fdfparser/Main.java
Normal file
46
fdfparser/src/com/etheller/warsmash/fdfparser/Main.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
|
||||||
|
import org.antlr.v4.runtime.BaseErrorListener;
|
||||||
|
import org.antlr.v4.runtime.RecognitionException;
|
||||||
|
import org.antlr.v4.runtime.Recognizer;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.parsers.fdf.templates.FrameTemplateEnvironment;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static final boolean REPORT_SYNTAX_ERRORS = true;
|
||||||
|
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
if (args.length < 1) {
|
||||||
|
System.err.println("Usage: <Filename>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
final BaseErrorListener errorListener = new BaseErrorListener() {
|
||||||
|
@Override
|
||||||
|
public void syntaxError(final Recognizer<?, ?> recognizer, final Object offendingSymbol, final int line,
|
||||||
|
final int charPositionInLine, final String msg, final RecognitionException e) {
|
||||||
|
if (!REPORT_SYNTAX_ERRORS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String sourceName = recognizer.getInputStream().getSourceName();
|
||||||
|
if (!sourceName.isEmpty()) {
|
||||||
|
sourceName = String.format("%s:%d:%d: ", sourceName, line, charPositionInLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.err.println(sourceName + "line " + line + ":" + charPositionInLine + " " + msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final FrameTemplateEnvironment templates = new FrameTemplateEnvironment();
|
||||||
|
final TestFDFParserBuilder testFDFParserBuilder = new TestFDFParserBuilder(errorListener);
|
||||||
|
final FrameDefinitionVisitor fdfVisitor = new FrameDefinitionVisitor(templates, testFDFParserBuilder);
|
||||||
|
final FDFParser firstFileParser = testFDFParserBuilder.build(args[0]);
|
||||||
|
fdfVisitor.visit(firstFileParser.program());
|
||||||
|
System.out.println("Value of MONTH_12: " + templates.getDecoratedString("MONTH_12"));
|
||||||
|
}
|
||||||
|
catch (final Exception exc) {
|
||||||
|
System.err.println(exc.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.etheller.warsmash.fdfparser;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.antlr.v4.runtime.BaseErrorListener;
|
||||||
|
import org.antlr.v4.runtime.CharStreams;
|
||||||
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
|
|
||||||
|
public class TestFDFParserBuilder implements FDFParserBuilder {
|
||||||
|
private final BaseErrorListener errorListener;
|
||||||
|
|
||||||
|
public TestFDFParserBuilder(final BaseErrorListener errorListener) {
|
||||||
|
this.errorListener = errorListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FDFParser build(final String path) {
|
||||||
|
FDFLexer lexer;
|
||||||
|
try {
|
||||||
|
lexer = new FDFLexer(CharStreams.fromFileName(path));
|
||||||
|
}
|
||||||
|
catch (final IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return new FDFParser(new CommonTokenStream(lexer));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf;
|
||||||
|
|
||||||
|
public class FDFNamedString {
|
||||||
|
private final String name;
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public FDFNamedString(final String name, final String value) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.parsers.fdf.templates.FrameTemplateEnvironment;
|
||||||
|
|
||||||
|
public interface FDFStatement {
|
||||||
|
void loadTemplate(FrameTemplateEnvironment frameDef);
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.etheller.warsmash.parsers.fdf.templates.FrameTemplateEnvironment;
|
||||||
|
|
||||||
|
public class FDFStringListStatement implements FDFStatement {
|
||||||
|
private final List<FDFNamedString> namedStrings;
|
||||||
|
|
||||||
|
public FDFStringListStatement(final List<FDFNamedString> namedStrings) {
|
||||||
|
this.namedStrings = namedStrings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadTemplate(final FrameTemplateEnvironment frameDef) {
|
||||||
|
for (final FDFNamedString string : this.namedStrings) {
|
||||||
|
frameDef.addDecoratedString(string.getName(), string.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf.templates;
|
||||||
|
|
||||||
|
public enum FrameEvent {
|
||||||
|
CONTROL_CLICK,
|
||||||
|
MOUSE_ENTER,
|
||||||
|
MOUSE_LEAVE,
|
||||||
|
MOUSE_UP,
|
||||||
|
MOUSE_DOWN,
|
||||||
|
MOUSE_WHEEL,
|
||||||
|
CHECKBOX_CHECKED,
|
||||||
|
CHECKBOX_UNCHECKED,
|
||||||
|
EDITBOX_TEXT_CHANGED,
|
||||||
|
POPUPMENU_ITEM_CHANGED,
|
||||||
|
MOUSE_DOUBLECLICK,
|
||||||
|
SPRITE_ANIM_UPDATE,
|
||||||
|
SLIDER_VALUE_CHANGED,
|
||||||
|
DIALOG_CANCEL,
|
||||||
|
DIALOG_ACCEPT,
|
||||||
|
EDITBOX_ENTER
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf.templates;
|
||||||
|
|
||||||
|
public enum FramePoint {
|
||||||
|
TOPLEFT,
|
||||||
|
TOP,
|
||||||
|
TOPRIGHT,
|
||||||
|
LEFT,
|
||||||
|
CENTER,
|
||||||
|
RIGHT,
|
||||||
|
BOTTOMLEFT,
|
||||||
|
BOTTOM,
|
||||||
|
BOTTOMRIGHT;
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf.templates;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FrameTemplateEnvironment {
|
||||||
|
private final Map<String, String> idToDecoratedString = new HashMap<>();
|
||||||
|
|
||||||
|
public void addDecoratedString(final String id, final String value) {
|
||||||
|
this.idToDecoratedString.put(id, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDecoratedString(final String id) {
|
||||||
|
final String decoratedString = this.idToDecoratedString.get(id);
|
||||||
|
if (decoratedString != null) {
|
||||||
|
return decoratedString;
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.etheller.warsmash.parsers.fdf.templates;
|
||||||
|
|
||||||
|
public enum TextJustify {
|
||||||
|
TOP,
|
||||||
|
MIDDLE,
|
||||||
|
BOTTOM,
|
||||||
|
LEFT,
|
||||||
|
CENTER,
|
||||||
|
RIGHT;
|
||||||
|
}
|
@ -1 +1 @@
|
|||||||
include 'desktop', 'core'
|
include 'desktop', 'core', 'fdfparser'
|
Loading…
Reference in New Issue
Block a user