TinTin++ Mud Client The TinTin++ message board

 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
TinTin++ Mud Client

Variable Magic

 
Post new topic   Reply to topic    The TinTin++ message board Forum Index -> Finished Scripts
View previous topic :: View next topic  
Author Message
LokiChaos



Joined: 27 Oct 2009
Posts: 61

PostPosted: Tue Apr 19, 2016 12:12 am    Post subject: Variable Magic Reply with quote

Because I have finally gotten tired of trying to manually parse large tables without any linebreaks or spacing...

I built this little tool:
printVar <var> [<format>]
dumpVar <var> [<format>] [<file>]
dumpAllVar [<format>] [<file>]

format values: color, nocolor, json, tintin
color is default for print, nocolor is default for dump
If no file is given dump.var is the default file name, path will be tintin++ pwd.

I am working out a few minor bugs, mostly with regards to escaping things for json/tintin modes.
(Basically nonprinting chars and <...> color sequences need to be escaped)



I'll put up a link once I integrate it into my script framework on github.

Code:

#alias {printVar} {
   #if {"%1" == ""} {
      #echo {printVar needs a variable name};
   };
   #else {
      #if {"&{%1}" == "0"} {
         #echo {\${%s} does not exist.} {%1};
      };
      #else {
         #switch {"%2"} {
            #case {"nocolor"} {
               #var _:DVC[format] {nocolor};
            };
            #case {"{tintin|tt}"} {
               #var _:DVC[format] {tintin};
            };
            #case {"json"} {
               #var _:DVC[format] {json};
            };
            #default {
               #var _:DVC[format] {color};
            };
         };
         _procVar {%1} {print} {${_:DVC[format]}} {nil} {2};
         #unvar _:DVC;
      };
   };
}

#alias {dumpVar} {
   #if {"%1" == ""} {
      #echo {dumpVar needs a variable name};
   };
   #else {
      #if {"&{%1}" == "0"} {
         #echo {\${%s} does not exist.} {%1};
      };
      #else {
         #switch {"%2"} {
            #case {"color"} {
               #var _:DVC[format] {color};
            };
            #case {"{tintin|tt}"} {
               #var _:DVC[format] {tintin};
            };
            #case {"json"} {
               #var _:DVC[format] {json};
            };
            #default {
               #var _:DVC[format] {nocolor};
            };
         };
         #if {"%3" == ""} {
            #var _:DVC[file] {dump.var};
         } {
            #var _:DVC[file] {%3};
         };
         #echo {Dumping '\$\{%1\}' to file %s...} {${_:DVC[file]}};
         _procVar {%1} {dump} {${_:DVC[format]}} {${_:DVC[file]}} {4};
         #unvar _:DVC;
      };
   };
}

#alias {dumpAllVar} {
   #forall {${[]}} {
      dumpVar {&0} {%2} {%3};
   };
};

/* varName dump/print format filename */
#alias {_procVar} {
   #var _:DV[cmdTbl] {
      {print}{#echo}
      {dump}{#line log {%4}}
   };
   #var _:DV[cmd]    {${_:DV[cmdTbl][%2]}};
   #var _:DV[fmt]    {%3};
   #var _:DV[indent] {%5};
   #var _:DV[format] {
      {nocolor}{
         {varVal}{\$\{%s\} = '%s'}
         {varNull}{\$\{%s\} = null}
         {varInt}{\$\{%s\} = %s}
         {varList}{\$\{%s\} = \x7B}
         {varEnd}{ \x7D}
         {listStart}{%s = \x7B}
         {keyVal}{%s = '%s'}
         {keyNull}{%s = null}
         {keyInt}{%s = %s}
         {listEnd}{ \x7D}
      }
      {color}{
         {varVal}{<149>\$\{%s\} <139>=<099> '%s'}
         {varNull}{<149>\$\{%s\} <139>= <119>null<099>}
         {varInt}{<149>\$\{%s\} <139>= <129>%s<099>}
         {varList}{<149>\$\{%s\} <139>= <149>\x7B}
         {varEnd}{ <149>\x7D}
         {listStart}{<149>%s <139>= <149>\x7B}
         {keyVal}{<149>%s <139>=<099> '%s'}
         {keyNull}{<149>%s <139>= <119>null<099>}
         {keyInt}{<149>%s <139>= <129>%s<099>}
         {listEnd}{ <149>\x7D}
      }
      {tintin}{
         {varVal}{#VAR \x7B%s\x7D \x7B%s\x7D}
         {varNull}{#VAR \x7B%s\x7D \x7B\x7D}
         {varInt}{#VAR \x7B%s\x7D \x7B%s\x7D}
         {varList}{#VAR \x7B%s\x7D \x7B}
         {varEnd}{\x7D}
         {listStart}{\x7B%s\x7D\x7B}
         {keyVal}{\x7B%s\x7D\x7B%s\x7D}
         {keyNull}{\x7B%s\x7D\x7B%s\x7D}
         {keyInt}{\x7B%s\x7D\x7B%s\x7D}
         {listEnd}{\x7D}
      }
      {json}{
         {varVal}{\x7B\n "%s": "%s"\n\x7D}
         {varNull}{\x7B\n "%s": null\n\x7D}
         {varInt}{\x7B\n "%s": %s\n\x7D}
         {varList}{\x7B\n "%s": \x7B}
         {varEnd}{ \x7D\n\x7D}
         {listStart}{"%s": \x7B}
         {keyVal}{"%s": "%s"}
         {keyNull}{"%s": null}
         {keyInt}{"%s": %s}
         {listEnd}{\x7D}
      }
   };
   #if {"&{%1[]}" == "0"} {
      #if {"${%1}" == ""} {
            #format _:DV[print] {${_:DV[format][${_:DV[fmt]}][varNull]}} {%1};
      };
      #else {
         #regex {${%1}} {^{[0-9-]+}$} {
            #format _:DV[print] {${_:DV[format][${_:DV[fmt]}][varInt]}} {%1} {${%1}};
         
         } {
            #format _:DV[print] {${_:DV[format][${_:DV[fmt]}][varVal]}} {%1} {${%1}};
         };
      };
      ${_:DV[cmd]} {${_:DV[print]}};
   };
   #else {
      #format _:DV[print] {${_:DV[format][${_:DV[fmt]}][varList]}} {%1};
      ${_:DV[cmd]} {${_:DV[print]}};
      procTable {%1} {0};
      #unvar _:TP;
      #format _:DV[print] {${_:DV[format][${_:DV[fmt]}][varEnd]}};
      ${_:DV[cmd]} {${_:DV[print]}};
   };
   #unvar _:DV;
};


