Implemented escaping of slash '/' only in case of '</' to avoid potential issue with javascript and </script> Many feature renaming to match Eiffel style and naming convention, kept previous feature as obsolete. Restructured the library to make easy extraction of "converter" classes if needed in the future. Updated part of the code to use new feature names.
125 lines
2.0 KiB
Plaintext
125 lines
2.0 KiB
Plaintext
note
|
|
description: "Objects that ..."
|
|
author: "jvelilla"
|
|
date: "2008/08/24"
|
|
revision: "0.1"
|
|
|
|
class
|
|
JSON_READER
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
make (a_json: STRING)
|
|
-- Initialize Reader
|
|
do
|
|
set_representation (a_json)
|
|
end
|
|
|
|
feature -- Commands
|
|
|
|
reset
|
|
-- Reset reader
|
|
do
|
|
index := 1
|
|
end
|
|
|
|
set_representation (a_json: STRING)
|
|
-- Set `representation'.
|
|
do
|
|
a_json.left_adjust
|
|
a_json.right_adjust
|
|
representation := a_json
|
|
reset
|
|
end
|
|
|
|
read: CHARACTER
|
|
-- Read character
|
|
do
|
|
if not representation.is_empty then
|
|
Result := representation.item (index)
|
|
end
|
|
end
|
|
|
|
next
|
|
-- Move to next index
|
|
require
|
|
has_more_elements: has_next
|
|
do
|
|
index := index + 1
|
|
ensure
|
|
incremented: old index + 1 = index
|
|
end
|
|
|
|
previous
|
|
-- Move to previous index
|
|
require
|
|
not_is_first: has_previous
|
|
do
|
|
index := index - 1
|
|
ensure
|
|
incremented: old index - 1 = index
|
|
end
|
|
|
|
skip_white_spaces
|
|
-- Remove white spaces
|
|
local
|
|
c: like actual
|
|
do
|
|
from
|
|
c := actual
|
|
until
|
|
(c /= ' ' and c /= '%N' and c /= '%R' and c /= '%U' and c /= '%T') or not has_next
|
|
loop
|
|
next
|
|
c := actual
|
|
end
|
|
end
|
|
|
|
json_substring (start_index, end_index: INTEGER_32): STRING
|
|
-- JSON representation between `start_index' and `end_index'
|
|
do
|
|
Result := representation.substring (start_index, end_index)
|
|
end
|
|
|
|
feature -- Status report
|
|
|
|
has_next: BOOLEAN
|
|
-- Has a next character?
|
|
do
|
|
Result := index <= representation.count
|
|
end
|
|
|
|
has_previous: BOOLEAN
|
|
-- Has a previous character?
|
|
do
|
|
Result := index >= 1
|
|
end
|
|
|
|
feature -- Access
|
|
|
|
representation: STRING
|
|
-- Serialized representation of the original JSON string
|
|
|
|
feature {NONE} -- Implementation
|
|
|
|
actual: CHARACTER
|
|
-- Current character or '%U' if none
|
|
do
|
|
if index > representation.count then
|
|
Result := '%U'
|
|
else
|
|
Result := representation.item (index)
|
|
end
|
|
end
|
|
|
|
index: INTEGER
|
|
-- Actual index
|
|
|
|
invariant
|
|
representation_not_void: representation /= Void
|
|
|
|
end
|