Skip to content

Commit f45a9a4

Browse files
committed
single-quoted strings represent charlists. Use ~c"" if you indeed want a charlist or use "" instead
1 parent dd76829 commit f45a9a4

15 files changed

+355
-236
lines changed

lib/xlsxir/convert_date.ex

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,35 @@ defmodule Xlsxir.ConvertDate do
1010
1111
## Parameters
1212
13-
- `serial` - ISO 8601 date format serial in `char_list` format (i.e. 4/30/75 as '27514')
13+
- `serial` - ISO 8601 date format serial in `char_list` format (i.e. 4/30/75 as ~c"27514")
1414
1515
## Example
1616
17-
iex> Xlsxir.ConvertDate.from_serial('27514')
17+
iex> Xlsxir.ConvertDate.from_serial(~c"27514")
1818
{1975, 4, 30}
1919
"""
2020
def from_serial(serial) do
21-
f_serial = serial
22-
|> convert_char_number
23-
|> is_float
24-
|> case do
25-
false -> List.to_integer(serial)
26-
true -> serial
27-
|> List.to_float()
28-
|> Float.floor
29-
|> round
30-
end
21+
f_serial =
22+
serial
23+
|> convert_char_number
24+
|> is_float
25+
|> case do
26+
false ->
27+
List.to_integer(serial)
28+
29+
true ->
30+
serial
31+
|> List.to_float()
32+
|> Float.floor()
33+
|> round
34+
end
3135

3236
# Convert to gregorian days and get date from that
33-
gregorian = f_serial - 2 + # adjust two days for first and last day since base year
34-
date_to_days({1900, 1, 1}) # Add days in base year 1900
37+
# adjust two days for first and last day since base year
38+
# Add days in base year 1900
39+
gregorian =
40+
f_serial - 2 +
41+
date_to_days({1900, 1, 1})
3542

3643
gregorian
3744
|> days_to_date
@@ -50,11 +57,14 @@ defmodule Xlsxir.ConvertDate do
5057
str
5158
|> String.match?(~r/[.eE]/)
5259
|> case do
53-
false -> List.to_integer(number)
54-
true -> case Float.parse(str) do
55-
{f, _} -> f
56-
_ -> raise "Invalid Float"
57-
end
58-
end
60+
false ->
61+
List.to_integer(number)
62+
63+
true ->
64+
case Float.parse(str) do
65+
{f, _} -> f
66+
_ -> raise "Invalid Float"
67+
end
68+
end
5969
end
6070
end

lib/xlsxir/convert_datetime.ex

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,20 @@ defmodule Xlsxir.ConvertDateTime do
1414
1515
## Example
1616
17-
iex> Xlsxir.ConvertDateTime.from_charlist('41261.6013888889')
17+
iex> Xlsxir.ConvertDateTime.from_charlist(~c"41261.6013888889")
1818
~N[2012-12-18 14:26:00]
1919
"""
20-
def from_charlist('0'), do: {0, 0, 0}
20+
def from_charlist(~c"0"), do: {0, 0, 0}
21+
2122
def from_charlist(charlist) do
2223
charlist
23-
|> List.to_float
24+
|> List.to_float()
2425
|> from_float
2526
end
2627

2728
def from_float(n) when is_float(n) do
28-
n = if n > 59, do: n - 1, else: n # Lotus bug
29+
# Lotus bug
30+
n = if n > 59, do: n - 1, else: n
2931
convert_from_serial(n)
3032
end
3133

@@ -36,6 +38,7 @@ defmodule Xlsxir.ConvertDateTime do
3638

3739
{hours, minutes, seconds}
3840
end
41+
3942
defp convert_from_serial(n) when is_float(n) do
4043
{whole_days, fractional_day} = split_float(n)
4144
{hours, minutes, seconds} = convert_from_serial(fractional_day)
@@ -48,9 +51,11 @@ defmodule Xlsxir.ConvertDateTime do
4851
end
4952

5053
defp split_float(f) do
51-
whole = f
52-
|> Float.floor
54+
whole =
55+
f
56+
|> Float.floor()
5357
|> round
58+
5459
{whole, f - whole}
5560
end
5661
end

lib/xlsxir/parse_string.ex

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,27 @@ defmodule Xlsxir.ParseString do
2222
%__MODULE__{tid: GenServer.call(Xlsxir.StateManager, :new_table)}
2323
end
2424

