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 + +