Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
ToTXT.txt134 linesDownload Raw Back to Utils
1 2#help_index "DolDoc/Conversion"3 4U0 TXTPutS(CDoc *doc,U8 *st,I64 *_col)5{6  U8 *ch,*ptr;7  while (ch=*st++) {8    switch (ch) {9      case '\t':10        do {11          DocPutKey(doc,CH_SPACE,0);12          *_col=*_col+1;13        } while (*_col&7);14        break;15 16      start:17        case 'pi':      ptr="pi";       break;18        case 'theta':   ptr="theta";    break;19        case 'phi':     ptr="phi";      break;20        case 'omega':   ptr="omega";    break;21        case 'inf':     ptr="inf";      break;22        case 'u':       ptr="u";        break;23        case CH_SHIFT_SPACE: ptr=" ";   break;24      end:25        DocPrint(doc,ptr);26        *_col=*_col+StrLen(ptr);27        break;28 29      default:30        if (CH_SPACE<=ch<0x7F || ch=='\n')31          DocPutKey(doc,ch,0);32        else33          DocPrint(doc,".");34        *_col=*_col+1;35    }36  }37}38 39public CDoc *Doc2TXT(CDoc *doc_in)40{//Cvt DolDoc doc to plain text.41  CDocEntry *doc_e,*doc_e2;42  I64 y,col;43  CDoc *doc_out=DocNew;44  Bool unlock_doc_in=DocLock(doc_in),no_bwd,line_has_html_code=FALSE;45  DocRecalc(doc_in);46 47  doc_out->flags|=DOCF_PLAIN_TEXT|DOCF_NO_CURSOR;48 49  doc_e=doc_in->head.next;50  col=doc_e->x;51  y=doc_e->y;52  while (doc_e!=doc_in) {53    if (!(doc_e->de_flags&DOCEF_SKIP)) {54      while (y<doc_e->y) {55        TXTPutS(doc_out,"\n",&col);56        y++;57        col=0;58        line_has_html_code=FALSE;59      }60      if (doc_e->type_u8==DOCT_HTML_CODE)61        line_has_html_code=TRUE;62 63      no_bwd=TRUE;64      doc_e2=doc_e->next;65      while (doc_e2!=doc_in && doc_e2->y==doc_e->y) {66        if (doc_e2->x<doc_e->x) {67          no_bwd=FALSE;68          break;69        }70        doc_e2=doc_e2->next;71      }72      if (no_bwd && !(doc_e->type_u8==DOCT_NEW_LINE && line_has_html_code))73        while (col<doc_e->x)74          TXTPutS(doc_out," ",&col);75 76      switch (doc_e->type_u8) {77        case DOCT_TEXT:78          TXTPutS(doc_out,doc_e->tag,&col);79          break;80        case DOCT_TAB:81          TXTPutS(doc_out,"\t",&col);82          break;83        case DOCT_HTML_CODE:84          break;85        case DOCT_SPRITE:86          break;87        default:88          if (doc_e->de_flags&DOCEF_TAG)89            TXTPutS(doc_out,doc_e->tag,&col);90      }91    }92    doc_e=doc_e->next;93  }94  while (y<doc_e->y) {95    TXTPutS(doc_out,"\n",&col);96    y++;97    col=0;98  }99  doc_out->cur_entry=&doc_out->head;100  DocRecalc(doc_out);101 102  if (unlock_doc_in)103    DocUnlock(doc_in);104  return doc_out;105}106 107#help_index "Cmd Line (Typically);DolDoc/Conversion;DolDoc/Cmd Line (Typically)"108public U0 ToTXT(U8 *_in_name,U8 *_out_name=NULL,I64 width=70)109{//Convert DolDocfile to plain text.110  U8 *in_name,*out_name;111  CDoc *doc_in,*doc_out;112 113  SettingsPush; //See SettingsPush114  WinHorz(0,width-1); //Sets doc width for word wrap.115 116  in_name=ExtDft(_in_name,"DD.Z");117  if (_out_name)118    out_name=ExtDft(_out_name,"TXT");119  else120    out_name=ExtChg(_in_name,"TXT");121 122  doc_in=DocRead(in_name);123  doc_out=Doc2TXT(doc_in);124  StrCpy(&doc_out->filename.name,out_name);125 126  SettingsPop;127 128  DocWrite(doc_out);129  DocDel(doc_in);130  DocDel(doc_out);131  Free(in_name);132  Free(out_name);133}134