示例#1
0
static int text_drawaln(struct AbstractTview* tv, int tid, int pos)
    {
    int y,x;
    html_tview_t* ptr=FROM_TV(tv);
    html_clear(tv);
    base_draw_aln(tv,  tid, pos); 
    int is_term= isatty(fileno(ptr->out));
    
    for(y=0;y< ptr->row_count;++y)
    	{
    	for(x=0;x< tv->mcol;++x)
	    	{
	    	if(is_term)
	    		{
	    		int css=0;
	    		while(css<32)
	    			{
	    			if(( (ptr->screen[y][x].attributes) & (1 << (css)))!=0)
	    				{
	    				break;
	    				}
	    			++css;
	    			}
    			switch(css)
    				{
    				//CSS(0, "black");
			    	case 1: fputs(ANSI_COLOR_BLUE,ptr->out); break;
				case 2: fputs(ANSI_COLOR_GREEN,ptr->out); break;
				case 3: fputs(ANSI_COLOR_YELLOW,ptr->out); break;
				//CSS(4, "black");
				case 5: fputs(ANSI_COLOR_GREEN,ptr->out); break;
				case 6: fputs(ANSI_COLOR_CYAN,ptr->out); break;
				case 7: fputs(ANSI_COLOR_YELLOW,ptr->out); break;
				case 8: fputs(ANSI_COLOR_RED,ptr->out); break;
				case 9: fputs(ANSI_COLOR_BLUE,ptr->out); break;
				default:break;
    				}
    			if(( (ptr->screen[y][x].attributes) & (1 << (UNDERLINE_FLAG)))!=0)
    				{
    				fputs(ANSI_UNDERLINE_SET,ptr->out);
    				}
    			
	    		}
	    	
	    	
	    	int ch=ptr->screen[y][x].ch;

	    	fputc(ch,ptr->out);
	    	if(is_term)
	    		{
	    		fputs(ANSI_COLOR_RESET,ptr->out);
	    		if(( (ptr->screen[y][x].attributes) & (1 << (UNDERLINE_FLAG)))!=0)
    				{
    				fputs(ANSI_UNDERLINE_UNSET,ptr->out);
    				}
	    		}
	    	}
    	fputc('\n',ptr->out);
    	}
    return 0;
    }
示例#2
0
static int curses_drawaln(struct AbstractTview* tv, int tid, int pos)
    {
    return base_draw_aln(tv,  tid, pos);
    }
示例#3
0
static int html_drawaln(struct AbstractTview* tv, int tid, int pos)
    {
    int y,x;
    html_tview_t* ptr=FROM_TV(tv);
    html_clear(tv);
    base_draw_aln(tv,  tid, pos);
    fputs("<html><head>",ptr->out);
    fprintf(ptr->out,"<title>%s:%d</title>",
    	tv->header->target_name[tid],
    	pos+1
    	);
    //style
   
    fputs("<style type='text/css'>\n",ptr->out);
    fputs(".tviewbody { margin:5px; background-color:white;text-align:center;}\n",ptr->out);
    fputs(".tviewtitle {text-align:center;}\n",ptr->out);
    fputs(".tviewpre { margin:5px; background-color:white;}\n",ptr->out);
    #define CSS(id,col) fprintf(ptr->out,".tviewc%d {color:%s;}\n.tviewcu%d {color:%s;text-decoration:underline;}\n",id,col,id,col);
        CSS(0, "black");
    	CSS(1, "blue");
	CSS(2, "green");
	CSS(3, "yellow");
	CSS(4, "black");
	CSS(5, "green");
	CSS(6, "cyan");
	CSS(7, "yellow");
	CSS(8, "red");
	CSS(9, "blue");
    #undef CSS
    fputs("</style>",ptr->out);
    
    fputs("</head><body>",ptr->out);
    
      fprintf(ptr->out,"<div class='tviewbody'><div class='tviewtitle'>%s:%d</div>",
    	tv->header->target_name[tid],
    	pos+1
    	);
    
    fputs("<pre class='tviewpre'>",ptr->out);
    for(y=0;y< ptr->row_count;++y)
    	{
    	
    	for(x=0;x< tv->mcol;++x)
	    	{
	    	
		
		if(x== 0 || ptr->screen[y][x].attributes != ptr->screen[y][x-1].attributes)
	    		{
	    		int css=0;
			fprintf(ptr->out,"<span");
	    		while(css<32)
	    			{
	    			//if(y>1) fprintf(stderr,"css=%d pow2=%d vs %d\n",css,(1 << (css)),ptr->screen[y][x].attributes);
	    			if(( (ptr->screen[y][x].attributes) & (1 << (css)))!=0)
	    				{
	    				
	    				fprintf(ptr->out," class='tviewc%s%d'",
	    					(( (ptr->screen[y][x].attributes) & (1 << (UNDERLINE_FLAG)) )!=0?"u":""),
	    					css);
	    				break;
	    				}
	    			++css;
	    			}


	    		fputs(">",ptr->out);
	    		}
		
		int ch=ptr->screen[y][x].ch;
		switch(ch)
			{
			case '<': fputs("&lt;",ptr->out);break;
			case '>': fputs("&gt;",ptr->out);break;
			case '&': fputs("&amp;",ptr->out);break;
			default: fputc(ch,ptr->out); break;
			}
	    	
	    	
	    	if(x+1 == tv->mcol  || ptr->screen[y][x].attributes!=ptr->screen[y][x+1].attributes)
	    		{
	    		fputs("</span>",ptr->out);
	    		}
	    	}
    	if(y+1 < ptr->row_count) fputs("<br/>",ptr->out);
    	}
    fputs("</pre></div></body></html>",ptr->out);
    return 0;
    }