diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e43b0f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..cdba15f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Paul Young
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/Preferences/Comments.tmPreferences b/Preferences/Comments.tmPreferences
new file mode 100644
index 0000000..d111924
--- /dev/null
+++ b/Preferences/Comments.tmPreferences
@@ -0,0 +1,24 @@
+
+
+
+
+ name
+ Comments
+ scope
+ source.fbp
+ settings
+
+ shellVariables
+
+
+ name
+ TM_COMMENT_START
+ value
+ #
+
+
+
+ uuid
+ FDC40863-3CF9-4542-A3CD-70241217D55A
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3b7645e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+FBP.tmbundle
+============
+Support for the Flow Based Programming DSL.
diff --git a/Syntaxes/FBP.YAML-tmLanguage b/Syntaxes/FBP.YAML-tmLanguage
new file mode 100644
index 0000000..fa65610
--- /dev/null
+++ b/Syntaxes/FBP.YAML-tmLanguage
@@ -0,0 +1,196 @@
+# [PackageDev] target_format: plist, ext: tmLanguage
+---
+name: FBP
+scopeName: source.fbp
+fileTypes: ['fbp']
+uuid: f452d01c-8d15-451a-ba55-cc6e8bd96bd8
+
+patterns:
+- include: '#comment'
+
+- include: '#legacy_export_public_name'
+- include: '#legacy_export_private_name_port'
+- include: '#legacy_export_private_name'
+- include: '#legacy_export_assignment_operator'
+- include: '#legacy_export_statement'
+
+- include: '#export_public_name'
+- include: '#export_node_port'
+- include: '#export_node'
+- include: '#export_assignment_operator'
+- include: '#inport_statement'
+- include: '#outport_statement'
+
+- include: "#right_port"
+- include: "#connection"
+- include: "#left_port"
+- include: "#node"
+- include: "#iip"
+
+repository:
+
+# Legacy export
+#
+ legacy_export_public_name:
+ match: ^(EXPORT)(=)([A-Za-z0-9_]+)\.([A-Za-z\.0-9_]+):([A-Z0-9_]+)
+ comment: 'Legacy export public name.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: variable.fbp}
+ '4': {name: storage.type.fbp}
+ '5': {name: variable.fbp}
+
+ legacy_export_private_name_port:
+ match: ^(EXPORT)(=)([A-Za-z0-9_]+)\.([A-Za-z\.0-9_]+)
+ comment: 'Legacy export private name port.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: variable.fbp}
+ '4': {name: storage.type.fbp}
+
+ legacy_export_private_name:
+ match: ^(EXPORT)(=)([A-Za-z0-9_]+)
+ comment: 'Legacy export private name.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: variable.fbp}
+
+ legacy_export_assignment_operator:
+ match: ^(EXPORT)(=)
+ comment: 'Legacy export assignment operator.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+
+ legacy_export_statement:
+ match: ^(EXPORT)
+ comment: 'Legacy EXPORT statement.'
+ captures:
+ '1': {name: constant.language.fbp}
+
+
+# Export
+#
+ export_public_name:
+ match: ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)\.([A-Z0-9_]+):([A-Z0-9_]+)
+ comment: 'Export public name.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: entity.name.function.fbp}
+ '4': {name: storage.type.fbp}
+ '5': {name: variable.fbp}
+
+ export_node_port:
+ match: ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)\.([A-Z0-9_]+)
+ comment: 'Export node port.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: entity.name.function.fbp}
+ '4': {name: storage.type.fbp}
+
+ export_node:
+ match: ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)
+ comment: 'Export node.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+ '3': {name: entity.name.function.fbp}
+
+ export_assignment_operator:
+ match: '^((?:IN|OUT)PORT)(=)'
+ comment: 'Export assignment operator.'
+ captures:
+ '1': {name: constant.language.fbp}
+ '2': {name: keyword.operator.fbp}
+
+ inport_statement:
+ match: '^(INPORT)'
+ comment: 'INPORT statement.'
+ captures:
+ '1': {name: constant.language.fbp}
+
+ outport_statement:
+ match: '^(OUTPORT)'
+ comment: 'OUTPORT statement.'
+ captures:
+ '1': {name: constant.language.fbp}
+
+
+# Other patterns
+#
+ comment:
+ match: ((#).*)
+ comment: 'Single-line comment.'
+ captures:
+ '1': {name: comment.line.number-sign.fbp}
+ '2': {name: punctuation.definition.comment.line.fbp}
+
+ right_port:
+ match: (?:([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))|(\'(?:\\\'|[^'])*\'))\s(->)\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))
+ comment: 'Port on the right hand side of a connection.'
+ captures:
+ '1': {name: entity.name.function.fbp}
+ '2': {name: variable.parameter.fbp}
+ '3': {name: variable.parameter.fbp}
+ '4': {name: variable.parameter.fbp}
+ '5': {name: entity.name.tag.fbp}
+ '6': {name: entity.name.function.fbp}
+ '7': {name: storage.type.fbp}
+ '8': {name: constant.numeric.fbp}
+ '9': {name: storage.type.fbp}
+ '10': {name: string.quoted.single.fbp}
+ '11': {name: keyword.operator.fbp}
+ '12': {name: storage.type.fbp}
+ '13': {name: constant.numeric.fbp}
+ '14': {name: storage.type.fbp}
+
+ connection:
+ match: (?:([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))|(\'(?:\\\'|[^'])*\'))\s(->)
+ comment: 'Connection.'
+ captures:
+ '1': {name: entity.name.function.fbp}
+ '2': {name: variable.parameter.fbp}
+ '3': {name: variable.parameter.fbp}
+ '4': {name: variable.parameter.fbp}
+ '5': {name: entity.name.tag.fbp}
+ '6': {name: entity.name.function.fbp}
+ '7': {name: storage.type.fbp}
+ '8': {name: constant.numeric.fbp}
+ '9': {name: storage.type.fbp}
+ '10': {name: string.quoted.single.fbp}
+ '11': {name: keyword.operator.fbp}
+
+ left_port:
+ match: '([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))'
+ comment: 'Port on the left hand side of a connection.'
+ captures:
+ '1': {name: entity.name.function.fbp}
+ '2': {name: variable.parameter.fbp}
+ '3': {name: variable.parameter.fbp}
+ '4': {name: variable.parameter.fbp}
+ '5': {name: entity.name.tag.fbp}
+ '6': {name: entity.name.function.fbp}
+ '7': {name: storage.type.fbp}
+ '8': {name: constant.numeric.fbp}
+ '9': {name: storage.type.fbp}
+
+ node:
+ comment: 'Node.'
+ match: '([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))'
+ captures:
+ '1': {name: entity.name.function.fbp}
+ '2': {name: variable.parameter.fbp}
+ '3': {name: variable.parameter.fbp}
+ '4': {name: variable.parameter.fbp}
+ '5': {name: entity.name.tag.fbp}
+ '6': {name: entity.name.function.fbp}
+
+ iip:
+ match: (\'(?:\\\'|[^'])*\')
+ name: "string.quoted.single.fbp"
+ comment: 'Initial information packet.'
diff --git a/Syntaxes/FBP.tmLanguage b/Syntaxes/FBP.tmLanguage
new file mode 100644
index 0000000..c531614
--- /dev/null
+++ b/Syntaxes/FBP.tmLanguage
@@ -0,0 +1,624 @@
+
+
+
+
+ fileTypes
+
+ fbp
+
+ name
+ FBP
+ patterns
+
+
+ include
+ #comment
+
+
+ include
+ #legacy_export_public_name
+
+
+ include
+ #legacy_export_private_name_port
+
+
+ include
+ #legacy_export_private_name
+
+
+ include
+ #legacy_export_assignment_operator
+
+
+ include
+ #legacy_export_statement
+
+
+ include
+ #export_public_name
+
+
+ include
+ #export_node_port
+
+
+ include
+ #export_node
+
+
+ include
+ #export_assignment_operator
+
+
+ include
+ #inport_statement
+
+
+ include
+ #outport_statement
+
+
+ include
+ #right_port
+
+
+ include
+ #connection
+
+
+ include
+ #left_port
+
+
+ include
+ #node
+
+
+ include
+ #iip
+
+
+ repository
+
+ comment
+
+ captures
+
+ 1
+
+ name
+ comment.line.number-sign.fbp
+
+ 2
+
+ name
+ punctuation.definition.comment.line.fbp
+
+
+ comment
+ Single-line comment.
+ match
+ ((#).*)
+
+ connection
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.fbp
+
+ 10
+
+ name
+ string.quoted.single.fbp
+
+ 11
+
+ name
+ keyword.operator.fbp
+
+ 2
+
+ name
+ variable.parameter.fbp
+
+ 3
+
+ name
+ variable.parameter.fbp
+
+ 4
+
+ name
+ variable.parameter.fbp
+
+ 5
+
+ name
+ entity.name.tag.fbp
+
+ 6
+
+ name
+ entity.name.function.fbp
+
+ 7
+
+ name
+ storage.type.fbp
+
+ 8
+
+ name
+ constant.numeric.fbp
+
+ 9
+
+ name
+ storage.type.fbp
+
+
+ comment
+ Connection.
+ match
+ (?:([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))|(\'(?:\\\'|[^'])*\'))\s(->)
+
+ export_assignment_operator
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+
+ comment
+ Export assignment operator.
+ match
+ ^((?:IN|OUT)PORT)(=)
+
+ export_node
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ entity.name.function.fbp
+
+
+ comment
+ Export node.
+ match
+ ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)
+
+ export_node_port
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ entity.name.function.fbp
+
+ 4
+
+ name
+ storage.type.fbp
+
+
+ comment
+ Export node port.
+ match
+ ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)\.([A-Z0-9_]+)
+
+ export_public_name
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ entity.name.function.fbp
+
+ 4
+
+ name
+ storage.type.fbp
+
+ 5
+
+ name
+ variable.fbp
+
+
+ comment
+ Export public name.
+ match
+ ^((?:IN|OUT)PORT)(=)([A-Za-z0-9_]+)\.([A-Z0-9_]+):([A-Z0-9_]+)
+
+ iip
+
+ comment
+ Initial information packet.
+ match
+ (\'(?:\\\'|[^'])*\')
+ name
+ string.quoted.single.fbp
+
+ inport_statement
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+
+ comment
+ INPORT statement.
+ match
+ ^(INPORT)
+
+ left_port
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.fbp
+
+ 2
+
+ name
+ variable.parameter.fbp
+
+ 3
+
+ name
+ variable.parameter.fbp
+
+ 4
+
+ name
+ variable.parameter.fbp
+
+ 5
+
+ name
+ entity.name.tag.fbp
+
+ 6
+
+ name
+ entity.name.function.fbp
+
+ 7
+
+ name
+ storage.type.fbp
+
+ 8
+
+ name
+ constant.numeric.fbp
+
+ 9
+
+ name
+ storage.type.fbp
+
+
+ comment
+ Port on the left hand side of a connection.
+ match
+ ([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))
+
+ legacy_export_assignment_operator
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+
+ comment
+ Legacy export assignment operator.
+ match
+ ^(EXPORT)(=)
+
+ legacy_export_private_name
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ variable.fbp
+
+
+ comment
+ Legacy export private name.
+ match
+ ^(EXPORT)(=)([A-Za-z0-9_]+)
+
+ legacy_export_private_name_port
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ variable.fbp
+
+ 4
+
+ name
+ storage.type.fbp
+
+
+ comment
+ Legacy export private name port.
+ match
+ ^(EXPORT)(=)([A-Za-z0-9_]+)\.([A-Za-z\.0-9_]+)
+
+ legacy_export_public_name
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+ 2
+
+ name
+ keyword.operator.fbp
+
+ 3
+
+ name
+ variable.fbp
+
+ 4
+
+ name
+ storage.type.fbp
+
+ 5
+
+ name
+ variable.fbp
+
+
+ comment
+ Legacy export public name.
+ match
+ ^(EXPORT)(=)([A-Za-z0-9_]+)\.([A-Za-z\.0-9_]+):([A-Z0-9_]+)
+
+ legacy_export_statement
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+
+ comment
+ Legacy EXPORT statement.
+ match
+ ^(EXPORT)
+
+ node
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.fbp
+
+ 2
+
+ name
+ variable.parameter.fbp
+
+ 3
+
+ name
+ variable.parameter.fbp
+
+ 4
+
+ name
+ variable.parameter.fbp
+
+ 5
+
+ name
+ entity.name.tag.fbp
+
+ 6
+
+ name
+ entity.name.function.fbp
+
+
+ comment
+ Node.
+ match
+ ([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))
+
+ outport_statement
+
+ captures
+
+ 1
+
+ name
+ constant.language.fbp
+
+
+ comment
+ OUTPORT statement.
+ match
+ ^(OUTPORT)
+
+ right_port
+
+ captures
+
+ 1
+
+ name
+ entity.name.function.fbp
+
+ 10
+
+ name
+ string.quoted.single.fbp
+
+ 11
+
+ name
+ keyword.operator.fbp
+
+ 12
+
+ name
+ storage.type.fbp
+
+ 13
+
+ name
+ constant.numeric.fbp
+
+ 14
+
+ name
+ storage.type.fbp
+
+ 2
+
+ name
+ variable.parameter.fbp
+
+ 3
+
+ name
+ variable.parameter.fbp
+
+ 4
+
+ name
+ variable.parameter.fbp
+
+ 5
+
+ name
+ entity.name.tag.fbp
+
+ 6
+
+ name
+ entity.name.function.fbp
+
+ 7
+
+ name
+ storage.type.fbp
+
+ 8
+
+ name
+ constant.numeric.fbp
+
+ 9
+
+ name
+ storage.type.fbp
+
+
+ comment
+ Port on the right hand side of a connection.
+ match
+ (?:([a-zA-Z0-9_]+\()(?:([a-zA-Z\/\-0-9_]+)|([a-zA-Z\/\-0-9_]+)\:|([a-zA-Z\/\-0-9_]+)\:([a-zA-Z\/=_,0-9]+))?(\))\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))|(\'(?:\\\'|[^'])*\'))\s(->)\s(?:([A-Z\.0-9_]+)\[([0-9])\]|([A-Z\.0-9_]+))
+
+
+ scopeName
+ source.fbp
+ uuid
+ f452d01c-8d15-451a-ba55-cc6e8bd96bd8
+
+
diff --git a/info.plist b/info.plist
new file mode 100644
index 0000000..b9ebb77
--- /dev/null
+++ b/info.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ contactEmailRot13
+ cnhylbhatbayvar@tznvy.pbz
+ contactName
+ Paul Young
+ description
+ Support for the Flow Based Programming DSL.
+ name
+ FBP
+ uuid
+ 75E533B2-D7D2-442B-BCDF-984EF0B5D414
+
+