Nickolay.info. . HTML

, - (, ). - , , 1-5, , , ( 7).

lex2html.exe lexicon_file html_file
/*
   ""  HTML.
      1-5   
 .
   DOS  Windows-1251   ""  HTML 
 <,>,&."
 
 Borland C++ 3.1
 Options:
 [X] Unsigned characters
*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_STR 128
 
char Str[MAX_STR];
 
void Error (int Code) { //     
 char *Msg[]={
  "",
  "Lexicon 2 HTML converter. Run me:\n lex2html.exe lexicon_file html_file",
  "File open error",
  "File operation error",
  "No memory"
 };
 cprintf ("\r\n Returned: %d:\r\n %s!\r\n Press ENTER...",
  Code,Msg[Code]);
 fflush (stdin); getch(); fcloseall();
 window (1,1,80,25); clrscr();
 exit (Code);
}
 
////////////      
FILE *Open(char *Name, char *Mode) { // 
 FILE *f;
 f=fopen (Name,Mode);
 if (f==NULL) Error (2);
 return f;
}
 
int Close (FILE *f) { // 
 return (fclose (f));
}
 
char *ReadStr (FILE *f, char *Str) { //   
 char *Ptr=fgets (Str,MAX_STR,f);
 int l=strlen(Str)-1;
 while ((Str[l]=='\n') || (Str[l]=='\r')) Str[l--]='\0';
 return Ptr;
}
 
int WriteStr (FILE *f, char *Str) { //   
 int i;
 i=fputs (Str,f);
 fputs ("\n",f);
 return (i);
}
////////////       
 
//    HTML      Windows:
char *Dos=
 "",
     *Win=
 "                                                              ";
#define MAX_RECURSE 3 /*   */
 
void Convert (char *s,char *d) {
 char *Tag[]={
  "", "<i>", "<b>", "<b><i>", "<sub>", "<sup>"
 },
      *Tag2[]={
  "", "</i>", "</b>", "</i></b>", "</sub>", "</sup>"
 };
 int i,k,j=0,l=strlen (s),Fonts=0;
 char c,Font[MAX_RECURSE],UnLine=0;
 d[0]='\0';
 for (i=0; i<l; i++) { //  
  c=s[i];
  switch (c) {
   case 0xFF: //  
    c=s[i+1];
    if ((c>='0') && (c<'6')) { // 
     for (k=Fonts-1; k>=0; k--) { //   -   
      strcat (d,Tag2[Font[k]]);
      j+=strlen(Tag2[Font[k]]);
     }
     Fonts=0;
     c-=48;
     strcat (d,Tag[c]); j+=strlen(Tag[c]); i++;
     Font[Fonts++]=c; //,   
    }
    else if (c=='_') { // 
     strcat (d,"<u>"); j+=3; i++; UnLine=1;
    }
    else if (c=='.') { // 
     strcat (d,"</u>"); j+=4; i++; UnLine=0;
    }
    else if (c=='7') { //
     c=s[i+2];
     i+=2; //!!!
     switch (c) {
      case 'e': strcat (d,"&infty;"); j+=7; break; //
      //...!!!
      default:  strcat (d," "); j+=1; break; //  - .
     }
    }
    else { //   
     goto DEFAULT;
    }
   break;
   case '"': strcat (d,"&quot;"); j+=6; break;
   case '<': strcat (d,"&lt;");   j+=4; break;
   case '>': strcat (d,"&gt;");   j+=4; break;
   case '&': strcat (d,"&amp;");  j+=5; break;
   default:
DEFAULT:
    if (c>127) c=Win[c-128]; //  Windows!
    d[j++]=c; d[j]='\0';
   break;
  }
 }
 for (k=Fonts-1; k>=0; k--) { //   -   
  strcat (d,Tag2[Font[k]]);
 }
 if (UnLine) strcat (d,"</u>"); //  
}
 
int main (int argc, char *argv[]) {
 FILE *f,*w;
 char Str2[MAX_STR*3];
 
 if (argc>1) {
  if ((argv[1][0]=='/') || (argv[1][0]=='?')) Error (1);
  else f=Open(argv[1],"rt");
 }
 else Error (1);
 if (argc>2) w=Open(argv[2],"wt");
 else Error (1);
 
 WriteStr (w,"<HTML><HEAD><TITLE>");
 WriteStr (w,argv[2]);
 WriteStr (w,"</TITLE></HEAD><BODY><PRE>");
 while (!feof(f)) {
  ReadStr (f,Str);
  Convert (Str,Str2);
  WriteStr (w,Str2);
 }
 WriteStr (w,"</PRE></BODY></HTML>");
 Close (w); Close (f);
 Error (0);
 return 0;
}

, DOS char *Dos , , , .

@Mail.ru

; E-mail