Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ToHtml.txt391 linesDownload Raw Back to ToHtmlToTXTDemo
1 2#help_index "DolDoc/Conversion"3 4//See ::/Doc/Credits.DD.5 6#define DOCET_UNDEF_COLOR       0x1000000007#define DOCET_LINK_UNDERLINE    0x2000000008U0 HtmlPutS(CDoc *doc,I64 u32_attr,I64 *_old_u32_attr,Bool underline_update,9        U8 *st,I64 *_col,U8 *style_bitmap=NULL)10{11  U8 *ch,*ptr;12  u32_attr&=0xFFFFFF00;13  if (u32_attr&DOCET_INVERT)14    u32_attr.u8[1]=(u32_attr.u8[1]&15)<<4|u32_attr.u8[1]>>4;15  if (underline_update &&16        !(u32_attr&DOCET_UNDERLINE) && *_old_u32_attr&DOCET_UNDERLINE) {17    if (!(*_old_u32_attr&DOCET_LINK_UNDERLINE))18      DocPrint(doc,"</u>");19    *_old_u32_attr&=~DOCET_LINK_UNDERLINE;20  }21  if (!(u32_attr&DOCET_BLINK) && *_old_u32_attr&DOCET_BLINK)22    DocPrint(doc,"</blink>");23  if (u32_attr&0xFF00!=*_old_u32_attr&0xFF00) {24    if (!(*_old_u32_attr&DOCET_UNDEF_COLOR))25      DocPrint(doc,"</span>");26    DocPrint(doc,"<span class=c%02X>",u32_attr.u8[1]);27    if (style_bitmap)28      LBts(style_bitmap,u32_attr.u8[1]);29  }30  if (u32_attr&DOCET_BLINK && !(*_old_u32_attr&DOCET_BLINK))31    DocPrint(doc,"<blink>");32  if (underline_update) {33    if (u32_attr&DOCET_UNDERLINE && !(*_old_u32_attr&DOCET_UNDERLINE))34      DocPrint(doc,"<u>");35  } else //Keep same underline status.36    u32_attr=u32_attr&~DOCET_UNDERLINE | *_old_u32_attr&DOCET_UNDERLINE;37 38  *_old_u32_attr=u32_attr | *_old_u32_attr&DOCET_LINK_UNDERLINE;39 40  while (ch=*st++) {41    switch (ch) {42      case '\t':43        do {44          DocPutKey(doc,CH_SPACE,0);45          *_col=*_col+1;46        } while (*_col&7);47        break;48 49      start:50        case 'pi':      ptr="pi";       break;51        case 'theta':   ptr="theta";    break;52        case 'phi':     ptr="phi";      break;53        case 'omega':   ptr="omega";    break;54        case 'inf':     ptr="inf";      break;55        case 'u':       ptr="u";        break;56      end:57        DocPrint(doc,ptr);58        *_col=*_col+StrLen(ptr);59        break;60 61      start:62        case CH_SHIFT_SPACE: ptr=" ";   break;63        case '&':       ptr="&";    break;64        case '<':       ptr="<";     break;65        case '>':       ptr=">";     break;66        case '"':       ptr=""";   break;67      end:68        DocPrint(doc,ptr);69        *_col=*_col+1;70        break;71 72      default:73        if (CH_SPACE<=ch<0x7F || ch=='\n')74          DocPutKey(doc,ch,0);75        else76          DocPrint(doc,".");77        *_col=*_col+1;78    }79  }80}81 82U8 *TOSLinkCvt2(U8 *filename,I64 line_num)83{// ::/  --> /Wb/84//Make your own LinkCvt routine85  U8 *res=NULL,*st;86  if (filename) {87    st=ExtChg(filename,"html");88    if (st && StrLen(st)>3 && !StrNCmp(st+1,":/",2))89      res=MStrPrint("/Wb/%s#l%d",st+3,line_num);90    Free(st);91  }92  return res;93}94 95U8 *URLBibleGateway(U8 *src)96{97  U8 buf[STR_LEN],*dst=buf;98  if (!MemCmp(src,"BF:",3))99    src+=3;100  while (*src) {101    if (*src==CH_SPACE || *src==',')102      *dst++='+';103    else104      *dst++=*src;105    src++;106  }107  *dst=0;108  if (StrOcc(buf,'-'))109    return MStrPrint(110          "http://www.biblegateway.com/passage/?search=%s&version=NIV",buf);111  else112    return MStrPrint(113          "http://www.biblegateway.com/verse/en/%s",buf);114}115 116U8 *TOSLinkCvt1(U8 *link_st)117{118  static CDoc *bible=NULL;119  static I64 locks=0;120  U8 *res=NULL,*filename,*needle;121  I64 i,num;122  if (link_st) {123    switch (i=EdLinkCvt(link_st,&filename,&needle,&num)) {124      case LK_FILE_LINE:125      case LK_PLAIN_LINE:126      case LK_FILE:127        res=TOSLinkCvt2(filename,num);128        break;129      case -1:130      case LK_DEF:131      case LK_HELP_INDEX:132      case LK_DOC:133      case LK_DOC_ANCHOR:134      case LK_DOC_FIND:135      case LK_DOC_LINE:136        break;137      case LK_BIBLE_FIND:138        while (LBts(&locks,0))139          Yield;140        if (!bible)141          bible=Adam("DocRead(\"%s\");",filename);142        if (DocFind(bible,num,needle))143          res=URLBibleGateway(link_st);144        LBtr(&locks,0);145        break;146      default:147        if (DocFileEd(i,filename,needle,&num,EDF_UNCOLLAPSE|EDF_BAIL))148          res=TOSLinkCvt2(filename,num);149    }150    Free(filename);151    Free(needle);152  }153  return res;154}155 156public CDoc *Doc2Html(CDoc *doc_in,U8 *html_header=NULL,U8 *body_header=NULL,157        U8 *body_footer=NULL,U8 *html_footer=NULL,Bool line_anchors=TRUE,158        U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1,Bool line_nums=FALSE)159{//Cvt DolDocdoc to HTML file.160  CDocEntry *doc_e,*style,*doc_e2;161  I64 i,y,old_y=I64_MIN,col,old_u32_attr=DOCET_UNDEF_COLOR,old_attr,digits;162  U32 *hl,*src;163  U8 *st,st_2[2],*link_st,*style_bitmap=CAlloc(256/8);164  CBGR48 p[COLORS_NUM];165  GrPaletteGet(p);166  CDoc *doc_out=DocNew;167  Bool unlock_doc_in=DocLock(doc_in),no_bwd;168 169  old_attr=doc_in->win_task->text_attr;170  doc_in->win_task->text_attr=DOC_ATTR_DFT_TEXT;171 172  for (i=0xF0;i<=0xFF;i++)173    LBts(style_bitmap,i);174 175  DocRecalc(doc_in,RECALCt_NORMAL|RECALCF_TO_HTML);176 177  digits=Log10(doc_in->head.last->y+1)+1;178 179  st_2[0]=0; st_2[1]=0;180  doc_out->flags|=DOCF_PLAIN_TEXT|DOCF_NO_CURSOR;181 182  if (!html_header) html_header=183          "<!DOCTYPE HTML>\n"184          "<html>\n"185          "<head>\n"186          "<meta http-equiv=\"Content-Type\" "187          "content=\"text/html;charset=US-ASCII\">\n"188          "<meta name=\"generator\" content=\"TempleOS V5.03\">\n";189  if (!body_header) body_header=190          "<body>\n"191          "<pre style=\"font-family:courier;font-size:10pt\">\n";192  if (!body_footer) body_footer=193          "</pre></body>\n</html>\n";194  if (!html_footer) html_footer=195          "</html>\n";196 197  DocPrint(doc_out,"%s",html_header);198 199  DocPrint(doc_out,"<style type=\"text/css\">\n");200  style=doc_out->cur_entry->last;201  DocPrint(doc_out,202        "</style>\n"203        "</head>\n");204  DocPrint(doc_out,"%s",body_header);205 206  doc_e=doc_in->head.next;207  col=doc_e->x;208  y=doc_e->y;209  while (doc_e!=doc_in) {210    if (!(doc_e->de_flags&DOCEF_SKIP)) {211      if (y!=old_y) {212        if (line_anchors)213          DocPrint(doc_out,"<a name=\"l%d\"></a>",y+1);214        if (line_nums)215          DocPrint(doc_out,"%0*d ",digits,y+1);216        old_y=y;217      }218      while (y<doc_e->y) {219        HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,FALSE,220              "\n",&col,style_bitmap);221        if (++y!=old_y) {222          if (line_anchors)223            DocPrint(doc_out,"<a name=\"l%d\"></a>",y+1);224          if (line_nums)225            DocPrint(doc_out,"%0*d ",digits,y+1);226          old_y=y;227        }228        col=0;229      }230 231      no_bwd=TRUE;232      doc_e2=doc_e->next;233      while (doc_e2!=doc_in && doc_e2->y==doc_e->y) {234        if (doc_e2->x<doc_e->x) {235          no_bwd=FALSE;236          break;237        }238        doc_e2=doc_e2->next;239      }240 241      if (no_bwd)242        while (col<doc_e->x)243          HtmlPutS(doc_out,doc_e->settings.final_u32_attr&~DOCET_UNDERLINE,244                &old_u32_attr,TRUE," ",&col,style_bitmap);245 246      link_st=NULL;247      if (doc_e->de_flags&DOCEF_HTML_LINK)248        link_st=StrNew(doc_e->html_link);249      else if (st=DocEntryLink(doc_in,doc_e)) {250        link_st=link_cvt(st);251        Free(st);252      }253 254      if (link_st) {255        if (old_u32_attr&DOCET_UNDERLINE &&!(old_u32_attr&DOCET_LINK_UNDERLINE))256          DocPrint(doc_out,"</u>");257        if (old_u32_attr&DOCET_BLINK)258          DocPrint(doc_out,"</blink>");259        if (!(old_u32_attr&DOCET_UNDEF_COLOR))260          DocPrint(doc_out,"</span>");261        old_u32_attr=DOCET_UNDEF_COLOR|DOCET_UNDERLINE|DOCET_LINK_UNDERLINE;262        DocPrint(doc_out,"<a href=\"%s\">",link_st);263      }264 265      switch (doc_e->type_u8) {266        case DOCT_TEXT:267          if (doc_e->de_flags&DOCEF_HIGHLIGHT) {268            if (doc_e->last==doc_in)269              MemCpy(&doc_e->settings,&doc_in->settings_head,270                    sizeof(CDocSettings));271            else272              MemCpy(&doc_e->settings,&doc_e->last->settings,273                    sizeof(CDocSettings));274            src=hl=DocHighlight(doc_e,doc_e->tag,StrLen(doc_e->tag),275                  doc_e->type&0xFF00);276            while (*src) {277              st_2[0]=*src&0xFF;278              HtmlPutS(doc_out,*src++,&old_u32_attr,TRUE,279                    st_2,&col,style_bitmap);280            }281            Free(hl);282          } else283            HtmlPutS(doc_out,doc_e->settings.final_u32_attr,284                  &old_u32_attr,TRUE,doc_e->tag,&col,style_bitmap);285          break;286        case DOCT_TAB:287          HtmlPutS(doc_out,doc_e->settings.final_u32_attr,&old_u32_attr,TRUE,288                "\t",&col,style_bitmap);289          break;290        case DOCT_HTML_CODE:291          if (old_u32_attr&DOCET_UNDERLINE &&292                !(old_u32_attr&DOCET_LINK_UNDERLINE))293            DocPrint(doc_out,"</u>");294          if (old_u32_attr&DOCET_BLINK)295            DocPrint(doc_out,"</blink>");296          if (!(old_u32_attr&DOCET_UNDEF_COLOR))297            DocPrint(doc_out,"</span>");298          old_u32_attr=DOCET_UNDEF_COLOR;299          DocPrint(doc_out,"%s",doc_e->tag);300          break;301        case DOCT_SPRITE:302          HtmlPutS(doc_out,doc_e->settings.final_u32_attr,303                &old_u32_attr,TRUE,doc_e->tag,&col,style_bitmap);304          HtmlPutS(doc_out,doc_e->settings.final_u32_attr,305                &old_u32_attr,TRUE,"/* Graphics Not Rendered in HTML */",306                &col,style_bitmap);307          break;308        default:309          if (doc_e->de_flags&DOCEF_TAG)310            HtmlPutS(doc_out,doc_e->settings.final_u32_attr,311                  &old_u32_attr,TRUE,doc_e->tag,&col,style_bitmap);312      }313      if (link_st) {314        if (old_u32_attr&DOCET_UNDERLINE &&!(old_u32_attr&DOCET_LINK_UNDERLINE))315          DocPrint(doc_out,"</u>");316        if (old_u32_attr&DOCET_BLINK)317          DocPrint(doc_out,"</blink>");318        if (!(old_u32_attr&DOCET_UNDEF_COLOR))319          DocPrint(doc_out,"</span>");320        DocPrint(doc_out,"</a>");321        old_u32_attr=DOCET_UNDEF_COLOR|DOCET_UNDERLINE|DOCET_LINK_UNDERLINE;322        Free(link_st);323      }324    }325    doc_e=doc_e->next;326  }327  while (y++<doc_e->y) {328    HtmlPutS(doc_out,doc_e->settings.final_u32_attr,329          &old_u32_attr,TRUE,"\n",&col,style_bitmap);330    col=0;331  }332  if (old_u32_attr&DOCET_UNDERLINE && !(old_u32_attr&DOCET_LINK_UNDERLINE))333    DocPrint(doc_out,"</u>");334  if (old_u32_attr&DOCET_BLINK)335    DocPrint(doc_out,"</blink>");336  if (!(old_u32_attr&DOCET_UNDEF_COLOR))337    DocPrint(doc_out,"</span>");338  old_u32_attr=DOCET_UNDEF_COLOR;339  DocPrint(doc_out,"%s",body_footer);340  DocPrint(doc_out,"%s",html_footer);341 342  doc_out->cur_entry=style->next;343  for (i=0;i<256;i++)344    if (Bt(style_bitmap,i))345      DocPrint(doc_out,346            ".c%02X{color:#%02x%02x%02x;background-color:#%02x%02x%02x;}\n",347            i,p[i&15].r>>8,p[i&15].g>>8,p[i&15].b>>8,348            p[i/16].r>>8,p[i/16].g>>8,p[i/16].b>>8);349  doc_out->cur_entry=&doc_out->head;350  DocRecalc(doc_out);351 352  doc_in->win_task->text_attr=old_attr;353 354  if (unlock_doc_in)355    DocUnlock(doc_in);356  return doc_out;357}358 359#help_index "Cmd Line (Typically);DolDoc/Conversion;DolDoc/Cmd Line (Typically)"360public U0 ToHtml(U8 *_in_name,U8 *_out_name=NULL,U8 *html_header=NULL,361        U8 *body_header=NULL,U8 *body_footer=NULL,U8 *html_footer=NULL,362        I64 width=80,Bool line_anchors=TRUE,363        U8 (*link_cvt)(U8 *link_st)=&TOSLinkCvt1,Bool line_nums=FALSE)364{//Convert DolDocfile to HTML.365//Supply your own link_cvt routine.366  U8 *in_name,*out_name;367  CDoc *doc_in,*doc_out;368 369  SettingsPush; //See SettingsPush370  WinHorz(0,width-1); //Sets doc width for word wrap.371 372  in_name=ExtDft(_in_name,"HC.Z");373  if (_out_name)374    out_name=ExtDft(_out_name,"html");375  else376    out_name=ExtChg(_in_name,"html");377 378  doc_in=DocRead(in_name);379  doc_out=Doc2Html(doc_in,html_header,body_header,body_footer,html_footer,380        line_anchors,link_cvt,line_nums);381  StrCpy(&doc_out->filename.name,out_name);382 383  SettingsPop;384 385  DocWrite(doc_out);386  DocDel(doc_in);387  DocDel(doc_out);388  Free(in_name);389  Free(out_name);390}391