annotate sub/subassconvert.c @ 34912:3f8886645ebd

Order colour names alphabetically / better match W3 list. Patch by Federico Kereki, fkereki gmail
author cehoyos
date Sun, 24 Jun 2012 12:17:03 +0000
parents e301516e3c83
children 69fe59abe044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
1 /*
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
2 * Subtitles converter to SSA/ASS in order to allow special formatting
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
3 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
4 * This file is part of MPlayer.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
5 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
9 * (at your option) any later version.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
10 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
14 * GNU General Public License for more details.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
15 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License along
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
19 */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
20
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
21 #include <string.h>
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
22 #include <stdint.h>
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
23 #include <stdlib.h>
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
24 #include <stdio.h>
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
25 #include <stdarg.h>
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
26
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
27 #include "mp_msg.h"
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
28 #include "help_mp.h"
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
29 #include "bstr.h"
32464
22888a8cb312 Do not use a path for including files in the same directory.
reimar
parents: 32462
diff changeset
30 #include "subassconvert.h"
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
31 #include "libavutil/common.h"
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
32
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
33 struct line {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
34 char *buf;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
35 size_t bufsize;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
36 size_t len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
37 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
38
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
39 #ifdef __GNUC__
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
40 static void append_text(struct line *dst, char *fmt, ...) __attribute__ ((format(printf, 2, 3)));
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
41 #endif
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
42
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
43 static void append_text(struct line *dst, char *fmt, ...)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
44 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
45 va_list va;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
46 int ret;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
47
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
48 va_start(va, fmt);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
49 ret = vsnprintf(dst->buf + dst->len, dst->bufsize - dst->len, fmt, va);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
50 if (ret >= 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
51 dst->len += ret;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
52 if (dst->len > dst->bufsize)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
53 dst->len = dst->bufsize;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
54 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
55 va_end(va);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
56 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
57
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
58 static int indexof(const char *s, int c)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
59 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
60 char *f = strchr(s, c);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
61 return f ? (f - s) : -1;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
62 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
63
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
64
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
65
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
66 /*
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
67 * SubRip
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
68 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
69 * Support basic tags (italic, bold, underline, strike-through)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
70 * and font tag with size, color and face attributes.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
71 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
72 */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
73
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
74 struct font_tag {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
75 struct bstr face;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
76 int size;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
77 uint32_t color;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
78 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
79
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
80 static const struct tag_conv {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
81 const char *from;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
82 const char *to;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
83 } subrip_basic_tags[] = {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
84 {"<i>", "{\\i1}"}, {"</i>", "{\\i0}"},
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
85 {"<b>", "{\\b1}"}, {"</b>", "{\\b0}"},
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
86 {"<u>", "{\\u1}"}, {"</u>", "{\\u0}"},
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
87 {"<s>", "{\\s1}"}, {"</s>", "{\\s0}"},
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
88 {"{", "\\{"}, {"}", "\\}"},
34757
da38eb1e2069 subassconvert: handle "\r\n" line ends
cboesch
parents: 32464
diff changeset
89 {"\r\n", "\\N"}, {"\n", "\\N"}, {"\r", "\\N"},
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
90 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
91
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
92 static const struct {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
93 const char *s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
94 uint32_t v;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
95 } subrip_web_colors[] = {
34912
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
96 /* Named CSS3 colors in BGR format; a subset of those
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
97 at http://www.w3.org/TR/css3-color/#svg-color */
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
98 {"aqua", 0xffff00},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
99 {"black", 0x000000},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
100 {"blue", 0xff0000},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
101 {"fuchsia", 0xff00ff},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
102 {"gray", 0x808080},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
103 {"green", 0x008000},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
104 {"lime", 0x00ff00},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
105 {"maroon", 0x000080},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
106 {"navy", 0x800000},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
107 {"olive", 0x008080},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
108 {"purple", 0x800080},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
109 {"red", 0x0000ff},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
110 {"silver", 0xc0c0c0},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
111 {"teal", 0x808000},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
112 {"white", 0xffffff},
3f8886645ebd Order colour names alphabetically / better match W3 list.
cehoyos
parents: 34758
diff changeset
113 {"yellow", 0x00ffff},
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
114 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
115
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
116 #define SUBRIP_MAX_STACKED_FONT_TAGS 16
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
117 #define SUBRIP_FLAG_COLOR 0x01000000
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
118
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
119 /**
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
120 * \brief Convert SubRip lines into ASS markup
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
121 * \param orig original SubRip lines. The content will remain untouched.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
122 * \param dest ASS markup destination buffer.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
123 * \param dest_buffer_size maximum size for the destination buffer.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
124 */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
125 void subassconvert_subrip(const char *orig, char *dest, size_t dest_buffer_size)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
126 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
127 /* line is not const to avoid warnings with strtol, etc.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
128 * orig content won't be changed */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
129 char *line = (char *)orig;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
130 struct line new_line = {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
131 .buf = dest,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
132 .bufsize = dest_buffer_size,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
133 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
134 struct font_tag font_stack[SUBRIP_MAX_STACKED_FONT_TAGS];
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
135 int sp = 0;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
136
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
137 font_stack[0] = (struct font_tag){}; // type with all defaults
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
138 while (*line && new_line.len < new_line.bufsize - 1) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
139 char *orig_line = line;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
140 int i;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
141
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
142 for (i = 0; i < FF_ARRAY_ELEMS(subrip_basic_tags); i++) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
143 const struct tag_conv *tag = &subrip_basic_tags[i];
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
144 int from_len = strlen(tag->from);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
145 if (strncmp(line, tag->from, from_len) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
146 append_text(&new_line, "%s", tag->to);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
147 line += from_len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
148 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
149 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
150
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
151 if (strncmp(line, "</font>", 7) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
152 /* Closing font tag */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
153 line += 7;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
154
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
155 if (sp > 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
156 struct font_tag *tag = &font_stack[sp];
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
157 struct font_tag *last_tag = &tag[-1];
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
158 sp--;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
159
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
160 if (tag->size) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
161 if (!last_tag->size)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
162 append_text(&new_line, "{\\fs}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
163 else if (last_tag->size != tag->size)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
164 append_text(&new_line, "{\\fs%d}", last_tag->size);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
165 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
166
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
167 if (tag->color & SUBRIP_FLAG_COLOR) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
168 if (!(last_tag->color & SUBRIP_FLAG_COLOR))
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
169 append_text(&new_line, "{\\c}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
170 else if (last_tag->color != tag->color)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
171 append_text(&new_line, "{\\c&H%06X&}",
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
172 last_tag->color & 0xffffff);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
173 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
174
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
175 if (tag->face.len) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
176 if (!last_tag->face.len)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
177 append_text(&new_line, "{\\fn}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
178 else if (bstrcmp(last_tag->face, tag->face) != 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
179 append_text(&new_line, "{\\fn%.*s}",
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
180 BSTR_P(last_tag->face));
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
181 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
182 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
183 } else if (strncmp(line, "<font ", 6) == 0
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
184 && sp + 1 < FF_ARRAY_ELEMS(font_stack)) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
185 /* Opening font tag */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
186 char *potential_font_tag_start = line;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
187 int len_backup = new_line.len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
188 struct font_tag *tag = &font_stack[sp + 1];
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
189 int has_valid_attr = 0;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
190
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
191 *tag = tag[-1]; // keep values from previous tag
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
192 line += 6;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
193
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
194 while (*line && *line != '>') {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
195 if (strncmp(line, "size=\"", 6) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
196 line += 6;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
197 tag->size = strtol(line, &line, 10);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
198 if (*line != '"' || !tag->size)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
199 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
200 append_text(&new_line, "{\\fs%d}", tag->size);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
201 has_valid_attr = 1;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
202 } else if (strncmp(line, "color=\"", 7) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
203 line += 7;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
204 if (*line == '#') {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
205 // #RRGGBB format
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
206 line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
207 tag->color = strtol(line, &line, 16) & 0x00ffffff;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
208 if (*line != '"')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
209 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
210 tag->color = ((tag->color & 0xff) << 16) |
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
211 (tag->color & 0xff00) |
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
212 ((tag->color & 0xff0000) >> 16) |
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
213 SUBRIP_FLAG_COLOR;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
214 } else {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
215 // Standard web colors
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
216 int i, len = indexof(line, '"');
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
217 if (len <= 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
218 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
219 for (i = 0; i < FF_ARRAY_ELEMS(subrip_web_colors); i++) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
220 const char *color = subrip_web_colors[i].s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
221 if (strlen(color) == len
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
222 && strncasecmp(line, color, len) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
223 tag->color = SUBRIP_FLAG_COLOR | subrip_web_colors[i].v;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
224 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
225 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
226 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
227
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
228 if (i == FF_ARRAY_ELEMS(subrip_web_colors)) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
229 /* We didn't find any matching color */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
230 line = strchr(line, '"'); // can't be NULL, see above
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
231 mp_msg(MSGT_SUBREADER, MSGL_WARN,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
232 MSGTR_SUBTITLES_SubRip_UnknownFontColor, orig);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
233 append_text(&new_line, "{\\c}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
234 line += 2;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
235 continue;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
236 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
237
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
238 line += len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
239 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
240 append_text(&new_line, "{\\c&H%06X&}", tag->color & 0xffffff);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
241 has_valid_attr = 1;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
242 } else if (strncmp(line, "face=\"", 6) == 0) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
243 /* Font face attribute */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
244 int len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
245 line += 6;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
246 len = indexof(line, '"');
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
247 if (len <= 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
248 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
249 tag->face.start = line;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
250 tag->face.len = len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
251 line += len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
252 append_text(&new_line, "{\\fn%.*s}", BSTR_P(tag->face));
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
253 has_valid_attr = 1;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
254 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
255 line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
256 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
257
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
258 if (!has_valid_attr || *line != '>') { /* Not valid font tag */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
259 line = potential_font_tag_start;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
260 new_line.len = len_backup;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
261 } else {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
262 sp++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
263 line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
264 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
265 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
266
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
267 /* Tag conversion code didn't match */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
268 if (line == orig_line)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
269 new_line.buf[new_line.len++] = *line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
270 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
271 new_line.buf[new_line.len] = 0;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
272 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
273
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
274
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
275 /*
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
276 * MicroDVD
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
277 *
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
278 * Based on the specifications found here:
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
279 * https://trac.videolan.org/vlc/ticket/1825#comment:6
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
280 */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
281
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
282 struct microdvd_tag {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
283 char key;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
284 int persistent;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
285 uint32_t data1;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
286 uint32_t data2;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
287 struct bstr data_string;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
288 };
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
289
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
290 #define MICRODVD_PERSISTENT_OFF 0
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
291 #define MICRODVD_PERSISTENT_ON 1
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
292 #define MICRODVD_PERSISTENT_OPENED 2
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
293
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
294 // Color, Font, Size, cHarset, stYle, Position, cOordinate
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
295 #define MICRODVD_TAGS "cfshyYpo"
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
296
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
297 static void microdvd_set_tag(struct microdvd_tag *tags, struct microdvd_tag tag)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
298 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
299 int tag_index = indexof(MICRODVD_TAGS, tag.key);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
300
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
301 if (tag_index < 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
302 return;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
303 memcpy(&tags[tag_index], &tag, sizeof(tag));
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
304 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
305
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
306 // italic, bold, underline, strike-through
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
307 #define MICRODVD_STYLES "ibus"
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
308
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
309 static char *microdvd_load_tags(struct microdvd_tag *tags, char *s)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
310 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
311 while (*s == '{') {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
312 char *start = s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
313 char tag_char = *(s + 1);
34758
e301516e3c83 subassconvert: use standard struct zero init.
cboesch
parents: 34757
diff changeset
314 struct microdvd_tag tag = {0};
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
315
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
316 if (!tag_char || *(s + 2) != ':')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
317 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
318 s += 3;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
319
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
320 switch (tag_char) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
321
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
322 /* Style */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
323 case 'Y':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
324 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
325 case 'y':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
326 while (*s && *s != '}') {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
327 int style_index = indexof(MICRODVD_STYLES, *s);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
328
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
329 if (style_index >= 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
330 tag.data1 |= (1 << style_index);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
331 s++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
332 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
333 if (*s != '}')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
334 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
335 /* We must distinguish persistent and non-persistent styles
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
336 * to handle this kind of style tags: {y:ib}{Y:us} */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
337 tag.key = tag_char;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
338 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
339
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
340 /* Color */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
341 case 'C':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
342 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
343 case 'c':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
344 tag.data1 = strtol(s, &s, 16) & 0x00ffffff;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
345 if (*s != '}')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
346 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
347 tag.key = 'c';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
348 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
349
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
350 /* Font name */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
351 case 'F':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
352 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
353 case 'f':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
354 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
355 int len = indexof(s, '}');
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
356 if (len < 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
357 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
358 tag.data_string.start = s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
359 tag.data_string.len = len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
360 s += len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
361 tag.key = 'f';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
362 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
363 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
364
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
365 /* Font size */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
366 case 'S':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
367 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
368 case 's':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
369 tag.data1 = strtol(s, &s, 10);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
370 if (*s != '}')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
371 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
372 tag.key = 's';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
373 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
374
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
375 /* Charset */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
376 case 'H':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
377 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
378 //TODO: not yet handled, just parsed.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
379 int len = indexof(s, '}');
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
380 if (len < 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
381 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
382 tag.data_string.start = s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
383 tag.data_string.len = len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
384 s += len;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
385 tag.key = 'h';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
386 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
387 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
388
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
389 /* Position */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
390 case 'P':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
391 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
392 tag.data1 = (*s++ == '1');
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
393 if (*s != '}')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
394 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
395 tag.key = 'p';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
396 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
397
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
398 /* Coordinates */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
399 case 'o':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
400 tag.persistent = MICRODVD_PERSISTENT_ON;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
401 tag.data1 = strtol(s, &s, 10);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
402 if (*s != ',')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
403 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
404 s++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
405 tag.data2 = strtol(s, &s, 10);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
406 if (*s != '}')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
407 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
408 tag.key = 'o';
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
409 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
410
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
411 default: /* Unknown tag, we consider it's text */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
412 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
413 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
414
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
415 if (tag.key == 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
416 return start;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
417
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
418 microdvd_set_tag(tags, tag);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
419 s++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
420 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
421 return s;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
422 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
423
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
424 static void microdvd_open_tags(struct line *new_line, struct microdvd_tag *tags)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
425 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
426 int i, sidx;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
427 for (i = 0; i < sizeof(MICRODVD_TAGS) - 1; i++) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
428 if (tags[i].persistent == MICRODVD_PERSISTENT_OPENED)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
429 continue;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
430 switch (tags[i].key) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
431 case 'Y':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
432 case 'y':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
433 for (sidx = 0; sidx < sizeof(MICRODVD_STYLES) - 1; sidx++)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
434 if (tags[i].data1 & (1 << sidx))
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
435 append_text(new_line, "{\\%c1}", MICRODVD_STYLES[sidx]);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
436 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
437
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
438 case 'c':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
439 append_text(new_line, "{\\c&H%06X&}", tags[i].data1);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
440 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
441
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
442 case 'f':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
443 append_text(new_line, "{\\fn%.*s}", BSTR_P(tags[i].data_string));
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
444 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
445
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
446 case 's':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
447 append_text(new_line, "{\\fs%d}", tags[i].data1);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
448 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
449
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
450 case 'p':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
451 if (tags[i].data1 == 0)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
452 append_text(new_line, "{\\an8}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
453 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
454
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
455 case 'o':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
456 append_text(new_line, "{\\pos(%d,%d)}",
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
457 tags[i].data1, tags[i].data2);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
458 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
459 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
460 if (tags[i].persistent == MICRODVD_PERSISTENT_ON)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
461 tags[i].persistent = MICRODVD_PERSISTENT_OPENED;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
462 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
463 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
464
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
465 static void microdvd_close_no_persistent_tags(struct line *new_line,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
466 struct microdvd_tag *tags)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
467 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
468 int i, sidx;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
469
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
470 for (i = sizeof(MICRODVD_TAGS) - 2; i; i--) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
471 if (tags[i].persistent != MICRODVD_PERSISTENT_OFF)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
472 continue;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
473 switch (tags[i].key) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
474
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
475 case 'y':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
476 for (sidx = sizeof(MICRODVD_STYLES) - 2; sidx >= 0; sidx--)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
477 if (tags[i].data1 & (1 << sidx))
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
478 append_text(new_line, "{\\%c0}", MICRODVD_STYLES[sidx]);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
479 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
480
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
481 case 'c':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
482 append_text(new_line, "{\\c}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
483 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
484
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
485 case 'f':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
486 append_text(new_line, "{\\fn}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
487 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
488
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
489 case 's':
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
490 append_text(new_line, "{\\fs}");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
491 break;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
492 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
493 tags[i].key = 0;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
494 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
495 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
496
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
497 /**
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
498 * \brief Convert MicroDVD lines into ASS markup
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
499 * \param orig original MicroDVD line. The content will remain untouched.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
500 * \param dest ASS markup destination buffer.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
501 * \param dest_buffer_size maximum size for the destination buffer.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
502 */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
503 void subassconvert_microdvd(const char *orig, char *dest, size_t dest_buffer_size)
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
504 {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
505 /* line is not const to avoid warnings with strtol, etc.
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
506 * orig content won't be changed */
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
507 char *line = (char *)orig;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
508 struct line new_line = {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
509 .buf = dest,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
510 .bufsize = dest_buffer_size,
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
511 };
34758
e301516e3c83 subassconvert: use standard struct zero init.
cboesch
parents: 34757
diff changeset
512 struct microdvd_tag tags[sizeof(MICRODVD_TAGS) - 1] = {{0}};
32462
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
513
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
514 while (*line) {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
515 line = microdvd_load_tags(tags, line);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
516 microdvd_open_tags(&new_line, tags);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
517
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
518 while (*line && *line != '|')
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
519 new_line.buf[new_line.len++] = *line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
520
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
521 if (*line == '|') {
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
522 microdvd_close_no_persistent_tags(&new_line, tags);
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
523 append_text(&new_line, "\\N");
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
524 line++;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
525 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
526 }
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
527 new_line.buf[new_line.len] = 0;
6e7c20b56c89 Move subassconvert.[ch] to the sub directory.
cigaes
parents:
diff changeset
528 }