What is Swush


Swush (pronounce s-woo-sh) is a simple data exchange language that is designed to be easy for people to read and manipulate (unlike XML, which is designed to be difficult for both people and for machines)
A Swush file can be as simple as a key:value list, or a complex nested structure.


Before I get into details, here is a sample swush file:
The following is an example of a swush file with all of the above elements:

@swush 1.0 utf-8

		protocol : http // singleline comment
		port : 8080		# singleline comment
		host : localhost
		admin_emails {

			file : /var/log/server.log
			format : %t%s

		name: "Omry Yadan"
		email: john@dawg.com

Swush ignores whitespaces, unless they are inside a quoted string.
Each node is a list of Swush elements, each element can one of:

Each node is a list of Swush elements, each element can be:

  1. a key-value pair, for example, this the following line key is format and the value is %s%t :
  2. a String, for example, the following node is named drinks and contains 3 string elements:
    drinks{ Coffee Tea “Bloody marry” }
  3. a name followed by a swush node inside curly brackets, for example – the following swush node is named server, and contains a key:value pair:

A swush file must begin with an header line:

@swush 1.0 [encoding]

where encoding is optional and is the encoding of the file (default is utf-8)


Swush supports two types of comments:

  1. C Multiline comments
  2. C++/Bash style single line comments

Some examples:

	/* a multil
	comment */
	// Single line comment
	# Another single line comment
	key:value # Trailing single line comment


Swush implementation supports a simple selector language that allow the user to easily access nested nodes.
for example, given supposed we have the following swush file:

@swush 1.0
		name: "John dog"
		email: dog@john.com

		name: "Jane bitch"
		email: jane@bitch.org

the following selector will select the two entries:

an empty selector matches all the nodes in the root of the file.
in the future, it’s possible that the selectors language will become more powerful.

Java Implementation

Usage example:

java -jar swush-x.y.jar swush.file selector

Programmatic usage example:

public class Example
	public static void main(String[] args) throws SwushException, IOException
		// You can construct a swush object in several ways:

		// by parsing a file
		Swush fromFile = new Swush(new File("test-data/test1/file.swush"));

		// straight from a string
		Swush fromString = Swush.fromString("swush:rocks node{a:b}");

		// programatically
		Swush root = Swush.node("node1");
		Swush node2 = root.addNode("node2");
		node2.addPair("key", "value1");
		node2.addPair("key", "value2");
		node2.addArray("array", "a", "b", "c");

		// This will select the two key-value nodes and the array node in node2:
		List selected = root.select("node2.key");

		// Selects the first key in node2
		Swush first = root.selectFirst("node2.key");

		// Selects the value of the first node2.key element ("value1")
		String value = root.selectProperty("node2.key");

You can download swush from here.