86 lines
1.7 KiB
C++
86 lines
1.7 KiB
C++
#ifndef __NASAL_PRINT_H__
|
|
#define __NASAL_PRINT_H__
|
|
|
|
#include<iostream>
|
|
#include<cstring>
|
|
#include "nasal_hash.cpp"
|
|
#include "nasal_list.cpp"
|
|
|
|
namespace nasal
|
|
{
|
|
|
|
void PrintString(std::string &PrintInfo)
|
|
{
|
|
for(int i=0;i<(int)PrintInfo.length();++i)
|
|
{
|
|
if(PrintInfo[i]=='\\' && i+1<(int)PrintInfo.length())
|
|
{
|
|
switch(PrintInfo[i+1])
|
|
{
|
|
case 'n':
|
|
std::cout<<"\n";
|
|
++i;
|
|
break;
|
|
case 't':
|
|
std::cout<<"\t";
|
|
++i;
|
|
break;
|
|
case 'r':
|
|
std::cout<<"\r";
|
|
++i;
|
|
break;
|
|
case '\\':
|
|
std::cout<<"\\";
|
|
++i;
|
|
break;
|
|
case '\'':
|
|
std::cout<<"\'";
|
|
++i;
|
|
break;
|
|
case '\"':
|
|
std::cout<<"\"";
|
|
++i;
|
|
break;
|
|
default:
|
|
//error occurred
|
|
std::cout<<"[Error]: Incorrect escape character \'"<<PrintInfo[i]<<PrintInfo[i+1]<<"\' .";
|
|
++i;
|
|
break;
|
|
}
|
|
}
|
|
else if(PrintInfo[i]=='\\' && i+1>=(int)PrintInfo.length())
|
|
{
|
|
//error occurred
|
|
std::cout<<"[Error]: Missing character after \'\\\'";
|
|
}
|
|
else
|
|
std::cout<<PrintInfo[i];
|
|
}
|
|
return;
|
|
}
|
|
void PrintVar(var Var)
|
|
{
|
|
if(Var.Type=="int")
|
|
std::cout<<*((int *)Var.data);
|
|
else if(Var.Type=="long long int")
|
|
std::cout<<*((long long int *)Var.data);
|
|
else if(Var.Type=="float")
|
|
std::cout<<*((float *)Var.data);
|
|
else if(Var.Type=="double")
|
|
std::cout<<*((double *)Var.data);
|
|
else if(Var.Type=="char")
|
|
std::cout<<*((char *)Var.data);
|
|
else if(Var.Type=="string")
|
|
PrintString(*((std::string *)Var.data));
|
|
else if(Var.Type=="array")
|
|
((NasalList *)Var.data)->PrintList();
|
|
else if(Var.Type=="hash")
|
|
((NasalHash *)Var.data)->PrintHash();
|
|
else
|
|
std::cout<<"null";
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|