Automation 4 Subtitle Data format and functions API This file describes the API for retrieving and manipulating subtitle data in Automation 4, as well as the data structures generated and accepted by these APIs. --- Subtitle Line table A Subtitle Line table contains various information about a line in the subtitle file being processed. There are several classes of subtitle lines, which all have a few fields in common, but otherwise have different fields. Common keys for all Subtitle Line classes: class (string) The class of the Subtitle Line. Must be one of: "clear", (empty line) "comment", (semicolon-style comment line) "head", (section heading) "info", (key/value pair in Script Info section) "format", (line format definition) "style", (style definition line) "stylex", (style extension line, tentative AS5 feature) "dialogue", (dialogue line or dialogue-style comment line) "unknown" (unknown kind of line) Lines of the "unknown" class should never appear in well-formed subtitle scripts. They will usually be a result of a line being outside the section it belongs in. raw (string) The raw text of the line. You should not change this field directly, since the data in it will never be used for generating lines in internal representation. It will, however, be updated from the remaining data in the line whenever it is required for one thing or another by an internal function. section (string) The section this line is placed in. If it is placed before the first section heading, this field is nil. Key defined only for the "comment" class: text (string) The text of the comment line, ie. everything after the initial semicolon, including any spaces. Key defined only for the "head" class: No special keys are defined for this class, but the "section" field will be the name of the new section started. Keys defined only for the "info" class: key (string) The "key" part of the line, ie. everything before the first colon. value (string) The "value" part of the line, ie. everything after the first colon, discarding any leading whitespace. Keys defined only for the "format" class: fields (table) An Array Table of strings, each being the name of a field on the line. Keys defined only for the "style" class: name (string) Name of the style. fontname (string) Name of the font used. fontsize (string) Size of the font used, in pixels. color1 (string) color2 (string) color3 (string) color4 (string) The four colors for the style. (Fill, pre-karaoke fill, border, shadow) In VB hexadecimal, ie. "&HAABBGGRR&" bold (boolean/number) The boldness/weight of the font. This will usually be a boolean, but it can be a number, in which case it must be one of 0, 100, 200, ..., 900. italic (boolean) underline (boolean) strikeout (boolean) Other properties of the font. scale_x (number) scale_y (number) Scaling of the text, in percent. spacing (number) Additional spacing between letters. Always integer. angle (number) Rotation of the text on the Z axis in degrees. borderstyle (number) 1 = outline and drop shadow; 3 = opaque box. outline (number) Width of the outline. shadow (number) Distance between shadow and text. align (number) Numpad alignment of the text. margin_l (number) margin_r (number) margin_t (number) margin_b (number) Left/right/top/bottom margins of the text in pixels. If using a format without support for separate top and bottom margins, the margin_t value will be used for vertical margin when converting back to textual representation. encoding (number) Font encoding used for text. This follows the MS Windows font encoding constants. relative_to (number) From STS.h: "0: window, 1: video, 2: undefined (~window)" vertical (boolean) Whether vertical text semantics is used or not. Keys defined only for the "stylex" class: Remember that this class is only for the tentative AS5 format. name (string) Name of the new style defined. basename (string) Name of the style the new style is based on. overrides (string) String of override tags defining the new style. Keys only defined for the "dialogue" class: comment (boolean) True if the line is a comment line, otherwise false. layer (number) The layer the line is rendered in. start_time (number) end_time (number) Start/end time of the line in milliseconds. style (string) Name of the style assigned to this line. actor (string) Name of the actor performing this line. margin_l (number) margin_r (number) margin_t (number) margin_b (number) Left/right/top/bottom margins of the text in pixels. If any of these are zero, it's considered "not overriding". Same comment as for style lines applies. effect (string) Effect to apply to the line. userdata (string) Authoring-application defined data. (Tentative AS5 field.) text (string) The text for this line. --- Subtitle File user data object The Subtitle File object is a user data object with some of the metatable methods overridden to provide table-like access to the subtitle lines, as well as some functions to modify the subtitles. The following operations are supported. n = #subs n = subs.n Retrieve the number of lines in total. The first syntax is preferred. line = subs[i] Retrieve line i, assuming 1 <= i <= n. subs[i] = line Replace line i with new data. subs[i] = nil subs.delete(i[, i2, ...]) Delete line i, pushing all following lines up an index. (Ie. by repeatedly deleting line 1 this way, the file will eventually end up empty.) The function syntax for this function can also take multiple line indexes, in which case it deletes each of those lines. All indexes are relative to the line numbering before the function is called. subs.deleterange(a, b) Deletes all lines from index a to index b, both inclusive. If b < a, nothing is done. subs[0] = line subs.append(line[, line2, ...]) Append one or more lines to a file. subs[-i] = line subs.insert(i, line[, line2, ...]) Insert one or more lines before index i. Note that the array-style accessors are most likely faster for any case only involving one line at a time, while the function syntax versions are probably faster if operating on multiple lines at a time. --- Parsing tag data This function uses the Aegisub SSA parser to split a string into override blocks and text, and give separate access to each tag in override blocks. function aegisub.parse_tag_data(text) @text (string) The SSA format string to parse. Returns: A Parsed Tag Data table. --- Recreating a line from tag data This function takes a Parsed Tag Data table and creates an SSA string from it. function aegisub.unparse_tag_data(tagdata) @tagdata (table) The Parsed Tag Data table to "unparse". Returns: A string, being the "unparsed" data. --- Parsing karaoke data Tihs function uses the Aegisub SSA parser to split a string into karaoke syllables with additional calculated information added. function aegisub.parse_karaoke_data(text) @text (string) The SSA format string to parse. Returns: A Parsed Karaoke Data table. --- Parsed Tag Data table The Parsed Tag Data table is an Array Table containing a number of Parsed Line Block tables. Parsed Line Block table A Parsed Line Block describes part of a line. (See ass_dialogue.cpp:70 for a more complete description of this. There are several classes of Parsed Line Block tables, which have slightly varying fields. Base Parsed Line Block table class class (string) One of: "plain", "override", "drawing" "plain" and "drawing" Parsed Line Block table classes text (string) The text contained in this block. "override" Parsed Line Block table class This class doesn't have any new, specifically named fields. It does, however, have multiple integer indexed fields, ie. acts as an Array Table. Each of these indexes refer to a table of type Parsed Override Tag. Parsed Override Tag table This table describes a single override-tag in an SSA line. valid (boolean) Whether this tag was parsed as a valid tag, or is just used for representing junk in the middle of the line. name (string) Name of the tag, including leading backslash character. (In the case of invalid tags, the leading backslash might not be present.) paran (boolean) Whether this tag has parantheses in its textual representation. params (table) This is an Array Table containing the parameters for this tag. It will always have the maximum number of entries that can be supported by the tag, but in case of omitted parameters, the parameters omitted will have 'false' for value in this table. --- Parsed Karaoke Data table The Parsed Karaoke Data table is simply an Array Table of Karaoke Syllable Data tables. However, the Parsed Karaoke Data table will always have one more item than its count shows, which is numbered 0 (zero). This item contains everything before the first syllable. Karaoke Syllable Data table This table contains information about a single karaoke syllable. duration (number) Duration of the syllable in milliseconds. (In case of syllable zero, this is always zero.) start_time (number) end_time (number) Start and end times of the syllable, relative to the start of the line, given in milliseconds. (While these can technically easily be calculated from the duration data, they are too convenient to leave out from the standard interface.) tag (string) The tag used for marking up this syllable. Usually one of: "k", "K", "kf", "ko" (In case of syllable zero, this is always the empty string.) text (string) The text of the syllable, including all additional override tags. text_stripped (string) The text of the syllable, stripped of any override tags. --- Setting undo points This function can only be used in macro features, it will have no effect when used in any other feature. It sets an undo point. You should always call this function after every operation that must be undoable as a separate step. It is considered very bad practice to modify the subtitles in a macro without setting at least one undo-point, which must be at the end. Furthermore, this function also marks the subtitles as "modified". No other function does this. function aegisub.set_undo_point(description) @description (string) A short description of the operation that will be undone, if this undo-point is used. Note that this is currently unused in Aegisub, and this parameter is simply ignored. Returns: nothing. ---