/* Copyright (C) 2014 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "stl_writer.h" #include using std::list; using std::ostream; using std::string; using boost::optional; using namespace sub; STLWriter::STLWriter (list subtitles, ostream& out) : Writer (subtitles) { optional font; optional font_size; bool bold = false; bool italic = false; bool underline = false; int line = 0; optional from; optional to; for (list::const_iterator i = subtitles.begin(); i != subtitles.end(); ++i) { bool started_new = false; if (!font || font.get() != i->font) { out << "\n$FontName = " << i->font; font = i->font; started_new = true; } if (!font_size || font_size.get() != i->font_size.points.get()) { out << "\n$FontSize = " << i->font_size.points.get(); font_size = i->font_size.points.get(); started_new = true; } string text; if (bold != i->bold) { text += "^B"; bold = i->bold; } if (italic != i->italic) { text += "^I"; italic = i->italic; } if (underline != i->underline) { text += "^U"; underline = i->underline; } text += i->text; if (from && from.get() == i->from.frame.get() && to && to.get() == i->to.frame.get() && !started_new) { for (int j = line; j < i->line; ++j) { out << "|"; } out << text; line = i->line; } else { out << "\n" << i->from.frame.get().timecode() << "," << i->to.frame.get().timecode() << "," << text; from = i->from.frame.get(); to = i->to.frame.get(); line = 0; } } out << "\n"; }