#alias {procTable} {
   #var _:TP[%1][table]  {${%1}};
   #math _:TP[%1][indent] {%2 + ${_:DV[indent]}};
   #foreach {${_:TP[%1][table][]}} {_:TP[%1][key]} {
      #if {"&{_:TP[%1][table][${_:TP[%1][key]}][]}" != "0"} {
         #format _:TP[print] {%+${_:TP[%1][indent]}s${_:DV[format][${_:DV[fmt]}][listStart]}}  { } {${_:TP[%1][key]}};
         ${_:DV[cmd]} {${_:TP[print]}};
         procTable {_:TP[%1][table][${_:TP[%1][key]}]} {${_:TP[%1][indent]}};
         #format _:TP[print] {%+${_:TP[%1][indent]}s${_:DV[format][${_:DV[fmt]}][listEnd]}} { };
         #if {"${_:DV[fmt]}" == "json"} {
            #list _:TPT create {${_:TP[%1][table][]}};
            #if {"${_:TP[%1][key]}" != "${_:TPT[-1]}"} {
               #var _:TP[print] {${_:TP[print]},};
            };
            #unvar _:TPT;
         };
         ${_:DV[cmd]} {${_:TP[print]}};
      };
      #else {
         #if {"${_:TP[%1][table][${_:TP[%1][key]}]}" == ""} {
            #format _:TP[print] {%+${_:TP[%1][indent]}s${_:DV[format][${_:DV[fmt]}][keyNull]}} { } {${_:TP[%1][key]}};
         };
         #else {
            #regex {${_:TP[%1][table][${_:TP[%1][key]}]}} {^{[0-9-]+}$} {
               #format _:TP[print] {%+${_:TP[%1][indent]}s${_:DV[format][${_:DV[fmt]}][keyInt]}} { } {${_:TP[%1][key]}} {${_:TP[%1][table][${_:TP[%1][key]}]}};
            } {
               #format _:TP[print] {%+${_:TP[%1][indent]}s${_:DV[format][${_:DV[fmt]}][keyVal]}} { } {${_:TP[%1][key]}} {${_:TP[%1][table][${_:TP[%1][key]}]}};
            };
         };
         #if {"${_:DV[fmt]}" == "json"} {
            #list _:TPT create {${_:TP[%1][table][]}};
            #if {"${_:TP[%1][key]}" != "${_:TPT[-1]}"} {
               #var _:TP[print] {${_:TP[print]},};
            };
            #unvar _:TPT;
         };
         ${_:DV[cmd]} {${_:TP[print]}};
      };
   };
   #var _:TP[%1] {};
}
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    The TinTin++ message board Forum Index -> Finished Scripts All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Get TinTin++ Mud Client at SourceForge.net. Fast, secure and Free Open Source software downloads Get TinTin++ Mud Client at SourceForge.net. Fast, secure and Free Open Source software downloads
TinTin++ Homepage

Powered by phpBB © 2001, 2002 phpBB Group