25-
def sax_event_handler({:startElement,_,'si',_,_}, %__MODULE__{tid: tid, index: index}), do: %__MODULE__{tid: tid, index: index}
25+
def sax_event_handler({:startElement, _, ~c"si", _, _}, %__MODULE__{tid: tid, index: index}),
26+
do: %__MODULE__{tid: tid, index: index}
2627

27-
def sax_event_handler({:startElement,_,'family',_,_}, state) do
28+
def sax_event_handler({:startElement, _, ~c"family", _, _}, state) do
2829
%{state | family: true}
2930
end
3031

31-
def sax_event_handler({:characters, value},
32-
%__MODULE__{family_string: fam_str} = state) do
33-
value = value |> to_string
34-
%{state | family_string: fam_str <> value}
32+
def sax_event_handler(
33+
{:characters, value},
34+
%__MODULE__{family_string: fam_str} = state
35+
) do
36+
value = value |> to_string
37+
%{state | family_string: fam_str <> value}
3538
end
3639

37-
def sax_event_handler({:endElement,_,'si',_},
38-
%__MODULE__{family_string: fam_str, tid: tid, index: index} = state) do
39-
:ets.insert(tid, {index, fam_str})
40-
%{state | index: index + 1}
40+
def sax_event_handler(
41+
{:endElement, _, ~c"si", _},
42+
%__MODULE__{family_string: fam_str, tid: tid, index: index} = state
43+
) do
44+
:ets.insert(tid, {index, fam_str})
45+
%{state | index: index + 1}
4146
end
4247

4348
def sax_event_handler(_, state), do: state

lib/xlsxir/parse_style.ex

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ defmodule Xlsxir.ParseStyle do
3939

4040
@doc """
4141
Sax event utilized by `Xlsxir.SaxParser.parse/2`. Takes a pattern and the current state of a struct and recursivly parses the
42-
styles XML file, ultimately saving each parsed style type to the ETS process. The style types generated are `nil` for numbers and `'d'` for dates.
42+
styles XML file, ultimately saving each parsed style type to the ETS process. The style types generated are `nil` for numbers and `~c"d"` for dates.
4343
4444
## Parameters
4545
@@ -48,29 +48,29 @@ defmodule Xlsxir.ParseStyle do
4848
4949
## Example
5050
Recursively sends style types generated from parsing the `xl/sharedStrings.xml` file to ETS process. The data can ultimately
51-
be retreived from the ETS table (i.e. `:ets.lookup(tid, 0)` would return `nil` or `'d'` depending on each style type generated).
51+
be retreived from the ETS table (i.e. `:ets.lookup(tid, 0)` would return `nil` or `~c"d"` depending on each style type generated).
5252
"""
5353
def sax_event_handler(:startDocument, _state) do
5454
%__MODULE__{tid: GenServer.call(Xlsxir.StateManager, :new_table)}
5555
end
5656

57-
def sax_event_handler({:startElement, _, 'cellXfs', _, _}, state) do
57+
def sax_event_handler({:startElement, _, ~c"cellXfs", _, _}, state) do
5858
%{state | cellxfs: true}
5959
end
6060

61-
def sax_event_handler({:endElement, _, 'cellXfs', _}, state) do
61+
def sax_event_handler({:endElement, _, ~c"cellXfs", _}, state) do
6262
%{state | cellxfs: false}
6363
end
6464

6565
def sax_event_handler(
66-
{:startElement, _, 'xf', _, xml_attr},
66+
{:startElement, _, ~c"xf", _, xml_attr},
6767
%__MODULE__{num_fmt_ids: num_fmt_ids} = state
6868
) do
6969
if state.cellxfs do
7070
xml_attr
7171
|> Enum.filter(fn attr ->
7272
case attr do
73-
{:attribute, 'numFmtId', _, _, _} -> true
73+
{:attribute, ~c"numFmtId", _, _, _} -> true
7474
_ -> false
7575
end
7676
end)
@@ -79,22 +79,22 @@ defmodule Xlsxir.ParseStyle do
7979
%{state | num_fmt_ids: num_fmt_ids ++ [id]}
8080

8181
_ ->
82-
%{state | num_fmt_ids: num_fmt_ids ++ ['0']}
82+
%{state | num_fmt_ids: num_fmt_ids ++ [~c"0"]}
8383
end
8484
else
8585
state
8686
end
8787
end
8888

