hschumann2/TempleOS-Source-Code
0847
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 