summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-01-23 20:58:26 +0100
committerCarl Hetherington <cth@carlh.net>2020-01-23 20:58:26 +0100
commit944ceca80f4452e6948fd7dd984c549299c49c52 (patch)
tree2317de0287659fbe2a123292e0a2b5a8e743931a /src
parent5850e1da92f2938609dd2a6289691293da5d3ad2 (diff)
Move the body of dumpsubs out into a method.
Diffstat (limited to 'src')
-rw-r--r--src/util.cc85
-rw-r--r--src/util.h5
2 files changed, 88 insertions, 2 deletions
diff --git a/src/util.cc b/src/util.cc
index 70cbf10..89af13f 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
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
@@ -18,13 +18,23 @@
*/
#include "util.h"
+#include "reader.h"
+#include "subtitle.h"
+#include "collect.h"
+#include <boost/shared_ptr.hpp>
#include <string>
#include <iostream>
#include <cstdio>
+#include <map>
using std::string;
using std::getline;
+using std::ostream;
+using std::map;
+using std::list;
using boost::optional;
+using boost::shared_ptr;
+using namespace sub;
/** @param s A string.
* @return true if the string contains only space, newline or tab characters, or is empty.
@@ -86,3 +96,76 @@ sub::remove_unicode_bom (optional<string>& line)
line = line->substr (3);
}
}
+
+void
+sub::dump (shared_ptr<const Reader> reader, ostream& os)
+{
+ map<string, string> metadata = reader->metadata ();
+ for (map<string, string>::const_iterator i = metadata.begin(); i != metadata.end(); ++i) {
+ os << i->first << ": " << i->second << "\n";
+ }
+
+ list<sub::Subtitle> subs = collect<list<sub::Subtitle> > (reader->subtitles ());
+ int n = 0;
+ for (list<sub::Subtitle>::const_iterator i = subs.begin(); i != subs.end(); ++i) {
+ os << "Subtitle " << n << " at " << i->from << " -> " << i->to << "\n";
+ for (list<sub::Line>::const_iterator j = i->lines.begin(); j != i->lines.end(); ++j) {
+
+ os << "\t";
+
+ if (j->vertical_position.proportional) {
+ os << j->vertical_position.proportional.get() << " of screen";
+ } else if (j->vertical_position.line && j->vertical_position.lines) {
+ os << j->vertical_position.line.get() << " lines of " << j->vertical_position.lines.get();
+ }
+ if (j->vertical_position.reference) {
+ os << " from ";
+ switch (j->vertical_position.reference.get()) {
+ case TOP_OF_SCREEN:
+ os << "top";
+ break;
+ case VERTICAL_CENTRE_OF_SCREEN:
+ os << "centre";
+ break;
+ case BOTTOM_OF_SCREEN:
+ os << "bottom";
+ break;
+ case TOP_OF_SUBTITLE:
+ os << "top of subtitle";
+ break;
+ }
+ }
+
+ os << "\t";
+ bool italic = false;
+ bool underline = false;
+ for (list<sub::Block>::const_iterator k = j->blocks.begin(); k != j->blocks.end(); ++k) {
+ if (k->italic && !italic) {
+ os << "<i>";
+ } else if (italic && !k->italic) {
+ os << "</i>";
+ }
+ if (k->underline && !underline) {
+ os << "<u>";
+ } else if (underline && !k->underline) {
+ os << "</u>";
+ }
+
+ italic = k->italic;
+ underline = k->underline;
+
+ os << k->text;
+ }
+
+ if (italic) {
+ os << "</i>";
+ }
+ if (underline) {
+ os << "</u>";
+ }
+ os << "\n";
+ }
+
+ ++n;
+ }
+}
diff --git a/src/util.h b/src/util.h
index 9819e3c..738a02a 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
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
@@ -26,9 +26,12 @@
namespace sub {
+class Reader;
+
extern bool empty_or_white_space (std::string s);
extern void remove_unicode_bom (boost::optional<std::string>& line);
extern boost::optional<std::string> get_line_file (FILE* f);
extern boost::optional<std::string> get_line_string (std::string* s);
+extern void dump (boost::shared_ptr<const Reader> read, std::ostream& os);
}