Packages
kvs
0.12.1
13.5.22-aleph
13.4.16
13.4.15
13.4.14
13.4.13
13.3.1
13.2.28
11.9.1
10.8.3
10.8.2
10.3.0
9.9.2
9.9.1
9.9.0
9.8.0
9.7.0
9.4.8
9.4.7
9.4.6
9.4.5
9.4.4
9.4.3
9.4.2
9.4.1
9.4.0
8.12.0
8.11.2
8.11.1
8.10.4
8.10.3
8.10.2
8.10.1
8.10.0
8.5.2
8.5.1
8.5.0
8.4.1
8.4.0
8.3.1
8.3.0
7.11.5
7.9.1
7.7.0
7.1.3
7.1.2
7.1.1
6.12.11
6.12.10
6.12.9
6.12.8
6.12.7
6.12.6
6.12.5
6.12.4
6.12.3
6.12.2
6.12.1
6.12.0
6.11.2
6.11.1
6.11.0
6.10.2
6.10.1
6.10.0
6.9.2
6.9.1
6.9.0
6.7.7
6.7.6
6.7.5
6.7.4
6.7.3
6.7.2
6.7.1
6.7.0
6.6.0
2.1.0
0.12.1
retired
KVS Key-Value Store Abstraction Layer
Retired package: Release invalid - ERROR
Current section
Files
Jump to
Current section
Files
src/i18n/po_scanner.erl
%% Author: dave
%% Created: Mar 1, 2010
%% Description: TODO: Add description to po_scanner
-module(po_scanner).
%%
%% Include files
%%
%%
%% Exported Functions
%%
-export([scan/1]).
%%
%% API Functions
%%
scan(Path) ->
case file:read_file(Path) of
{ok,File} ->
Str = re:replace(File, "\\\\n", "\\\n", [global, {return,list}]),
scan(Str, [], {1, 1}, [in_text]);
_Error ->
io:format("No po file found at path ~p~n",[Path]),
[]
end.
scan("#" ++ T, Scanned, {Row, Column}, Status = [in_text]) ->
scan(T, Scanned, {Row, Column + 1}, lists:append([{in_comment, []}],Status));
scan("\n" ++ T, Scanned, {Row, _Column}, [{in_comment, Comment}|Status]) ->
scan(T, lists:append(Scanned, [{comment, Comment}]), {Row +1 , 1}, Status);
scan([Head | T], Scanned, {Row, Column}, _Status = [{in_comment, Comment}|Stack]) ->
NewStatus = lists:append([{in_comment, lists:append(Comment,[Head])}],Stack),
scan(T, Scanned, {Row, Column + 1}, NewStatus);
%%Msg id
scan("msgid" ++ T, Scanned, {Row, Column}, Status = [in_text]) ->
scan(T, Scanned, {Row, Column + 5}, lists:append([{in_message_id, []}],Status));
%%scan("msgid" ++ T, Scanned, {Row, Column}, [{in_message_str, Body}|Stack]) ->
%% scan(T, lists:append(Scanned , [{str, Body}]), {Row, Column + 5}, lists:append([{in_message_id, []}],Stack));
scan("\n\n" ++ T, Scanned, {Row, _Column}, [{in_message_str, Body}|Stack]) ->
scan(T, lists:append(Scanned , [{str, Body}]), {Row + 2, 1}, Stack);
scan("\n", Scanned, {Row, _Column}, [{in_message_str, Body}|Stack]) ->
scan([], lists:append(Scanned , [{str, Body}]), {Row + 2, 1}, Stack);
%%Msg str
scan("msgstr" ++ T, Scanned, {Row, Column}, [{in_message_id, Body} | Stack]) ->
%%io:format("Id is ~s~n",[Body]),
scan(T, lists:append(Scanned ,[{id, Body}]), {Row, Column + 6}, lists:append([{in_message_str, []}],Stack));
scan([$\\, C|T], Scanned, {Row, Column}, [{in_string_body, Body}|Stack]) ->
scan(T, Scanned, {Row, Column + 2}, [{in_string_body, lists:append(Body, [C])} | Stack]);
%%Start and end for a message body
scan("\"" ++ T, Scanned, {Row, Column}, [{in_string_body, Body}|Stack]) ->
%%io:format("Ending string ~s ~p~n",[Body, Stack]),
end_of_string(Body, Stack, T, Scanned, Row, Column);
scan("\"" ++ T, Scanned, {Row, Column}, Stack) ->
scan(T, Scanned, {Row, Column + 1}, lists:append([{in_string_body, []}], Stack));
%%Carriage return are ignored
%% scan("\n" ++ T, Scanned, {Row, _Column}, Status) ->
%% scan(T, Scanned, {Row + 1, 1}, Status);
%%Concat string body to already parsed
scan([H | T] , Scanned, {Row, Column}, [{in_string_body, Body} | Stack]) ->
scan(T, Scanned, {Row, Column + 1}, [{in_string_body, lists:append(Body, [H])} | Stack]);
%%Others characters are ignored
scan([_H | T] , Scanned, {Row, Column}, Status) ->
scan(T, Scanned, {Row, Column + 1}, Status);
%%EOF
scan([], Scanned, {_Row, _Column}, _Stack) ->Scanned;
scan(In, Scanned, {_Row, _Column}, _Status) ->
io:format("Cannot process ~p, scanned ~p ~n",[In, Scanned]).
end_of_string(String, [{in_message_id, Body}|Stack] ,T, Scanned, Row, Column) ->
scan(T, Scanned, {Row, Column}, [{in_message_id, lists:append(Body ,String)} | Stack ]);
end_of_string(String, [{in_message_str, Body}|Stack] , T, Scanned, Row, Column) ->
scan(T, Scanned, {Row, Column }, [{in_message_str, lists:append(Body,String)} |Stack ]).
%%
%% Local Functions
%%