*/
-#include <map>
+#ifndef LIBSUB_STL_BINARY_READER_H
+#define LIBSUB_STL_BINARY_READER_H
+
#include "reader.h"
+#include "stl_binary_tables.h"
+#include <map>
namespace sub {
-template<class T>
-class STLCode
-{
-public:
- STLCode ()
- : value ((T) 0)
- {}
-
- STLCode (T v, std::string d)
- : value (v)
- , description (d)
- {}
-
- T value;
- std::string description;
-};
+class InputReader;
+/** @class STLBinaryReader
+ * @brief A class to read binary STL files.
+ */
class STLBinaryReader : public Reader
{
public:
- STLBinaryReader (std::istream &);
- ~STLBinaryReader ();
+ explicit STLBinaryReader (std::istream& in);
+ explicit STLBinaryReader (FILE* in);
std::map<std::string, std::string> metadata () const;
- enum DisplayStandard {
- DISPLAY_STANDARD_UNDEFINED,
- DISPLAY_STANDARD_OPEN_SUBTITLING,
- DISPLAY_STANDARD_LEVEL_1_TELETEXT,
- DISPLAY_STANDARD_LEVEL_2_TELETEXT
- };
-
- enum LanguageGroup {
- LANGUAGE_GROUP_LATIN,
- LANGUAGE_GROUP_LATIN_CYRILLIC,
- LANGUAGE_GROUP_LATIN_ARABIC,
- LANGUAGE_GROUP_LATIN_GREEK,
- LANGUAGE_GROUP_LATIN_HEBREW
- };
-
- enum Language {
- LANGUAGE_UNKNOWN,
- LANGUAGE_ALBANIAN,
- LANGUAGE_BRETON,
- LANGUAGE_CATALAN,
- LANGUAGE_CROATIAN,
- LANGUAGE_WELSH,
- LANGUAGE_CZECH,
- LANGUAGE_DANISH,
- LANGUAGE_GERMAN,
- LANGUAGE_ENGLISH,
- LANGUAGE_SPANISH,
- LANGUAGE_ESPERANTO,
- LANGUAGE_ESTONIAN,
- LANGUAGE_BASQUE,
- LANGUAGE_FAROESE,
- LANGUAGE_FRENCH,
- LANGUAGE_FRISIAN,
- LANGUAGE_IRISH,
- LANGUAGE_GAELIC,
- LANGUAGE_GALACIAN,
- LANGUAGE_ICELANDIC,
- LANGUAGE_ITALIAN,
- LANGUAGE_LAPPISH,
- LANGUAGE_LATIN,
- LANGUAGE_LATVIAN,
- LANGUAGE_LUXEMBORGIAN,
- LANGUAGE_LITHUANIAN,
- LANGUAGE_HUNGARIAN,
- LANGUAGE_MALTESE,
- LANGUAGE_DUTCH,
- LANGUAGE_NORWEGIAN,
- LANGUAGE_OCCITAN,
- LANGUAGE_POLISH,
- LANGUAGE_PORTUGESE,
- LANGUAGE_ROMANIAN,
- LANGUAGE_ROMANSH,
- LANGUAGE_SERBIAN,
- LANGUAGE_SLOVAK,
- LANGUAGE_SLOVENIAN,
- LANGUAGE_FINNISH,
- LANGUAGE_SWEDISH,
- LANGUAGE_TURKISH,
- LANGUAGE_FLEMISH,
- LANGUAGE_WALLON,
- LANGUAGE_AMHARIC,
- LANGUAGE_ARABIC,
- LANGUAGE_ARMENIAN,
- LANGUAGE_ASSAMESE,
- LANGUAGE_AZERBAIJANI,
- LANGUAGE_BAMBORA,
- LANGUAGE_BIELORUSSIAN,
- LANGUAGE_BENGALI,
- LANGUAGE_BULGARIAN,
- LANGUAGE_BURMESE,
- LANGUAGE_CHINESE,
- LANGUAGE_CHURASH,
- LANGUAGE_DARI,
- LANGUAGE_FULANI,
- LANGUAGE_GEORGIAN,
- LANGUAGE_GREEK,
- LANGUAGE_GUJURATI,
- LANGUAGE_GURANI,
- LANGUAGE_HAUSA,
- LANGUAGE_HEBREW,
- LANGUAGE_HINDI,
- LANGUAGE_INDONESIAN,
- LANGUAGE_JAPANESE,
- LANGUAGE_KANNADA,
- LANGUAGE_KAZAKH,
- LANGUAGE_KHMER,
- LANGUAGE_KOREAN,
- LANGUAGE_LAOTIAN,
- LANGUAGE_MACEDONIAN,
- LANGUAGE_MALAGASAY,
- LANGUAGE_MALAYSIAN,
- LANGUAGE_MOLDAVIAN,
- LANGUAGE_MARATHI,
- LANGUAGE_NDEBELE,
- LANGUAGE_NEPALI,
- LANGUAGE_ORIYA,
- LANGUAGE_PAPAMIENTO,
- LANGUAGE_PERSIAN,
- LANGUAGE_PUNJABI,
- LANGUAGE_PUSHTU,
- LANGUAGE_QUECHUA,
- LANGUAGE_RUSSIAN,
- LANGUAGE_RUTHENIAN,
- LANGUAGE_SERBO_CROAT,
- LANGUAGE_SHONA,
- LANGUAGE_SINHALESE,
- LANGUAGE_SOMALI,
- LANGUAGE_SRANAN_TONGO,
- LANGUAGE_SWAHILI,
- LANGUAGE_TADZHIK,
- LANGUAGE_TAMIL,
- LANGUAGE_TATAR,
- LANGUAGE_TELUGU,
- LANGUAGE_THAI,
- LANGUAGE_UKRANIAN,
- LANGUAGE_URDU,
- LANGUAGE_UZBEK,
- LANGUAGE_VIETNAMESE,
- LANGUAGE_ZULU
- };
-
- enum TimecodeStatus {
- TIMECODE_STATUS_NOT_INTENDED_FOR_USE,
- TIMECODE_STATUS_INTENDED_FOR_USE
- };
-
int code_page_number;
int frame_rate;
DisplayStandard display_standard;
std::string editor_contact_details;
private:
- std::string fixed_string (int, int) const;
- void create_maps ();
-
- std::map<std::string, STLCode<DisplayStandard> > _display_standard_map;
- std::map<std::string, STLCode<LanguageGroup> > _language_group_map;
- std::map<std::string, STLCode<Language> > _language_map;
- std::map<std::string, STLCode<TimecodeStatus> > _timecode_status_map;
+ void read (std::shared_ptr<InputReader> reader);
- unsigned char* _buffer;
+ STLBinaryTables _tables;
};
}
+
+#endif