diff --git a/basis/persistent/vectors/vectors-docs.factor b/basis/persistent/vectors/vectors-docs.factor index 4816877a35..aa817edf52 100644 --- a/basis/persistent/vectors/vectors-docs.factor +++ b/basis/persistent/vectors/vectors-docs.factor @@ -2,7 +2,7 @@ USING: help.markup help.syntax kernel math sequences ; IN: persistent.vectors HELP: PV{ -{ $syntax "elements... }" } +{ $syntax "PV{ elements... }" } { $description "Parses a literal " { $link persistent-vector } "." } ; HELP: >persistent-vector diff --git a/core/lexer/lexer-docs.factor b/core/lexer/lexer-docs.factor index 31f5a3f72e..fcfd0806d4 100644 --- a/core/lexer/lexer-docs.factor +++ b/core/lexer/lexer-docs.factor @@ -29,7 +29,7 @@ HELP: HELP: skip { $values { "i" "a starting index" } { "seq" sequence } { "?" "a boolean" } { "n" integer } } -{ $description "Skips to the first space character (if " { $snippet "boolean" } " is " { $link f } ") or the first non-space character (otherwise)." } ; +{ $description "Skips to the first space character (if " { $snippet "boolean" } " is " { $link f } ") or the first non-space character (otherwise). Tabulations used as separators instead of spaces will be flagged as an error." } ; HELP: change-lexer-column { $values { "lexer" lexer } { "quot" { $quotation "( col line -- newcol )" } } } diff --git a/core/lexer/lexer.factor b/core/lexer/lexer.factor index 60157033d7..99e6f05c6c 100644 --- a/core/lexer/lexer.factor +++ b/core/lexer/lexer.factor @@ -22,9 +22,17 @@ TUPLE: lexer text line line-text line-length column ; : ( text -- lexer ) lexer new-lexer ; +ERROR: unexpected want got ; + +PREDICATE: unexpected-tab < unexpected + got>> CHAR: \t = ; + +: forbid-tab ( c -- c ) + [ CHAR: \t eq? [ "[space]" "[tab]" unexpected ] when ] keep ; + : skip ( i seq ? -- n ) over length - [ [ swap CHAR: \s eq? xor ] curry find-from drop ] dip or ; + [ [ swap forbid-tab CHAR: \s eq? xor ] curry find-from drop ] dip or ; : change-lexer-column ( lexer quot -- ) [ [ column>> ] [ line-text>> ] bi ] prepose keep @@ -65,8 +73,6 @@ M: lexer skip-word ( lexer -- ) : scan ( -- str/f ) lexer get parse-token ; -ERROR: unexpected want got ; - PREDICATE: unexpected-eof < unexpected got>> not ;