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 @@ +
To use this language, use the class "language-roboconf".
+ +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