summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2017-02-03 21:36:23 +0200
committerOleg Oshmyan <chortos@inbox.lv>2017-02-14 19:43:04 +0200
commit14586a1b2f3ae784ee2f29957b4d01207cc6c2a0 (patch)
treeb1025a0dea8412ec9df36147250a10b1dddfc59c /libass
parent81ba39f0d28a9ea9d284b031517ebd0f2684d4ff (diff)
downloadlibass-14586a1b2f3ae784ee2f29957b4d01207cc6c2a0.tar.bz2
libass-14586a1b2f3ae784ee2f29957b4d01207cc6c2a0.tar.xz
Reuse numpad2align in parse_tag
Diffstat (limited to 'libass')
-rw-r--r--libass/ass.c23
-rw-r--r--libass/ass_parse.c11
-rw-r--r--libass/ass_utils.c23
-rw-r--r--libass/ass_utils.h1
4 files changed, 27 insertions, 31 deletions
diff --git a/libass/ass.c b/libass/ass.c
index 3a94290..c35f4ae 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -24,7 +24,6 @@
#include <string.h>
#include <assert.h>
#include <errno.h>
-#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <inttypes.h>
@@ -237,28 +236,6 @@ static long long string2timecode(ASS_Library *library, char *p)
return tm;
}
-/**
- * \brief converts numpad-style align to align.
- */
-static int numpad2align(int val)
-{
- if (val < -INT_MAX)
- // Pick an alignment somewhat arbitrarily. VSFilter handles
- // INT32_MIN as a mix of 1, 2 and 3, so prefer one of those values.
- val = 2;
- else if (val < 0)
- val = -val;
-
- int res = ((val - 1) % 3) + 1; // horizontal alignment
- if (val <= 3)
- res |= VALIGN_SUB;
- else if (val <= 6)
- res |= VALIGN_CENTER;
- else
- res |= VALIGN_TOP;
- return res;
-}
-
#define NEXT(str,token) \
token = next_token(&str); \
if (!token) break;
diff --git a/libass/ass_parse.c b/libass/ass_parse.c
index 5cd232f..dc27bf5 100644
--- a/libass/ass_parse.c
+++ b/libass/ass_parse.c
@@ -566,14 +566,9 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, char *end, double pwr)
} else if (tag("an")) {
int val = argtoi(*args);
if ((render_priv->state.parsed_tags & PARSED_A) == 0) {
- if (val >= 1 && val <= 9) {
- int v = (val - 1) / 3; // 0, 1 or 2 for vertical alignment
- if (v != 0)
- v = 3 - v;
- val = ((val - 1) % 3) + 1; // horizontal alignment
- val += v * 4;
- render_priv->state.alignment = val;
- } else
+ if (val >= 1 && val <= 9)
+ render_priv->state.alignment = numpad2align(val);
+ else
render_priv->state.alignment =
render_priv->state.style->Alignment;
render_priv->state.parsed_tags |= PARSED_A;
diff --git a/libass/ass_utils.c b/libass/ass_utils.c
index 03900f2..8cd639d 100644
--- a/libass/ass_utils.c
+++ b/libass/ass_utils.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
+#include <limits.h>
#include <inttypes.h>
#include "ass_library.h"
@@ -327,6 +328,28 @@ int parse_ycbcr_matrix(char *str)
return YCBCR_UNKNOWN;
}
+/**
+ * \brief converts numpad-style align to align.
+ */
+int numpad2align(int val)
+{
+ if (val < -INT_MAX)
+ // Pick an alignment somewhat arbitrarily. VSFilter handles
+ // INT32_MIN as a mix of 1, 2 and 3, so prefer one of those values.
+ val = 2;
+ else if (val < 0)
+ val = -val;
+
+ int res = ((val - 1) % 3) + 1; // horizontal alignment
+ if (val <= 3)
+ res |= VALIGN_SUB;
+ else if (val <= 6)
+ res |= VALIGN_CENTER;
+ else
+ res |= VALIGN_TOP;
+ return res;
+}
+
void ass_msg(ASS_Library *priv, int lvl, const char *fmt, ...)
{
va_list va;
diff --git a/libass/ass_utils.h b/libass/ass_utils.h
index 6c9f385..c2fcf30 100644
--- a/libass/ass_utils.h
+++ b/libass/ass_utils.h
@@ -87,6 +87,7 @@ uint32_t parse_color_tag(char *str);
uint32_t parse_color_header(char *str);
char parse_bool(char *str);
int parse_ycbcr_matrix(char *str);
+int numpad2align(int val);
unsigned ass_utf8_get_char(char **str);
unsigned ass_utf8_put_char(char *dest, uint32_t ch);
void ass_utf16be_to_utf8(char *dst, size_t dst_size, uint8_t *src, size_t src_size);