diff --git a/components.js b/components.js index 7a221fc78a..deab8e17fc 100644 --- a/components.js +++ b/components.js @@ -416,6 +416,10 @@ var components = { "title": "Rip", "owner": "ravinggenius" }, + "roboconf": { + "title": "Roboconf", + "owner": "Golmote" + }, "ruby": { "title": "Ruby", "require": "clike", diff --git a/components/prism-roboconf.js b/components/prism-roboconf.js new file mode 100644 index 0000000000..e52967fe71 --- /dev/null +++ b/components/prism-roboconf.js @@ -0,0 +1,27 @@ +Prism.languages.roboconf = { + 'comment': /#.*/, + 'keyword': { + 'pattern': /(^|\s)(?:(?:facet|instance of)(?=[ \t]+[\w-]+[ \t]*\{)|(?:external|import)\b)/, + lookbehind: true + }, + 'component': { + pattern: /[\w-]+(?=[ \t]*\{)/, + alias: 'variable' + }, + 'property': /[\w.-]+(?=[ \t]*:)/, + 'value': { + pattern: /(=[ \t]*)[^,;]+/, + lookbehind: true, + alias: 'attr-value' + }, + 'optional': { + pattern: /\(optional\)/, + alias: 'builtin' + }, + 'wildcard': { + pattern: /(\.)\*/, + lookbehind: true, + alias: 'operator' + }, + 'punctuation': /[{},.;:=]/ +}; \ No newline at end of file diff --git a/components/prism-roboconf.min.js b/components/prism-roboconf.min.js new file mode 100644 index 0000000000..39596eb851 --- /dev/null +++ b/components/prism-roboconf.min.js @@ -0,0 +1 @@ +Prism.languages.roboconf={comment:/#.*/,keyword:{pattern:/(^|\s)(?:(?:facet|instance of)(?=[ \t]+[\w-]+[ \t]*\{)|(?:external|import)\b)/,lookbehind:!0},component:{pattern:/[\w-]+(?=[ \t]*\{)/,alias:"variable"},property:/[\w.-]+(?=[ \t]*:)/,value:{pattern:/(=[ \t]*)[^,;]+/,lookbehind:!0,alias:"attr-value"},optional:{pattern:/\(optional\)/,alias:"builtin"},wildcard:{pattern:/(\.)\*/,lookbehind:!0,alias:"operator"},punctuation:/[{},.;:=]/}; \ No newline at end of file diff --git a/examples/prism-roboconf.html b/examples/prism-roboconf.html new file mode 100644 index 0000000000..6b5dbe746e --- /dev/null +++ b/examples/prism-roboconf.html @@ -0,0 +1,52 @@ +

Roboconf

+

To use this language, use the class "language-roboconf".

+ +

Full example

+
ApacheServer {
+    # Apache instances will be deployed by Roboconf's Puppet extension
+    installer: puppet;
+
+    # Web applications could be deployed over this Apache server
+    children: My-Dash-Board, Marketing-Suite;
+
+    # Properties exported by this component.
+    # 'port' should have a default value, or we will have to set it when we create an instance.
+    exports: port = 19099;
+
+    # 'ip' is a special variable. It will be updated at runtime by a Roboconf agent.
+    exports: ip;
+
+    # Other components properties that this server needs to have so that it can start.
+    imports: LB.port (optional), LB.ip (optional);
+
+    # Here, the Apache may also be notified about components instances of type LB.
+    # The imports are marked as optional. It means that if there is no LB instance, an
+    # Apache instance will be able to start anyway.
+    #
+    # If the import was not optional, e.g.
+    #
+    # imports: LB.port, LB.ip;
+    # or even
+    # imports: LB.port (optional), LB.ip;
+    #
+    # ... then an Apache instance would need at least one LB instance somewhere.
+
+    # Imports may also reference variables from other applications
+    imports: external Lamp.lb-ip;
+}
+
+facet LoadBalanced {
+    exports: ip, port;  # Define we export two variables.
+}
+
+instance of VM {
+
+    # This will create 5 VM instances, called VM 1, VM 2, VM3, VM 4 and VM 5.
+    name: VM ;  # Yes, there is a space at the end... :)
+    count: 5;
+
+    # On every VM instance, we will deploy...
+    instance of Tomcat {
+        name: Tomcat;
+    }
+}
diff --git a/tests/languages/roboconf/comment_feature.test b/tests/languages/roboconf/comment_feature.test new file mode 100644 index 0000000000..09493ab581 --- /dev/null +++ b/tests/languages/roboconf/comment_feature.test @@ -0,0 +1,13 @@ +# +# Foobar + +---------------------------------------------------- + +[ + ["comment", "#"], + ["comment", "# Foobar"] +] + +---------------------------------------------------- + +Checks for comments. \ No newline at end of file diff --git a/tests/languages/roboconf/component_feature.test b/tests/languages/roboconf/component_feature.test new file mode 100644 index 0000000000..0e934863e4 --- /dev/null +++ b/tests/languages/roboconf/component_feature.test @@ -0,0 +1,13 @@ +ApacheServer {} +lb--apache-mod-jk--puppet {} + +---------------------------------------------------- + +[ + ["component", "ApacheServer"], ["punctuation", "{"], ["punctuation", "}"], + ["component", "lb--apache-mod-jk--puppet"], ["punctuation", "{"], ["punctuation", "}"] +] + +---------------------------------------------------- + +Checks for component names. \ No newline at end of file diff --git a/tests/languages/roboconf/keyword_feature.test b/tests/languages/roboconf/keyword_feature.test new file mode 100644 index 0000000000..e9f8c792ab --- /dev/null +++ b/tests/languages/roboconf/keyword_feature.test @@ -0,0 +1,19 @@ +facet Foo {} +instance of Bar {} +external +import + +---------------------------------------------------- + +[ + ["keyword", "facet"], + ["component", "Foo"], ["punctuation", "{"], ["punctuation", "}"], + ["keyword", "instance of"], + ["component", "Bar"], ["punctuation", "{"], ["punctuation", "}"], + ["keyword", "external"], + ["keyword", "import"] +] + +---------------------------------------------------- + +Checks for keywords. \ No newline at end of file diff --git a/tests/languages/roboconf/optional_feature.test b/tests/languages/roboconf/optional_feature.test new file mode 100644 index 0000000000..bf3e090666 --- /dev/null +++ b/tests/languages/roboconf/optional_feature.test @@ -0,0 +1,11 @@ +(optional) + +---------------------------------------------------- + +[ + ["optional", "(optional)"] +] + +---------------------------------------------------- + +Checks for optional flag. \ No newline at end of file diff --git a/tests/languages/roboconf/property_feature.test b/tests/languages/roboconf/property_feature.test new file mode 100644 index 0000000000..aae2508ff0 --- /dev/null +++ b/tests/languages/roboconf/property_feature.test @@ -0,0 +1,17 @@ +extends : +imports: +installer: +data.ec2.elastic.ip: + +---------------------------------------------------- + +[ + ["property", "extends"], ["punctuation", ":"], + ["property", "imports"], ["punctuation", ":"], + ["property", "installer"], ["punctuation", ":"], + ["property", "data.ec2.elastic.ip"], ["punctuation", ":"] +] + +---------------------------------------------------- + +Checks for properties. \ No newline at end of file diff --git a/tests/languages/roboconf/value_feature.test b/tests/languages/roboconf/value_feature.test new file mode 100644 index 0000000000..9c6379825b --- /dev/null +++ b/tests/languages/roboconf/value_feature.test @@ -0,0 +1,20 @@ +port = 8080; +MySQL.port = 3307, My-Client-Database.port = 3308; +my-own-variable = something; + +---------------------------------------------------- + +[ + "port ", ["punctuation", "="], + ["value", "8080"], ["punctuation", ";"], + "\r\nMySQL", ["punctuation", "."], "port ", ["punctuation", "="], + ["value", "3307"], ["punctuation", ","], + " My-Client-Database", ["punctuation", "."], "port ", ["punctuation", "="], + ["value", "3308"], ["punctuation", ";"], + "\r\nmy-own-variable ", ["punctuation", "="], + ["value", "something"], ["punctuation", ";"] +] + +---------------------------------------------------- + +Checks for default values. \ No newline at end of file diff --git a/tests/languages/roboconf/wildcard_feature.test b/tests/languages/roboconf/wildcard_feature.test new file mode 100644 index 0000000000..e08e18d520 --- /dev/null +++ b/tests/languages/roboconf/wildcard_feature.test @@ -0,0 +1,12 @@ +load-balance-able.* + +---------------------------------------------------- + +[ + "load-balance-able", ["punctuation", "."], + ["wildcard", "*"] +] + +---------------------------------------------------- + +Checks for wildcards. \ No newline at end of file