Current section

11 Versions

Jump to

Compare versions

6 files changed
+27 additions
-58 deletions
  @@ -9,7 +9,7 @@ The package can be installed by adding `jsonc` to your list of dependencies in `
9 9 ```elixir
10 10 def deps do
11 11 [
12 - {:jsonc, "~> 0.8.0"}
12 + {:jsonc, "~> 0.9.0"}
13 13 ]
14 14 end
15 15 ```
  @@ -3,8 +3,8 @@
3 3 {<<"description">>,<<"utilities to work with jsonc, a superset of json">>}.
4 4 {<<"elixir">>,<<"~> 1.13">>}.
5 5 {<<"files">>,
6 - [<<"lib">>,<<"lib/decoder.ex">>,<<"lib/transcoder.ex">>,<<"lib/jsonc.ex">>,
7 - <<"lib/parser.ex">>,<<"lib/tokenizer.ex">>,<<"mix.exs">>,<<"README.md">>,
6 + [<<"lib">>,<<"lib/jsonc.ex">>,<<"lib/parser.ex">>,<<"lib/tokenizer.ex">>,
7 + <<"lib/transcoder.ex">>,<<"lib/decoder.ex">>,<<"mix.exs">>,<<"README.md">>,
8 8 <<"LICENSE">>]}.
9 9 {<<"licenses">>,[<<"Apache-2.0">>]}.
10 10 {<<"links">>,
  @@ -12,4 +12,4 @@
12 12 {<<"jsonc">>,<<"https://komkom.github.io/jsonc-playground">>}]}.
13 13 {<<"name">>,<<"jsonc">>}.
14 14 {<<"requirements">>,[]}.
15 - {<<"version">>,<<"0.8.0">>}.
15 + {<<"version">>,<<"0.9.0">>}.
  @@ -39,7 +39,7 @@ defmodule JSONC do
39 39 ```
40 40 defp deps do
41 41 [
42 - {:jsonc, "~> 0.8.0"}
42 + {:jsonc, "~> 0.9.0"}
43 43 ]
44 44 end
45 45 ```
  @@ -14,13 +14,7 @@ defmodule JSONC.Parser do
14 14 end
15 15
16 16 def parse(content) when is_binary(content) do
17 - case parse_value({content, cursor: {1, 1}, token: nil}, :root) do
18 - {:ok, result} ->
19 - {:ok, result}
20 -
21 - {:error, reason} ->
22 - {:error, reason}
23 - end
17 + parse_value({content, cursor: {1, 1}, token: nil}, :root)
24 18 end
25 19
26 20 defp parse_value(state, context \\ :other) do
  @@ -210,8 +204,6 @@ defmodule JSONC.Parser do
210 204 state}
211 205 end
212 206
213 - # end
214 -
215 207 {{:delimiter, :comma} = token, line, column} when list == [] ->
216 208 {:error, "unexpected token `#{token |> inspect()}` at line #{line} column #{column}"}
  @@ -292,22 +292,20 @@ defmodule JSONC.Tokenizer do
292 292 _ ->
293 293 <<first::utf8, second::utf8, third::utf8, fourth::utf8, rest::binary>> = rest
294 294
295 - try do
296 - String.to_integer(
295 + case Integer.parse(
297 296 "#{<<first::utf8>>}#{<<second::utf8>>}#{<<third::utf8>>}#{<<fourth::utf8>>}",
298 297 16
299 - )
300 - rescue
301 - ArgumentError ->
302 - {{:error,
303 - "invalid hex sequence #{<<first::utf8>>}#{<<second::utf8>>}#{<<third::utf8>>}#{<<fourth::utf8>>}"},
304 - {rest, cursor: {line, column + 6}, token: nil}}
305 - else
306 - code ->
298 + ) do
299 + {code, ""} ->
307 300 next(
308 301 {rest, cursor: {line, column + 6}, token: token},
309 302 {:string, string_type, "#{storage}#{<<code::utf8>>}"}
310 303 )
304 +
305 + _ ->
306 + {{:error,
307 + "invalid hex sequence #{<<first::utf8>>}#{<<second::utf8>>}#{<<third::utf8>>}#{<<fourth::utf8>>}"},
308 + {rest, cursor: {line, column + 6}, token: nil}}
311 309 end
312 310 end
313 311 end
  @@ -365,41 +363,20 @@ defmodule JSONC.Tokenizer do
365 363 end
366 364
367 365 defp handle_generic(generic) when is_binary(generic) do
368 - try do
369 - String.to_float(generic)
370 - rescue
371 - ArgumentError ->
372 - try do
373 - String.to_integer(generic)
374 - rescue
375 - ArgumentError ->
376 - case String.split(generic, "e") do
377 - [base, exponent] ->
378 - try do
379 - {String.to_integer(base), String.to_integer(exponent)}
380 - rescue
381 - ArgumentError ->
382 - {:string, {:free, generic}}
383 - else
384 - {base, exponent} ->
385 - try do
386 - String.to_float("#{base / 1}e#{exponent}")
387 - rescue
388 - ArgumentError ->
389 - {:string, {:free, generic}}
390 - else
391 - float -> {:number, {:float, float}}
392 - end
393 - end
366 + case Integer.parse(generic) do
367 + {integer, ""} ->
368 + {:number, {:integer, integer}}
394 369
395 - [generic] ->
370 + _ ->
371 + try do
372 + Float.parse(generic)
373 + rescue
374 + ArgumentError ->
396 375 {:string, {:free, generic}}
397 - end
398 376 else
399 - integer -> {:number, {:integer, integer}}
400 - end
401 - else
402 - float -> {:number, {:float, float}}
377 + {float, ""} -> {:number, {:float, float}}
378 + _ -> {:string, {:free, generic}}
379 + end
403 380 end
404 381 end
405 382 end
Loading more files…