Start Language

To integrate x4o as parser for your language there needs to be a few minimal steps be te taken, to have a working language.

  • Create parser and support classes.
  • Create language modules files.
  • Create eld files.

Create your parser

public class FooBarParser extends X4OParser {
        
        static public String FOOBAR_LANGUAGE = "foobar";

        public FooBarParser() throws Exception {
                super(FOOBAR_LANGUAGE);
        }
}

Create parser support

public class FooBarParserSupport implements X4OParserSupport {

        public ElementLanguage loadElementLanguageSupport() throws X4OParserSupportException {
                FooBarParser parser = new FooBarParser();
                return parser.loadElementLanguageSupport();
        }
        
        public TestBeanRoot getRoot() {
                // Simple way to return single root object.
                // note; element tree is cleared after parsing only root element is there. 
                return (TestBeanRoot)getDriver().getElementLanguage().getRootElement().getElementObject();
        }
}

Create modules

Create the file "META-INF/foobar/foobar-modules.xml" with:

<?xml version="1.0" encoding="UTF-8"?>
<modules version="1.0"
        xmlns="http://language.x4o.org/xml/ns/modules"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://language.x4o.org/xml/ns/modules http://language.x4o.org/xml/ns/modules-1.0.xsd"
        >
        <language version="1.0">
                <eld-resource>foobar-lang.eld</eld-resource>
        </language>
</modules>

Create ELD file

Create the file "META-INF/foobar/foobar-lang.eld" with:

<?xml version="1.0" encoding="UTF-8"?>
<root:module
        xmlns:root="http://eld.x4o.org/xml/ns/eld-root"
        xmlns:eld="http://eld.x4o.org/xml/ns/eld-lang"
        xmlns:conv="http://eld.x4o.org/xml/ns/eld-conv"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://eld.x4o.org/xml/ns/eld-root http://eld.x4o.org/xml/ns/eld-root-1.0.xsd"
        providerName="foobar.test.x4o.org"
        name="FooBar Language"
        id="foobar"
        >
        
        <eld:classBindingHandler id="test1" bean.class="org.foo.bar.x4o.MyFooBarBindingHandler"/>
        <eld:classBindingHandler id="test2" parentClass="org.foo.bar.TestObjectParent" childClass="org.foo.bar.TestObjectChild" method="addTestObjectChild"/>

        <eld:elementInterface id="JComponent" interfaceClass="javax.swing.JComponent">
                <eld:classBindingHandler id="JComponent-JComponent" parentClass="javax.swing.JComponent" childClass="javax.swing.JComponent" method="add"/>
        </eld:elementInterface>
        
        <eld:namespace
                uri="http://foobar.test.x4o.org/xml/ns/foobar-root"
                schemaUri="http://test.x4o.org/xml/ns/foobar-root-1.0.xsd"
                schemaResource="foobar-root-1.0.xsd"
                schemaPrefix="root"
                name="FooBar Root Namespace"
                languageRoot="true"
                >
                <eld:element tag="root" objectClass="org.foo.bar.TestBeanRoot">
                        <eld:description>The root element.</eld:description>
                </eld:element>
        </eld:namespace>
        
        <eld:namespace
                uri="http://foobar.test.x4o.org/xml/ns/foobar-lang"
                schemaUri="http://foobar.test.x4o.org/xml/ns/foobar-lang-1.0.xsd"
                schemaResource="foobar-lang-1.0.xsd"
                schemaPrefix="lang"
                name="FooBar Language Namespace"
                >               
                <eld:element tag="testBean" objectClass="org.foo.bar.TestBean"/>
                
                <!--  etc  -->
        </eld:namespace>
</root:module>

Now you can startup the parser to see it work.

Create xml to parse

<?xml version="1.0" encoding="UTF-8"?>
<r:root
        xmlns:l="http://foobar.test.x4o.org/xml/ns/foobar-lang"
        xmlns:r="http://foobar.test.x4o.org/xml/ns/foobar-root""
        >
        <l:testBean value="testing xml"/>
</r:root>

Parse the xml

FooBarParser p = new FooBarParser();
p.parseFile("foobar/example.xml");
TestBeanRoot root = p.getRoot();