diff options
Diffstat (limited to 'lib/toolbar/src/toolbar_lib.erl')
-rw-r--r-- | lib/toolbar/src/toolbar_lib.erl | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/lib/toolbar/src/toolbar_lib.erl b/lib/toolbar/src/toolbar_lib.erl new file mode 100644 index 0000000000..9d3b9fdeb5 --- /dev/null +++ b/lib/toolbar/src/toolbar_lib.erl @@ -0,0 +1,223 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1996-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +-module(toolbar_lib). +-include_lib("kernel/include/file.hrl"). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Erlang Toolbar +% +%%% Description %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Library functions +% +%%% Exports %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +-export([gs_contribs_dir/0,help_file/0,otp_file/0]). +-export([error_string/1]). +-export([legal_file/1]). +-export([insert_newlines/1]). +-export([tool_info_syntax/2]). +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%% Exported functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------- +% gs_contribs_dir() => string() +% Return the directory of the GS contributions +%---------------------------------------- +gs_contribs_dir() -> + filename:join(code:lib_dir(gs),"contribs/ebin/"). + +%---------------------------------------- +% help_file() => string() +% Returns the address to the toolbar help file +%---------------------------------------- +help_file() -> + filename:join([code:lib_dir(toolbar),"doc", "html", "index.html"]). + +%---------------------------------------- +% otp_file() => string() +% Returns the address to the OTP documentation +%---------------------------------------- +otp_file() -> + filename:join([code:root_dir(),"doc", "index.html"]). + +%---------------------------------------- +% error_string(Reason) => string() +% Reason - nofile | format | noname | nostart | illegal | raccess | waccess +% Given Reason, returns a short "explanation string" +%---------------------------------------- +error_string(nofile) -> "File does not exist"; +error_string(format) -> "File on wrong format"; + +error_string(noname) -> "No tool name is specified"; +error_string(nostart) -> "No start function is specified"; + +error_string(illegal) -> "Illegal file name"; + +error_string(raccess) -> "File is not readable"; +error_string(waccess) -> "File is not writeable". + +%---------------------------------------- +% legal_file(File) => ok | directory | {error,nofile} | {error,raccess} +% File - string() File name +% Checks if File is an existing and readable file. +%---------------------------------------- +legal_file(File) -> + case file:read_file_info(File) of + + %% File exists... + {ok,#file_info{type=regular,access=Access}} -> + if + + %% ...but is read protected + Access/=read, + Access/=read_write -> + {error,raccess}; + + %% ...and is possible to read + true -> + ok + end; + + {ok,#file_info{type=directory}} -> + directory; + + %% File does not exist + _Error -> + {error,nofile} + end. + +%---------------------------------------- +% insert_newlines(Strings) => string() +% Strings - string() | [string()] +% If Strings is a list of strings, return a string where all these strings +% are concatenated with newlines in between, otherwise return Strings. +%---------------------------------------- +insert_newlines([String|Rest]) when is_list(String), Rest/=[]-> + String ++ "\n" ++ insert_newlines(Rest); +insert_newlines([Last]) -> + [Last]; +insert_newlines(Other) -> + Other. + +%---------------------------------------- +% tool_info_syntax(Version,ToolInfo) => {ok,CorrToolInfo} | {error,Reason} +% Version - string() +% ToolInfo - tuple() +% CorrToolInfo - list() +% Reason - version | format | noname | nostart +% Return a corrected (blanks removed etc) version of ToolInfo +% if the syntax of ToolInfo is correct (ie contains all +% mandatory elements and all values are of the specified type). +% +% Currently accepted versions: +% "0.1" (which should be "1.0") +% "1.1" (same as "0.1") +%---------------------------------------- +tool_info_syntax("1.1",ToolInfo) -> + tool_info_syntax("0.1",ToolInfo); +tool_info_syntax("0.1",ToolInfo) when is_tuple(ToolInfo) -> + syntax01(tuple_to_list(ToolInfo),false,false,[]); +tool_info_syntax("0.1",_) -> + {error,format}; +tool_info_syntax("1.2",ToolInfo) when is_list(ToolInfo)-> + syntax01(ToolInfo,false,false,[]); +tool_info_syntax(_Vsn,_) -> + {error,version}. + + +%%% Internal functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%---------------------------------------- +% syntax01(List,NameF,StartF,Res) => {ok,Res} | {error,Reason} +% List - [tuple()] +% NameF, StartF - boolean() +% Res - [tuple()] +% Reason - format | noname | nostart +% Version 0.1 syntax check of .tool file. +%---------------------------------------- +syntax01([{tool,Str}|Rest],false,StartF,Res) when is_list(Str) -> + case string:strip(Str) of + [] -> + {error,format}; + Tool -> + syntax01(Rest,true,StartF,[{tool,Tool}|Res]) + end; +syntax01([{start,{M,F,A}}|Rest],NameF,false,Res) when is_atom(M), + is_atom(F), + is_list(A) -> + syntax01(Rest,NameF,true,[{start,{M,F,A}}|Res]); +syntax01([{icon,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> + case string:strip(Str) of + [] -> + syntax01(Rest,NameF,StartF,Res); + Icon -> + syntax01(Rest,NameF,StartF,[{icon,Icon}|Res]) + end; +syntax01([{message,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> + case string:strip(Str) of + [] -> + syntax01(Rest,NameF,StartF,Res); + Message -> + syntax01(Rest,NameF,StartF, + [{message,lists:sublist(Message,1,30)}|Res]) + end; +syntax01([{html,Str}|Rest],NameF,StartF,Res) when is_list(Str) -> + case string:strip(Str) of + [] -> + syntax01(Rest,NameF,StartF,Res); + Html -> + syntax01(Rest,NameF,StartF,[{html,Html}|Res]) + end; +%%The fields used by webtool must be removed +syntax01([_|Rest],NameF,StartF,Res) -> + syntax01(Rest,NameF,StartF,Res); + +syntax01([],true,true,Res) -> + {ok,Res}; +syntax01([],false,_,_) -> + {error,noname}; +syntax01([],_,false,_) -> + {error,nostart}; +syntax01(_,_,_,_) -> + {error,format}. + + + + + + + + + + + + + + + + + + + + + |