// HTML_ColorerPage2.cpp: implementation of the HTML_ColorerPage2 class. // ////////////////////////////////////////////////////////////////////// #include "../HTML/HTML_all.h" #include "HTML_ColorerPage2.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// HTML_ColorerPage2::HTML_ColorerPage2() { } HTML_ColorerPage2::~HTML_ColorerPage2() { } HTML_ColorerPage* HTML_ColorerPage2::generatePage() { HTML_TextArea* ta; //create general things HTML_ColorerPage::generatePage(); doc->setTitle("Colorer -> Results"); //header row = table->newRow(); cell = row->newCell(); cell->bold()->write("Copy results"); ta = table->newRow()->newCell()->setAlign("center")->newTextArea(); ta ->setCols("80") ->setRows("25") ->setWrap("off") ->setName("asm"); //do the thing ta->write(getResults()); //display errors printErrors(); return(this); } const char* HTML_ColorerPage2::getResults() { FILE* tmp; FILE* old; char ch[2]; fpos_t filestart = 0; output = ""; ch[1] = '\0'; tmp = tmpfile(); if(tmp != NULL) { //redirect Lex output to a file old = yyout; yyout = tmp; //convert to HTML convertInputToHTML(); //call Lex scan_string(input.c_str()); //restore yyout yyout = old; //reset file pointer fsetpos(tmp, &filestart); //read the file to a string while(fread(&ch, 1, 1, tmp) == 1) { output.append(ch); } fclose(tmp); if(keywordsDetected == 0) //global { error("No distinct assembler keywords detected in the input text"); } } return(output.c_str()); } HTML_ColorerPage2* HTML_ColorerPage2::convertInputToHTML() { int i; int size; int pos = 0; int spaces; char ch[2]=" "; if(isHTML) { return(this); } output = "\n
\n\n";
size = input.size();
for(i = 0; i < size; i++)
{
pos++;
switch(input[i])
{
case '\t':
if(fillTabs != 0)
{
spaces = pos - 1; //old position
pos = spaces - spaces % fillTabs + fillTabs; //new position
spaces = pos - spaces; //difference
while(spaces != 0)
{
output.append(" ");
spaces--;
}
}
else
{
output.append("\t");
}
break;
case '\n':
output.append("\n");
pos = 0; //reset position
break;
case '<':
output.append("<");
break;
case '>':
output.append(">");
break;
case '&':
output.append("&");
break;
case '\"':
output.append(""");
break;
default:
ch[0] = input[i];
output.append(ch);
break;
}
}
output.append("\n\n\n\n");
input = output;
output = "";
return(this);
}