+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Back in town Avatar von X39
    Registriert seit
    25.07.2010
    Beiträge
    2.252

    [API] X39s Settings "API" - '.x39' extension

    Heyo

    Ich bin X39 und ich hab mal wieder was lustiges für euch

    Eine Settings API (byTheWay API ist nicht ganz der richtige ausdruck dafür ... mehr ein parser der euch das dingen lädt usw.)

    Bevor wir zur materie kommen, hier ein beispiel wie die ausgegebene datei ausschauen kann:
    Code:
    <VERSION-1.0>
    Root{/*COMMENT*/
    	Basement{
    		Basement2{
    			Object2 = "shouldbe 1"
    			Basement3{
    				Obj/*COMMENT*/ect2 = "shouldbe 2"
    				Obj/*COMMENT*/ect2 = "shouldbe 2"
    			}
    			Basement32{
    				Object2 = "shouldbe 3"
    				Object2 = "shouldbe 3"
    				Object2 = "shouldbe 3"
    			}
    			Basement33{
    				Object2 = "shouldbe 4"
    				Object2 = "shouldbe 4"
    				Object2 = "shouldbe 4"
    				Object2 = "shouldbe 4"
    			}
    			Basement34{
    				Object2 = "shouldbe 5"
    				Object2 = "shouldbe 5"
    				Object2 = "shouldbe 5"
    				Object2 = "shouldbe 5"
    				Object2 = "shouldbe 5"
    			}
    		}
    	}
    	Basement{
    		Object = "something"
    		Object2 = "something"
    	}
    }
    http://pastebin.com/frQFnwhE
    wie man unschwer erkennen kann sind Mehrfach Nutzungen von namen möglich (wobei sowohl bei den Nodes (hier 'BasementX' genannt) als auch bei den Argumenten selbst (hier ObjectX))


    Nutzung
    Da wir hier ein node system vorliegen haben navigieren wir auch durch selbige nach einander (heist: jede node hat mögliche childs welche aufrufbar sind (es wird anschaulicher am folgenden beispiel)) dabei bekommt man die oberste node IMMER vom Dokument geliefert.

    Ein Dokument erstellt man entweder selbst ODER lädt es mit dem entsprechendem handler

    laden mittels handler:
    Code:
    	public static void ExampleUsage1()
    	{
    		File file = new File("settings.x39");
    		ISettingsFileHandler handler = new SettingsFileHandler_1_0(file);
    		SettingsDocument doc = null;
    		try {
    			doc = handler.load();
    		} catch (ExceptionSettingsParsing e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		if(doc == null)
    			return;
    		SettingsNode rootNode = doc.getRootNode();
    		for(SettingsNode node : rootNode.getChilds())
    		{
    			System.out.println(node.getName() + "[" + node.getChilds().length + "]:");
    			for(SettingsOption opt : node.boundOptions)
    			{
    				System.out.println("\t" + opt.getName() + " " + opt.getValue());
    			}
    		}
    
    		SettingsNode node1_1 = new SettingsNode("Node1.2");
    		node1_1.boundOptions.add(new SettingsOption("Option1", "value1"));
    		node1_1.boundOptions.add(new SettingsOption("Option2", "value2"));
    		SettingsNode node1_2 = new SettingsNode("Node1.1");
    		node1_2.boundOptions.add(new SettingsOption("Option1", "value1"));
    		node1_2.boundOptions.add(new SettingsOption("Option2", "value2"));
    		
    		SettingsNode node = new SettingsNode("Node1");
    		node.addChild(node1_1, node1_2);
    		node.boundOptions.add(new SettingsOption("Option1", "value1"));
    		node.boundOptions.add(new SettingsOption("Option2", "value2"));
    		
    		rootNode.addChild(node);
    	}
    http://pastebin.com/0QSbDTsb

    ohne laden ein neues SettingsDocument erstellen und speichern:
    Code:
    	public static void ExampleUsage2(){
    		File file = new File("settings.x39");
    		SettingsNode rootNode = new SettingsNode("root");
    		SettingsDocument doc = new SettingsDocument(file, rootNode);
    		ISettingsFileHandler handler = doc.getParser();
    		
    		SettingsNode node1_2_2 = new SettingsNode("node1.2.2");
    		SettingsNode node1_2_1 = new SettingsNode("node1.2.1");
    		SettingsNode node1_2 = new SettingsNode("node1.2");
    		
    		SettingsNode node1_1_2 = new SettingsNode("node1.1.2");
    		SettingsNode node1_1_1 = new SettingsNode("node1.1.1");
    		SettingsNode node1_1 = new SettingsNode("node1.1");
    		
    		SettingsNode node1 = new SettingsNode("Node1");
    		
    		node1_2.addChild(node1_2_1, node1_2_2);
    		node1_1.addChild(node1_1_1, node1_1_2);
    		node1.addChild(node1_1, node1_2);
    		rootNode.addChild(node1);
    		try {
    			handler.save(doc);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    http://pastebin.com/JUQceqRm






    das währe auch vorerst alles was ich habe
    srcCode der API ist auf gitHub verfügbar:
    https://github.com/X39/dotX39_SettingsAPI-JAVA
    https://github.com/X39/dotX39_SettingsAPI-CPP
    Geändert von X39 (01.09.2013 um 16:38 Uhr)

  2. #2
    Verstehe leider nicht wieso man sowas verwenden sollte. Nicht böse gemeint oder sowas
    Geändert von Kocacola97 (28.04.2013 um 23:36 Uhr)

  3. #3
    Back in town Avatar von X39
    Registriert seit
    25.07.2010
    Beiträge
    2.252
    Zitat Zitat von Kocacola97 Beitrag anzeigen
    Verstehe leider nicht wieso man sowas verwenden sollte. Nicht böse gemeint oder sowas
    nachvollziehbar
    was man z.b. machen könnte wäre objekte damit festhalten ... naja alles so was man theoretisch auch mit XML schaffen kann (nur ich hab leider keine XML libary gefunden gehabt nach meinen vorstellungen also ==> SELBER MACHEN

  4. #4
    Back in town Avatar von X39
    Registriert seit
    25.07.2010
    Beiträge
    2.252

    KURZ INFORMIERT

    Ich hab das ganze nach C++ portiert (schaut nicht so hübsch aus lässt sich aber gleich bedienen)
    https://github.com/X39/dotX39_SettingsAPI-CPP
    und will es euch natürlich nicht vorenthalten
    HFIYNI

  5. #5
    Team Jung-Stuten Avatar von MCenderdragon
    Registriert seit
    15.11.2011
    Beiträge
    3.238
    Also 1. gute arbeit 2. leider völlig überflüssig
    bei JAVA gibt es das Documents system und in so ein Document kann man viele Nodes machen und in die dann wieder viele Nodes das speichern ist zwar Platzt aufwändig aber mit dem GZIP-Input/Output-Stream ist das ja auch kein Poblem
    aber ich muss schon sagen so was hinzu bekommen

  6. #6
    Back in town Avatar von X39
    Registriert seit
    25.07.2010
    Beiträge
    2.252
    Zitat Zitat von MCenderdragon Beitrag anzeigen
    Also 1. gute arbeit 2. leider völlig überflüssig
    bei JAVA gibt es das Documents system und in so ein Document kann man viele Nodes machen und in die dann wieder viele Nodes das speichern ist zwar Platzt aufwändig aber mit dem GZIP-Input/Output-Stream ist das ja auch kein Poblem
    aber ich muss schon sagen so was hinzu bekommen
    das system dient auch mehr der sprachunabhängigkeit (c++ sowie c# implementierung hab ich bereits jedoch nur c++ und java im git)
    Man kann auch mit Java XML benutzen (was ich jedoch verabscheue ...)
    das hier ist jedoch ziemlich benutzerfreundlich sowie devfreundlich
    zumahl lässt sich die syntax auch weiter nutzen (und so z.b. zu einer skript sprache die ich vllt mal schreibe erweitern die heist dann XLANG oder so :F)

  7. #7
    Team Jung-Stuten Avatar von MCenderdragon
    Registriert seit
    15.11.2011
    Beiträge
    3.238
    ok das wäre wiklich mal etwas was du machen köntest (das mit der XLANG) aber ich nehme auch gern die Properties die sind ja auch so schön über sichtlich

  8. #8

  9. #9
    Creeper-Jäger
    Registriert seit
    01.05.2012
    Beiträge
    397
    Du meinst das JSON Format war schon immer so aufgebaut...
    0xCAFEBABE

+ Antworten