Module: JSON::Repair::StringUtils
- Included in:
- JSON::Repairer
- Defined in:
- lib/json/repair/string_utils.rb
Constant Summary collapse
- BACKSLASH =
Constants for character chars
'\\'- SLASH =
0x5c
'/'- ASTERISK =
0x2f
'*'- OPENING_BRACE =
0x2a
'{'- CLOSING_BRACE =
0x7b
'}'- OPENING_BRACKET =
0x7d
'['- CLOSING_BRACKET =
0x5b
']'- OPEN_PARENTHESIS =
0x5d
'('- CLOSE_PARENTHESIS =
0x28
')'- SPACE =
0x29
' '- NEWLINE =
0x20
"\n"- TAB =
0xa
"\t"- RETURN =
0x9
"\r"- BACKSPACE =
0xd
"\b"- FORM_FEED =
0x08
"\f"- DOUBLE_QUOTE =
0x0c
'"'- PLUS =
0x0022
'+'- MINUS =
0x2b
'-'- QUOTE =
0x2d
"'"- ZERO =
0x27
'0'- NINE =
0x30
'9'- COMMA =
0x39
','- DOT =
0x2c
'.'- COLON =
0x2e
':'- SEMICOLON =
0x3a
';'- UPPERCASE_A =
0x3b
'A'- LOWERCASE_A =
0x41
'a'- UPPERCASE_E =
0x61
'E'- LOWERCASE_E =
0x45
'e'- UPPERCASE_F =
0x65
'F'- LOWERCASE_F =
0x46
'f'- NON_BREAKING_SPACE =
0x66
"\u00a0"- EN_QUAD =
0xa0
"\u2000"- HAIR_SPACE =
0x2000
"\u200a"- NARROW_NO_BREAK_SPACE =
0x200a
"\u202f"- MEDIUM_MATHEMATICAL_SPACE =
0x202f
"\u205f"- IDEOGRAPHIC_SPACE =
0x205f
"\u3000"- DOUBLE_QUOTE_LEFT =
0x3000
"\u201c"- DOUBLE_QUOTE_RIGHT =
0x201c
"\u201d"- QUOTE_LEFT =
0x201d
"\u2018"- QUOTE_RIGHT =
0x2018
"\u2019"- GRAVE_ACCENT =
0x2019
'`'- ACUTE_ACCENT =
0x0060
"\u00b4"- REGEX_DELIMITER =
0x00b4
%r{^[,:\[\]/{}()\n+]+$}- REGEX_START_OF_VALUE =
/^[\[{\w-]$/
Instance Method Summary collapse
- #control_character?(char) ⇒ Boolean
- #delimiter?(char) ⇒ Boolean
- #delimiter_except_slash?(char) ⇒ Boolean
- #digit?(char) ⇒ Boolean
- #double_quote?(char) ⇒ Boolean
- #double_quote_like?(char) ⇒ Boolean
- #ends_with_comma_or_newline?(text) ⇒ Boolean
- #function_name?(text) ⇒ Boolean
-
#hex?(char) ⇒ Boolean
Functions to check character chars.
- #insert_before_last_whitespace(text, text_to_insert) ⇒ Object
- #parse_keyword(name, value) ⇒ Object
-
#parse_keywords ⇒ Object
Parse keywords true, false, null Repair Python keywords True, False, None Repair Ruby keyword nil.
- #quote?(char) ⇒ Boolean
- #remove_at_index(text, start, count) ⇒ Object
- #single_quote?(char) ⇒ Boolean
- #single_quote_like?(char) ⇒ Boolean
- #special_whitespace?(char) ⇒ Boolean
- #start_of_value?(char) ⇒ Boolean
-
#strip_last_occurrence(text, text_to_strip, strip_remaining_text: false) ⇒ Object
Strip last occurrence of text_to_strip from text.
- #valid_string_character?(char) ⇒ Boolean
- #whitespace?(char) ⇒ Boolean
Instance Method Details
#control_character?(char) ⇒ Boolean
81 82 83 |
# File 'lib/json/repair/string_utils.rb', line 81 def control_character?(char) [NEWLINE, RETURN, TAB, BACKSPACE, FORM_FEED].include?(char) end |
#delimiter?(char) ⇒ Boolean
69 70 71 |
# File 'lib/json/repair/string_utils.rb', line 69 def delimiter?(char) REGEX_DELIMITER.match?(char) end |
#delimiter_except_slash?(char) ⇒ Boolean
73 74 75 |
# File 'lib/json/repair/string_utils.rb', line 73 def delimiter_except_slash?(char) delimiter?(char) && char != SLASH end |
#digit?(char) ⇒ Boolean
61 62 63 |
# File 'lib/json/repair/string_utils.rb', line 61 def digit?(char) char && char >= ZERO && char <= NINE end |
#double_quote?(char) ⇒ Boolean
100 101 102 |
# File 'lib/json/repair/string_utils.rb', line 100 def double_quote?(char) char == DOUBLE_QUOTE end |
#double_quote_like?(char) ⇒ Boolean
108 109 110 |
# File 'lib/json/repair/string_utils.rb', line 108 def double_quote_like?(char) [DOUBLE_QUOTE, DOUBLE_QUOTE_LEFT, DOUBLE_QUOTE_RIGHT].include?(char) end |
#ends_with_comma_or_newline?(text) ⇒ Boolean
168 169 170 |
# File 'lib/json/repair/string_utils.rb', line 168 def ends_with_comma_or_newline?(text) /[,\n][ \t\r]*$/.match?(text) end |
#function_name?(text) ⇒ Boolean
164 165 166 |
# File 'lib/json/repair/string_utils.rb', line 164 def function_name?(text) /^\w+$/.match?(text) end |
#hex?(char) ⇒ Boolean
Functions to check character chars
55 56 57 58 59 |
# File 'lib/json/repair/string_utils.rb', line 55 def hex?(char) (char >= ZERO && char <= NINE) || (char >= UPPERCASE_A && char <= UPPERCASE_F) || (char >= LOWERCASE_A && char <= LOWERCASE_F) end |
#insert_before_last_whitespace(text, text_to_insert) ⇒ Object
125 126 127 128 129 130 131 132 133 |
# File 'lib/json/repair/string_utils.rb', line 125 def insert_before_last_whitespace(text, text_to_insert) index = text.length return text + text_to_insert unless whitespace?(text[index - 1]) index -= 1 while whitespace?(text[index - 1]) text[0...index] + text_to_insert + text[index..] end |
#parse_keyword(name, value) ⇒ Object
150 151 152 153 154 155 156 157 158 |
# File 'lib/json/repair/string_utils.rb', line 150 def parse_keyword(name, value) if @json[@index, name.length] == name @output += value @index += name.length true else false end end |
#parse_keywords ⇒ Object
Parse keywords true, false, null Repair Python keywords True, False, None Repair Ruby keyword nil
138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/json/repair/string_utils.rb', line 138 def parse_keywords parse_keyword('true', 'true') || parse_keyword('false', 'false') || parse_keyword('null', 'null') || # Repair Python keywords True, False, None parse_keyword('True', 'true') || parse_keyword('False', 'false') || parse_keyword('None', 'null') || # Repair Ruby keyword nil parse_keyword('nil', 'null') end |
#quote?(char) ⇒ Boolean
96 97 98 |
# File 'lib/json/repair/string_utils.rb', line 96 def quote?(char) double_quote_like?(char) || single_quote_like?(char) end |
#remove_at_index(text, start, count) ⇒ Object
160 161 162 |
# File 'lib/json/repair/string_utils.rb', line 160 def remove_at_index(text, start, count) text[0...start] + text[start + count..] end |
#single_quote?(char) ⇒ Boolean
104 105 106 |
# File 'lib/json/repair/string_utils.rb', line 104 def single_quote?(char) char == QUOTE end |
#single_quote_like?(char) ⇒ Boolean
112 113 114 |
# File 'lib/json/repair/string_utils.rb', line 112 def single_quote_like?(char) [QUOTE, QUOTE_LEFT, QUOTE_RIGHT, GRAVE_ACCENT, ACUTE_ACCENT].include?(char) end |
#special_whitespace?(char) ⇒ Boolean
89 90 91 92 93 94 |
# File 'lib/json/repair/string_utils.rb', line 89 def special_whitespace?(char) [ NON_BREAKING_SPACE, NARROW_NO_BREAK_SPACE, MEDIUM_MATHEMATICAL_SPACE, IDEOGRAPHIC_SPACE ].include?(char) || (char >= EN_QUAD && char <= HAIR_SPACE) end |
#start_of_value?(char) ⇒ Boolean
77 78 79 |
# File 'lib/json/repair/string_utils.rb', line 77 def start_of_value?(char) REGEX_START_OF_VALUE.match?(char) || (char && quote?(char)) end |
#strip_last_occurrence(text, text_to_strip, strip_remaining_text: false) ⇒ Object
Strip last occurrence of text_to_strip from text
117 118 119 120 121 122 123 |
# File 'lib/json/repair/string_utils.rb', line 117 def strip_last_occurrence(text, text_to_strip, strip_remaining_text: false) index = text.rindex(text_to_strip) return text unless index remaining_text = strip_remaining_text ? '' : text[index + 1..] text[0...index] + remaining_text end |
#valid_string_character?(char) ⇒ Boolean
65 66 67 |
# File 'lib/json/repair/string_utils.rb', line 65 def valid_string_character?(char) char.ord >= 0x20 && char.ord <= 0x10ffff end |