Current section
11 Versions
Jump to
Current section
11 Versions
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…