effect = SHADOW;
}
} else if (keys[i] == "Alignment") {
- /* These values from libass' source code */
- switch ((raw_convert<int> (style[i]) - 1) % 3) {
- case 0:
- horizontal_reference = LEFT_OF_SCREEN;
- break;
- case 1:
- horizontal_reference = HORIZONTAL_CENTRE_OF_SCREEN;
- break;
- case 2:
- horizontal_reference = RIGHT_OF_SCREEN;
- break;
- }
- switch (raw_convert<int> (style[i]) & 12) {
- case 4:
+ if (style[i] == "7" || style[i] == "8" || style[i] == "9") {
vertical_reference = TOP_OF_SCREEN;
- break;
- case 8:
+ } else if (style[i] == "4" || style[i] == "5" || style[i] == "6") {
vertical_reference = VERTICAL_CENTRE_OF_SCREEN;
- break;
- case 0:
+ } else {
vertical_reference = BOTTOM_OF_SCREEN;
- break;
+ }
+ if (style[i] == "1" || style[i] == "4" || style[i] == "7") {
+ horizontal_reference = LEFT_OF_SCREEN;
+ } else if (style[i] == "3" || style[i] == "6" || style[i] == "9") {
+ horizontal_reference = RIGHT_OF_SCREEN;
+ } else {
+ horizontal_reference = HORIZONTAL_CENTRE_OF_SCREEN;
}
} else if (keys[i] == "MarginV") {
vertical_margin = raw_convert<int> (style[i]);
--- /dev/null
+[Script Info]
+; Script generated by Aegisub 3.2.2
+; http://www.aegisub.org/
+Title: Default Aegisub file
+ScriptType: v4.00+
+WrapStyle: 0
+ScaledBorderAndShadow: yes
+PlayResX: 1920
+PlayResY: 1080
+YCbCr Matrix: TV.601
+
+[V4+ Styles]
+Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
+Style: Default,Helvetica Neue,60,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1.5,2,2,0,0,100,1
+Style: Helvetica Neue 30,Helvetica Neue,30,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,100,1
+Style: Helvetica Neue 120pt,Helvetica Neue,120,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1.5,2,2,10,10,100,1
+Style: Helvetica Neue 60 Top,Helvetica Neue,60,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1.5,2,8,10,10,100,1
+Style: Helvetica Neue 60 Center,Helvetica Neue 60 Center,60,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,1.5,2,5,10,10,100,1
+
+[Events]
+Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
+Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Helvetica Neue 60pt - Default\NBottom 100 pt off edge
+Dialogue: 0,0:00:04.00,0:00:06.00,Helvetica Neue 30,,0,0,0,,Helvetica Neue 30pt\NBottom 100pt off edge
+Dialogue: 0,0:00:07.00,0:00:09.00,Helvetica Neue 120pt,,0,0,0,,Helvetica Neue 120pt\NBottom 100pt off edge
+Dialogue: 0,0:00:10.00,0:00:12.00,Helvetica Neue 60 Top,,0,0,0,,Helvetica Neue 60pt\NTop Alignment 100pt off edge
+Dialogue: 0,0:00:13.00,0:00:15.00,Helvetica Neue 60 Center,,0,0,0,,Helvetica Neue 60pt\N Vertical Center Alignment
SUB_END ();
}
+
+BOOST_AUTO_TEST_CASE (ssa_reader_test7)
+{
+ auto p = boost::filesystem::path("test") / "data" / "test3.ssa";
+ auto f = fopen(p.string().c_str(), "r");
+ BOOST_REQUIRE(f);
+ sub::SSAReader reader(f);
+ fclose(f);
+ auto subs = sub::collect<vector<sub::Subtitle>>(reader.subtitles());
+
+ auto i = subs.begin();
+ vector<sub::Line>::iterator j;
+ vector<sub::Block>::iterator k;
+
+ BOOST_REQUIRE (i != subs.end());
+
+ SUB_START(sub::Time::from_hms(0, 0, 1, 0), sub::Time::from_hms(0, 0, 3, 0));
+ LINE((60.0 * 1.2 / 792), sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Helvetica Neue 60pt - Default", "Helvetica Neue", 60, false, false, false);
+ LINE(0, sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Bottom 100 pt off edge", "Helvetica Neue", 60, false, false, false);
+ SUB_END();
+
+ SUB_START(sub::Time::from_hms(0, 0, 4, 0), sub::Time::from_hms(0, 0, 6, 0));
+ LINE((30.0 * 1.2 / 792), sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Helvetica Neue 30pt", "Helvetica Neue", 30, false, false, false);
+ LINE(0, sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Bottom 100pt off edge", "Helvetica Neue", 30, false, false, false);
+ SUB_END();
+
+ SUB_START(sub::Time::from_hms(0, 0, 7, 0), sub::Time::from_hms(0, 0, 9, 0));
+ LINE((120.0 * 1.2 / 792), sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Helvetica Neue 120pt", "Helvetica Neue", 120, false, false, false);
+ LINE(0, sub::BOTTOM_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Bottom 100pt off edge", "Helvetica Neue", 120, false, false, false);
+ SUB_END();
+
+ SUB_START(sub::Time::from_hms(0, 0, 10, 0), sub::Time::from_hms(0, 0, 12, 0));
+ LINE(0, sub::TOP_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Helvetica Neue 60pt", "Helvetica Neue", 60, false, false, false);
+ LINE((60.0 * 1.2 / 792), sub::TOP_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Top Alignment 100pt off edge", "Helvetica Neue", 60, false, false, false);
+ SUB_END();
+
+ SUB_START(sub::Time::from_hms(0, 0, 13, 0), sub::Time::from_hms(0, 0, 15, 0));
+ LINE((-60.0 * 1.2 / 792), sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK("Helvetica Neue 60pt", "Helvetica Neue 60 Center", 60, false, false, false);
+ LINE(0, sub::VERTICAL_CENTRE_OF_SCREEN, 0, sub::HORIZONTAL_CENTRE_OF_SCREEN);
+ BLOCK(" Vertical Center Alignment", "Helvetica Neue 60 Center", 60, false, false, false);
+ SUB_END();
+}
+
+
/** Test \pos */
BOOST_AUTO_TEST_CASE (ssa_reader_pos)
{