From 5d63c63a3910c097b396a0bbc7137f16b54f8ef3 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Wed, 10 Mar 2010 11:16:16 +0000 Subject: [PATCH] Undo changes to is_a_valid_number, because it's doesn't follow the JSON spec. Tests : fail13.json, fail29.json and fail30.json are valid with this implementation, so we go back to the previous implementation. --- library/kernel/scanner/json_parser.e | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/library/kernel/scanner/json_parser.e b/library/kernel/scanner/json_parser.e index fb3fe3a1..50acfcf5 100644 --- a/library/kernel/scanner/json_parser.e +++ b/library/kernel/scanner/json_parser.e @@ -376,12 +376,25 @@ feature -- Commands feature {NONE} -- Implementation is_a_valid_number (a_number: STRING): BOOLEAN is - -- is 'a_number' a valid number based on this regular expression - -- "-?(?: 0|[1-9]\d+)(?: \.\d+)?(?: [eE][+-]?\d+)?\b"? - do - Result := a_number.is_real_sequence - end - + -- is 'a_number' a valid number based on this regular expression + -- "-?(?: 0|[1-9]\d+)(?: \.\d+)?(?: [eE][+-]?\d+)?\b"? + local + word_set: RX_CHARACTER_SET + regexp: RX_PCRE_REGULAR_EXPRESSION + number_regex: STRING + do + create regexp.make + create word_set.make_empty + a_number.right_adjust + a_number.left_adjust + word_set.add_string ("0123456789.eE+-") + regexp.set_word_set (word_set) + number_regex := "-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?\b" + regexp.compile (number_regex) + if regexp.matches (a_number) then + Result := a_number.is_equal (regexp.captured_substring (0)) + end + end is_a_valid_unicode (a_unicode: STRING): BOOLEAN is -- is 'a_unicode' a valid unicode based on this regular expression -- "\\u[0-9a-fA-F]{4}"