mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
218 lines
5.3 KiB
R
218 lines
5.3 KiB
R
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])]
|
|
]
|