È®ÀåÀÚ *.smi¸¦ °¡Áö´Â ÀÚ¸·ÆÄÀÏ(À̸¥¹Ù, SAMI) ¸¦ ÀоîµéÀ̰í, ±×¸®°í ¶ÇÇÑ ±× ÀÚ¸·ÆÄÀÏÀ» ÀÚµ¿À¸·Î ÀÛ¼ºÇÏ´Â ¿¹Á¦. class TSubtitle { private: String text[MaxLine]; // °¢°¢ ÄμÇ. int start[MaxLine]; // °¢ ÄμÇÀÇ ½ÃÀ۽ð£. milisecond´ÜÀ§. int FLineCount; //Àüü Äμǰ³¼ö. String __fastcall GetText(int Index); int __fastcall GetStart(int Index); int __fastcall GetEnd(int Index); protected: public: void LoadFromSamiFile(String filename, String BR = "\n"); void LoadFromSubripFile(String filename); void LoadFromSubviewer2File(String filename); void LoadFromMicrodvdFile(String filename, float FPS=25); void SaveToSamiFile(String filename) const; TSubtitle(); void Compress(); __property int LineCount = { read=FLineCount }; __property String Text[int Index] = { read=GetText }; __property int Start[int Index] = { read=GetStart }; }; TSubtitle::TSubtitle() :FLineCount(0) { } String __fastcall TSubtitle::GetText(int Index) { if (0<=Index && Index\n\n\nAlbert Einstein\n\n\n\n\n",fp); String Temp, Temp2; int x,sp; for(int i=0 ; i\n"; fputs( Temp.c_str() , fp); Temp = text[i].Trim(); x = 0; // for error check. while(sp = Temp.Pos("\n") , sp) // { if (x++>5) break; //¿¹¿Üó¸® ¹«ÇÑ·çǪ ¹æÁö Temp2 = Temp.SubString(1,sp-1); Temp = Temp2 + "
" + Temp.Delete(1,sp); } Temp += "\n"; fputs( Temp.c_str() , fp); } fputs("\n\n",fp); fclose(fp); } void TSubtitle::LoadFromSamiFile(String filename, String BR /*= "\n"*/) { /* SAMI (*.smi , *.smil) ex) "A Few Good Man"

Captain, I'd like to request that
it be me who's the attorney ...

*/ /* SMPlayÀÇ ¼Ò½ºÄڵ带 ÂüÁ¶ÇÏ°í º¯Çü*/ int i ; char buf[201]; String CurLine, Upper ,Temp; int sp,sp2; FILE* fp = fopen(filename.c_str(),"r"); if(fp==NULL) return; //skip until '' appears while (fgets(buf,200,fp)) if (String(buf).UpperCase().AnsiPos("") ) break; i = 0; start[0] = 0; while (fgets(buf,200,fp) && i' and reading the 'start[i]'. if(CurLine.UpperCase().Pos(""); start[i] = CurLine.SubString(sp+1,sp2-sp-1).ToInt(); text[i] = ""; CurLine.Delete(1,sp2); } int x = 0; // for error check. while(Upper = CurLine.UpperCase(), sp = Upper.Pos("&NBSP") , sp) //replacing '&NBSP' or '&NBSP;' with ' ' { if (x++>5) break; //¿¹¿Üó¸® ¹«ÇÑ·çǪ ¹æÁö int len = 5; if(Upper.SubString(sp,6) == "&NBSP;") len = 6; Temp = CurLine.SubString(1,sp-1); CurLine = Temp + ' ' + CurLine.Delete(1,sp+len-1);; } while(sp = CurLine.Pos("<") ,sp) //replacing '
' and deleting '< ????? >' { if (x++>5) break; //¿¹¿Üó¸® ¹«ÇÑ·çǪ ¹æÁö if(CurLine.SubString(sp,4) == "
" || CurLine.SubString(sp,4) == "
" ) { //TODO: Temp = CurLine.SubString(1,sp-1); CurLine = Temp + BR + CurLine.Delete(1,sp+3); } else { sp2=Upper.Pos(">"); Temp = CurLine.SubString(1,sp-1); CurLine= Temp + CurLine.Delete(1,sp2); } } text[i] += CurLine; } FLineCount = i+1; fclose(fp); } void TSubtitle::Compress() { int k =0; for(int i=0; i