| 481 | |
| 482 | |
| 483 | int ff_ass_split_override_codes(const ASSCodesCallbacks *callbacks, void *priv, |
| 484 | const char *buf) |
| 485 | { |
| 486 | const char *text = NULL; |
| 487 | char new_line[2]; |
| 488 | int text_len = 0; |
| 489 | |
| 490 | while (buf && *buf) { |
| 491 | if (text && callbacks->text && |
| 492 | (sscanf(buf, "\\%1[nN]", new_line) == 1 || |
| 493 | !strncmp(buf, "{\\", 2))) { |
| 494 | callbacks->text(priv, text, text_len); |
| 495 | text = NULL; |
| 496 | } |
| 497 | if (sscanf(buf, "\\%1[nN]", new_line) == 1) { |
| 498 | if (callbacks->new_line) |
| 499 | callbacks->new_line(priv, new_line[0] == 'N'); |
| 500 | buf += 2; |
| 501 | } else if (!strncmp(buf, "{\\", 2)) { |
| 502 | buf++; |
| 503 | while (*buf == '\\') { |
| 504 | char style[2], c[2], sep[2], c_num[2] = "0", tmp[128] = {0}; |
| 505 | unsigned int color = 0xFFFFFFFF; |
| 506 | int len, size = -1, an = -1, alpha = -1; |
| 507 | int x1, y1, x2, y2, t1 = -1, t2 = -1; |
| 508 | if (sscanf(buf, "\\%1[bisu]%1[01\\}]%n", style, c, &len) > 1) { |
| 509 | int close = c[0] == '0' ? 1 : c[0] == '1' ? 0 : -1; |
| 510 | len += close != -1; |
| 511 | if (callbacks->style) |
| 512 | callbacks->style(priv, style[0], close); |
| 513 | } else if (sscanf(buf, "\\c%1[\\}]%n", sep, &len) > 0 || |
| 514 | sscanf(buf, "\\c&H%X&%1[\\}]%n", &color, sep, &len) > 1 || |
| 515 | sscanf(buf, "\\%1[1234]c%1[\\}]%n", c_num, sep, &len) > 1 || |
| 516 | sscanf(buf, "\\%1[1234]c&H%X&%1[\\}]%n", c_num, &color, sep, &len) > 2) { |
| 517 | if (callbacks->color) |
| 518 | callbacks->color(priv, color, c_num[0] - '0'); |
| 519 | } else if (sscanf(buf, "\\alpha%1[\\}]%n", sep, &len) > 0 || |
| 520 | sscanf(buf, "\\alpha&H%2X&%1[\\}]%n", &alpha, sep, &len) > 1 || |
| 521 | sscanf(buf, "\\%1[1234]a%1[\\}]%n", c_num, sep, &len) > 1 || |
| 522 | sscanf(buf, "\\%1[1234]a&H%2X&%1[\\}]%n", c_num, &alpha, sep, &len) > 2) { |
| 523 | if (callbacks->alpha) |
| 524 | callbacks->alpha(priv, alpha, c_num[0] - '0'); |
| 525 | } else if (sscanf(buf, "\\fn%1[\\}]%n", sep, &len) > 0 || |
| 526 | sscanf(buf, "\\fn%127[^\\}]%1[\\}]%n", tmp, sep, &len) > 1) { |
| 527 | if (callbacks->font_name) |
| 528 | callbacks->font_name(priv, tmp[0] ? tmp : NULL); |
| 529 | } else if (sscanf(buf, "\\fs%1[\\}]%n", sep, &len) > 0 || |
| 530 | sscanf(buf, "\\fs%u%1[\\}]%n", &size, sep, &len) > 1) { |
| 531 | if (callbacks->font_size) |
| 532 | callbacks->font_size(priv, size); |
| 533 | } else if (sscanf(buf, "\\a%1[\\}]%n", sep, &len) > 0 || |
| 534 | sscanf(buf, "\\a%2u%1[\\}]%n", &an, sep, &len) > 1 || |
| 535 | sscanf(buf, "\\an%1[\\}]%n", sep, &len) > 0 || |
| 536 | sscanf(buf, "\\an%1u%1[\\}]%n", &an, sep, &len) > 1) { |
| 537 | if (an != -1 && buf[2] != 'n') |
| 538 | an = (an&3) + (an&4 ? 6 : an&8 ? 3 : 0); |
| 539 | if (callbacks->alignment) |
| 540 | callbacks->alignment(priv, an); |
no outgoing calls
no test coverage detected