From 7219ebdf3cd8f09cb9d01d78ddb95e512c574be5 Mon Sep 17 00:00:00 2001 From: Barry Walsh Date: Fri, 28 Mar 2014 13:57:07 +0000 Subject: [PATCH] Sample file for Rebol .r extension --- samples/Rebol/GCP-datatypes.r | 217 ++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 samples/Rebol/GCP-datatypes.r diff --git a/samples/Rebol/GCP-datatypes.r b/samples/Rebol/GCP-datatypes.r new file mode 100644 index 00000000..04c2e1e2 --- /dev/null +++ b/samples/Rebol/GCP-datatypes.r @@ -0,0 +1,217 @@ +Rebol [Title: "Google Code Prettify Datatypes"] + +re: func [s /i] [rejoin compose ["/^^" (s) "/" either i ["i"][""]]] ; little helper for standard grammar regex used + +date-re: "\d{1,2}[\-\/](\d{1,2}|\w{3,9})[\-\/]\d{2,4}" ; naive date! regex + +string-re: {\"(?:[^^\"\\]|\\[\s\S])*(?:\"|$)} +brace-re: "\{(?:[^^\}\^^]|\^^[\s\S])*(?:\}|$)" ; TODO - could build this from string-re +block-re: "\[(?:[^^\]\\]|\\[\s\S])*(?:\]|$)" +tag-re: "\<(?:[^^\>\\]|\\[\s\S])*(?:\>|$)" ; TODO - could build this from string-re +number-re: "(?:[.,]\d+|\d+['\d]*(?:[.,]\d*)?)(?:e[-+]?\d+)?" +word-re: "[A-Za-z=\-?!_*+.`~&][A-Za-z0-9=\-!?_*+.`~&]*" + +|: "|" + +types: compose/deep [ + ; comments + comment! [ + PR_LITERAL + ; comment_shebang -- Script tag (shebang!) + (re/i "#![^^\r\n]+") + ; comment_line -- A line comment that starts with ; + (re ";[^^\r\n]*") + ; comment_multiline_string -- Multi-line comment + (re ["comment\s*" brace-re]) + ; comment_multiline_block + (re ["comment\s*" block-re]) + ] + ; type_literal + + ; logic + logic! [ + PR_LITERAL + (re "#\[(?:true|false|yes|no|on|off)\]") + ] + + ; none + none! [ + PR_LITERAL + (re "#\[none\]") + ] + + ; strings + ; character + char! [ + PR_LITERAL + (re/i "#^"(?:[^^^^^"]|\^^(?:[\^^^"\/\-A-Z]|\((?:[0-9A-F]{2,4}|tab|newline)\)))^"") + ] + + string! [ + PR_LITERAL + ; string_quoted + (re "^"(?:[^^^"\\]|\\[\s\S])*(?:^"|$)") + ; string_multiline -- Multi-line string {braces} - allowed within: { ^{ ^} + (re brace-re) + ] + + ; string_tag_comment + comment! [ + PR_LITERAL + (re "") + ] + + ; string_tag + tag! [ + PR_LITERAL + (re "<[^^^"<=>\x00\x09\x0A\x0D\x20\u005D\u007F][^^>\x00]*>") + ] + + file! [ + PR_LITERAL + ; string_file + (re "%(?:[a-zA-Z?!.*&|=_~0-9'+\-,:\/\\@]|%[0-9A-F]{2})+") + ; string_file_quoted + (re "%^"(?:[^^^"])*^"") + ] + + url! [ + PR_LITERAL + ; string_url + (re "[a-zA-Z?!.*&|=_~][a-zA-Z?!.*&|=_~0-9'+-,]*:(?:[a-zA-Z?!.*&|=_~0-9'+\-,:\/@]|%[0-9A-F]{2})+") + ] + + email! [ + PR_LITERAL + ; string_email + (re "[\w\d\+\-\.]+\@[\w\d\+\-\.]+\b") + ] + + binary! [ + PR_LITERAL + ; binary_base_two + (re "2#\{(?:[01\r\n\t ])*\}") + ; binary_base_sixty_four + (re "64#\{(?:[0-9+\/a-yA-Z=\r\n\t ])*\}") + ; binary_base_sixteen + (re/i "(?:16)?#\{(?:[0-9a-f\r\n\t ])*\}") + ] + + issue! [ + PR_LITERAL + ; string_issue + (re "#[\w\d\-]+(?=[\s\n\t]|$)") + ] + + ; values + date! [ + PR_LITERAL + ; value_date + (re [date-re "\/\d{1,2}\:\d{1,2}\:\d{1,2}(\+|\-)\d{1,2}\:(00|30)\b"]) + (re [date-re "\/\d{1,2}\:\d{1,2}\:\d{1,2}\b"]) + (re [date-re "\b"]) + (re "\d{2,4}[\/\-](\d{1,2}|\w{3,9})[\/\-]\d{1,2}(?:\/\d{1,2}\:\d{1,2}(?:\:\d{1,2})?(?:[-+]\d{1,2}:[03]0)?)?") + ] + + time! [ + PR_LITERAL + ; value_time + (re "[-+]?\d{1,2}:\d{1,2}(?::\d{1,2}(?:\.\d+)?)?\b") + ] + + tuple! [ + PR_LITERAL + ; value_tuple + (re "\d+(?:\.\d+){2,9}") + ] + + pair! [ + PR_LITERAL + ; value_pair + (re/i ["[-+]?" number-re "x[-+]?" number-re]) + ] + ; [PR['PR_LITERAL'], /^\d(?:[\.\,\'\d]*)x\d(?:[\.\,\'\d]*)\b/] + + money! [ + PR_LITERAL + ; value_money + (re ["[-+]?[A-Z]{0,3}\$" number-re]) + ; [PR['PR_LITERAL'], /^\$\d[\d\.\,\']*\b/] + ; [PR['PR_LITERAL'], /^[\+\-\w]{1,4}\$\d[\d\.\,\']*\b/] + ] + + ; value_number + number! [ + PR_LITERAL + (re/i ["[-+]?" number-re "%?"]) + ; percent! [PR_LITERAL (re "(\+|\-|\d)(?:[\.\,\'\d]*)\%\b")] + ; decimal! [PR_LITERAL (re "(\+|\-|\d)\d*(?:[\.\,]\d+)\b")] + ; integer! [PR_LITERAL (re "(\+|\-|\d)\d*\b")] + ] + + ; words + datatype! [ + PR_LITERAL + ; word_datatype + (re "(?:[A-Za-z\-]+)\!(?![A-Za-z0-9\-])") + ] + + set-word! [ + PR_LITERAL + ; word_set + (re [word-re "(?:\/" word-re "|\/\d+)*:"]) + ] + + ; -- get-word! + get-word! [ + PR_LITERAL + ; word_get + (re [":" word-re]) + ] + + ; -- lit-word! + lit-word! [ + PR_LITERAL + ; word_lit + (re ["'" word-re]) + ] + + refinement! [ + PR_LITERAL + ; word_refine + (re reduce ["\/" replace copy find next word-re "[" "]*" "]+" "(?![A-Za-z0-9\-])"]) + ] + + op! [ + PR_LITERAL + ; word_native + (re "(?:!=?=?|\*\*?|[+-]|\/\/?|<[=>]?|=[=?]?|>=?)(?![A-Za-z0-9\-])") + ] + + function! [ + PR_LITERAL + (re make-keywords-string) + ; [REB['function!'], /\b(?:to\-relative\-file\/as\-local|or\~|pwd|abs|map|not|rm|at|do|dp|ds|dt|cd|in|ls|to|or|if)\s/] + ] + + rebol! [ + PR_LITERAL + ; word_header + (re/i "(?:rebol|red(?:\/system)?|world|topaz)$") + ] + + logic! [ + PR_LITERAL + ; word_logic + (re "(?:true|false|yes|no|on|off)$") + ] + + ; word_none + none! [PR_LITERAL (re "none$")] + + ; word + word! [PR_LITERAL (re word-re)] + + ; -- literal! + ; literal! [PR_LITERAL (re ["#" block-re])] +]