8989
def sax_event_handler(
90-
{:startElement, _, 'numFmt', _, xml_attr},
90+
{:startElement, _, ~c"numFmt", _, xml_attr},
9191
%__MODULE__{custom_style: custom_style} = state
9292
) do
9393
temp =
9494
Enum.reduce(xml_attr, %{}, fn attr, acc ->
9595
case attr do
96-
{:attribute, 'numFmtId', _, _, id} -> Map.put(acc, :id, id)
97-
{:attribute, 'formatCode', _, _, cd} -> Map.put(acc, :cd, cd)
96+
{:attribute, ~c"numFmtId", _, _, id} -> Map.put(acc, :id, id)
97+
{:attribute, ~c"formatCode", _, _, cd} -> Map.put(acc, :cd, cd)
9898
_ -> nil
9999
end
100100
end)
@@ -112,7 +112,7 @@ defmodule Xlsxir.ParseStyle do
112112
Enum.reduce(num_fmt_ids, 0, fn style_type, acc ->
113113
case List.to_integer(style_type) do
114114
i when i in @num -> :ets.insert(tid, {index + acc, nil})
115-
i when i in @date -> :ets.insert(tid, {index + acc, 'd'})
115+
i when i in @date -> :ets.insert(tid, {index + acc, ~c"d"})
116116
_ -> add_custom_style(tid, style_type, custom_type, index + acc)
117117
end
118118

@@ -129,7 +129,7 @@ defmodule Xlsxir.ParseStyle do
129129
|> Enum.reduce(%{}, fn {k, v}, acc ->
130130
cond do
131131
String.match?(to_string(v), ~r/\bred\b/i) -> Map.put_new(acc, k, nil)
132-
String.match?(to_string(v), ~r/[dhmsy]/i) -> Map.put_new(acc, k, 'd')
132+
String.match?(to_string(v), ~r/[dhmsy]/i) -> Map.put_new(acc, k, ~c"d")
133133
true -> Map.put_new(acc, k, nil)
134134
end
135135
end)

lib/xlsxir/parse_workbook.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ defmodule Xlsxir.ParseWorkbook do
1212
%__MODULE__{tid: GenServer.call(Xlsxir.StateManager, :new_table)}
1313
end
1414

15-
def sax_event_handler({:startElement, _, 'sheet', _, xml_attrs}, state) do
15+
def sax_event_handler({:startElement, _, ~c"sheet", _, xml_attrs}, state) do
1616
sheet =
1717
Enum.reduce(xml_attrs, %{name: nil, sheet_id: nil, rid: nil}, fn attr, sheet ->
1818
case attr do
19-
{:attribute, 'name', _, _, name} ->
19+
{:attribute, ~c"name", _, _, name} ->
2020
%{sheet | name: name |> to_string}
2121

22-
{:attribute, 'sheetId', _, _, sheet_id} ->
22+
{:attribute, ~c"sheetId", _, _, sheet_id} ->
2323
{sheet_id, _} = sheet_id |> to_string |> Integer.parse()
2424
%{sheet | sheet_id: sheet_id}
2525

26-
{:attribute, 'id', _, _, rid} ->
26+
{:attribute, ~c"id", _, _, rid} ->
2727
"rId" <> rid = rid |> to_string
2828
{rid, _} = Integer.parse(rid)
2929
%{sheet | rid: rid}

lib/xlsxir/parse_worksheet.ex

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,19 @@ defmodule Xlsxir.ParseWorksheet do
5555
end
5656

5757
def sax_event_handler(
58-
{:startElement, _, 'row', _, _},
58+
{:startElement, _, ~c"row", _, _},
5959
%__MODULE__{tid: tid, max_rows: max_rows},
6060
_excel,
6161
_
6262
) do
6363
%__MODULE__{tid: tid, max_rows: max_rows}
6464
end
6565

66-
def sax_event_handler({:startElement, _, 'c', _, xml_attr}, state, %{styles: styles_tid}, _) do
66+
def sax_event_handler({:startElement, _, ~c"c", _, xml_attr}, state, %{styles: styles_tid}, _) do
6767
a =
6868
Enum.reduce(xml_attr, %{}, fn attr, acc ->
6969
case attr do
70-
{:attribute, 's', _, _, style} ->
70+
{:attribute, ~c"s", _, _, style} ->
7171
Map.put(acc, "s", find_styles(styles_tid, List.to_integer(style)))
7272

7373
{:attribute, key, _, _, ref} ->
@@ -80,19 +80,20 @@ defmodule Xlsxir.ParseWorksheet do
8080
%{state | cell_ref: cell_ref, num_style: num_style, data_type: data_type}
8181
end
8282

83-
def sax_event_handler({:startElement, _, 'f', _, _}, state, _, _) do
83+
def sax_event_handler({:startElement, _, ~c"f", _, _}, state, _, _) do
8484
%{state | value_type: :formula}
8585
end
8686

87-
def sax_event_handler({:startElement, _, el, _, _}, state, _, _) when el in ['v', 't'] do
87+
def sax_event_handler({:startElement, _, el, _, _}, state, _, _) when el in [~c"v", ~c"t"] do
8888
%{state | value_type: :value}
8989
end
9090

91-
def sax_event_handler({:endElement, _, el, _, _}, state, _, _) when el in ['f', 'v', 't'] do
91+
def sax_event_handler({:endElement, _, el, _, _}, state, _, _)
92+
when el in [~c"f", ~c"v", ~c"t"] do
9293
%{state | value_type: nil}
9394
end
9495

95-
def sax_event_handler({:startElement, _, 'is', _, _}, state, _, _),
96+
def sax_event_handler({:startElement, _, ~c"is", _, _}, state, _, _),
9697
do: %{state | value_type: :value}
9798

9899
def sax_event_handler({:characters, value}, state, _, _) do
@@ -103,7 +104,7 @@ defmodule Xlsxir.ParseWorksheet do
103104
end
104105
end
105106

106-
def sax_event_handler({:endElement, _, 'c', _}, %__MODULE__{row: row} = state, excel, _) do
107+
def sax_event_handler({:endElement, _, ~c"c", _}, %__MODULE__{row: row} = state, excel, _) do
107108
cell_value = format_cell_value(excel, [state.data_type, state.num_style, state.value])
108109
new_cell = [to_string(state.cell_ref), cell_value]
109110

@@ -118,7 +119,7 @@ defmodule Xlsxir.ParseWorksheet do
118119
end
119120

120121
def sax_event_handler(
121-
{:endElement, _, 'row', _},
122+
{:endElement, _, ~c"row", _},
122123
%__MODULE__{tid: tid, max_rows: max_rows} = state,
123124
_excel,
124125
_
@@ -180,7 +181,7 @@ defmodule Xlsxir.ParseWorksheet do
180181
acc + char - 65 + 1
181182
end)
182183

183-
"#{column_from_index(col_index + 1, '')}#{line}"
184+
"#{column_from_index(col_index + 1, ~c"")}#{line}"
184185
end
185186

186187
def fill_empty_cells(from, from, _line, cells), do: Enum.reverse(cells)
@@ -202,22 +203,22 @@ defmodule Xlsxir.ParseWorksheet do
202203
# Empty cell with assigned attribute
203204
[_, _, ""] -> nil
204205
# Type error
205-
['e', _, e] -> List.to_string(e)
206+
[~c"e", _, e] -> List.to_string(e)
206207
# Type string
207-
['s', _, i] -> find_string(strings_tid, List.to_integer(i))
208+
[~c"s", _, i] -> find_string(strings_tid, List.to_integer(i))
208209
# Type number
209210
[nil, nil, n] -> convert_char_number(n)
210-
['n', nil, n] -> convert_char_number(n)
211+
[~c"n", nil, n] -> convert_char_number(n)
211212
# ISO 8601 type date
212-
[nil, 'd', d] -> convert_date_or_time(d)
213-
['n', 'd', d] -> convert_date_or_time(d)
214-
['d', 'd', d] -> convert_iso_date(d)
213+
[nil, ~c"d", d] -> convert_date_or_time(d)
214+
[~c"n", ~c"d", d] -> convert_date_or_time(d)
215+
[~c"d", ~c"d", d] -> convert_iso_date(d)
215216
# Type formula w/ string
216-
['str', _, s] -> List.to_string(s)
217+
[~c"str", _, s] -> List.to_string(s)
217218
# Type boolean
218-
['b', _, s] -> s == '1'
219+
[~c"b", _, s] -> s == ~c"1"
219220
# Type string
220-
['inlineStr', _, s] -> List.to_string(s)
221+
[~c"inlineStr", _, s] -> List.to_string(s)
221222
# Unmapped type
222223
_ -> raise "Unmapped attribute #{Enum.at(list, 0)}. Unable to process"
223224
end

lib/xlsxir/stream_worksheet.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ defmodule Xlsxir.StreamWorksheet do
3434
%ParseWorksheet{}
3535
end
3636

37-
def sax_event_handler({:endElement, _, 'row', _}, state, _excel) do
37+
def sax_event_handler({:endElement, _, ~c"row", _}, state, _excel) do
3838
unless Enum.empty?(state.row) do
3939
value = state.row |> Enum.reverse()
4040

0 commit comments

Comments
 (0)