/* * Copyright (C) 2004-2005 Vadim Berezniker * http://www.kryptolus.com * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Make; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * http://www.gnu.org/copyleft/gpl.html * */ #include "stdafx.h" #include "common.h" #include "sabbu.h" #include "krySubSSA.h" #ifdef _WINDOWS #define strcasecmp stricmp #endif // converts boolean value to SSA/ASS value int sub_ssa_transform_bool(int val) { return (val ? -1 : 0); } int sub_ssa_transform_bool_ass(int val) { return (val ? -1 : 0); } int sub_ssa_transform_border_style(int border_style) { return (border_style == BORDER_OUTLINE ? 1 : 3); } // converts "normal" alignment number to SSA alignment int sub_ssa_transform_alignment(int alignment) { if(alignment >= 4 && alignment <= 6) return alignment += 5; else if(alignment >= 7 && alignment <= 9) return alignment -= 2; return alignment; } // converts color to ASS format char *sub_ssa_transform_color(int color) { char *rv = kry_strdup_printf(KRY_LOC "&H%08X", color); return rv; } char *sub_ssa_transform_marked(int marked) { char *rv = kry_strdup_printf(KRY_LOC "Marked=%d", marked); return rv; } char *sub_ssa_transform_time(unsigned long time) { return time_mili_to_string(time); } char *sub_ssa_transform_margin(int margin) { char *rv = kry_strdup_printf(KRY_LOC "%04d", margin); return rv; } char *sub_ssa_get_format_column_style(void *data) { char *rv = kry_strdup_printf(KRY_LOC "Style"); return rv; } char *sub_ssa_transform_type(enum kryEvent::event_type type) { return kryEvent::GetTypeString(type); } int sub_ssa_marker_parser(char *marker) { if(strlen(marker) < 8) return 0; if(!strcmp(marker, "Marked=0")) return 0; else if(!strcmp(marker, "Marked=1")) return 1; return 0; } int sub_ssa_time_parser(char *time) { return time_string_to_mili(time, 0); } int sub_ssa_color_parser(char *color) { if(strlen(color) > 2 && !strncmp(color, "&H", 2)) { if(color[strlen(color) - 1] == '&') color[strlen(color) - 1] = 0; return strtoul(color+2, NULL, 16); } return atol(color); } typedef SubSsaSaveColumnFunc ColSaveFunc; typedef SubSsaReadColumnFunc ColReadFunc; typedef SubSsaSaveColumnTransformFunc XFormFunc; /* * * * * STYLE COLUMNS * * * * */ struct krySubSSAColumnInfo krySubSSAColumnStyleFormat = { COLUMN_STYLE_ANY, "Format", ": ", TOKEN_STR, 0, (ColSaveFunc) sub_ssa_get_format_column_style, TRANSFORM_NONE, NULL, (ColReadFunc) NULL, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleName = { COLUMN_STYLE_ANY, "Name", ",", TOKEN_STR, 0, (ColSaveFunc) kryStyle::GetNameStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetNameStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleFontName = { COLUMN_STYLE_ANY, "Fontname", ",", TOKEN_STR, 0, (ColSaveFunc) kryStyle::GetFontNameStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontNameStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleFontSize = { COLUMN_STYLE_ANY, "Fontsize", ",", TOKEN_DOUBLE, 0, (ColSaveFunc) kryStyle::GetFontSizeStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontSizeStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStylePrimaryColorSSA = { COLUMN_STYLE_SSA, "PrimaryColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorPrimaryStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetColorPrimaryStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleSecondaryColorSSA = { COLUMN_STYLE_SSA, "SecondaryColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorSecondaryStatic,TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetColorSecondaryStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleTertiaryColorSSA = { COLUMN_STYLE_SSA, "TertiaryColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorTertiaryStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetColorTertiaryStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleBackColorSSA = { COLUMN_STYLE_SSA, "BackColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorBackStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetColorBackStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStylePrimaryColorASS = { COLUMN_STYLE_ASS, "PrimaryColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorPrimaryStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_color, (ColReadFunc) kryStyle::SetColorPrimaryStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleSecondaryColorASS = { COLUMN_STYLE_ASS, "SecondaryColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorSecondaryStatic,TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_color, (ColReadFunc) kryStyle::SetColorSecondaryStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleOutlineColorASS = { COLUMN_STYLE_ASS, "OutlineColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorOutlineStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_color, (ColReadFunc) kryStyle::SetColorOutlineStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleBackColorASS = { COLUMN_STYLE_ASS, "BackColour", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetColorShadowStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_color, (ColReadFunc) kryStyle::SetColorShadowStatic, (XFormFunc) sub_ssa_color_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleBoldSSA = { COLUMN_STYLE_SSA, "Bold", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetBoldStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool, (ColReadFunc) kryStyle::SetBoldStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleItalicSSA = { COLUMN_STYLE_SSA, "Italic", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetItalicStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool, (ColReadFunc) kryStyle::SetItalicStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleBoldASS = { COLUMN_STYLE_ASS, "Bold", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetBoldStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool_ass, (ColReadFunc) kryStyle::SetBoldStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleItalicASS = { COLUMN_STYLE_ASS, "Italic", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetItalicStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool_ass, (ColReadFunc) kryStyle::SetItalicStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleUnderlineASS = { COLUMN_STYLE_ASS, "Underline", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetUnderlineStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool_ass, (ColReadFunc) kryStyle::SetUnderlineStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleStrikeOutASS = { COLUMN_STYLE_ASS, "StrikeOut", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetStrikethroughStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_bool_ass, (ColReadFunc) kryStyle::SetStrikethroughStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleScaleXASS = { COLUMN_STYLE_ASS, "ScaleX", ",", TOKEN_DOUBLE, 0, (ColSaveFunc) kryStyle::GetFontScaleXStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontScaleXStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleScaleYASS = { COLUMN_STYLE_ASS, "ScaleY", ",", TOKEN_DOUBLE, 0, (ColSaveFunc) kryStyle::GetFontScaleYStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontScaleYStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleSpacingASS = { COLUMN_STYLE_ASS, "Spacing", ",", TOKEN_DOUBLE, 0, (ColSaveFunc) kryStyle::GetFontSpacingStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontSpacingStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleAngleASS = { COLUMN_STYLE_ASS, "Angle", ",", TOKEN_DOUBLE, 2, (ColSaveFunc) kryStyle::GetFontAngleZStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetFontAngleZStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleBorderStyle = { COLUMN_STYLE_ANY, "BorderStyle", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetBorderStyleStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_border_style, (ColReadFunc) kryStyle::SetBorderStyleStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleOutline = { COLUMN_STYLE_ANY, "Outline", ",", TOKEN_DOUBLE, 2, (ColSaveFunc) kryStyle::GetBorderSizeStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetBorderSizeStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleShadow = { COLUMN_STYLE_ANY, "Shadow", ",", TOKEN_DOUBLE, 2, (ColSaveFunc) kryStyle::GetShadowSizeStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetShadowSizeStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleAlignmentSSA = { COLUMN_STYLE_SSA, "Alignment", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetAlignmentStatic, TRANSFORM_DIRECT, (XFormFunc) sub_ssa_transform_alignment, (ColReadFunc) kryStyle::SetAlignmentStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleAlignmentASS = { COLUMN_STYLE_ASS, "Alignment", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetAlignmentStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetAlignmentStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleMarginL = { COLUMN_STYLE_ANY, "MarginL", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetMarginLeftStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetMarginLeftStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleMarginR = { COLUMN_STYLE_ANY, "MarginR", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetMarginRightStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetMarginRightStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleMarginV = { COLUMN_STYLE_ANY, "MarginV", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetMarginTopStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetMarginVerticalStatic,NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleAlphaLevelSSA = { COLUMN_STYLE_SSA, "AlphaLevel", ",", TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetAlphaLevelStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetAlphaLevelStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnStyleEncoding = { COLUMN_STYLE_ANY, "Encoding", NULL, TOKEN_INT, 0, (ColSaveFunc) kryStyle::GetCharsetStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryStyle::SetCharsetStatic, NULL, NULL }; /* * * * * EVENT COLUMNS * * * * */ struct krySubSSAColumnInfo krySubSSAColumnEventFormat = { COLUMN_EVENT_ANY, "Format", ": ", TOKEN_INT, 0, (ColSaveFunc) kryEvent::GetTypeStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_type, (ColReadFunc) kryEvent::SetTypeStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventMarkedSSA = { COLUMN_EVENT_SSA, "Marked", ",", TOKEN_INT, 0, (ColSaveFunc) kryEventDetailed::GetMarkedStatic,TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_marked, (ColReadFunc) kryEventDetailed::SetMarkedStatic, (XFormFunc) sub_ssa_marker_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventLayerASS = { COLUMN_EVENT_ASS, "Layer", ",", TOKEN_INT, 0, (ColSaveFunc) kryEventDetailed::GetLayerStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEventDetailed::SetLayerStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventStart = { COLUMN_EVENT_ANY, "Start", ",", TOKEN_INT, 0, (ColSaveFunc) kryEvent::GetStartStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_time, (ColReadFunc) kryEvent::SetStartStatic, (XFormFunc) sub_ssa_time_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventEnd = { COLUMN_EVENT_ANY, "End", ",", TOKEN_INT, 0, (ColSaveFunc) kryEvent::GetEndStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_time, (ColReadFunc) kryEvent::SetEndStatic, (XFormFunc) sub_ssa_time_parser, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventStyle = { COLUMN_EVENT_ANY, "Style", ",", TOKEN_STR, 0, (ColSaveFunc) kryEventDetailed::GetStyleStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEventDetailed::SetStyleStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventName = { COLUMN_EVENT_ANY, "Name", ",", TOKEN_STR, 0, (ColSaveFunc) kryEventDetailed::GetNameStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEventDetailed::SetNameStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventActor = { COLUMN_EVENT_ANY_READONLY, "Actor", ",", TOKEN_STR, 0, (ColSaveFunc) kryEventDetailed::GetNameStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEventDetailed::SetNameStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventMarginL = { COLUMN_EVENT_ANY, "MarginL", ",", TOKEN_INT, 0, (ColSaveFunc) kryEventDetailed::GetMarginLeftStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_margin, (ColReadFunc) kryEventDetailed::SetMarginLeftStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventMarginR = { COLUMN_EVENT_ANY, "MarginR", ",", TOKEN_INT, 0, (ColSaveFunc) kryEventDetailed::GetMarginRightStatic, TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_margin, (ColReadFunc) kryEventDetailed::SetMarginRightStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventMarginV = { COLUMN_EVENT_ANY, "MarginV", ",", TOKEN_INT, 0, (ColSaveFunc) kryEventDetailed::GetMarginVerticalStatic,TRANSFORM_TO_STRING, (XFormFunc) sub_ssa_transform_margin, (ColReadFunc) kryEventDetailed::SetMarginVerticalStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventEffect = { COLUMN_EVENT_ANY, "Effect", ",", TOKEN_STR, 0, (ColSaveFunc) kryEventDetailed::GetEffectStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEventDetailed::SetEffectStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnEventText = { COLUMN_EVENT_ANY, "Text", NULL, TOKEN_STR_END, 0, (ColSaveFunc) kryEvent::GetTextStatic, TRANSFORM_NONE, NULL, (ColReadFunc) kryEvent::SetTextStatic, NULL, NULL }; struct krySubSSAColumnInfo krySubSSAColumnListWriteStyleSSA[] = { krySubSSAColumnStyleFormat, krySubSSAColumnStyleName, krySubSSAColumnStyleFontName, krySubSSAColumnStyleFontSize, krySubSSAColumnStylePrimaryColorSSA, krySubSSAColumnStyleSecondaryColorSSA, krySubSSAColumnStyleTertiaryColorSSA, krySubSSAColumnStyleBackColorSSA, krySubSSAColumnStyleBoldSSA, krySubSSAColumnStyleItalicSSA, krySubSSAColumnStyleBorderStyle, krySubSSAColumnStyleOutline, krySubSSAColumnStyleShadow, krySubSSAColumnStyleAlignmentSSA, krySubSSAColumnStyleMarginL, krySubSSAColumnStyleMarginR, krySubSSAColumnStyleMarginV, krySubSSAColumnStyleAlphaLevelSSA, krySubSSAColumnStyleEncoding }; struct krySubSSAColumnInfo krySubSSAColumnListWriteStyleASS[] = { krySubSSAColumnStyleFormat, krySubSSAColumnStyleName, krySubSSAColumnStyleFontName, krySubSSAColumnStyleFontSize, krySubSSAColumnStylePrimaryColorASS, krySubSSAColumnStyleSecondaryColorASS, krySubSSAColumnStyleOutlineColorASS, krySubSSAColumnStyleBackColorASS, krySubSSAColumnStyleBoldASS, krySubSSAColumnStyleItalicASS, krySubSSAColumnStyleUnderlineASS, krySubSSAColumnStyleStrikeOutASS, krySubSSAColumnStyleScaleXASS, krySubSSAColumnStyleScaleYASS, krySubSSAColumnStyleSpacingASS, krySubSSAColumnStyleAngleASS, krySubSSAColumnStyleBorderStyle, krySubSSAColumnStyleOutline, krySubSSAColumnStyleShadow, krySubSSAColumnStyleAlignmentASS, krySubSSAColumnStyleMarginL, krySubSSAColumnStyleMarginR, krySubSSAColumnStyleMarginV, krySubSSAColumnStyleEncoding, }; struct krySubSSAColumnInfo krySubSSAColumnListWriteEventSSA[] = { krySubSSAColumnEventFormat, krySubSSAColumnEventMarkedSSA, krySubSSAColumnEventStart, krySubSSAColumnEventEnd, krySubSSAColumnEventStyle, krySubSSAColumnEventName, krySubSSAColumnEventMarginL, krySubSSAColumnEventMarginR, krySubSSAColumnEventMarginV, krySubSSAColumnEventEffect, krySubSSAColumnEventText }; struct krySubSSAColumnInfo krySubSSAColumnListWriteEventASS[] = { krySubSSAColumnEventFormat, krySubSSAColumnEventLayerASS, krySubSSAColumnEventStart, krySubSSAColumnEventEnd, krySubSSAColumnEventStyle, krySubSSAColumnEventName, krySubSSAColumnEventMarginL, krySubSSAColumnEventMarginR, krySubSSAColumnEventMarginV, krySubSSAColumnEventEffect, krySubSSAColumnEventText }; struct krySubSSAColumnInfo sub_ssa_columns[] = { krySubSSAColumnStyleFormat, krySubSSAColumnStyleName, krySubSSAColumnStyleFontName, krySubSSAColumnStyleFontSize, krySubSSAColumnStylePrimaryColorSSA, krySubSSAColumnStyleSecondaryColorSSA, krySubSSAColumnStyleTertiaryColorSSA, krySubSSAColumnStyleBackColorSSA, krySubSSAColumnStylePrimaryColorASS, krySubSSAColumnStyleSecondaryColorASS, krySubSSAColumnStyleOutlineColorASS, krySubSSAColumnStyleBackColorASS, krySubSSAColumnStyleBoldSSA, krySubSSAColumnStyleItalicSSA, krySubSSAColumnStyleBoldASS, krySubSSAColumnStyleItalicASS, krySubSSAColumnStyleUnderlineASS, krySubSSAColumnStyleStrikeOutASS, krySubSSAColumnStyleScaleXASS, krySubSSAColumnStyleScaleYASS, krySubSSAColumnStyleSpacingASS, krySubSSAColumnStyleAngleASS, krySubSSAColumnStyleBorderStyle, krySubSSAColumnStyleOutline, krySubSSAColumnStyleShadow, krySubSSAColumnStyleAlignmentSSA, krySubSSAColumnStyleAlignmentASS, krySubSSAColumnStyleMarginL, krySubSSAColumnStyleMarginR, krySubSSAColumnStyleMarginV, krySubSSAColumnStyleAlphaLevelSSA, krySubSSAColumnStyleEncoding, /*** EVENT COLUMNS ***/ krySubSSAColumnEventFormat, krySubSSAColumnEventMarkedSSA, krySubSSAColumnEventLayerASS, krySubSSAColumnEventStart, krySubSSAColumnEventEnd, krySubSSAColumnEventStyle, krySubSSAColumnEventName, krySubSSAColumnEventActor, krySubSSAColumnEventMarginL, krySubSSAColumnEventMarginR, krySubSSAColumnEventMarginV, krySubSSAColumnEventEffect, krySubSSAColumnEventText }; struct krySubSSAColumnInfo *sub_ssa_save_find_column(char *name, int mask) { for(unsigned int col_idx = 0; col_idx < sizeof(sub_ssa_columns) / sizeof(krySubSSAColumnInfo); col_idx++) { struct krySubSSAColumnInfo *column_info = &sub_ssa_columns[col_idx]; if(column_info->column_type & mask && !strcasecmp(column_info->name, name)) return column_info; } return NULL; } GList *krySubSSA::GetColumnListWrite(enum krySubSSA::krySubSSAColumnListWriteType type) { int count = 0; struct krySubSSAColumnInfo *columns_source = NULL; switch(type) { case COLUMN_LIST_WRITE_STYLE_SSA: columns_source = krySubSSAColumnListWriteStyleSSA; count = sizeof(krySubSSAColumnListWriteStyleSSA) / sizeof(krySubSSAColumnInfo); break; case COLUMN_LIST_WRITE_STYLE_ASS: columns_source = krySubSSAColumnListWriteStyleASS; count = sizeof(krySubSSAColumnListWriteStyleASS) / sizeof(krySubSSAColumnInfo); break; case COLUMN_LIST_WRITE_EVENT_SSA: columns_source = krySubSSAColumnListWriteEventSSA; count = sizeof(krySubSSAColumnListWriteEventSSA) / sizeof(krySubSSAColumnInfo); break; case COLUMN_LIST_WRITE_EVENT_ASS: columns_source = krySubSSAColumnListWriteEventASS; count = sizeof(krySubSSAColumnListWriteEventASS) / sizeof(krySubSSAColumnInfo); break; } GList *columns = NULL; for(int col_idx = 0; col_idx < count; col_idx++) { krySubSSAColumnInfo *info = kry_new(krySubSSAColumnInfo, 1); *info = columns_source[col_idx]; columns = g_list_append(columns, info); } return columns; } void krySubSSA::FreeColumnListWrite(GList *list) { for(GList *ptr = list; ptr; ptr = ptr->next) { struct krySubSSAColumnInfo *column_info = (struct krySubSSAColumnInfo *) ptr->data; kry_free(column_info); } g_list_free(list); } krySubSSAColumnInfo *krySubSSA::GetColumnWrite(enum krySubSSAColumnWriteType type) { struct krySubSSAColumnInfo *column = kry_new(struct krySubSSAColumnInfo, 1); switch(type) { case COLUMN_WRITE_START: *column = krySubSSAColumnEventStart; break; case COLUMN_WRITE_END: *column = krySubSSAColumnEventEnd; break; case COLUMN_WRITE_STYLE: *column = krySubSSAColumnEventStyle; break; case COLUMN_WRITE_NAME: *column = krySubSSAColumnEventName; break; case COLUMN_WRITE_TEXT: *column = krySubSSAColumnEventText; break; }; return column; }