CINXE.COM
RubyGems - appydave-tools - Versions diffs - 0.11.11 → 0.12.0 - Mend - Supply Chain Defender
<!DOCTYPE html> <html> <head> <title> RubyGems - appydave-tools - Versions diffs - 0.11.11 → 0.12.0 - Mend - Supply Chain Defender </title> <link rel="icon" type="image/png" href="/packs/media/images/production/favicons/favicon-32x32-fa0286238d4d512e71dba3881cbbcc42.png" /> <link rel="mask-icon" type="image/x-icon" href="/packs/media/images/production/favicons/favicon-786db6a85c0dea068c1a7047338024d2.svg" /> <link rel="apple-touch-icon" type="image/png" href="/packs/media/images/production/favicons/apple-touch-icon-11491aa2351c88b3b48534d1576a2ff9.png" /> <link rel="shortcut icon" type="image/x-icon" href="/packs/media/images/production/favicons/favicon-81c62e5500c39bd10e99844e94455995.ico" /> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="Vq5MO23r0O6U_jhP6pI518uUy4hVf1UfOwqJ4hJsGSKbudhqE_hrUeNko8B-0Yb1H3fEebQm2tZVhIA1QLJ91Q" /> <meta content='no-cache' name='turbolinks-cache-control'> <meta content='width=device-width, initial-scale=1' name='viewport'> <link rel="stylesheet" href="/packs/css/application-b44eb75784afb1e9f8ce.css" media="all" /> <script src="/packs/js/application-9f130b109122a7b55e22.js" data-turbolinks-track="reload"></script> <link href='https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i' rel='stylesheet'> </head> <body class='registries ruby_gems diffs' id='page-top'> <div id='wrapper'> <div class='d-flex flex-column' id='content-wrapper'> <div id='content'> <nav class='navbar navbar-expand navbar-light bg-white topbar mb-4 shadow'> <a class='sidebar-brand d-flex align-items-center justify-content-center' href='/'> <div class='sidebar-brand-text mx-3 d-none d-xxl-block d-xl-block'> <img alt="Diffend" src="/packs/media/images/production/logos/vertical-dark-5363ad390f9fcfd11bfecf89a3fb60f1.svg" /> </div> </a> <div class='container'> <ul class='navbar-nav'> <li class='nav-item'> <a class='nav-link' href='/gems'> <span class='mr-2 d-none d-lg-inline text-gray-600'> RubyGems </span> </a> </li> <li class='nav-item'> <a class='nav-link' href='/npm'> <span class='mr-2 d-none d-lg-inline text-gray-600'> npm </span> </a> </li> <li class='nav-item'> <a class='nav-link' href='/pypi'> <span class='mr-2 d-none d-lg-inline text-gray-600'> PyPI </span> </a> </li> <div class='topbar-divider d-sm-block'></div> <li class='nav-item'> <a class='nav-link' href='/organizations'> <span class='mr-2 d-none d-lg-inline text-gray-600'> Organizations </span> </a> </li> </ul> <ul class='navbar-nav'> <div class='topbar-divider d-none d-sm-block'></div> <li class='nav-item'> <a class='nav-link' href='/users/sign_in'> <span class='mr-2 d-none d-lg-inline text-gray-600'> <i class='fas fa-key fa-fw mr-2'></i> Log in </span> </a> </li> <li class='nav-item'> <a class='nav-link' href='/users/sign_up'> <span class='mr-2 d-none d-lg-inline text-gray-600'> <i class='fas fa-user-plus fa-fw mr-2'></i> Sign up </span> </a> </li> </ul> </div> </nav> <div class='container'> <div class='row'> <div class='col mb-1'> <nav> <ol class='breadcrumb'> <li class='breadcrumb-item'> <a href="/gems">RubyGems</a> </li> <li class='breadcrumb-item'> <a href="/gems/appydave-tools">appydave-tools</a> </li> <li class='breadcrumb-item'> <a href="/gems/appydave-tools">Versions diffs</a> </li> <li class='breadcrumb-item'> <a href="/gems/appydave-tools/0.11.11/0.12.0">0.11.11 → 0.12.0</a> </li> </ol> </nav> </div> </div> <div class='row'> <div class='col'> <div class='text-right mb-4'> </div> </div> </div> <div class='row'> <div class='col align-items-center mb-4'> <div class='text-center'> <h2 class='text-gray-800'> appydave-tools 0.11.11 → 0.12.0 </h2> </div> </div> </div> <div data-diff-id='8b284cdb-7cf5-416b-a130-91453e1fbf46' data-diff-state='finished' id='diff-id'> <div class='row'> <div class='col pt-2 text-black'> <div class='row'> </div> <div class='mb-4 mt-2'> <div class='card bg-info text-white shadow'> <div class='card-body'> <span class='icon text-white-100 mr-2'> <i class='fas fa-info-circle'></i> </span> This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries. </div> </div> </div> <div id='diff'> <div class='mb-3'> <div class="d2h-file-list-wrapper"> <div class="d2h-file-list-header"> <span class="d2h-file-list-title">Files changed (15)</span> <a class="d2h-file-switch d2h-hide">hide</a> <a class="d2h-file-switch d2h-show">show</a> </div> <ol class="d2h-file-list"> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-683205" class="d2h-file-name">checksums.yaml</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+4</span> <span class="d2h-lines-deleted">-4</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-962357" class="d2h-file-name">data/.rubocop.yml</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+1</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-670634" class="d2h-file-name">data/CHANGELOG.md</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+7</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-523461" class="d2h-file-name">data/bin/move_images.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+62</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-726280" class="d2h-file-name">data/bin/subtitle_master-old.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+113</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-152414" class="d2h-file-name">data/bin/subtitle_master.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+94</span> <span class="d2h-lines-deleted">-55</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-241341" class="d2h-file-name">data/lib/appydave/tools/subtitle_master/_doc-join.md</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+166</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-686357" class="d2h-file-name">data/lib/appydave/tools/subtitle_master/clean.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+11</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-added" height="16" title="added" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-386494" class="d2h-file-name">data/lib/appydave/tools/subtitle_master/join.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+327</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-928214" class="d2h-file-name">data/lib/appydave/tools/version.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+1</span> <span class="d2h-lines-deleted">-1</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-355583" class="d2h-file-name">data/lib/appydave/tools.rb</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+1</span> <span class="d2h-lines-deleted">-5</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-264863" class="d2h-file-name">data/package-lock.json</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+2</span> <span class="d2h-lines-deleted">-2</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-978859" class="d2h-file-name">data/package.json</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+1</span> <span class="d2h-lines-deleted">-1</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-004177" class="d2h-file-name">metadata</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+7</span> <span class="d2h-lines-deleted">-3</span> </span> </span> </li> <li class="d2h-file-list-line"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon d2h-moved" height="16" title="renamed" version="1.1" viewBox="0 0 14 16" width="14"> <path d="M6 9H3V7h3V4l5 4-5 4V9z m8-7v12c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h12c0.55 0 1 0.45 1 1z m-1 0H1v12h12V2z"></path> </svg> <a href="/gems/appydave-tools/0.11.11/0.12.0/page/1#d2h-668805" class="d2h-file-name">/data/lib/appydave/tools/subtitle_master/{_doc.md → _doc-clean.md}</a> <span class="d2h-file-stats"> <span class="d2h-lines-added">+0</span> <span class="d2h-lines-deleted">-0</span> </span> </span> </li> </ol> </div> </div> <div id="d2h-683205" class="d2h-file-wrapper" data-lang="yaml"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-683205">checksums.yaml</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,7 +1,7 @@</div> </td> </tr><tr> <td id="d2h-683205-23" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-683205-23"> <div class="line-num1">1</div> <div class="line-num2">1</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-683205-34" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-683205-34"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">SHA256:</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">3</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> metadata.gz: <del>e4596ba8f5d43c23761a5375cb0329b89ca6b18bb32a03686fd3427d4a73086b</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">4</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> data.tar.gz: <del>2a185916599f6c9d2578345b08bbc5e845fd0642f9bebab8d70c1b94ea4cf0cf</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> metadata.gz: <ins>e50556323b419ef5468e5199cf148812e25ff5c6001db7d35dc7f4cd52d7bb50</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> data.tar.gz: <ins>23015d1c15d2fcde38f973fed02add0b7f55d09be3acda11f06705a15fcd6fdf</ins></span> </div> </td> </tr><tr> <td id="d2h-683205-89" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-683205-89"> <div class="line-num1">5</div> <div class="line-num2">5</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">SHA512:</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">6</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> metadata.gz: <del>5f4a96ad81115e20d39615547a012d58a5c6925d6f0841d31f2f91265d0412e937610229fde478e65b529c5b8cef437eed2d22f1152c4e2ad42cfa5fb45c8983</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">7</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> data.tar.gz: <del>ae08e2209f871885fd94ae69530b1760cdf879dec9ac185cefb467e10a6bf5873fcbd33fe648f8f6c14603abe5962b7f00a15d8e23a8105aeef83a44d7cbac29</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> metadata.gz: <ins>9f097fe81dae81d638bfa6040b44f9da187c95892a903a2e2c9e91c493134fd18fe0541e0b77daa99bfc56fa84378a1527d6d43f0955d74fdc038f3e9c4271a4</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> data.tar.gz: <ins>bdbf1c0ec19ce47042e17a16b8af96110e0e9b037fd61336debb32a5d251d80e50ce2259d4130b9bc220e9d95404b70c34b9ae9340e8ec557a1a595e0614e388</ins></span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-962357" class="d2h-file-wrapper" data-lang="yml"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-962357">data/.rubocop.yml</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -91,6 +91,7 @@ Metrics/ParameterLists:</div> </td> </tr><tr> <td id="d2h-962357-171" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-171"> <div class="line-num1">91</div> <div class="line-num2">91</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> Exclude:</span> </div> </td> </tr><tr> <td id="d2h-962357-182" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-182"> <div class="line-num1">92</div> <div class="line-num2">92</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> - "**/spec/**/*"</span> </div> </td> </tr><tr> <td id="d2h-962357-193" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-193"> <div class="line-num1">93</div> <div class="line-num2">93</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> - "**/models/**/*"</span> </div> </td> </tr><tr> <td id="d2h-962357-204" class="d2h-code-linenumber d2h-ins"><a href="#d2h-962357-204"> <div class="line-num1"></div> <div class="line-num2">94</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - "lib/appydave/tools/subtitle_master/join.rb"</span> </div> </td> </tr><tr> <td id="d2h-962357-215" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-215"> <div class="line-num1">94</div> <div class="line-num2">95</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">Layout/EmptyLineBetweenDefs:</span> </div> </td> </tr><tr> <td id="d2h-962357-226" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-226"> <div class="line-num1">95</div> <div class="line-num2">96</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> Exclude:</span> </div> </td> </tr><tr> <td id="d2h-962357-237" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-962357-237"> <div class="line-num1">96</div> <div class="line-num2">97</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> - "**/spec/**/*"</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-670634" class="d2h-file-wrapper" data-lang="md"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-670634">data/CHANGELOG.md</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,3 +1,10 @@</div> </td> </tr><tr> <td id="d2h-670634-275" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-275"> <div class="line-num1"></div> <div class="line-num2">1</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">## [0.11.11](https://github.com/appydave/appydave-tools/compare/v0.11.10...v0.11.11) (2024-11-26)</span> </div> </td> </tr><tr> <td id="d2h-670634-286" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-286"> <div class="line-num1"></div> <div class="line-num2">2</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-670634-297" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-297"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-670634-308" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-308"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Bug Fixes</span> </div> </td> </tr><tr> <td id="d2h-670634-319" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-319"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-670634-330" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-330"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">* update clean srt specs ([e0da656](https://github.com/appydave/appydave-tools/commit/e0da656a3bf04f094bc3726a588a59d99d3d24a8))</span> </div> </td> </tr><tr> <td id="d2h-670634-341" class="d2h-code-linenumber d2h-ins"><a href="#d2h-670634-341"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-670634-352" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-670634-352"> <div class="line-num1">1</div> <div class="line-num2">8</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">## [0.11.10](https://github.com/appydave/appydave-tools/compare/v0.11.9...v0.11.10) (2024-11-26)</span> </div> </td> </tr><tr> <td id="d2h-670634-363" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-670634-363"> <div class="line-num1">2</div> <div class="line-num2">9</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-670634-374" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-670634-374"> <div class="line-num1">3</div> <div class="line-num2">10</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-523461" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-523461">data/bin/move_images.rb</a></span> <span class="d2h-tag d2h-added d2h-added-tag">ADDED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -0,0 +1,62 @@</div> </td> </tr><tr> <td id="d2h-523461-412" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-412"> <div class="line-num1"></div> <div class="line-num2">1</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">#!/usr/bin/env ruby</span> </div> </td> </tr><tr> <td id="d2h-523461-423" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-423"> <div class="line-num1"></div> <div class="line-num2">2</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># frozen_string_literal: true</span> </div> </td> </tr><tr> <td id="d2h-523461-434" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-434"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-445" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-445"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># CHAT: https://chatgpt.com/c/67038d52-9928-8002-8063-5616f7fe7aef</span> </div> </td> </tr><tr> <td id="d2h-523461-456" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-456"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-467" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-467"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># !/usr/bin/env ruby</span> </div> </td> </tr><tr> <td id="d2h-523461-478" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-478"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-489" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-489"> <div class="line-num1"></div> <div class="line-num2">8</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">require 'fileutils'</span> </div> </td> </tr><tr> <td id="d2h-523461-500" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-500"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">require 'optparse'</span> </div> </td> </tr><tr> <td id="d2h-523461-511" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-511"> <div class="line-num1"></div> <div class="line-num2">10</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-522" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-522"> <div class="line-num1"></div> <div class="line-num2">11</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Default base directory</span> </div> </td> </tr><tr> <td id="d2h-523461-533" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-533"> <div class="line-num1"></div> <div class="line-num2">12</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">base_dir = '/Volumes/Expansion/Sync/tube-channels/video-projects'</span> </div> </td> </tr><tr> <td id="d2h-523461-544" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-544"> <div class="line-num1"></div> <div class="line-num2">13</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-555" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-555"> <div class="line-num1"></div> <div class="line-num2">14</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Common subfolder names (for reference, not enforced)</span> </div> </td> </tr><tr> <td id="d2h-523461-566" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-566"> <div class="line-num1"></div> <div class="line-num2">15</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Common subfolders: intro, outro, content, teaser, thumb</span> </div> </td> </tr><tr> <td id="d2h-523461-577" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-577"> <div class="line-num1"></div> <div class="line-num2">16</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-588" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-588"> <div class="line-num1"></div> <div class="line-num2">17</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Parse command-line options</span> </div> </td> </tr><tr> <td id="d2h-523461-599" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-599"> <div class="line-num1"></div> <div class="line-num2">18</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">options = {}</span> </div> </td> </tr><tr> <td id="d2h-523461-610" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-610"> <div class="line-num1"></div> <div class="line-num2">19</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">OptionParser.new do |opts|</span> </div> </td> </tr><tr> <td id="d2h-523461-621" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-621"> <div class="line-num1"></div> <div class="line-num2">20</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.banner = "Usage: #{$PROGRAM_NAME} -f <folder> <section> <prefix>"</span> </div> </td> </tr><tr> <td id="d2h-523461-632" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-632"> <div class="line-num1"></div> <div class="line-num2">21</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-643" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-643"> <div class="line-num1"></div> <div class="line-num2">22</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-f FOLDER', '--folder FOLDER', 'Specify the subfolder under video-projects') do |folder|</span> </div> </td> </tr><tr> <td id="d2h-523461-654" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-654"> <div class="line-num1"></div> <div class="line-num2">23</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options[:folder] = folder</span> </div> </td> </tr><tr> <td id="d2h-523461-665" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-665"> <div class="line-num1"></div> <div class="line-num2">24</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-523461-676" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-676"> <div class="line-num1"></div> <div class="line-num2">25</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end.parse!</span> </div> </td> </tr><tr> <td id="d2h-523461-687" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-687"> <div class="line-num1"></div> <div class="line-num2">26</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-698" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-698"> <div class="line-num1"></div> <div class="line-num2">27</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Ensure the folder option is provided</span> </div> </td> </tr><tr> <td id="d2h-523461-709" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-709"> <div class="line-num1"></div> <div class="line-num2">28</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">unless options[:folder]</span> </div> </td> </tr><tr> <td id="d2h-523461-720" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-720"> <div class="line-num1"></div> <div class="line-num2">29</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'You must specify a folder using the -f option'</span> </div> </td> </tr><tr> <td id="d2h-523461-731" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-731"> <div class="line-num1"></div> <div class="line-num2">30</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit 1</span> </div> </td> </tr><tr> <td id="d2h-523461-742" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-742"> <div class="line-num1"></div> <div class="line-num2">31</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr><tr> <td id="d2h-523461-753" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-753"> <div class="line-num1"></div> <div class="line-num2">32</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-764" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-764"> <div class="line-num1"></div> <div class="line-num2">33</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Set source and destination directories</span> </div> </td> </tr><tr> <td id="d2h-523461-775" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-775"> <div class="line-num1"></div> <div class="line-num2">34</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">source_dir = File.expand_path('~/Sync/smart-downloads/download-images')</span> </div> </td> </tr><tr> <td id="d2h-523461-786" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-786"> <div class="line-num1"></div> <div class="line-num2">35</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">dest_dir = File.join(base_dir, options[:folder], 'assets')</span> </div> </td> </tr><tr> <td id="d2h-523461-797" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-797"> <div class="line-num1"></div> <div class="line-num2">36</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-808" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-808"> <div class="line-num1"></div> <div class="line-num2">37</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Get input parameters</span> </div> </td> </tr><tr> <td id="d2h-523461-819" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-819"> <div class="line-num1"></div> <div class="line-num2">38</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">section = ARGV[0]</span> </div> </td> </tr><tr> <td id="d2h-523461-830" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-830"> <div class="line-num1"></div> <div class="line-num2">39</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">prefix = ARGV[1]</span> </div> </td> </tr><tr> <td id="d2h-523461-841" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-841"> <div class="line-num1"></div> <div class="line-num2">40</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-852" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-852"> <div class="line-num1"></div> <div class="line-num2">41</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">unless prefix && section</span> </div> </td> </tr><tr> <td id="d2h-523461-863" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-863"> <div class="line-num1"></div> <div class="line-num2">42</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Usage: #{$PROGRAM_NAME} -f <folder> <section> <prefix>"</span> </div> </td> </tr><tr> <td id="d2h-523461-874" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-874"> <div class="line-num1"></div> <div class="line-num2">43</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit 1</span> </div> </td> </tr><tr> <td id="d2h-523461-885" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-885"> <div class="line-num1"></div> <div class="line-num2">44</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr><tr> <td id="d2h-523461-896" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-896"> <div class="line-num1"></div> <div class="line-num2">45</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-907" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-907"> <div class="line-num1"></div> <div class="line-num2">46</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Ensure the section subfolder exists</span> </div> </td> </tr><tr> <td id="d2h-523461-918" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-918"> <div class="line-num1"></div> <div class="line-num2">47</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">section_dir = File.join(dest_dir, section)</span> </div> </td> </tr><tr> <td id="d2h-523461-929" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-929"> <div class="line-num1"></div> <div class="line-num2">48</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">puts "Creating subfolder if it doesn't exist: #{section_dir}"</span> </div> </td> </tr><tr> <td id="d2h-523461-940" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-940"> <div class="line-num1"></div> <div class="line-num2">49</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">FileUtils.mkdir_p(section_dir)</span> </div> </td> </tr><tr> <td id="d2h-523461-951" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-951"> <div class="line-num1"></div> <div class="line-num2">50</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-962" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-962"> <div class="line-num1"></div> <div class="line-num2">51</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">puts "Source directory: #{source_dir}"</span> </div> </td> </tr><tr> <td id="d2h-523461-973" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-973"> <div class="line-num1"></div> <div class="line-num2">52</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-523461-984" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-984"> <div class="line-num1"></div> <div class="line-num2">53</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Find and move the images</span> </div> </td> </tr><tr> <td id="d2h-523461-995" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-995"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">Dir.glob("#{source_dir}/*.jpg").each_with_index do |file, index|</span> </div> </td> </tr><tr> <td id="d2h-523461-1006" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1006"> <div class="line-num1"></div> <div class="line-num2">55</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Processing #{file}, #{index}"</span> </div> </td> </tr><tr> <td id="d2h-523461-1017" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1017"> <div class="line-num1"></div> <div class="line-num2">56</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> new_filename = "#{prefix}-#{section}-#{index + 1}.jpg"</span> </div> </td> </tr><tr> <td id="d2h-523461-1028" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1028"> <div class="line-num1"></div> <div class="line-num2">57</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "New filename: #{new_filename}"</span> </div> </td> </tr><tr> <td id="d2h-523461-1039" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1039"> <div class="line-num1"></div> <div class="line-num2">58</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> destination = File.join(section_dir, new_filename)</span> </div> </td> </tr><tr> <td id="d2h-523461-1050" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1050"> <div class="line-num1"></div> <div class="line-num2">59</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Destination: #{destination}"</span> </div> </td> </tr><tr> <td id="d2h-523461-1061" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1061"> <div class="line-num1"></div> <div class="line-num2">60</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> FileUtils.mv(file, destination)</span> </div> </td> </tr><tr> <td id="d2h-523461-1072" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1072"> <div class="line-num1"></div> <div class="line-num2">61</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Moved #{file} to #{destination}"</span> </div> </td> </tr><tr> <td id="d2h-523461-1083" class="d2h-code-linenumber d2h-ins"><a href="#d2h-523461-1083"> <div class="line-num1"></div> <div class="line-num2">62</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-726280" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-726280">data/bin/subtitle_master-old.rb</a></span> <span class="d2h-tag d2h-added d2h-added-tag">ADDED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -0,0 +1,113 @@</div> </td> </tr><tr> <td id="d2h-726280-1121" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1121"> <div class="line-num1"></div> <div class="line-num2">1</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">#!/usr/bin/env ruby</span> </div> </td> </tr><tr> <td id="d2h-726280-1132" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1132"> <div class="line-num1"></div> <div class="line-num2">2</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># frozen_string_literal: true</span> </div> </td> </tr><tr> <td id="d2h-726280-1143" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1143"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1154" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1154"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))</span> </div> </td> </tr><tr> <td id="d2h-726280-1165" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1165"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1176" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1176"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">require 'appydave/tools'</span> </div> </td> </tr><tr> <td id="d2h-726280-1187" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1187"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1198" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1198"> <div class="line-num1"></div> <div class="line-num2">8</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Process command line arguments for SubtitleMaster operations</span> </div> </td> </tr><tr> <td id="d2h-726280-1209" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1209"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">class SubtitleMasterCLI</span> </div> </td> </tr><tr> <td id="d2h-726280-1220" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1220"> <div class="line-num1"></div> <div class="line-num2">10</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize</span> </div> </td> </tr><tr> <td id="d2h-726280-1231" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1231"> <div class="line-num1"></div> <div class="line-num2">11</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @commands = {</span> </div> </td> </tr><tr> <td id="d2h-726280-1242" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1242"> <div class="line-num1"></div> <div class="line-num2">12</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> 'clean' => method(:clean_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-726280-1253" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1253"> <div class="line-num1"></div> <div class="line-num2">13</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> 'correct' => method(:correct_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-726280-1264" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1264"> <div class="line-num1"></div> <div class="line-num2">14</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> 'split' => method(:split_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-726280-1275" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1275"> <div class="line-num1"></div> <div class="line-num2">15</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> 'highlight' => method(:highlight_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-726280-1286" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1286"> <div class="line-num1"></div> <div class="line-num2">16</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> 'image_prompts' => method(:generate_image_prompts)</span> </div> </td> </tr><tr> <td id="d2h-726280-1297" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1297"> <div class="line-num1"></div> <div class="line-num2">17</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> }</span> </div> </td> </tr><tr> <td id="d2h-726280-1308" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1308"> <div class="line-num1"></div> <div class="line-num2">18</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1319" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1319"> <div class="line-num1"></div> <div class="line-num2">19</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1330" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1330"> <div class="line-num1"></div> <div class="line-num2">20</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def run</span> </div> </td> </tr><tr> <td id="d2h-726280-1341" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1341"> <div class="line-num1"></div> <div class="line-num2">21</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> command, *args = ARGV</span> </div> </td> </tr><tr> <td id="d2h-726280-1352" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1352"> <div class="line-num1"></div> <div class="line-num2">22</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if @commands.key?(command)</span> </div> </td> </tr><tr> <td id="d2h-726280-1363" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1363"> <div class="line-num1"></div> <div class="line-num2">23</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @commands[command].call(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1374" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1374"> <div class="line-num1"></div> <div class="line-num2">24</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> else</span> </div> </td> </tr><tr> <td id="d2h-726280-1385" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1385"> <div class="line-num1"></div> <div class="line-num2">25</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Unknown command: #{command}"</span> </div> </td> </tr><tr> <td id="d2h-726280-1396" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1396"> <div class="line-num1"></div> <div class="line-num2">26</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> print_help</span> </div> </td> </tr><tr> <td id="d2h-726280-1407" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1407"> <div class="line-num1"></div> <div class="line-num2">27</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1418" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1418"> <div class="line-num1"></div> <div class="line-num2">28</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1429" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1429"> <div class="line-num1"></div> <div class="line-num2">29</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1440" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1440"> <div class="line-num1"></div> <div class="line-num2">30</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-726280-1451" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1451"> <div class="line-num1"></div> <div class="line-num2">31</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1462" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1462"> <div class="line-num1"></div> <div class="line-num2">32</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def clean_subtitles(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1473" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1473"> <div class="line-num1"></div> <div class="line-num2">33</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = parse_options(args, 'clean')</span> </div> </td> </tr><tr> <td id="d2h-726280-1484" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1484"> <div class="line-num1"></div> <div class="line-num2">34</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> cleaner = Appydave::Tools::SubtitleMaster::Clean.new(file_path: options[:file])</span> </div> </td> </tr><tr> <td id="d2h-726280-1495" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1495"> <div class="line-num1"></div> <div class="line-num2">35</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> result = cleaner.clean</span> </div> </td> </tr><tr> <td id="d2h-726280-1506" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1506"> <div class="line-num1"></div> <div class="line-num2">36</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-726280-1517" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1517"> <div class="line-num1"></div> <div class="line-num2">37</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1528" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1528"> <div class="line-num1"></div> <div class="line-num2">38</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1539" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1539"> <div class="line-num1"></div> <div class="line-num2">39</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def correct_subtitles(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1550" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1550"> <div class="line-num1"></div> <div class="line-num2">40</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = parse_options(args, 'correct')</span> </div> </td> </tr><tr> <td id="d2h-726280-1561" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1561"> <div class="line-num1"></div> <div class="line-num2">41</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> corrector = Appydave::Tools::SubtitleMaster::Correct.new(options[:file])</span> </div> </td> </tr><tr> <td id="d2h-726280-1572" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1572"> <div class="line-num1"></div> <div class="line-num2">42</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> result = corrector.correct</span> </div> </td> </tr><tr> <td id="d2h-726280-1583" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1583"> <div class="line-num1"></div> <div class="line-num2">43</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-726280-1594" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1594"> <div class="line-num1"></div> <div class="line-num2">44</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1605" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1605"> <div class="line-num1"></div> <div class="line-num2">45</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1616" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1616"> <div class="line-num1"></div> <div class="line-num2">46</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def split_subtitles(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1627" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1627"> <div class="line-num1"></div> <div class="line-num2">47</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = parse_options(args, 'split', %i[words_per_group])</span> </div> </td> </tr><tr> <td id="d2h-726280-1638" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1638"> <div class="line-num1"></div> <div class="line-num2">48</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> splitter = Appydave::Tools::SubtitleMaster::Split.new(options[:file], options[:words_per_group])</span> </div> </td> </tr><tr> <td id="d2h-726280-1649" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1649"> <div class="line-num1"></div> <div class="line-num2">49</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> result = splitter.split</span> </div> </td> </tr><tr> <td id="d2h-726280-1660" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1660"> <div class="line-num1"></div> <div class="line-num2">50</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-726280-1671" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1671"> <div class="line-num1"></div> <div class="line-num2">51</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1682" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1682"> <div class="line-num1"></div> <div class="line-num2">52</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1693" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1693"> <div class="line-num1"></div> <div class="line-num2">53</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def highlight_subtitles(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1704" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1704"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = parse_options(args, 'highlight')</span> </div> </td> </tr><tr> <td id="d2h-726280-1715" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1715"> <div class="line-num1"></div> <div class="line-num2">55</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> highlighter = Appydave::Tools::SubtitleMaster::Highlight.new(options[:file])</span> </div> </td> </tr><tr> <td id="d2h-726280-1726" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1726"> <div class="line-num1"></div> <div class="line-num2">56</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> result = highlighter.highlight</span> </div> </td> </tr><tr> <td id="d2h-726280-1737" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1737"> <div class="line-num1"></div> <div class="line-num2">57</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-726280-1748" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1748"> <div class="line-num1"></div> <div class="line-num2">58</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1759" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1759"> <div class="line-num1"></div> <div class="line-num2">59</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1770" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1770"> <div class="line-num1"></div> <div class="line-num2">60</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def generate_image_prompts(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-1781" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1781"> <div class="line-num1"></div> <div class="line-num2">61</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = parse_options(args, 'image_prompts')</span> </div> </td> </tr><tr> <td id="d2h-726280-1792" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1792"> <div class="line-num1"></div> <div class="line-num2">62</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> image_prompter = Appydave::Tools::SubtitleMaster::ImagePrompts.new(options[:file])</span> </div> </td> </tr><tr> <td id="d2h-726280-1803" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1803"> <div class="line-num1"></div> <div class="line-num2">63</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> result = image_prompter.generate_prompts</span> </div> </td> </tr><tr> <td id="d2h-726280-1814" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1814"> <div class="line-num1"></div> <div class="line-num2">64</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-726280-1825" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1825"> <div class="line-num1"></div> <div class="line-num2">65</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1836" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1836"> <div class="line-num1"></div> <div class="line-num2">66</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1847" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1847"> <div class="line-num1"></div> <div class="line-num2">67</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def parse_options(args, command, extra_options = [])</span> </div> </td> </tr><tr> <td id="d2h-726280-1858" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1858"> <div class="line-num1"></div> <div class="line-num2">68</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = { file: nil, output: nil }</span> </div> </td> </tr><tr> <td id="d2h-726280-1869" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1869"> <div class="line-num1"></div> <div class="line-num2">69</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> OptionParser.new do |opts|</span> </div> </td> </tr><tr> <td id="d2h-726280-1880" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1880"> <div class="line-num1"></div> <div class="line-num2">70</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.banner = "Usage: subtitle_master.rb #{command} [options]"</span> </div> </td> </tr><tr> <td id="d2h-726280-1891" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1891"> <div class="line-num1"></div> <div class="line-num2">71</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1902" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1902"> <div class="line-num1"></div> <div class="line-num2">72</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-f', '--file FILE', 'SRT file to process') { |v| options[:file] = v }</span> </div> </td> </tr><tr> <td id="d2h-726280-1913" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1913"> <div class="line-num1"></div> <div class="line-num2">73</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-o', '--output FILE', 'Output file') { |v| options[:output] = v }</span> </div> </td> </tr><tr> <td id="d2h-726280-1924" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1924"> <div class="line-num1"></div> <div class="line-num2">74</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-1935" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1935"> <div class="line-num1"></div> <div class="line-num2">75</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> extra_options.each do |opt|</span> </div> </td> </tr><tr> <td id="d2h-726280-1946" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1946"> <div class="line-num1"></div> <div class="line-num2">76</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> case opt</span> </div> </td> </tr><tr> <td id="d2h-726280-1957" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1957"> <div class="line-num1"></div> <div class="line-num2">77</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> when :words_per_group</span> </div> </td> </tr><tr> <td id="d2h-726280-1968" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1968"> <div class="line-num1"></div> <div class="line-num2">78</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-w', '--words-per-group WORDS', 'Number of words per group for splitting') { |v| options[:words_per_group] = v.to_i }</span> </div> </td> </tr><tr> <td id="d2h-726280-1979" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1979"> <div class="line-num1"></div> <div class="line-num2">79</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-1990" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-1990"> <div class="line-num1"></div> <div class="line-num2">80</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2001" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2001"> <div class="line-num1"></div> <div class="line-num2">81</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2012" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2012"> <div class="line-num1"></div> <div class="line-num2">82</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on_tail('-h', '--help', 'Show this message') do</span> </div> </td> </tr><tr> <td id="d2h-726280-2023" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2023"> <div class="line-num1"></div> <div class="line-num2">83</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts opts</span> </div> </td> </tr><tr> <td id="d2h-726280-2034" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2034"> <div class="line-num1"></div> <div class="line-num2">84</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-726280-2045" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2045"> <div class="line-num1"></div> <div class="line-num2">85</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2056" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2056"> <div class="line-num1"></div> <div class="line-num2">86</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end.parse!(args)</span> </div> </td> </tr><tr> <td id="d2h-726280-2067" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2067"> <div class="line-num1"></div> <div class="line-num2">87</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2078" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2078"> <div class="line-num1"></div> <div class="line-num2">88</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> unless options[:file] && options[:output]</span> </div> </td> </tr><tr> <td id="d2h-726280-2089" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2089"> <div class="line-num1"></div> <div class="line-num2">89</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'Missing required options. Use -h for help.'</span> </div> </td> </tr><tr> <td id="d2h-726280-2100" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2100"> <div class="line-num1"></div> <div class="line-num2">90</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-726280-2111" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2111"> <div class="line-num1"></div> <div class="line-num2">91</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2122" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2122"> <div class="line-num1"></div> <div class="line-num2">92</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2133" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2133"> <div class="line-num1"></div> <div class="line-num2">93</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options</span> </div> </td> </tr><tr> <td id="d2h-726280-2144" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2144"> <div class="line-num1"></div> <div class="line-num2">94</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2155" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2155"> <div class="line-num1"></div> <div class="line-num2">95</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2166" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2166"> <div class="line-num1"></div> <div class="line-num2">96</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def write_output(result, output_file)</span> </div> </td> </tr><tr> <td id="d2h-726280-2177" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2177"> <div class="line-num1"></div> <div class="line-num2">97</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> File.write(output_file, result)</span> </div> </td> </tr><tr> <td id="d2h-726280-2188" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2188"> <div class="line-num1"></div> <div class="line-num2">98</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Processed file written to #{output_file}"</span> </div> </td> </tr><tr> <td id="d2h-726280-2199" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2199"> <div class="line-num1"></div> <div class="line-num2">99</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2210" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2210"> <div class="line-num1"></div> <div class="line-num2">100</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2221" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2221"> <div class="line-num1"></div> <div class="line-num2">101</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def print_help</span> </div> </td> </tr><tr> <td id="d2h-726280-2232" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2232"> <div class="line-num1"></div> <div class="line-num2">102</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'Usage: subtitle_master.rb [command] [options]'</span> </div> </td> </tr><tr> <td id="d2h-726280-2243" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2243"> <div class="line-num1"></div> <div class="line-num2">103</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'Commands:'</span> </div> </td> </tr><tr> <td id="d2h-726280-2254" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2254"> <div class="line-num1"></div> <div class="line-num2">104</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' clean Clean and normalize SRT files'</span> </div> </td> </tr><tr> <td id="d2h-726280-2265" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2265"> <div class="line-num1"></div> <div class="line-num2">105</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' correct Correct common typos and mistranslations in SRT files'</span> </div> </td> </tr><tr> <td id="d2h-726280-2276" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2276"> <div class="line-num1"></div> <div class="line-num2">106</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' split Split subtitle groups based on word count'</span> </div> </td> </tr><tr> <td id="d2h-726280-2287" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2287"> <div class="line-num1"></div> <div class="line-num2">107</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' highlight Highlight power words in subtitles'</span> </div> </td> </tr><tr> <td id="d2h-726280-2298" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2298"> <div class="line-num1"></div> <div class="line-num2">108</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' image_prompts Generate image prompts from subtitle text'</span> </div> </td> </tr><tr> <td id="d2h-726280-2309" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2309"> <div class="line-num1"></div> <div class="line-num2">109</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Run 'subtitle_master.rb [command] --help' for more information on a command."</span> </div> </td> </tr><tr> <td id="d2h-726280-2320" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2320"> <div class="line-num1"></div> <div class="line-num2">110</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-726280-2331" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2331"> <div class="line-num1"></div> <div class="line-num2">111</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr><tr> <td id="d2h-726280-2342" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2342"> <div class="line-num1"></div> <div class="line-num2">112</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-726280-2353" class="d2h-code-linenumber d2h-ins"><a href="#d2h-726280-2353"> <div class="line-num1"></div> <div class="line-num2">113</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">SubtitleMasterCLI.new.run</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-152414" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-152414">data/bin/subtitle_master.rb</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,6 +1,8 @@</div> </td> </tr><tr> <td id="d2h-152414-2391" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2391"> <div class="line-num1">1</div> <div class="line-num2">1</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">#!/usr/bin/env ruby</span> </div> </td> </tr><tr> <td id="d2h-152414-2402" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2402"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"># frozen_string_literal: true</span> </div> </td> </tr><tr> <td id="d2h-152414-2413" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2413"> <div class="line-num1">3</div> <div class="line-num2">3</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2424" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2424"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">require 'optparse'</span> </div> </td> </tr><tr> <td id="d2h-152414-2435" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2435"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2446" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2446"> <div class="line-num1">4</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))</span> </div> </td> </tr><tr> <td id="d2h-152414-2457" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2457"> <div class="line-num1">5</div> <div class="line-num2">7</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2468" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2468"> <div class="line-num1">6</div> <div class="line-num2">8</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools'</span> </div> </td> </tr> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -10,15 +12,18 @@ class SubtitleMasterCLI</div> </td> </tr><tr> <td id="d2h-152414-2485" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2485"> <div class="line-num1">10</div> <div class="line-num2">12</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def initialize</span> </div> </td> </tr><tr> <td id="d2h-152414-2496" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2496"> <div class="line-num1">11</div> <div class="line-num2">13</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> @commands = {</span> </div> </td> </tr><tr> <td id="d2h-152414-2507" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2507"> <div class="line-num1">12</div> <div class="line-num2">14</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> 'clean' => method(:clean_subtitles),</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">13</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> '<del>correct</del>' => method(:<del>correct_subtitles</del>)<del>,</del></span> </div> </td> </tr><tr> <td id="d2h-152414-2529" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-2529"> <div class="line-num1">14</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> 'split' => method(:split_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-152414-2540" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-2540"> <div class="line-num1">15</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> 'highlight' => method(:highlight_subtitles),</span> </div> </td> </tr><tr> <td id="d2h-152414-2551" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-2551"> <div class="line-num1">16</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> 'image_prompts' => method(:generate_image_prompts)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">15</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> '<ins>join</ins>' => method(:<ins>join_subtitles</ins>)</span> </div> </td> </tr><tr> <td id="d2h-152414-2573" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2573"> <div class="line-num1">17</div> <div class="line-num2">16</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> }</span> </div> </td> </tr><tr> <td id="d2h-152414-2584" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2584"> <div class="line-num1">18</div> <div class="line-num2">17</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2595" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2595"> <div class="line-num1">19</div> <div class="line-num2">18</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2606" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2606"> <div class="line-num1">20</div> <div class="line-num2">19</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def run</span> </div> </td> </tr><tr> <td id="d2h-152414-2617" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2617"> <div class="line-num1">21</div> <div class="line-num2">20</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> command, *args = ARGV</span> </div> </td> </tr><tr> <td id="d2h-152414-2628" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2628"> <div class="line-num1"></div> <div class="line-num2">21</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if command.nil?</span> </div> </td> </tr><tr> <td id="d2h-152414-2639" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2639"> <div class="line-num1"></div> <div class="line-num2">22</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'No command provided. Use -h for help.'</span> </div> </td> </tr><tr> <td id="d2h-152414-2650" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2650"> <div class="line-num1"></div> <div class="line-num2">23</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> print_help</span> </div> </td> </tr><tr> <td id="d2h-152414-2661" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2661"> <div class="line-num1"></div> <div class="line-num2">24</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-2672" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2672"> <div class="line-num1"></div> <div class="line-num2">25</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2683" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2683"> <div class="line-num1"></div> <div class="line-num2">26</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2694" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2694"> <div class="line-num1">22</div> <div class="line-num2">27</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> if @commands.key?(command)</span> </div> </td> </tr><tr> <td id="d2h-152414-2705" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2705"> <div class="line-num1">23</div> <div class="line-num2">28</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> @commands[command].call(args)</span> </div> </td> </tr><tr> <td id="d2h-152414-2716" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2716"> <div class="line-num1">24</div> <div class="line-num2">29</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> else</span> </div> </td> </tr> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -30,82 +35,116 @@ class SubtitleMasterCLI</div> </td> </tr><tr> <td id="d2h-152414-2733" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2733"> <div class="line-num1">30</div> <div class="line-num2">35</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-152414-2744" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2744"> <div class="line-num1">31</div> <div class="line-num2">36</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2755" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-2755"> <div class="line-num1">32</div> <div class="line-num2">37</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def clean_subtitles(args)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">33</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> options = <del>parse_options(args</del>, <del>'clean')</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">38</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = <ins>{ file: nil</ins>, <ins>output: nil }</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-2788" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2788"> <div class="line-num1"></div> <div class="line-num2">39</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2799" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2799"> <div class="line-num1"></div> <div class="line-num2">40</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Command-specific option parser</span> </div> </td> </tr><tr> <td id="d2h-152414-2810" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2810"> <div class="line-num1"></div> <div class="line-num2">41</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> clean_parser = OptionParser.new do |opts|</span> </div> </td> </tr><tr> <td id="d2h-152414-2821" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2821"> <div class="line-num1"></div> <div class="line-num2">42</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.banner = 'Usage: subtitle_master.rb clean [options]'</span> </div> </td> </tr><tr> <td id="d2h-152414-2832" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2832"> <div class="line-num1"></div> <div class="line-num2">43</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2843" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2843"> <div class="line-num1"></div> <div class="line-num2">44</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-f', '--file FILE', 'SRT file to process') do |v|</span> </div> </td> </tr><tr> <td id="d2h-152414-2854" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2854"> <div class="line-num1"></div> <div class="line-num2">45</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options[:file] = v</span> </div> </td> </tr><tr> <td id="d2h-152414-2865" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2865"> <div class="line-num1"></div> <div class="line-num2">46</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2876" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2876"> <div class="line-num1"></div> <div class="line-num2">47</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2887" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2887"> <div class="line-num1"></div> <div class="line-num2">48</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-o', '--output FILE', 'Output file') do |v|</span> </div> </td> </tr><tr> <td id="d2h-152414-2898" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2898"> <div class="line-num1"></div> <div class="line-num2">49</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options[:output] = v</span> </div> </td> </tr><tr> <td id="d2h-152414-2909" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2909"> <div class="line-num1"></div> <div class="line-num2">50</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2920" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2920"> <div class="line-num1"></div> <div class="line-num2">51</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2931" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2931"> <div class="line-num1"></div> <div class="line-num2">52</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-h', '--help', 'Show this message') do</span> </div> </td> </tr><tr> <td id="d2h-152414-2942" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2942"> <div class="line-num1"></div> <div class="line-num2">53</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts opts</span> </div> </td> </tr><tr> <td id="d2h-152414-2953" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2953"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-2964" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2964"> <div class="line-num1"></div> <div class="line-num2">55</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2975" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2975"> <div class="line-num1"></div> <div class="line-num2">56</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-2986" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2986"> <div class="line-num1"></div> <div class="line-num2">57</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-2997" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-2997"> <div class="line-num1"></div> <div class="line-num2">58</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> begin</span> </div> </td> </tr><tr> <td id="d2h-152414-3008" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3008"> <div class="line-num1"></div> <div class="line-num2">59</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> clean_parser.parse!(args)</span> </div> </td> </tr><tr> <td id="d2h-152414-3019" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3019"> <div class="line-num1"></div> <div class="line-num2">60</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> rescue OptionParser::InvalidOption => e</span> </div> </td> </tr><tr> <td id="d2h-152414-3030" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3030"> <div class="line-num1"></div> <div class="line-num2">61</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Error: #{e.message}"</span> </div> </td> </tr><tr> <td id="d2h-152414-3041" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3041"> <div class="line-num1"></div> <div class="line-num2">62</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts clean_parser</span> </div> </td> </tr><tr> <td id="d2h-152414-3052" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3052"> <div class="line-num1"></div> <div class="line-num2">63</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-3063" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3063"> <div class="line-num1"></div> <div class="line-num2">64</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-3074" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3074"> <div class="line-num1"></div> <div class="line-num2">65</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-3085" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3085"> <div class="line-num1"></div> <div class="line-num2">66</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Validate required options</span> </div> </td> </tr><tr> <td id="d2h-152414-3096" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3096"> <div class="line-num1"></div> <div class="line-num2">67</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if options[:file].nil? || options[:output].nil?</span> </div> </td> </tr><tr> <td id="d2h-152414-3107" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3107"> <div class="line-num1"></div> <div class="line-num2">68</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'Error: Missing required options.'</span> </div> </td> </tr><tr> <td id="d2h-152414-3118" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3118"> <div class="line-num1"></div> <div class="line-num2">69</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts clean_parser</span> </div> </td> </tr><tr> <td id="d2h-152414-3129" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3129"> <div class="line-num1"></div> <div class="line-num2">70</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-3140" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3140"> <div class="line-num1"></div> <div class="line-num2">71</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-3151" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3151"> <div class="line-num1"></div> <div class="line-num2">72</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-3162" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3162"> <div class="line-num1"></div> <div class="line-num2">73</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Assuming `Appydave::Tools::SubtitleMaster::Clean` exists</span> </div> </td> </tr><tr> <td id="d2h-152414-3173" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3173"> <div class="line-num1">34</div> <div class="line-num2">74</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> cleaner = Appydave::Tools::SubtitleMaster::Clean.new(file_path: options[:file])</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">35</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>result = </del>cleaner.clean</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">36</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>write_output</del>(<del>result, </del>options[:output])</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">75</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> cleaner.clean</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">76</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>cleaner.write</ins>(options[:output])</span> </div> </td> </tr><tr> <td id="d2h-152414-3228" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3228"> <div class="line-num1">37</div> <div class="line-num2">77</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-3239" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3239"> <div class="line-num1">38</div> <div class="line-num2">78</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">39</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> def <del>correct_subtitles</del>(args)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">40</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> options = <del>parse_options(args, 'correct')</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">41</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> corrector</del> <del>= Appydave::Tools::SubtitleMaster::Correct.new(options[:file])</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">42</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> result</del> <del>= corrector.correct</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">43</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> write_output(result</del>,<del> options[:output])</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">44</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> end</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">79</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def <ins>join_subtitles</ins>(args)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">80</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options = <ins>{</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">81</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> folder:</ins> <ins>'./',</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">82</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> files:</ins> <ins>'*.srt',</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">83</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> sort: 'inferred'</ins>,</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">84</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> buffer: 100,</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-3382" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3382"> <div class="line-num1"></div> <div class="line-num2">85</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> output: 'merged.srt',</span> </div> </td> </tr><tr> <td id="d2h-152414-3393" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3393"> <div class="line-num1"></div> <div class="line-num2">86</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> verbose: false</span> </div> </td> </tr><tr> <td id="d2h-152414-3404" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3404"> <div class="line-num1"></div> <div class="line-num2">87</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> }</span> </div> </td> </tr><tr> <td id="d2h-152414-3415" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3415"> <div class="line-num1">45</div> <div class="line-num2">88</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">46</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> def</del> <del>split_subtitles(args)</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">47</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> options</del> = <del>parse_options(args, </del>'<del>split',</del> <del>%i</del>[<del>words_per_group</del>]<del>)</del></span> </div> </td> </tr><tr> <td id="d2h-152414-3448" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3448"> <div class="line-num1">48</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> splitter = Appydave::Tools::SubtitleMaster::Split.new(options[:file], options[:words_per_group])</span> </div> </td> </tr><tr> <td id="d2h-152414-3459" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3459"> <div class="line-num1">49</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> result = splitter.split</span> </div> </td> </tr><tr> <td id="d2h-152414-3470" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3470"> <div class="line-num1">50</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-152414-3481" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3481"> <div class="line-num1">51</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">89</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> join_parser</ins> <ins>= OptionParser.new do |opts|</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">90</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> opts.banner</ins> = '<ins>Usage:</ins> <ins>subtitle_master.rb join </ins>[<ins>options</ins>]<ins>'</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-3514" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3514"> <div class="line-num1">52</div> <div class="line-num2">91</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">53</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> def</del> <del>highlight_subtitles</del>(<del>args</del>)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">54</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> </del>options = <del>parse_options(args, 'highlight')</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">55</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> highlighter = Appydave::Tools::SubtitleMaster::Highlight.new(options[:file])</del></span> </div> </td> </tr><tr> <td id="d2h-152414-3558" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3558"> <div class="line-num1">56</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> result = highlighter.highlight</span> </div> </td> </tr><tr> <td id="d2h-152414-3569" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3569"> <div class="line-num1">57</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-152414-3580" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3580"> <div class="line-num1">58</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">92</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> opts.on('-d',</ins> <ins>'--directory DIR', 'Directory containing SRT files </ins>(<ins>default: current directory</ins>)<ins>') do |v|</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">93</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> </ins>options<ins>[:folder]</ins> = <ins>v</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">94</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> end</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-3624" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3624"> <div class="line-num1">59</div> <div class="line-num2">95</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">60</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> def</del> <del>generate_image_prompts</del>(<del>args</del>)</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">61</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> </del>options = <del>parse_options(args, 'image_prompts')</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">62</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> image_prompter = Appydave::Tools::SubtitleMaster::ImagePrompts.new(options[:file])</del></span> </div> </td> </tr><tr> <td id="d2h-152414-3668" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3668"> <div class="line-num1">63</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> result = image_prompter.generate_prompts</span> </div> </td> </tr><tr> <td id="d2h-152414-3679" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3679"> <div class="line-num1">64</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> write_output(result, options[:output])</span> </div> </td> </tr><tr> <td id="d2h-152414-3690" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3690"> <div class="line-num1">65</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">96</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> opts.on('-f',</ins> <ins>'--files PATTERN', 'File pattern </ins>(<ins>e.g., "*.srt" or "part1.srt,part2.srt"</ins>)<ins>') do |v|</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">97</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> </ins>options<ins>[:files]</ins> = <ins>v</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">98</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> end</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-3734" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3734"> <div class="line-num1">66</div> <div class="line-num2">99</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">67</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> def parse_options</del>(<del>args</del>, <del>command</del>, <del>extra_options</del> <del>=</del> <del>[</del>])</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">68</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> </del>options = <del>{ file: nil, output: nil }</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">69</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> OptionParser.new do |opts|</del></span> </div> </td> </tr><tr> <td id="d2h-152414-3778" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3778"> <div class="line-num1">70</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> opts.banner = "Usage: subtitle_master.rb #{command} [options]"</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">100</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> opts.on</ins>(<ins>'-s'</ins>, <ins>'--sort ORDER'</ins>, <ins>%w[asc</ins> <ins>desc</ins> <ins>inferred</ins>]<ins>, 'Sort order (asc/desc/inferred</ins>)<ins>') do |v|</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">101</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> </ins>options<ins>[:sort]</ins> = <ins>v</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">102</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> end</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-3822" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3822"> <div class="line-num1">71</div> <div class="line-num2">103</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">72</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> opts.on('-<del>f</del>', '--<del>file</del> <del>FILE</del>', '<del>SRT</del> <del>file</del> <del>to</del> <del>process</del>') <del>{</del> |v|<del> options[:file] = v }</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">73</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> opts.on('-o', '--output FILE', 'Output file') { |v| </del>options[:<del>output</del>] = v<del> }</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">104</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-<ins>b</ins>', '--<ins>buffer</ins> <ins>MS</ins>', <ins>Integer, </ins>'<ins>Buffer</ins> <ins>between</ins> <ins>merged</ins> <ins>files in milliseconds</ins>') <ins>do</ins> |v|</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">105</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> </ins>options[:<ins>buffer</ins>] = v</span> </div> </td> </tr><tr> <td id="d2h-152414-3877" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3877"> <div class="line-num1"></div> <div class="line-num2">106</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-3888" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3888"> <div class="line-num1"></div> <div class="line-num2">107</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-3899" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3899"> <div class="line-num1"></div> <div class="line-num2">108</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.on('-o', '--output FILE', 'Output file') do |v|</span> </div> </td> </tr><tr> <td id="d2h-152414-3910" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3910"> <div class="line-num1"></div> <div class="line-num2">109</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> options[:output] = v</span> </div> </td> </tr><tr> <td id="d2h-152414-3921" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-3921"> <div class="line-num1"></div> <div class="line-num2">110</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-3932" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-3932"> <div class="line-num1">74</div> <div class="line-num2">111</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">75</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>extra_options</del>.<del>each</del> do |<del>opt</del>|</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">76</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>case</del> <del>opt</del></span> </div> </td> </tr><tr> <td id="d2h-152414-3965" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3965"> <div class="line-num1">77</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> when :words_per_group</span> </div> </td> </tr><tr> <td id="d2h-152414-3976" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3976"> <div class="line-num1">78</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> opts.on('-w', '--words-per-group WORDS', 'Number of words per group for splitting') { |v| options[:words_per_group] = v.to_i }</span> </div> </td> </tr><tr> <td id="d2h-152414-3987" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-3987"> <div class="line-num1">79</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">112</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>opts</ins>.<ins>on('-L',</ins> <ins>'--log-level LEVEL', %w[none info detail], 'Log level (default: info)') </ins>do |<ins>v</ins>|</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">113</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>options[:log_level]</ins> <ins>= v.to_sym</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-4020" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4020"> <div class="line-num1">80</div> <div class="line-num2">114</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4031" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4031"> <div class="line-num1">81</div> <div class="line-num2">115</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">82</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> opts.<del>on_tail</del>('-h', '--help', 'Show this message') do</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">116</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> opts.<ins>on</ins>('-h', '--help', 'Show this message') do</span> </div> </td> </tr><tr> <td id="d2h-152414-4064" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4064"> <div class="line-num1">83</div> <div class="line-num2">117</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> puts opts</span> </div> </td> </tr><tr> <td id="d2h-152414-4075" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4075"> <div class="line-num1">84</div> <div class="line-num2">118</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-4086" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4086"> <div class="line-num1">85</div> <div class="line-num2">119</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">86</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> end<del>.parse!(args)</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">120</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4119" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4119"> <div class="line-num1">87</div> <div class="line-num2">121</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">88</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>unless options[:file] && options[:output]</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">89</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>puts 'Missing required options</del>.<del> Use -h for help.'</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">122</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>begin</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">123</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>join_parser</ins>.<ins>parse!(args)</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-4174" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4174"> <div class="line-num1"></div> <div class="line-num2">124</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> rescue OptionParser::InvalidOption => e</span> </div> </td> </tr><tr> <td id="d2h-152414-4185" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4185"> <div class="line-num1"></div> <div class="line-num2">125</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Error: #{e.message}"</span> </div> </td> </tr><tr> <td id="d2h-152414-4196" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4196"> <div class="line-num1"></div> <div class="line-num2">126</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts join_parser</span> </div> </td> </tr><tr> <td id="d2h-152414-4207" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4207"> <div class="line-num1">90</div> <div class="line-num2">127</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-4218" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4218"> <div class="line-num1">91</div> <div class="line-num2">128</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4229" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4229"> <div class="line-num1">92</div> <div class="line-num2">129</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">93</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> options</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">94</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> end</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">130</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins># Validate required </ins>options</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">131</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> if options[:folder].nil? || options[:files].nil? || options[:output].nil?</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-4284" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4284"> <div class="line-num1"></div> <div class="line-num2">132</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts 'Error: Missing required options.'</span> </div> </td> </tr><tr> <td id="d2h-152414-4295" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4295"> <div class="line-num1"></div> <div class="line-num2">133</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts join_parser</span> </div> </td> </tr><tr> <td id="d2h-152414-4306" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4306"> <div class="line-num1"></div> <div class="line-num2">134</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> exit</span> </div> </td> </tr><tr> <td id="d2h-152414-4317" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4317"> <div class="line-num1"></div> <div class="line-num2">135</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4328" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4328"> <div class="line-num1">95</div> <div class="line-num2">136</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">96</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> def</del> <del>write_output(result,</del> <del>output_file)</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">97</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> <del>File</del>.<del>write</del>(<del>output_file</del>, <del>result)</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">98</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"><del> puts</del> <del>"Processed file written to #{output_file}"</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">137</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> #</ins> <ins>Assuming</ins> <ins>`Appydave::Tools::SubtitleMaster::Join` exists</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">138</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> <ins>joiner = Appydave::Tools::SubtitleMaster::Join</ins>.<ins>new</ins>(<ins>folder: options[:folder]</ins>, <ins>files: options[:files], sort: options[:sort], buffer: options[:buffer], output: options[:output],</ins></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">139</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><ins> log_level:</ins> <ins>options[:log_level])</ins></span> </div> </td> </tr><tr> <td id="d2h-152414-4405" class="d2h-code-linenumber d2h-ins"><a href="#d2h-152414-4405"> <div class="line-num1"></div> <div class="line-num2">140</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> joiner.join</span> </div> </td> </tr><tr> <td id="d2h-152414-4416" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4416"> <div class="line-num1">99</div> <div class="line-num2">141</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4427" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4427"> <div class="line-num1">100</div> <div class="line-num2">142</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-152414-4438" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4438"> <div class="line-num1">101</div> <div class="line-num2">143</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def print_help</span> </div> </td> </tr><tr> <td id="d2h-152414-4449" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4449"> <div class="line-num1">102</div> <div class="line-num2">144</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> puts 'Usage: subtitle_master.rb [command] [options]'</span> </div> </td> </tr><tr> <td id="d2h-152414-4460" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4460"> <div class="line-num1">103</div> <div class="line-num2">145</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> puts 'Commands:'</span> </div> </td> </tr><tr> <td id="d2h-152414-4471" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4471"> <div class="line-num1">104</div> <div class="line-num2">146</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> puts ' clean Clean and normalize SRT files'</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">105</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> puts ' <del>correct Correct</del> <del>common</del> <del>typos and mistranslations in </del>SRT files'</span> </div> </td> </tr><tr> <td id="d2h-152414-4493" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-4493"> <div class="line-num1">106</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> puts ' split Split subtitle groups based on word count'</span> </div> </td> </tr><tr> <td id="d2h-152414-4504" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-4504"> <div class="line-num1">107</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> puts ' highlight Highlight power words in subtitles'</span> </div> </td> </tr><tr> <td id="d2h-152414-4515" class="d2h-code-linenumber d2h-del"><a href="#d2h-152414-4515"> <div class="line-num1">108</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> puts ' image_prompts Generate image prompts from subtitle text'</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">147</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts ' <ins>join Join</ins> <ins>multiple</ins> SRT files'</span> </div> </td> </tr><tr> <td id="d2h-152414-4537" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4537"> <div class="line-num1">109</div> <div class="line-num2">148</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> puts "Run 'subtitle_master.rb [command] --help' for more information on a command."</span> </div> </td> </tr><tr> <td id="d2h-152414-4548" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4548"> <div class="line-num1">110</div> <div class="line-num2">149</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-152414-4559" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-152414-4559"> <div class="line-num1">111</div> <div class="line-num2">150</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-241341" class="d2h-file-wrapper" data-lang="md"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-241341">data/lib/appydave/tools/subtitle_master/_doc-join.md</a></span> <span class="d2h-tag d2h-added d2h-added-tag">ADDED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -0,0 +1,166 @@</div> </td> </tr><tr> <td id="d2h-241341-4597" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4597"> <div class="line-num1"></div> <div class="line-num2">1</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4608" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4608"> <div class="line-num1"></div> <div class="line-num2">2</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># Detailed Requirements Specification</span> </div> </td> </tr><tr> <td id="d2h-241341-4619" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4619"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4630" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4630"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">## Command-Line Tool</span> </div> </td> </tr><tr> <td id="d2h-241341-4641" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4641"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4652" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4652"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Purpose</span> </div> </td> </tr><tr> <td id="d2h-241341-4663" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4663"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">A CLI tool named `Join` for merging multiple SRT files into one cohesive subtitle file, handling timestamp adjustment and preserving subtitle integrity.</span> </div> </td> </tr><tr> <td id="d2h-241341-4674" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4674"> <div class="line-num1"></div> <div class="line-num2">8</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4685" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4685"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-4696" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4696"> <div class="line-num1"></div> <div class="line-num2">10</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4707" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4707"> <div class="line-num1"></div> <div class="line-num2">11</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Parameters</span> </div> </td> </tr><tr> <td id="d2h-241341-4718" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4718"> <div class="line-num1"></div> <div class="line-num2">12</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4729" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4729"> <div class="line-num1"></div> <div class="line-num2">13</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. **`--folder <path>`**</span> </div> </td> </tr><tr> <td id="d2h-241341-4740" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4740"> <div class="line-num1"></div> <div class="line-num2">14</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Specifies the folder containing SRT files. </span> </div> </td> </tr><tr> <td id="d2h-241341-4751" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4751"> <div class="line-num1"></div> <div class="line-num2">15</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Default**: Current working directory (`./`). </span> </div> </td> </tr><tr> <td id="d2h-241341-4762" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4762"> <div class="line-num1"></div> <div class="line-num2">16</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Example**: `--folder /path/to/subtitles`.</span> </div> </td> </tr><tr> <td id="d2h-241341-4773" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4773"> <div class="line-num1"></div> <div class="line-num2">17</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4784" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4784"> <div class="line-num1"></div> <div class="line-num2">18</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. **`--files <pattern>`**</span> </div> </td> </tr><tr> <td id="d2h-241341-4795" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4795"> <div class="line-num1"></div> <div class="line-num2">19</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Specifies specific filenames or wildcard patterns for SRT files to process. </span> </div> </td> </tr><tr> <td id="d2h-241341-4806" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4806"> <div class="line-num1"></div> <div class="line-num2">20</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Default**: `*.srt` (processes all SRT files in the folder). </span> </div> </td> </tr><tr> <td id="d2h-241341-4817" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4817"> <div class="line-num1"></div> <div class="line-num2">21</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-4828" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4828"> <div class="line-num1"></div> <div class="line-num2">22</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Explicit filenames: `file1.srt file2.srt` → Process in provided order. </span> </div> </td> </tr><tr> <td id="d2h-241341-4839" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4839"> <div class="line-num1"></div> <div class="line-num2">23</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Wildcard patterns: `*.srt` → Resolve matching files, sort by `--sort` order.</span> </div> </td> </tr><tr> <td id="d2h-241341-4850" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4850"> <div class="line-num1"></div> <div class="line-num2">24</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4861" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4861"> <div class="line-num1"></div> <div class="line-num2">25</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. **`--sort <inferred|asc|desc>`**</span> </div> </td> </tr><tr> <td id="d2h-241341-4872" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4872"> <div class="line-num1"></div> <div class="line-num2">26</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Defines how files are ordered for processing. </span> </div> </td> </tr><tr> <td id="d2h-241341-4883" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4883"> <div class="line-num1"></div> <div class="line-num2">27</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Default**: `inferred` </span> </div> </td> </tr><tr> <td id="d2h-241341-4894" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4894"> <div class="line-num1"></div> <div class="line-num2">28</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-4905" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4905"> <div class="line-num1"></div> <div class="line-num2">29</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - `inferred`: </span> </div> </td> </tr><tr> <td id="d2h-241341-4916" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4916"> <div class="line-num1"></div> <div class="line-num2">30</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Explicit filenames → Preserve order. </span> </div> </td> </tr><tr> <td id="d2h-241341-4927" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4927"> <div class="line-num1"></div> <div class="line-num2">31</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Wildcards → Sort alphabetically (ascending). </span> </div> </td> </tr><tr> <td id="d2h-241341-4938" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4938"> <div class="line-num1"></div> <div class="line-num2">32</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - `asc`: Force alphabetical order. </span> </div> </td> </tr><tr> <td id="d2h-241341-4949" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4949"> <div class="line-num1"></div> <div class="line-num2">33</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - `desc`: Force reverse alphabetical order.</span> </div> </td> </tr><tr> <td id="d2h-241341-4960" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4960"> <div class="line-num1"></div> <div class="line-num2">34</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-4971" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4971"> <div class="line-num1"></div> <div class="line-num2">35</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. **`--buffer <milliseconds>`**</span> </div> </td> </tr><tr> <td id="d2h-241341-4982" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4982"> <div class="line-num1"></div> <div class="line-num2">36</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Adds a buffer between the last subtitle of one file and the first subtitle of the next. </span> </div> </td> </tr><tr> <td id="d2h-241341-4993" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-4993"> <div class="line-num1"></div> <div class="line-num2">37</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Default**: `100` (100ms). </span> </div> </td> </tr><tr> <td id="d2h-241341-5004" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5004"> <div class="line-num1"></div> <div class="line-num2">38</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Example**: `--buffer 50` for a 50ms gap.</span> </div> </td> </tr><tr> <td id="d2h-241341-5015" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5015"> <div class="line-num1"></div> <div class="line-num2">39</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5026" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5026"> <div class="line-num1"></div> <div class="line-num2">40</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">5. **`--output <output_file.srt>`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5037" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5037"> <div class="line-num1"></div> <div class="line-num2">41</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Specifies the name of the output merged SRT file. </span> </div> </td> </tr><tr> <td id="d2h-241341-5048" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5048"> <div class="line-num1"></div> <div class="line-num2">42</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Default**: `merged.srt` in the current folder. </span> </div> </td> </tr><tr> <td id="d2h-241341-5059" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5059"> <div class="line-num1"></div> <div class="line-num2">43</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Example**: `--output /path/to/final_output.srt`.</span> </div> </td> </tr><tr> <td id="d2h-241341-5070" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5070"> <div class="line-num1"></div> <div class="line-num2">44</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5081" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5081"> <div class="line-num1"></div> <div class="line-num2">45</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">6. **`--verbose`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5092" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5092"> <div class="line-num1"></div> <div class="line-num2">46</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Purpose**: Enables detailed logging for steps like file resolution, timestamp adjustments, and warnings for skipped files.</span> </div> </td> </tr><tr> <td id="d2h-241341-5103" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5103"> <div class="line-num1"></div> <div class="line-num2">47</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5114" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5114"> <div class="line-num1"></div> <div class="line-num2">48</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-5125" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5125"> <div class="line-num1"></div> <div class="line-num2">49</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5136" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5136"> <div class="line-num1"></div> <div class="line-num2">50</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">## Primary Component Logic</span> </div> </td> </tr><tr> <td id="d2h-241341-5147" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5147"> <div class="line-num1"></div> <div class="line-num2">51</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5158" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5158"> <div class="line-num1"></div> <div class="line-num2">52</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Design Overview</span> </div> </td> </tr><tr> <td id="d2h-241341-5169" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5169"> <div class="line-num1"></div> <div class="line-num2">53</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">The tool should adhere to **Single Responsibility Principle (SRP)**, favor **composition**, and nest the composed components within the `Join` class for encapsulation and reusability.</span> </div> </td> </tr><tr> <td id="d2h-241341-5180" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5180"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5191" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5191"> <div class="line-num1"></div> <div class="line-num2">55</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Primary Class: `Join`</span> </div> </td> </tr><tr> <td id="d2h-241341-5202" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5202"> <div class="line-num1"></div> <div class="line-num2">56</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">The `Join` class acts as the main entry point and coordinates the workflow. It contains the following nested components:</span> </div> </td> </tr><tr> <td id="d2h-241341-5213" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5213"> <div class="line-num1"></div> <div class="line-num2">57</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5224" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5224"> <div class="line-num1"></div> <div class="line-num2">58</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. **`FileResolver`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5235" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5235"> <div class="line-num1"></div> <div class="line-num2">59</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Responsibility**: Handles file resolution (folder, filenames, wildcards, sorting).</span> </div> </td> </tr><tr> <td id="d2h-241341-5246" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5246"> <div class="line-num1"></div> <div class="line-num2">60</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-5257" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5257"> <div class="line-num1"></div> <div class="line-num2">61</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Resolve files based on `--files` or `--folder`. </span> </div> </td> </tr><tr> <td id="d2h-241341-5268" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5268"> <div class="line-num1"></div> <div class="line-num2">62</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Apply sorting rules (`inferred`, `asc`, `desc`). </span> </div> </td> </tr><tr> <td id="d2h-241341-5279" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5279"> <div class="line-num1"></div> <div class="line-num2">63</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5290" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5290"> <div class="line-num1"></div> <div class="line-num2">64</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. **`SRTParser`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5301" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5301"> <div class="line-num1"></div> <div class="line-num2">65</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Responsibility**: Parses SRT files into structured subtitle objects.</span> </div> </td> </tr><tr> <td id="d2h-241341-5312" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5312"> <div class="line-num1"></div> <div class="line-num2">66</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-5323" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5323"> <div class="line-num1"></div> <div class="line-num2">67</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Read and validate SRT content. </span> </div> </td> </tr><tr> <td id="d2h-241341-5334" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5334"> <div class="line-num1"></div> <div class="line-num2">68</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Split into subtitle blocks (index, start time, end time, text). </span> </div> </td> </tr><tr> <td id="d2h-241341-5345" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5345"> <div class="line-num1"></div> <div class="line-num2">69</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Convert timestamps into structured objects (seconds for calculations). </span> </div> </td> </tr><tr> <td id="d2h-241341-5356" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5356"> <div class="line-num1"></div> <div class="line-num2">70</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5367" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5367"> <div class="line-num1"></div> <div class="line-num2">71</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. **`SRTMerger`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5378" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5378"> <div class="line-num1"></div> <div class="line-num2">72</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Responsibility**: Combines subtitles, adjusts timestamps, and applies buffers.</span> </div> </td> </tr><tr> <td id="d2h-241341-5389" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5389"> <div class="line-num1"></div> <div class="line-num2">73</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-5400" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5400"> <div class="line-num1"></div> <div class="line-num2">74</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Aggregate parsed subtitles from multiple files. </span> </div> </td> </tr><tr> <td id="d2h-241341-5411" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5411"> <div class="line-num1"></div> <div class="line-num2">75</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Adjust timestamps for non-overlapping entries using the buffer. </span> </div> </td> </tr><tr> <td id="d2h-241341-5422" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5422"> <div class="line-num1"></div> <div class="line-num2">76</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5433" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5433"> <div class="line-num1"></div> <div class="line-num2">77</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. **`SRTWriter`**</span> </div> </td> </tr><tr> <td id="d2h-241341-5444" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5444"> <div class="line-num1"></div> <div class="line-num2">78</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Responsibility**: Converts subtitle objects back to SRT format and writes to disk.</span> </div> </td> </tr><tr> <td id="d2h-241341-5455" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5455"> <div class="line-num1"></div> <div class="line-num2">79</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - **Logic**: </span> </div> </td> </tr><tr> <td id="d2h-241341-5466" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5466"> <div class="line-num1"></div> <div class="line-num2">80</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Reformat subtitles with proper numbering and timestamp formatting. </span> </div> </td> </tr><tr> <td id="d2h-241341-5477" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5477"> <div class="line-num1"></div> <div class="line-num2">81</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Write the final merged content to the specified output file.</span> </div> </td> </tr><tr> <td id="d2h-241341-5488" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5488"> <div class="line-num1"></div> <div class="line-num2">82</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5499" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5499"> <div class="line-num1"></div> <div class="line-num2">83</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-5510" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5510"> <div class="line-num1"></div> <div class="line-num2">84</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5521" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5521"> <div class="line-num1"></div> <div class="line-num2">85</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Main Workflow</span> </div> </td> </tr><tr> <td id="d2h-241341-5532" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5532"> <div class="line-num1"></div> <div class="line-num2">86</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5543" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5543"> <div class="line-num1"></div> <div class="line-num2">87</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. **Parse Arguments**</span> </div> </td> </tr><tr> <td id="d2h-241341-5554" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5554"> <div class="line-num1"></div> <div class="line-num2">88</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Validate input parameters and resolve defaults.</span> </div> </td> </tr><tr> <td id="d2h-241341-5565" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5565"> <div class="line-num1"></div> <div class="line-num2">89</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5576" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5576"> <div class="line-num1"></div> <div class="line-num2">90</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. **Resolve Files**</span> </div> </td> </tr><tr> <td id="d2h-241341-5587" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5587"> <div class="line-num1"></div> <div class="line-num2">91</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Use `FileResolver` to identify files based on folder, filenames, or wildcard patterns.</span> </div> </td> </tr><tr> <td id="d2h-241341-5598" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5598"> <div class="line-num1"></div> <div class="line-num2">92</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5609" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5609"> <div class="line-num1"></div> <div class="line-num2">93</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. **Parse Files**</span> </div> </td> </tr><tr> <td id="d2h-241341-5620" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5620"> <div class="line-num1"></div> <div class="line-num2">94</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Use `SRTParser` to parse each file into a list of structured subtitle objects.</span> </div> </td> </tr><tr> <td id="d2h-241341-5631" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5631"> <div class="line-num1"></div> <div class="line-num2">95</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5642" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5642"> <div class="line-num1"></div> <div class="line-num2">96</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. **Merge Files**</span> </div> </td> </tr><tr> <td id="d2h-241341-5653" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5653"> <div class="line-num1"></div> <div class="line-num2">97</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Use `SRTMerger` to combine subtitles, sort by start time (per file order), and apply timestamp adjustments.</span> </div> </td> </tr><tr> <td id="d2h-241341-5664" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5664"> <div class="line-num1"></div> <div class="line-num2">98</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5675" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5675"> <div class="line-num1"></div> <div class="line-num2">99</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">5. **Write Output**</span> </div> </td> </tr><tr> <td id="d2h-241341-5686" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5686"> <div class="line-num1"></div> <div class="line-num2">100</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Use `SRTWriter` to generate the final SRT file and save it to the specified location.</span> </div> </td> </tr><tr> <td id="d2h-241341-5697" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5697"> <div class="line-num1"></div> <div class="line-num2">101</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5708" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5708"> <div class="line-num1"></div> <div class="line-num2">102</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-5719" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5719"> <div class="line-num1"></div> <div class="line-num2">103</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5730" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5730"> <div class="line-num1"></div> <div class="line-num2">104</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">## Business Rules</span> </div> </td> </tr><tr> <td id="d2h-241341-5741" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5741"> <div class="line-num1"></div> <div class="line-num2">105</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5752" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5752"> <div class="line-num1"></div> <div class="line-num2">106</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. **File Selection**</span> </div> </td> </tr><tr> <td id="d2h-241341-5763" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5763"> <div class="line-num1"></div> <div class="line-num2">107</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Resolve wildcards to file lists dynamically. </span> </div> </td> </tr><tr> <td id="d2h-241341-5774" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5774"> <div class="line-num1"></div> <div class="line-num2">108</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Validate file existence and skip invalid or non-SRT files with appropriate warnings.</span> </div> </td> </tr><tr> <td id="d2h-241341-5785" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5785"> <div class="line-num1"></div> <div class="line-num2">109</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5796" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5796"> <div class="line-num1"></div> <div class="line-num2">110</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. **Timestamp Handling**</span> </div> </td> </tr><tr> <td id="d2h-241341-5807" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5807"> <div class="line-num1"></div> <div class="line-num2">111</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Ensure non-overlapping subtitles across files by applying the buffer. </span> </div> </td> </tr><tr> <td id="d2h-241341-5818" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5818"> <div class="line-num1"></div> <div class="line-num2">112</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Maintain relative timing within each file.</span> </div> </td> </tr><tr> <td id="d2h-241341-5829" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5829"> <div class="line-num1"></div> <div class="line-num2">113</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5840" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5840"> <div class="line-num1"></div> <div class="line-num2">114</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. **Sorting Logic**</span> </div> </td> </tr><tr> <td id="d2h-241341-5851" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5851"> <div class="line-num1"></div> <div class="line-num2">115</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Preserve file order for explicit filenames. </span> </div> </td> </tr><tr> <td id="d2h-241341-5862" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5862"> <div class="line-num1"></div> <div class="line-num2">116</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Apply alphabetical sorting for wildcards unless overridden by `--sort`.</span> </div> </td> </tr><tr> <td id="d2h-241341-5873" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5873"> <div class="line-num1"></div> <div class="line-num2">117</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5884" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5884"> <div class="line-num1"></div> <div class="line-num2">118</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. **Error Handling**</span> </div> </td> </tr><tr> <td id="d2h-241341-5895" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5895"> <div class="line-num1"></div> <div class="line-num2">119</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Log and skip malformed SRT files. </span> </div> </td> </tr><tr> <td id="d2h-241341-5906" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5906"> <div class="line-num1"></div> <div class="line-num2">120</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Notify users of missing files or unsupported patterns.</span> </div> </td> </tr><tr> <td id="d2h-241341-5917" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5917"> <div class="line-num1"></div> <div class="line-num2">121</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5928" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5928"> <div class="line-num1"></div> <div class="line-num2">122</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">5. **Output Consistency**</span> </div> </td> </tr><tr> <td id="d2h-241341-5939" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5939"> <div class="line-num1"></div> <div class="line-num2">123</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Re-number subtitles sequentially in the final output. </span> </div> </td> </tr><tr> <td id="d2h-241341-5950" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5950"> <div class="line-num1"></div> <div class="line-num2">124</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Ensure proper formatting with three decimal places for milliseconds.</span> </div> </td> </tr><tr> <td id="d2h-241341-5961" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5961"> <div class="line-num1"></div> <div class="line-num2">125</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5972" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5972"> <div class="line-num1"></div> <div class="line-num2">126</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-5983" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5983"> <div class="line-num1"></div> <div class="line-num2">127</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-5994" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-5994"> <div class="line-num1"></div> <div class="line-num2">128</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">## Tests</span> </div> </td> </tr><tr> <td id="d2h-241341-6005" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6005"> <div class="line-num1"></div> <div class="line-num2">129</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6016" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6016"> <div class="line-num1"></div> <div class="line-num2">130</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Unit Tests</span> </div> </td> </tr><tr> <td id="d2h-241341-6027" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6027"> <div class="line-num1"></div> <div class="line-num2">131</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6038" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6038"> <div class="line-num1"></div> <div class="line-num2">132</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. **FileResolver Tests**</span> </div> </td> </tr><tr> <td id="d2h-241341-6049" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6049"> <div class="line-num1"></div> <div class="line-num2">133</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Resolve explicit filenames.</span> </div> </td> </tr><tr> <td id="d2h-241341-6060" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6060"> <div class="line-num1"></div> <div class="line-num2">134</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Resolve wildcard patterns (`*.srt`) and sort files.</span> </div> </td> </tr><tr> <td id="d2h-241341-6071" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6071"> <div class="line-num1"></div> <div class="line-num2">135</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Handle missing or invalid files gracefully.</span> </div> </td> </tr><tr> <td id="d2h-241341-6082" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6082"> <div class="line-num1"></div> <div class="line-num2">136</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6093" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6093"> <div class="line-num1"></div> <div class="line-num2">137</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. **SRTParser Tests**</span> </div> </td> </tr><tr> <td id="d2h-241341-6104" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6104"> <div class="line-num1"></div> <div class="line-num2">138</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Parse valid SRT files into structured objects.</span> </div> </td> </tr><tr> <td id="d2h-241341-6115" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6115"> <div class="line-num1"></div> <div class="line-num2">139</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Detect and handle malformed SRT files.</span> </div> </td> </tr><tr> <td id="d2h-241341-6126" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6126"> <div class="line-num1"></div> <div class="line-num2">140</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Validate timestamp formatting.</span> </div> </td> </tr><tr> <td id="d2h-241341-6137" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6137"> <div class="line-num1"></div> <div class="line-num2">141</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6148" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6148"> <div class="line-num1"></div> <div class="line-num2">142</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. **SRTMerger Tests**</span> </div> </td> </tr><tr> <td id="d2h-241341-6159" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6159"> <div class="line-num1"></div> <div class="line-num2">143</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Combine subtitles from two or more files.</span> </div> </td> </tr><tr> <td id="d2h-241341-6170" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6170"> <div class="line-num1"></div> <div class="line-num2">144</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Ensure timestamps are adjusted with the buffer.</span> </div> </td> </tr><tr> <td id="d2h-241341-6181" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6181"> <div class="line-num1"></div> <div class="line-num2">145</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Handle edge cases like overlapping timestamps or missing buffer.</span> </div> </td> </tr><tr> <td id="d2h-241341-6192" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6192"> <div class="line-num1"></div> <div class="line-num2">146</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6203" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6203"> <div class="line-num1"></div> <div class="line-num2">147</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. **SRTWriter Tests**</span> </div> </td> </tr><tr> <td id="d2h-241341-6214" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6214"> <div class="line-num1"></div> <div class="line-num2">148</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Convert subtitle objects to valid SRT format.</span> </div> </td> </tr><tr> <td id="d2h-241341-6225" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6225"> <div class="line-num1"></div> <div class="line-num2">149</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> - Ensure proper numbering and formatting (e.g., three decimal places).</span> </div> </td> </tr><tr> <td id="d2h-241341-6236" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6236"> <div class="line-num1"></div> <div class="line-num2">150</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6247" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6247"> <div class="line-num1"></div> <div class="line-num2">151</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-6258" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6258"> <div class="line-num1"></div> <div class="line-num2">152</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6269" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6269"> <div class="line-num1"></div> <div class="line-num2">153</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### Integration Tests</span> </div> </td> </tr><tr> <td id="d2h-241341-6280" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6280"> <div class="line-num1"></div> <div class="line-num2">154</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6291" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6291"> <div class="line-num1"></div> <div class="line-num2">155</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. Process a folder of SRT files and produce a merged output. </span> </div> </td> </tr><tr> <td id="d2h-241341-6302" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6302"> <div class="line-num1"></div> <div class="line-num2">156</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. Validate behavior with explicit filenames and wildcards. </span> </div> </td> </tr><tr> <td id="d2h-241341-6313" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6313"> <div class="line-num1"></div> <div class="line-num2">157</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. Verify handling of buffers for different values (`0ms`, `50ms`, etc.). </span> </div> </td> </tr><tr> <td id="d2h-241341-6324" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6324"> <div class="line-num1"></div> <div class="line-num2">158</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">4. Test edge cases like empty files, malformed SRTs, or mixed valid/invalid files.</span> </div> </td> </tr><tr> <td id="d2h-241341-6335" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6335"> <div class="line-num1"></div> <div class="line-num2">159</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6346" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6346"> <div class="line-num1"></div> <div class="line-num2">160</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">---</span> </div> </td> </tr><tr> <td id="d2h-241341-6357" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6357"> <div class="line-num1"></div> <div class="line-num2">161</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6368" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6368"> <div class="line-num1"></div> <div class="line-num2">162</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">### End-to-End Tests</span> </div> </td> </tr><tr> <td id="d2h-241341-6379" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6379"> <div class="line-num1"></div> <div class="line-num2">163</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-241341-6390" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6390"> <div class="line-num1"></div> <div class="line-num2">164</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">1. Run the tool with minimal arguments and verify the output. </span> </div> </td> </tr><tr> <td id="d2h-241341-6401" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6401"> <div class="line-num1"></div> <div class="line-num2">165</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">2. Test all parameter combinations (`--folder`, `--files`, `--sort`, `--buffer`, etc.). </span> </div> </td> </tr><tr> <td id="d2h-241341-6412" class="d2h-code-linenumber d2h-ins"><a href="#d2h-241341-6412"> <div class="line-num1"></div> <div class="line-num2">166</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">3. Compare merged output against manually validated reference files.</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-686357" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-686357">data/lib/appydave/tools/subtitle_master/clean.rb</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -5,6 +5,8 @@ module Appydave</div> </td> </tr><tr> <td id="d2h-686357-6450" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6450"> <div class="line-num1">5</div> <div class="line-num2">5</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> module SubtitleMaster</span> </div> </td> </tr><tr> <td id="d2h-686357-6461" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6461"> <div class="line-num1">6</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> # Clean and normalize subtitles</span> </div> </td> </tr><tr> <td id="d2h-686357-6472" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6472"> <div class="line-num1">7</div> <div class="line-num2">7</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> class Clean</span> </div> </td> </tr><tr> <td id="d2h-686357-6483" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6483"> <div class="line-num1"></div> <div class="line-num2">8</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> attr_reader :content</span> </div> </td> </tr><tr> <td id="d2h-686357-6494" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6494"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-686357-6505" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6505"> <div class="line-num1">8</div> <div class="line-num2">10</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def initialize(file_path: nil, srt_content: nil)</span> </div> </td> </tr><tr> <td id="d2h-686357-6516" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6516"> <div class="line-num1">9</div> <div class="line-num2">11</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> if file_path && srt_content</span> </div> </td> </tr><tr> <td id="d2h-686357-6527" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6527"> <div class="line-num1">10</div> <div class="line-num2">12</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'You cannot provide both a file path and an SRT content stream.'</span> </div> </td> </tr> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -24,6 +26,15 @@ module Appydave</div> </td> </tr><tr> <td id="d2h-686357-6544" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6544"> <div class="line-num1">24</div> <div class="line-num2">26</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> normalize_lines(content)</span> </div> </td> </tr><tr> <td id="d2h-686357-6555" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6555"> <div class="line-num1">25</div> <div class="line-num2">27</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-686357-6566" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6566"> <div class="line-num1">26</div> <div class="line-num2">28</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-686357-6577" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6577"> <div class="line-num1"></div> <div class="line-num2">29</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def write(output_file)</span> </div> </td> </tr><tr> <td id="d2h-686357-6588" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6588"> <div class="line-num1"></div> <div class="line-num2">30</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> File.write(output_file, content)</span> </div> </td> </tr><tr> <td id="d2h-686357-6599" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6599"> <div class="line-num1"></div> <div class="line-num2">31</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Processed file written to #{output_file}"</span> </div> </td> </tr><tr> <td id="d2h-686357-6610" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6610"> <div class="line-num1"></div> <div class="line-num2">32</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> rescue Errno::EACCES</span> </div> </td> </tr><tr> <td id="d2h-686357-6621" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6621"> <div class="line-num1"></div> <div class="line-num2">33</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "Permission denied: Unable to write to #{output_file}"</span> </div> </td> </tr><tr> <td id="d2h-686357-6632" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6632"> <div class="line-num1"></div> <div class="line-num2">34</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> rescue StandardError => e</span> </div> </td> </tr><tr> <td id="d2h-686357-6643" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6643"> <div class="line-num1"></div> <div class="line-num2">35</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts "An error occurred while writing to the file: #{e.message}"</span> </div> </td> </tr><tr> <td id="d2h-686357-6654" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6654"> <div class="line-num1"></div> <div class="line-num2">36</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-686357-6665" class="d2h-code-linenumber d2h-ins"><a href="#d2h-686357-6665"> <div class="line-num1"></div> <div class="line-num2">37</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-686357-6676" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6676"> <div class="line-num1">27</div> <div class="line-num2">38</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-686357-6687" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6687"> <div class="line-num1">28</div> <div class="line-num2">39</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-686357-6698" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-686357-6698"> <div class="line-num1">29</div> <div class="line-num2">40</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> def remove_underscores(content)</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-386494" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-386494">data/lib/appydave/tools/subtitle_master/join.rb</a></span> <span class="d2h-tag d2h-added d2h-added-tag">ADDED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -0,0 +1,327 @@</div> </td> </tr><tr> <td id="d2h-386494-6736" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6736"> <div class="line-num1"></div> <div class="line-num2">1</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"># frozen_string_literal: true</span> </div> </td> </tr><tr> <td id="d2h-386494-6747" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6747"> <div class="line-num1"></div> <div class="line-num2">2</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-6758" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6758"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">module Appydave</span> </div> </td> </tr><tr> <td id="d2h-386494-6769" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6769"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> module Tools</span> </div> </td> </tr><tr> <td id="d2h-386494-6780" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6780"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> module SubtitleMaster</span> </div> </td> </tr><tr> <td id="d2h-386494-6791" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6791"> <div class="line-num1"></div> <div class="line-num2">6</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Join multiple SRT files into one</span> </div> </td> </tr><tr> <td id="d2h-386494-6802" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6802"> <div class="line-num1"></div> <div class="line-num2">7</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # - Supports folder, wildcards, sorting via FileResolver</span> </div> </td> </tr><tr> <td id="d2h-386494-6813" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6813"> <div class="line-num1"></div> <div class="line-num2">8</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class Join</span> </div> </td> </tr><tr> <td id="d2h-386494-6824" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6824"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Handles file resolution (folder, wildcards, sorting)</span> </div> </td> </tr><tr> <td id="d2h-386494-6835" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6835"> <div class="line-num1"></div> <div class="line-num2">10</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class FileResolver</span> </div> </td> </tr><tr> <td id="d2h-386494-6846" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6846"> <div class="line-num1"></div> <div class="line-num2">11</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(folder:, files:, sort:)</span> </div> </td> </tr><tr> <td id="d2h-386494-6857" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6857"> <div class="line-num1"></div> <div class="line-num2">12</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'folder is required' if folder.nil?</span> </div> </td> </tr><tr> <td id="d2h-386494-6868" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6868"> <div class="line-num1"></div> <div class="line-num2">13</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'files is required' if files.nil?</span> </div> </td> </tr><tr> <td id="d2h-386494-6879" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6879"> <div class="line-num1"></div> <div class="line-num2">14</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-6890" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6890"> <div class="line-num1"></div> <div class="line-num2">15</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @folder = folder</span> </div> </td> </tr><tr> <td id="d2h-386494-6901" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6901"> <div class="line-num1"></div> <div class="line-num2">16</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @files = files</span> </div> </td> </tr><tr> <td id="d2h-386494-6912" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6912"> <div class="line-num1"></div> <div class="line-num2">17</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @sort = sort</span> </div> </td> </tr><tr> <td id="d2h-386494-6923" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6923"> <div class="line-num1"></div> <div class="line-num2">18</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-6934" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6934"> <div class="line-num1"></div> <div class="line-num2">19</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-6945" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6945"> <div class="line-num1"></div> <div class="line-num2">20</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def process</span> </div> </td> </tr><tr> <td id="d2h-386494-6956" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6956"> <div class="line-num1"></div> <div class="line-num2">21</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Check if folder exists before processing</span> </div> </td> </tr><tr> <td id="d2h-386494-6967" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6967"> <div class="line-num1"></div> <div class="line-num2">22</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise Errno::ENOENT, "No such directory - #{@folder}" unless Dir.exist?(@folder)</span> </div> </td> </tr><tr> <td id="d2h-386494-6978" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6978"> <div class="line-num1"></div> <div class="line-num2">23</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-6989" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-6989"> <div class="line-num1"></div> <div class="line-num2">24</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> file_patterns = @files.split(',').map(&:strip)</span> </div> </td> </tr><tr> <td id="d2h-386494-7000" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7000"> <div class="line-num1"></div> <div class="line-num2">25</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> resolved_files = file_patterns.flat_map { |pattern| resolve_pattern(pattern) }</span> </div> </td> </tr><tr> <td id="d2h-386494-7011" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7011"> <div class="line-num1"></div> <div class="line-num2">26</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> sort_files(resolved_files)</span> </div> </td> </tr><tr> <td id="d2h-386494-7022" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7022"> <div class="line-num1"></div> <div class="line-num2">27</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7033" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7033"> <div class="line-num1"></div> <div class="line-num2">28</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7044" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7044"> <div class="line-num1"></div> <div class="line-num2">29</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-7055" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7055"> <div class="line-num1"></div> <div class="line-num2">30</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7066" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7066"> <div class="line-num1"></div> <div class="line-num2">31</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def resolve_pattern(pattern)</span> </div> </td> </tr><tr> <td id="d2h-386494-7077" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7077"> <div class="line-num1"></div> <div class="line-num2">32</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if pattern.include?('*')</span> </div> </td> </tr><tr> <td id="d2h-386494-7088" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7088"> <div class="line-num1"></div> <div class="line-num2">33</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> Dir.glob(File.join(@folder, pattern))</span> </div> </td> </tr><tr> <td id="d2h-386494-7099" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7099"> <div class="line-num1"></div> <div class="line-num2">34</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> else</span> </div> </td> </tr><tr> <td id="d2h-386494-7110" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7110"> <div class="line-num1"></div> <div class="line-num2">35</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> file_path = File.join(@folder, pattern)</span> </div> </td> </tr><tr> <td id="d2h-386494-7121" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7121"> <div class="line-num1"></div> <div class="line-num2">36</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> File.exist?(file_path) ? [file_path] : []</span> </div> </td> </tr><tr> <td id="d2h-386494-7132" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7132"> <div class="line-num1"></div> <div class="line-num2">37</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7143" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7143"> <div class="line-num1"></div> <div class="line-num2">38</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7154" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7154"> <div class="line-num1"></div> <div class="line-num2">39</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7165" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7165"> <div class="line-num1"></div> <div class="line-num2">40</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def sort_files(files)</span> </div> </td> </tr><tr> <td id="d2h-386494-7176" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7176"> <div class="line-num1"></div> <div class="line-num2">41</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> case @sort</span> </div> </td> </tr><tr> <td id="d2h-386494-7187" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7187"> <div class="line-num1"></div> <div class="line-num2">42</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> when 'asc'</span> </div> </td> </tr><tr> <td id="d2h-386494-7198" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7198"> <div class="line-num1"></div> <div class="line-num2">43</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> files.sort</span> </div> </td> </tr><tr> <td id="d2h-386494-7209" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7209"> <div class="line-num1"></div> <div class="line-num2">44</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> when 'desc'</span> </div> </td> </tr><tr> <td id="d2h-386494-7220" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7220"> <div class="line-num1"></div> <div class="line-num2">45</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> files.sort.reverse</span> </div> </td> </tr><tr> <td id="d2h-386494-7231" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7231"> <div class="line-num1"></div> <div class="line-num2">46</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> else # 'inferred'</span> </div> </td> </tr><tr> <td id="d2h-386494-7242" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7242"> <div class="line-num1"></div> <div class="line-num2">47</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # If explicit files were provided (no wildcards), maintain order</span> </div> </td> </tr><tr> <td id="d2h-386494-7253" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7253"> <div class="line-num1"></div> <div class="line-num2">48</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> return files unless @files.include?('*')</span> </div> </td> </tr><tr> <td id="d2h-386494-7264" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7264"> <div class="line-num1"></div> <div class="line-num2">49</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7275" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7275"> <div class="line-num1"></div> <div class="line-num2">50</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> files.sort</span> </div> </td> </tr><tr> <td id="d2h-386494-7286" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7286"> <div class="line-num1"></div> <div class="line-num2">51</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7297" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7297"> <div class="line-num1"></div> <div class="line-num2">52</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7308" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7308"> <div class="line-num1"></div> <div class="line-num2">53</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7319" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7319"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7330" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7330"> <div class="line-num1"></div> <div class="line-num2">55</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Parses SRT files into structured subtitle objects</span> </div> </td> </tr><tr> <td id="d2h-386494-7341" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7341"> <div class="line-num1"></div> <div class="line-num2">56</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class SRTParser</span> </div> </td> </tr><tr> <td id="d2h-386494-7352" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7352"> <div class="line-num1"></div> <div class="line-num2">57</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Represents a single subtitle entry</span> </div> </td> </tr><tr> <td id="d2h-386494-7363" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7363"> <div class="line-num1"></div> <div class="line-num2">58</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class Subtitle</span> </div> </td> </tr><tr> <td id="d2h-386494-7374" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7374"> <div class="line-num1"></div> <div class="line-num2">59</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> attr_reader :index, :start_time, :end_time, :text</span> </div> </td> </tr><tr> <td id="d2h-386494-7385" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7385"> <div class="line-num1"></div> <div class="line-num2">60</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7396" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7396"> <div class="line-num1"></div> <div class="line-num2">61</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(index:, start_time:, end_time:, text:)</span> </div> </td> </tr><tr> <td id="d2h-386494-7407" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7407"> <div class="line-num1"></div> <div class="line-num2">62</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @index = index</span> </div> </td> </tr><tr> <td id="d2h-386494-7418" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7418"> <div class="line-num1"></div> <div class="line-num2">63</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @start_time = parse_timestamp(start_time)</span> </div> </td> </tr><tr> <td id="d2h-386494-7429" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7429"> <div class="line-num1"></div> <div class="line-num2">64</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @end_time = parse_timestamp(end_time)</span> </div> </td> </tr><tr> <td id="d2h-386494-7440" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7440"> <div class="line-num1"></div> <div class="line-num2">65</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @text = text.strip</span> </div> </td> </tr><tr> <td id="d2h-386494-7451" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7451"> <div class="line-num1"></div> <div class="line-num2">66</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7462" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7462"> <div class="line-num1"></div> <div class="line-num2">67</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7473" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7473"> <div class="line-num1"></div> <div class="line-num2">68</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-7484" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7484"> <div class="line-num1"></div> <div class="line-num2">69</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7495" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7495"> <div class="line-num1"></div> <div class="line-num2">70</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Converts SRT timestamp (00:00:00,000) to seconds (float)</span> </div> </td> </tr><tr> <td id="d2h-386494-7506" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7506"> <div class="line-num1"></div> <div class="line-num2">71</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def parse_timestamp(timestamp)</span> </div> </td> </tr><tr> <td id="d2h-386494-7517" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7517"> <div class="line-num1"></div> <div class="line-num2">72</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> hours, minutes, seconds_ms = timestamp.split(':')</span> </div> </td> </tr><tr> <td id="d2h-386494-7528" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7528"> <div class="line-num1"></div> <div class="line-num2">73</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds, milliseconds = seconds_ms.split(',')</span> </div> </td> </tr><tr> <td id="d2h-386494-7539" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7539"> <div class="line-num1"></div> <div class="line-num2">74</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7550" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7550"> <div class="line-num1"></div> <div class="line-num2">75</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> (hours.to_i * 3600) +</span> </div> </td> </tr><tr> <td id="d2h-386494-7561" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7561"> <div class="line-num1"></div> <div class="line-num2">76</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> (minutes.to_i * 60) +</span> </div> </td> </tr><tr> <td id="d2h-386494-7572" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7572"> <div class="line-num1"></div> <div class="line-num2">77</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds.to_i +</span> </div> </td> </tr><tr> <td id="d2h-386494-7583" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7583"> <div class="line-num1"></div> <div class="line-num2">78</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> (milliseconds.to_i / 1000.0)</span> </div> </td> </tr><tr> <td id="d2h-386494-7594" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7594"> <div class="line-num1"></div> <div class="line-num2">79</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7605" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7605"> <div class="line-num1"></div> <div class="line-num2">80</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7616" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7616"> <div class="line-num1"></div> <div class="line-num2">81</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7627" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7627"> <div class="line-num1"></div> <div class="line-num2">82</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def parse(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-7638" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7638"> <div class="line-num1"></div> <div class="line-num2">83</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> validate_content!(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-7649" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7649"> <div class="line-num1"></div> <div class="line-num2">84</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7660" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7660"> <div class="line-num1"></div> <div class="line-num2">85</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitles = []</span> </div> </td> </tr><tr> <td id="d2h-386494-7671" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7671"> <div class="line-num1"></div> <div class="line-num2">86</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_block = { text: [] }</span> </div> </td> </tr><tr> <td id="d2h-386494-7682" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7682"> <div class="line-num1"></div> <div class="line-num2">87</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7693" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7693"> <div class="line-num1"></div> <div class="line-num2">88</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> content.split("\n").each do |line|</span> </div> </td> </tr><tr> <td id="d2h-386494-7704" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7704"> <div class="line-num1"></div> <div class="line-num2">89</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> line = line.strip</span> </div> </td> </tr><tr> <td id="d2h-386494-7715" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7715"> <div class="line-num1"></div> <div class="line-num2">90</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7726" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7726"> <div class="line-num1"></div> <div class="line-num2">91</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if line.empty?</span> </div> </td> </tr><tr> <td id="d2h-386494-7737" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7737"> <div class="line-num1"></div> <div class="line-num2">92</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> process_block(current_block, subtitles) if current_block[:index]</span> </div> </td> </tr><tr> <td id="d2h-386494-7748" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7748"> <div class="line-num1"></div> <div class="line-num2">93</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_block = { text: [] }</span> </div> </td> </tr><tr> <td id="d2h-386494-7759" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7759"> <div class="line-num1"></div> <div class="line-num2">94</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> next</span> </div> </td> </tr><tr> <td id="d2h-386494-7770" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7770"> <div class="line-num1"></div> <div class="line-num2">95</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7781" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7781"> <div class="line-num1"></div> <div class="line-num2">96</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7792" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7792"> <div class="line-num1"></div> <div class="line-num2">97</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> if current_block[:index].nil?</span> </div> </td> </tr><tr> <td id="d2h-386494-7803" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7803"> <div class="line-num1"></div> <div class="line-num2">98</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_block[:index] = line.to_i</span> </div> </td> </tr><tr> <td id="d2h-386494-7814" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7814"> <div class="line-num1"></div> <div class="line-num2">99</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> elsif current_block[:timestamp].nil? && line.include?(' --> ')</span> </div> </td> </tr><tr> <td id="d2h-386494-7825" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7825"> <div class="line-num1"></div> <div class="line-num2">100</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> start_time, end_time = line.split(' --> ')</span> </div> </td> </tr><tr> <td id="d2h-386494-7836" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7836"> <div class="line-num1"></div> <div class="line-num2">101</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_block[:timestamp] = { start: start_time, end: end_time }</span> </div> </td> </tr><tr> <td id="d2h-386494-7847" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7847"> <div class="line-num1"></div> <div class="line-num2">102</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> else</span> </div> </td> </tr><tr> <td id="d2h-386494-7858" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7858"> <div class="line-num1"></div> <div class="line-num2">103</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_block[:text] << line</span> </div> </td> </tr><tr> <td id="d2h-386494-7869" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7869"> <div class="line-num1"></div> <div class="line-num2">104</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7880" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7880"> <div class="line-num1"></div> <div class="line-num2">105</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7891" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7891"> <div class="line-num1"></div> <div class="line-num2">106</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7902" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7902"> <div class="line-num1"></div> <div class="line-num2">107</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Process the last block if it exists</span> </div> </td> </tr><tr> <td id="d2h-386494-7913" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7913"> <div class="line-num1"></div> <div class="line-num2">108</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> process_block(current_block, subtitles) if current_block[:index]</span> </div> </td> </tr><tr> <td id="d2h-386494-7924" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7924"> <div class="line-num1"></div> <div class="line-num2">109</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7935" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7935"> <div class="line-num1"></div> <div class="line-num2">110</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitles</span> </div> </td> </tr><tr> <td id="d2h-386494-7946" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7946"> <div class="line-num1"></div> <div class="line-num2">111</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-7957" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7957"> <div class="line-num1"></div> <div class="line-num2">112</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7968" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7968"> <div class="line-num1"></div> <div class="line-num2">113</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-7979" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7979"> <div class="line-num1"></div> <div class="line-num2">114</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-7990" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-7990"> <div class="line-num1"></div> <div class="line-num2">115</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def validate_content!(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-8001" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8001"> <div class="line-num1"></div> <div class="line-num2">116</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'Content cannot be nil' if content.nil?</span> </div> </td> </tr><tr> <td id="d2h-386494-8012" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8012"> <div class="line-num1"></div> <div class="line-num2">117</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'Content cannot be empty' if content.strip.empty?</span> </div> </td> </tr><tr> <td id="d2h-386494-8023" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8023"> <div class="line-num1"></div> <div class="line-num2">118</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8034" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8034"> <div class="line-num1"></div> <div class="line-num2">119</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Basic structure validation - should have numbers and timestamps</span> </div> </td> </tr><tr> <td id="d2h-386494-8045" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8045"> <div class="line-num1"></div> <div class="line-num2">120</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> return if content.match?(/\d+\s*\n\d{2}:\d{2}:\d{2},\d{3}\s*-->\s*\d{2}:\d{2}:\d{2},\d{3}/)</span> </div> </td> </tr><tr> <td id="d2h-386494-8056" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8056"> <div class="line-num1"></div> <div class="line-num2">121</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8067" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8067"> <div class="line-num1"></div> <div class="line-num2">122</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> raise ArgumentError, 'Invalid SRT format: missing required timestamp format'</span> </div> </td> </tr><tr> <td id="d2h-386494-8078" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8078"> <div class="line-num1"></div> <div class="line-num2">123</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8089" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8089"> <div class="line-num1"></div> <div class="line-num2">124</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8100" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8100"> <div class="line-num1"></div> <div class="line-num2">125</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def process_block(block, subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-8111" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8111"> <div class="line-num1"></div> <div class="line-num2">126</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> return unless block[:index] && block[:timestamp] && !block[:text].empty?</span> </div> </td> </tr><tr> <td id="d2h-386494-8122" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8122"> <div class="line-num1"></div> <div class="line-num2">127</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8133" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8133"> <div class="line-num1"></div> <div class="line-num2">128</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitles << Subtitle.new(</span> </div> </td> </tr><tr> <td id="d2h-386494-8144" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8144"> <div class="line-num1"></div> <div class="line-num2">129</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> index: block[:index],</span> </div> </td> </tr><tr> <td id="d2h-386494-8155" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8155"> <div class="line-num1"></div> <div class="line-num2">130</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> start_time: block[:timestamp][:start],</span> </div> </td> </tr><tr> <td id="d2h-386494-8166" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8166"> <div class="line-num1"></div> <div class="line-num2">131</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end_time: block[:timestamp][:end],</span> </div> </td> </tr><tr> <td id="d2h-386494-8177" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8177"> <div class="line-num1"></div> <div class="line-num2">132</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> text: block[:text].join("\n")</span> </div> </td> </tr><tr> <td id="d2h-386494-8188" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8188"> <div class="line-num1"></div> <div class="line-num2">133</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> )</span> </div> </td> </tr><tr> <td id="d2h-386494-8199" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8199"> <div class="line-num1"></div> <div class="line-num2">134</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8210" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8210"> <div class="line-num1"></div> <div class="line-num2">135</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8221" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8221"> <div class="line-num1"></div> <div class="line-num2">136</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8232" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8232"> <div class="line-num1"></div> <div class="line-num2">137</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Merges multiple subtitle arrays while maintaining timing and adding buffers</span> </div> </td> </tr><tr> <td id="d2h-386494-8243" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8243"> <div class="line-num1"></div> <div class="line-num2">138</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class SRTMerger</span> </div> </td> </tr><tr> <td id="d2h-386494-8254" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8254"> <div class="line-num1"></div> <div class="line-num2">139</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(buffer_ms: 100)</span> </div> </td> </tr><tr> <td id="d2h-386494-8265" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8265"> <div class="line-num1"></div> <div class="line-num2">140</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @buffer_ms = buffer_ms.to_f</span> </div> </td> </tr><tr> <td id="d2h-386494-8276" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8276"> <div class="line-num1"></div> <div class="line-num2">141</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8287" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8287"> <div class="line-num1"></div> <div class="line-num2">142</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8298" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8298"> <div class="line-num1"></div> <div class="line-num2">143</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def merge(subtitle_arrays)</span> </div> </td> </tr><tr> <td id="d2h-386494-8309" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8309"> <div class="line-num1"></div> <div class="line-num2">144</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> return [] if subtitle_arrays.empty?</span> </div> </td> </tr><tr> <td id="d2h-386494-8320" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8320"> <div class="line-num1"></div> <div class="line-num2">145</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8331" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8331"> <div class="line-num1"></div> <div class="line-num2">146</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merged = []</span> </div> </td> </tr><tr> <td id="d2h-386494-8342" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8342"> <div class="line-num1"></div> <div class="line-num2">147</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_end_time = 0.0</span> </div> </td> </tr><tr> <td id="d2h-386494-8353" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8353"> <div class="line-num1"></div> <div class="line-num2">148</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8364" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8364"> <div class="line-num1"></div> <div class="line-num2">149</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitle_arrays.each do |subtitles|</span> </div> </td> </tr><tr> <td id="d2h-386494-8375" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8375"> <div class="line-num1"></div> <div class="line-num2">150</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> next if subtitles.empty?</span> </div> </td> </tr><tr> <td id="d2h-386494-8386" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8386"> <div class="line-num1"></div> <div class="line-num2">151</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8397" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8397"> <div class="line-num1"></div> <div class="line-num2">152</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Calculate offset needed for this batch of subtitles</span> </div> </td> </tr><tr> <td id="d2h-386494-8408" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8408"> <div class="line-num1"></div> <div class="line-num2">153</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> first_subtitle = subtitles.first</span> </div> </td> </tr><tr> <td id="d2h-386494-8419" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8419"> <div class="line-num1"></div> <div class="line-num2">154</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> offset_seconds = calculate_offset(current_end_time, first_subtitle.start_time)</span> </div> </td> </tr><tr> <td id="d2h-386494-8430" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8430"> <div class="line-num1"></div> <div class="line-num2">155</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8441" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8441"> <div class="line-num1"></div> <div class="line-num2">156</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Add adjusted subtitles to merged array</span> </div> </td> </tr><tr> <td id="d2h-386494-8452" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8452"> <div class="line-num1"></div> <div class="line-num2">157</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitles.each do |subtitle|</span> </div> </td> </tr><tr> <td id="d2h-386494-8463" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8463"> <div class="line-num1"></div> <div class="line-num2">158</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> adjusted_subtitle = adjust_subtitle_timing(subtitle, offset_seconds)</span> </div> </td> </tr><tr> <td id="d2h-386494-8474" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8474"> <div class="line-num1"></div> <div class="line-num2">159</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merged << adjusted_subtitle</span> </div> </td> </tr><tr> <td id="d2h-386494-8485" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8485"> <div class="line-num1"></div> <div class="line-num2">160</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8496" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8496"> <div class="line-num1"></div> <div class="line-num2">161</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8507" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8507"> <div class="line-num1"></div> <div class="line-num2">162</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Update current_end_time for next batch</span> </div> </td> </tr><tr> <td id="d2h-386494-8518" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8518"> <div class="line-num1"></div> <div class="line-num2">163</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> current_end_time = merged.last.end_time</span> </div> </td> </tr><tr> <td id="d2h-386494-8529" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8529"> <div class="line-num1"></div> <div class="line-num2">164</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8540" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8540"> <div class="line-num1"></div> <div class="line-num2">165</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8551" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8551"> <div class="line-num1"></div> <div class="line-num2">166</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Renumber subtitles sequentially</span> </div> </td> </tr><tr> <td id="d2h-386494-8562" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8562"> <div class="line-num1"></div> <div class="line-num2">167</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merged.each_with_index do |subtitle, index|</span> </div> </td> </tr><tr> <td id="d2h-386494-8573" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8573"> <div class="line-num1"></div> <div class="line-num2">168</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitle.instance_variable_set(:@index, index + 1)</span> </div> </td> </tr><tr> <td id="d2h-386494-8584" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8584"> <div class="line-num1"></div> <div class="line-num2">169</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8595" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8595"> <div class="line-num1"></div> <div class="line-num2">170</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8606" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8606"> <div class="line-num1"></div> <div class="line-num2">171</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merged</span> </div> </td> </tr><tr> <td id="d2h-386494-8617" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8617"> <div class="line-num1"></div> <div class="line-num2">172</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8628" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8628"> <div class="line-num1"></div> <div class="line-num2">173</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8639" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8639"> <div class="line-num1"></div> <div class="line-num2">174</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-8650" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8650"> <div class="line-num1"></div> <div class="line-num2">175</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8661" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8661"> <div class="line-num1"></div> <div class="line-num2">176</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def calculate_offset(current_end_time, next_start_time)</span> </div> </td> </tr><tr> <td id="d2h-386494-8672" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8672"> <div class="line-num1"></div> <div class="line-num2">177</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> return 0.0 if current_end_time.zero?</span> </div> </td> </tr><tr> <td id="d2h-386494-8683" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8683"> <div class="line-num1"></div> <div class="line-num2">178</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8694" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8694"> <div class="line-num1"></div> <div class="line-num2">179</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> buffer_seconds = @buffer_ms / 1000.0</span> </div> </td> </tr><tr> <td id="d2h-386494-8705" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8705"> <div class="line-num1"></div> <div class="line-num2">180</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> needed_offset = current_end_time + buffer_seconds - next_start_time</span> </div> </td> </tr><tr> <td id="d2h-386494-8716" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8716"> <div class="line-num1"></div> <div class="line-num2">181</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> [needed_offset, 0].max</span> </div> </td> </tr><tr> <td id="d2h-386494-8727" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8727"> <div class="line-num1"></div> <div class="line-num2">182</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8738" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8738"> <div class="line-num1"></div> <div class="line-num2">183</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8749" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8749"> <div class="line-num1"></div> <div class="line-num2">184</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def adjust_subtitle_timing(subtitle, offset_seconds)</span> </div> </td> </tr><tr> <td id="d2h-386494-8760" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8760"> <div class="line-num1"></div> <div class="line-num2">185</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Create new Subtitle instance with adjusted timing</span> </div> </td> </tr><tr> <td id="d2h-386494-8771" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8771"> <div class="line-num1"></div> <div class="line-num2">186</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> SRTParser::Subtitle.new(</span> </div> </td> </tr><tr> <td id="d2h-386494-8782" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8782"> <div class="line-num1"></div> <div class="line-num2">187</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> index: subtitle.index,</span> </div> </td> </tr><tr> <td id="d2h-386494-8793" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8793"> <div class="line-num1"></div> <div class="line-num2">188</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> start_time: format_time(subtitle.start_time + offset_seconds),</span> </div> </td> </tr><tr> <td id="d2h-386494-8804" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8804"> <div class="line-num1"></div> <div class="line-num2">189</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end_time: format_time(subtitle.end_time + offset_seconds),</span> </div> </td> </tr><tr> <td id="d2h-386494-8815" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8815"> <div class="line-num1"></div> <div class="line-num2">190</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> text: subtitle.text</span> </div> </td> </tr><tr> <td id="d2h-386494-8826" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8826"> <div class="line-num1"></div> <div class="line-num2">191</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> )</span> </div> </td> </tr><tr> <td id="d2h-386494-8837" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8837"> <div class="line-num1"></div> <div class="line-num2">192</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-8848" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8848"> <div class="line-num1"></div> <div class="line-num2">193</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8859" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8859"> <div class="line-num1"></div> <div class="line-num2">194</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def format_time(seconds)</span> </div> </td> </tr><tr> <td id="d2h-386494-8870" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8870"> <div class="line-num1"></div> <div class="line-num2">195</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Convert seconds back to SRT timestamp format (00:00:00,000)</span> </div> </td> </tr><tr> <td id="d2h-386494-8881" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8881"> <div class="line-num1"></div> <div class="line-num2">196</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> hours = (seconds / 3600).floor</span> </div> </td> </tr><tr> <td id="d2h-386494-8892" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8892"> <div class="line-num1"></div> <div class="line-num2">197</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> minutes = ((seconds % 3600) / 60).floor</span> </div> </td> </tr><tr> <td id="d2h-386494-8903" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8903"> <div class="line-num1"></div> <div class="line-num2">198</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds_remaining = seconds % 60</span> </div> </td> </tr><tr> <td id="d2h-386494-8914" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8914"> <div class="line-num1"></div> <div class="line-num2">199</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> milliseconds = ((seconds_remaining % 1) * 1000).round</span> </div> </td> </tr><tr> <td id="d2h-386494-8925" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8925"> <div class="line-num1"></div> <div class="line-num2">200</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-8936" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8936"> <div class="line-num1"></div> <div class="line-num2">201</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> format(</span> </div> </td> </tr><tr> <td id="d2h-386494-8947" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8947"> <div class="line-num1"></div> <div class="line-num2">202</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> '%<hours>02d:%<minutes>02d:%<seconds>02d,%<milliseconds>03d',</span> </div> </td> </tr><tr> <td id="d2h-386494-8958" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8958"> <div class="line-num1"></div> <div class="line-num2">203</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> hours: hours,</span> </div> </td> </tr><tr> <td id="d2h-386494-8969" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8969"> <div class="line-num1"></div> <div class="line-num2">204</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> minutes: minutes,</span> </div> </td> </tr><tr> <td id="d2h-386494-8980" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8980"> <div class="line-num1"></div> <div class="line-num2">205</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds: seconds_remaining.floor,</span> </div> </td> </tr><tr> <td id="d2h-386494-8991" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-8991"> <div class="line-num1"></div> <div class="line-num2">206</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> milliseconds: milliseconds</span> </div> </td> </tr><tr> <td id="d2h-386494-9002" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9002"> <div class="line-num1"></div> <div class="line-num2">207</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> )</span> </div> </td> </tr><tr> <td id="d2h-386494-9013" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9013"> <div class="line-num1"></div> <div class="line-num2">208</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9024" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9024"> <div class="line-num1"></div> <div class="line-num2">209</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9035" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9035"> <div class="line-num1"></div> <div class="line-num2">210</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9046" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9046"> <div class="line-num1"></div> <div class="line-num2">211</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Converts subtitle objects back to SRT format and writes to disk</span> </div> </td> </tr><tr> <td id="d2h-386494-9057" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9057"> <div class="line-num1"></div> <div class="line-num2">212</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class SRTWriter</span> </div> </td> </tr><tr> <td id="d2h-386494-9068" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9068"> <div class="line-num1"></div> <div class="line-num2">213</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(output_file)</span> </div> </td> </tr><tr> <td id="d2h-386494-9079" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9079"> <div class="line-num1"></div> <div class="line-num2">214</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @output_file = output_file</span> </div> </td> </tr><tr> <td id="d2h-386494-9090" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9090"> <div class="line-num1"></div> <div class="line-num2">215</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9101" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9101"> <div class="line-num1"></div> <div class="line-num2">216</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9112" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9112"> <div class="line-num1"></div> <div class="line-num2">217</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def write(subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-9123" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9123"> <div class="line-num1"></div> <div class="line-num2">218</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> content = format_subtitles(subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-9134" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9134"> <div class="line-num1"></div> <div class="line-num2">219</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> File.write(@output_file, content, encoding: 'UTF-8')</span> </div> </td> </tr><tr> <td id="d2h-386494-9145" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9145"> <div class="line-num1"></div> <div class="line-num2">220</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9156" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9156"> <div class="line-num1"></div> <div class="line-num2">221</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9167" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9167"> <div class="line-num1"></div> <div class="line-num2">222</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-9178" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9178"> <div class="line-num1"></div> <div class="line-num2">223</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9189" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9189"> <div class="line-num1"></div> <div class="line-num2">224</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def format_subtitles(subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-9200" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9200"> <div class="line-num1"></div> <div class="line-num2">225</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitles.each_with_index.map do |subtitle, index|</span> </div> </td> </tr><tr> <td id="d2h-386494-9211" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9211"> <div class="line-num1"></div> <div class="line-num2">226</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> [</span> </div> </td> </tr><tr> <td id="d2h-386494-9222" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9222"> <div class="line-num1"></div> <div class="line-num2">227</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> index + 1, # Force sequential numbering</span> </div> </td> </tr><tr> <td id="d2h-386494-9233" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9233"> <div class="line-num1"></div> <div class="line-num2">228</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> format_timestamp_line(subtitle),</span> </div> </td> </tr><tr> <td id="d2h-386494-9244" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9244"> <div class="line-num1"></div> <div class="line-num2">229</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitle.text,</span> </div> </td> </tr><tr> <td id="d2h-386494-9255" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9255"> <div class="line-num1"></div> <div class="line-num2">230</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> '' # Empty line between subtitle blocks</span> </div> </td> </tr><tr> <td id="d2h-386494-9266" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9266"> <div class="line-num1"></div> <div class="line-num2">231</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> ].join("\n")</span> </div> </td> </tr><tr> <td id="d2h-386494-9277" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9277"> <div class="line-num1"></div> <div class="line-num2">232</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end.join("\n")</span> </div> </td> </tr><tr> <td id="d2h-386494-9288" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9288"> <div class="line-num1"></div> <div class="line-num2">233</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9299" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9299"> <div class="line-num1"></div> <div class="line-num2">234</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9310" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9310"> <div class="line-num1"></div> <div class="line-num2">235</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def format_timestamp_line(subtitle)</span> </div> </td> </tr><tr> <td id="d2h-386494-9321" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9321"> <div class="line-num1"></div> <div class="line-num2">236</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> "#{format_timestamp(subtitle.start_time)} --> #{format_timestamp(subtitle.end_time)}"</span> </div> </td> </tr><tr> <td id="d2h-386494-9332" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9332"> <div class="line-num1"></div> <div class="line-num2">237</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9343" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9343"> <div class="line-num1"></div> <div class="line-num2">238</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9354" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9354"> <div class="line-num1"></div> <div class="line-num2">239</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def format_timestamp(seconds)</span> </div> </td> </tr><tr> <td id="d2h-386494-9365" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9365"> <div class="line-num1"></div> <div class="line-num2">240</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> hours = (seconds / 3600).floor</span> </div> </td> </tr><tr> <td id="d2h-386494-9376" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9376"> <div class="line-num1"></div> <div class="line-num2">241</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> minutes = ((seconds % 3600) / 60).floor</span> </div> </td> </tr><tr> <td id="d2h-386494-9387" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9387"> <div class="line-num1"></div> <div class="line-num2">242</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds_remaining = seconds % 60</span> </div> </td> </tr><tr> <td id="d2h-386494-9398" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9398"> <div class="line-num1"></div> <div class="line-num2">243</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> milliseconds = ((seconds_remaining % 1) * 1000).round</span> </div> </td> </tr><tr> <td id="d2h-386494-9409" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9409"> <div class="line-num1"></div> <div class="line-num2">244</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9420" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9420"> <div class="line-num1"></div> <div class="line-num2">245</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> format(</span> </div> </td> </tr><tr> <td id="d2h-386494-9431" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9431"> <div class="line-num1"></div> <div class="line-num2">246</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> '%<hours>02d:%<minutes>02d:%<seconds>02d,%<milliseconds>03d',</span> </div> </td> </tr><tr> <td id="d2h-386494-9442" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9442"> <div class="line-num1"></div> <div class="line-num2">247</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> hours: hours,</span> </div> </td> </tr><tr> <td id="d2h-386494-9453" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9453"> <div class="line-num1"></div> <div class="line-num2">248</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> minutes: minutes,</span> </div> </td> </tr><tr> <td id="d2h-386494-9464" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9464"> <div class="line-num1"></div> <div class="line-num2">249</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> seconds: seconds_remaining.floor,</span> </div> </td> </tr><tr> <td id="d2h-386494-9475" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9475"> <div class="line-num1"></div> <div class="line-num2">250</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> milliseconds: milliseconds</span> </div> </td> </tr><tr> <td id="d2h-386494-9486" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9486"> <div class="line-num1"></div> <div class="line-num2">251</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> )</span> </div> </td> </tr><tr> <td id="d2h-386494-9497" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9497"> <div class="line-num1"></div> <div class="line-num2">252</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9508" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9508"> <div class="line-num1"></div> <div class="line-num2">253</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9519" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9519"> <div class="line-num1"></div> <div class="line-num2">254</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9530" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9530"> <div class="line-num1"></div> <div class="line-num2">255</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> # Simple logger for debugging</span> </div> </td> </tr><tr> <td id="d2h-386494-9541" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9541"> <div class="line-num1"></div> <div class="line-num2">256</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> class Logger</span> </div> </td> </tr><tr> <td id="d2h-386494-9552" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9552"> <div class="line-num1"></div> <div class="line-num2">257</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> LEVELS = { none: 0, info: 1, detail: 2 }.freeze</span> </div> </td> </tr><tr> <td id="d2h-386494-9563" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9563"> <div class="line-num1"></div> <div class="line-num2">258</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9574" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9574"> <div class="line-num1"></div> <div class="line-num2">259</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(level = :info)</span> </div> </td> </tr><tr> <td id="d2h-386494-9585" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9585"> <div class="line-num1"></div> <div class="line-num2">260</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @level = LEVELS[level] || LEVELS[:info]</span> </div> </td> </tr><tr> <td id="d2h-386494-9596" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9596"> <div class="line-num1"></div> <div class="line-num2">261</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9607" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9607"> <div class="line-num1"></div> <div class="line-num2">262</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9618" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9618"> <div class="line-num1"></div> <div class="line-num2">263</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def log(level, message)</span> </div> </td> </tr><tr> <td id="d2h-386494-9629" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9629"> <div class="line-num1"></div> <div class="line-num2">264</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> puts message if LEVELS[level] <= @level</span> </div> </td> </tr><tr> <td id="d2h-386494-9640" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9640"> <div class="line-num1"></div> <div class="line-num2">265</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9651" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9651"> <div class="line-num1"></div> <div class="line-num2">266</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9662" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9662"> <div class="line-num1"></div> <div class="line-num2">267</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9673" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9673"> <div class="line-num1"></div> <div class="line-num2">268</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def initialize(folder: './', files: '*.srt', sort: 'inferred', buffer: 100, output: 'merged.srt', log_level: :info)</span> </div> </td> </tr><tr> <td id="d2h-386494-9684" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9684"> <div class="line-num1"></div> <div class="line-num2">269</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @folder = folder</span> </div> </td> </tr><tr> <td id="d2h-386494-9695" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9695"> <div class="line-num1"></div> <div class="line-num2">270</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @files = files</span> </div> </td> </tr><tr> <td id="d2h-386494-9706" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9706"> <div class="line-num1"></div> <div class="line-num2">271</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @sort = sort</span> </div> </td> </tr><tr> <td id="d2h-386494-9717" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9717"> <div class="line-num1"></div> <div class="line-num2">272</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @buffer = buffer</span> </div> </td> </tr><tr> <td id="d2h-386494-9728" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9728"> <div class="line-num1"></div> <div class="line-num2">273</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @output = output</span> </div> </td> </tr><tr> <td id="d2h-386494-9739" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9739"> <div class="line-num1"></div> <div class="line-num2">274</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger = Logger.new(log_level)</span> </div> </td> </tr><tr> <td id="d2h-386494-9750" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9750"> <div class="line-num1"></div> <div class="line-num2">275</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9761" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9761"> <div class="line-num1"></div> <div class="line-num2">276</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9772" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9772"> <div class="line-num1"></div> <div class="line-num2">277</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def join</span> </div> </td> </tr><tr> <td id="d2h-386494-9783" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9783"> <div class="line-num1"></div> <div class="line-num2">278</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger.log(:info, "Starting join operation in folder: #{@folder} with files: #{@files}")</span> </div> </td> </tr><tr> <td id="d2h-386494-9794" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9794"> <div class="line-num1"></div> <div class="line-num2">279</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> resolved_files = resolve_files</span> </div> </td> </tr><tr> <td id="d2h-386494-9805" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9805"> <div class="line-num1"></div> <div class="line-num2">280</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger.log(:info, "Resolved files: #{resolved_files.join(', ')}")</span> </div> </td> </tr><tr> <td id="d2h-386494-9816" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9816"> <div class="line-num1"></div> <div class="line-num2">281</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9827" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9827"> <div class="line-num1"></div> <div class="line-num2">282</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> subtitle_groups = parse_files(resolved_files)</span> </div> </td> </tr><tr> <td id="d2h-386494-9838" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9838"> <div class="line-num1"></div> <div class="line-num2">283</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger.log(:detail, "Parsed subtitles: #{subtitle_groups.map(&:size)} from files.")</span> </div> </td> </tr><tr> <td id="d2h-386494-9849" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9849"> <div class="line-num1"></div> <div class="line-num2">284</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9860" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9860"> <div class="line-num1"></div> <div class="line-num2">285</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merged_subtitles = merge_subtitles(subtitle_groups)</span> </div> </td> </tr><tr> <td id="d2h-386494-9871" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9871"> <div class="line-num1"></div> <div class="line-num2">286</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger.log(:info, "Merged #{subtitle_groups.flatten.size} subtitles into #{merged_subtitles.size} blocks.")</span> </div> </td> </tr><tr> <td id="d2h-386494-9882" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9882"> <div class="line-num1"></div> <div class="line-num2">287</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9893" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9893"> <div class="line-num1"></div> <div class="line-num2">288</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> write_output(merged_subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-9904" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9904"> <div class="line-num1"></div> <div class="line-num2">289</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> @logger.log(:info, "Output written to #{@output}")</span> </div> </td> </tr><tr> <td id="d2h-386494-9915" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9915"> <div class="line-num1"></div> <div class="line-num2">290</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-9926" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9926"> <div class="line-num1"></div> <div class="line-num2">291</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9937" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9937"> <div class="line-num1"></div> <div class="line-num2">292</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> private</span> </div> </td> </tr><tr> <td id="d2h-386494-9948" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9948"> <div class="line-num1"></div> <div class="line-num2">293</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-9959" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9959"> <div class="line-num1"></div> <div class="line-num2">294</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def resolve_files</span> </div> </td> </tr><tr> <td id="d2h-386494-9970" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9970"> <div class="line-num1"></div> <div class="line-num2">295</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> resolver = FileResolver.new(</span> </div> </td> </tr><tr> <td id="d2h-386494-9981" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9981"> <div class="line-num1"></div> <div class="line-num2">296</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> folder: @folder,</span> </div> </td> </tr><tr> <td id="d2h-386494-9992" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-9992"> <div class="line-num1"></div> <div class="line-num2">297</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> files: @files,</span> </div> </td> </tr><tr> <td id="d2h-386494-10003" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10003"> <div class="line-num1"></div> <div class="line-num2">298</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> sort: @sort</span> </div> </td> </tr><tr> <td id="d2h-386494-10014" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10014"> <div class="line-num1"></div> <div class="line-num2">299</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> )</span> </div> </td> </tr><tr> <td id="d2h-386494-10025" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10025"> <div class="line-num1"></div> <div class="line-num2">300</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> resolver.process</span> </div> </td> </tr><tr> <td id="d2h-386494-10036" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10036"> <div class="line-num1"></div> <div class="line-num2">301</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10047" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10047"> <div class="line-num1"></div> <div class="line-num2">302</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-10058" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10058"> <div class="line-num1"></div> <div class="line-num2">303</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def parse_files(files)</span> </div> </td> </tr><tr> <td id="d2h-386494-10069" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10069"> <div class="line-num1"></div> <div class="line-num2">304</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> files.map do |file|</span> </div> </td> </tr><tr> <td id="d2h-386494-10080" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10080"> <div class="line-num1"></div> <div class="line-num2">305</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> content = File.read(file, encoding: 'UTF-8')</span> </div> </td> </tr><tr> <td id="d2h-386494-10091" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10091"> <div class="line-num1"></div> <div class="line-num2">306</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> parse_srt_content(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-10102" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10102"> <div class="line-num1"></div> <div class="line-num2">307</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10113" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10113"> <div class="line-num1"></div> <div class="line-num2">308</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10124" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10124"> <div class="line-num1"></div> <div class="line-num2">309</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-10135" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10135"> <div class="line-num1"></div> <div class="line-num2">310</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def parse_srt_content(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-10146" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10146"> <div class="line-num1"></div> <div class="line-num2">311</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> parser = SRTParser.new</span> </div> </td> </tr><tr> <td id="d2h-386494-10157" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10157"> <div class="line-num1"></div> <div class="line-num2">312</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> parser.parse(content)</span> </div> </td> </tr><tr> <td id="d2h-386494-10168" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10168"> <div class="line-num1"></div> <div class="line-num2">313</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10179" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10179"> <div class="line-num1"></div> <div class="line-num2">314</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-10190" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10190"> <div class="line-num1"></div> <div class="line-num2">315</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def merge_subtitles(subtitle_groups)</span> </div> </td> </tr><tr> <td id="d2h-386494-10201" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10201"> <div class="line-num1"></div> <div class="line-num2">316</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merger = SRTMerger.new(buffer_ms: @buffer)</span> </div> </td> </tr><tr> <td id="d2h-386494-10212" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10212"> <div class="line-num1"></div> <div class="line-num2">317</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> merger.merge(subtitle_groups)</span> </div> </td> </tr><tr> <td id="d2h-386494-10223" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10223"> <div class="line-num1"></div> <div class="line-num2">318</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10234" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10234"> <div class="line-num1"></div> <div class="line-num2">319</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-386494-10245" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10245"> <div class="line-num1"></div> <div class="line-num2">320</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> def write_output(subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-10256" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10256"> <div class="line-num1"></div> <div class="line-num2">321</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> writer = SRTWriter.new(@output)</span> </div> </td> </tr><tr> <td id="d2h-386494-10267" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10267"> <div class="line-num1"></div> <div class="line-num2">322</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> writer.write(subtitles)</span> </div> </td> </tr><tr> <td id="d2h-386494-10278" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10278"> <div class="line-num1"></div> <div class="line-num2">323</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10289" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10289"> <div class="line-num1"></div> <div class="line-num2">324</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10300" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10300"> <div class="line-num1"></div> <div class="line-num2">325</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10311" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10311"> <div class="line-num1"></div> <div class="line-num2">326</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-386494-10322" class="d2h-code-linenumber d2h-ins"><a href="#d2h-386494-10322"> <div class="line-num1"></div> <div class="line-num2">327</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-928214" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-928214">data/lib/appydave/tools/version.rb</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -2,6 +2,6 @@</div> </td> </tr><tr> <td id="d2h-928214-10360" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-928214-10360"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-928214-10371" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-928214-10371"> <div class="line-num1">3</div> <div class="line-num2">3</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">module Appydave</span> </div> </td> </tr><tr> <td id="d2h-928214-10382" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-928214-10382"> <div class="line-num1">4</div> <div class="line-num2">4</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> module Tools</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">5</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> VERSION = '0.<del>11</del>.<del>11</del>'</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">5</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> VERSION = '0.<ins>12</ins>.<ins>0</ins>'</span> </div> </td> </tr><tr> <td id="d2h-928214-10415" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-928214-10415"> <div class="line-num1">6</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> end</span> </div> </td> </tr><tr> <td id="d2h-928214-10426" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-928214-10426"> <div class="line-num1">7</div> <div class="line-num2">7</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">end</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-355583" class="d2h-file-wrapper" data-lang="rb"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-355583">data/lib/appydave/tools.rb</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -44,18 +44,14 @@ require 'appydave/tools/configuration/configurable'</div> </td> </tr><tr> <td id="d2h-355583-10464" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10464"> <div class="line-num1">44</div> <div class="line-num2">44</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/configuration/config'</span> </div> </td> </tr><tr> <td id="d2h-355583-10475" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10475"> <div class="line-num1">45</div> <div class="line-num2">45</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/configuration/models/config_base'</span> </div> </td> </tr><tr> <td id="d2h-355583-10486" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10486"> <div class="line-num1">46</div> <div class="line-num2">46</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/configuration/models/settings_config'</span> </div> </td> </tr><tr> <td id="d2h-355583-10497" class="d2h-code-linenumber d2h-del"><a href="#d2h-355583-10497"> <div class="line-num1">47</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"># require 'appydave/tools/configuration/models/bank_reconciliation_config'</span> </div> </td> </tr><tr> <td id="d2h-355583-10508" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10508"> <div class="line-num1">48</div> <div class="line-num2">47</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/configuration/models/channels_config'</span> </div> </td> </tr><tr> <td id="d2h-355583-10519" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10519"> <div class="line-num1">49</div> <div class="line-num2">48</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/configuration/models/youtube_automation_config'</span> </div> </td> </tr><tr> <td id="d2h-355583-10530" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10530"> <div class="line-num1">50</div> <div class="line-num2">49</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/name_manager/project_name'</span> </div> </td> </tr><tr> <td id="d2h-355583-10541" class="d2h-code-linenumber d2h-del"><a href="#d2h-355583-10541"> <div class="line-num1">51</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"># require 'appydave/tools/bank_reconciliation/clean/clean_transactions'</span> </div> </td> </tr><tr> <td id="d2h-355583-10552" class="d2h-code-linenumber d2h-del"><a href="#d2h-355583-10552"> <div class="line-num1">52</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"># require 'appydave/tools/bank_reconciliation/clean/read_transactions'</span> </div> </td> </tr><tr> <td id="d2h-355583-10563" class="d2h-code-linenumber d2h-del"><a href="#d2h-355583-10563"> <div class="line-num1">53</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"># require 'appydave/tools/bank_reconciliation/clean/mapper'</span> </div> </td> </tr><tr> <td id="d2h-355583-10574" class="d2h-code-linenumber d2h-del"><a href="#d2h-355583-10574"> <div class="line-num1">54</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"># require 'appydave/tools/bank_reconciliation/models/transaction'</span> </div> </td> </tr><tr> <td id="d2h-355583-10585" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10585"> <div class="line-num1">55</div> <div class="line-num2">50</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-355583-10596" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10596"> <div class="line-num1">56</div> <div class="line-num2">51</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/prompt_tools/prompt_completion'</span> </div> </td> </tr><tr> <td id="d2h-355583-10607" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10607"> <div class="line-num1">57</div> <div class="line-num2">52</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-355583-10618" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10618"> <div class="line-num1">58</div> <div class="line-num2">53</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/subtitle_master/clean'</span> </div> </td> </tr><tr> <td id="d2h-355583-10629" class="d2h-code-linenumber d2h-ins"><a href="#d2h-355583-10629"> <div class="line-num1"></div> <div class="line-num2">54</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">require 'appydave/tools/subtitle_master/join'</span> </div> </td> </tr><tr> <td id="d2h-355583-10640" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10640"> <div class="line-num1">59</div> <div class="line-num2">55</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr><tr> <td id="d2h-355583-10651" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10651"> <div class="line-num1">60</div> <div class="line-num2">56</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">require 'appydave/tools/youtube_automation/gpt_agent'</span> </div> </td> </tr><tr> <td id="d2h-355583-10662" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-355583-10662"> <div class="line-num1">61</div> <div class="line-num2">57</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"><br></span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-264863" class="d2h-file-wrapper" data-lang="json"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-264863">data/package-lock.json</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,12 +1,12 @@</div> </td> </tr><tr> <td id="d2h-264863-10700" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10700"> <div class="line-num1">1</div> <div class="line-num2">1</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">{</span> </div> </td> </tr><tr> <td id="d2h-264863-10711" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10711"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "name": "appydave-tools",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">3</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> "version": "0.<del>11</del>.<del>11</del>",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> "version": "0.<ins>12</ins>.<ins>0</ins>",</span> </div> </td> </tr><tr> <td id="d2h-264863-10744" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10744"> <div class="line-num1">4</div> <div class="line-num2">4</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "lockfileVersion": 3,</span> </div> </td> </tr><tr> <td id="d2h-264863-10755" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10755"> <div class="line-num1">5</div> <div class="line-num2">5</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "requires": true,</span> </div> </td> </tr><tr> <td id="d2h-264863-10766" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10766"> <div class="line-num1">6</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "packages": {</span> </div> </td> </tr><tr> <td id="d2h-264863-10777" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10777"> <div class="line-num1">7</div> <div class="line-num2">7</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "": {</span> </div> </td> </tr><tr> <td id="d2h-264863-10788" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10788"> <div class="line-num1">8</div> <div class="line-num2">8</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "name": "appydave-tools",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">9</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> "version": "0.<del>11</del>.<del>11</del>",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">9</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> "version": "0.<ins>12</ins>.<ins>0</ins>",</span> </div> </td> </tr><tr> <td id="d2h-264863-10821" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10821"> <div class="line-num1">10</div> <div class="line-num2">10</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "devDependencies": {</span> </div> </td> </tr><tr> <td id="d2h-264863-10832" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10832"> <div class="line-num1">11</div> <div class="line-num2">11</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",</span> </div> </td> </tr><tr> <td id="d2h-264863-10843" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-264863-10843"> <div class="line-num1">12</div> <div class="line-num2">12</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "@semantic-release/changelog": "^6.0.3",</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-978859" class="d2h-file-wrapper" data-lang="json"> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-978859">data/package.json</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,6 +1,6 @@</div> </td> </tr><tr> <td id="d2h-978859-10881" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-978859-10881"> <div class="line-num1">1</div> <div class="line-num2">1</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">{</span> </div> </td> </tr><tr> <td id="d2h-978859-10892" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-978859-10892"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "name": "appydave-tools",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">3</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> "version": "0.<del>11</del>.<del>11</del>",</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">3</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> "version": "0.<ins>12</ins>.<ins>0</ins>",</span> </div> </td> </tr><tr> <td id="d2h-978859-10925" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-978859-10925"> <div class="line-num1">4</div> <div class="line-num2">4</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "description": "AppyDave YouTube Automation Tools",</span> </div> </td> </tr><tr> <td id="d2h-978859-10936" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-978859-10936"> <div class="line-num1">5</div> <div class="line-num2">5</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "scripts": {</span> </div> </td> </tr><tr> <td id="d2h-978859-10947" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-978859-10947"> <div class="line-num1">6</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> "release": "semantic-release"</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-004177" class="d2h-file-wrapper" data-lang=""> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-004177">metadata</a></span> <span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -1,14 +1,14 @@</div> </td> </tr><tr> <td id="d2h-004177-10985" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-10985"> <div class="line-num1">1</div> <div class="line-num2">1</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">--- !ruby/object:Gem::Specification</span> </div> </td> </tr><tr> <td id="d2h-004177-10996" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-10996"> <div class="line-num1">2</div> <div class="line-num2">2</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">name: appydave-tools</span> </div> </td> </tr><tr> <td id="d2h-004177-11007" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11007"> <div class="line-num1">3</div> <div class="line-num2">3</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">version: !ruby/object:Gem::Version</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">4</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn"> version: 0.<del>11</del>.<del>11</del></span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">4</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn"> version: 0.<ins>12</ins>.<ins>0</ins></span> </div> </td> </tr><tr> <td id="d2h-004177-11040" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11040"> <div class="line-num1">5</div> <div class="line-num2">5</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">platform: ruby</span> </div> </td> </tr><tr> <td id="d2h-004177-11051" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11051"> <div class="line-num1">6</div> <div class="line-num2">6</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">authors:</span> </div> </td> </tr><tr> <td id="d2h-004177-11062" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11062"> <div class="line-num1">7</div> <div class="line-num2">7</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- David Cruwys</span> </div> </td> </tr><tr> <td id="d2h-004177-11073" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11073"> <div class="line-num1">8</div> <div class="line-num2">8</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">autorequire: </span> </div> </td> </tr><tr> <td id="d2h-004177-11084" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11084"> <div class="line-num1">9</div> <div class="line-num2">9</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">bindir: exe</span> </div> </td> </tr><tr> <td id="d2h-004177-11095" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11095"> <div class="line-num1">10</div> <div class="line-num2">10</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">cert_chain: []</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-del d2h-change"> <div class="line-num1">11</div> <div class="line-num2"></div> </a></td> <td class="d2h-del d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn">date: 2024-<del>11</del>-<del>26</del> 00:00:00.000000000 Z</span> </div> </td> </tr><tr> <td class="d2h-code-linenumber d2h-ins d2h-change"> <div class="line-num1"></div> <div class="line-num2">11</div> </a></td> <td class="d2h-ins d2h-change"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">date: 2024-<ins>12</ins>-<ins>03</ins> 00:00:00.000000000 Z</span> </div> </td> </tr><tr> <td id="d2h-004177-11128" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11128"> <div class="line-num1">12</div> <div class="line-num2">12</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">dependencies:</span> </div> </td> </tr><tr> <td id="d2h-004177-11139" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11139"> <div class="line-num1">13</div> <div class="line-num2">13</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- !ruby/object:Gem::Dependency</span> </div> </td> </tr><tr> <td id="d2h-004177-11150" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11150"> <div class="line-num1">14</div> <div class="line-num2">14</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn"> name: activemodel</span> </div> </td> </tr> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -160,8 +160,10 @@ files:</div> </td> </tr><tr> <td id="d2h-004177-11167" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11167"> <div class="line-num1">160</div> <div class="line-num2">160</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/configuration.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11178" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11178"> <div class="line-num1">161</div> <div class="line-num2">161</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/console</span> </div> </td> </tr><tr> <td id="d2h-004177-11189" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11189"> <div class="line-num1">162</div> <div class="line-num2">162</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/gpt_context.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11200" class="d2h-code-linenumber d2h-ins"><a href="#d2h-004177-11200"> <div class="line-num1"></div> <div class="line-num2">163</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">- bin/move_images.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11211" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11211"> <div class="line-num1">163</div> <div class="line-num2">164</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/prompt_tools.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11222" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11222"> <div class="line-num1">164</div> <div class="line-num2">165</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/setup</span> </div> </td> </tr><tr> <td id="d2h-004177-11233" class="d2h-code-linenumber d2h-ins"><a href="#d2h-004177-11233"> <div class="line-num1"></div> <div class="line-num2">166</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">- bin/subtitle_master-old.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11244" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11244"> <div class="line-num1">165</div> <div class="line-num2">167</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/subtitle_master.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11255" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11255"> <div class="line-num1">166</div> <div class="line-num2">168</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/youtube_automation.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11266" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11266"> <div class="line-num1">167</div> <div class="line-num2">169</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- bin/youtube_manager.rb</span> </div> </td> </tr> <tr> <td class="d2h-code-linenumber d2h-info"></td> <td class="d2h-info"> <div class="d2h-code-line">@@ -193,9 +195,11 @@ files:</div> </td> </tr><tr> <td id="d2h-004177-11283" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11283"> <div class="line-num1">193</div> <div class="line-num2">195</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/name_manager/project_name.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11294" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11294"> <div class="line-num1">194</div> <div class="line-num2">196</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/prompt_tools/_doc.md</span> </div> </td> </tr><tr> <td id="d2h-004177-11305" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11305"> <div class="line-num1">195</div> <div class="line-num2">197</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/prompt_tools/prompt_completion.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11316" class="d2h-code-linenumber d2h-ins"><a href="#d2h-004177-11316"> <div class="line-num1"></div> <div class="line-num2">198</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/_doc-clean.md</span> </div> </td> </tr><tr> <td id="d2h-004177-11327" class="d2h-code-linenumber d2h-ins"><a href="#d2h-004177-11327"> <div class="line-num1"></div> <div class="line-num2">199</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/_doc-join.md</span> </div> </td> </tr><tr> <td id="d2h-004177-11338" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11338"> <div class="line-num1">196</div> <div class="line-num2">200</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/_doc-todo.md</span> </div> </td> </tr><tr> <td id="d2h-004177-11349" class="d2h-code-linenumber d2h-del"><a href="#d2h-004177-11349"> <div class="line-num1">197</div> <div class="line-num2"></div> </a></td> <td class="d2h-del"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">-</span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/_doc.md</span> </div> </td> </tr><tr> <td id="d2h-004177-11360" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11360"> <div class="line-num1">198</div> <div class="line-num2">201</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/clean.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11371" class="d2h-code-linenumber d2h-ins"><a href="#d2h-004177-11371"> <div class="line-num1"></div> <div class="line-num2">202</div> </a></td> <td class="d2h-ins"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix">+</span> <span class="d2h-code-line-ctn">- lib/appydave/tools/subtitle_master/join.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11382" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11382"> <div class="line-num1">199</div> <div class="line-num2">203</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/types/array_type.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11393" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11393"> <div class="line-num1">200</div> <div class="line-num2">204</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/types/base_model.rb</span> </div> </td> </tr><tr> <td id="d2h-004177-11404" class="d2h-code-linenumber d2h-cntx"><a href="#d2h-004177-11404"> <div class="line-num1">201</div> <div class="line-num2">205</div> </a></td> <td class="d2h-cntx"> <div class="d2h-code-line"> <span class="d2h-code-line-prefix"> </span> <span class="d2h-code-line-ctn">- lib/appydave/tools/types/hash_type.rb</span> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div id="d2h-668805" class="d2h-file-wrapper" data-lang=""> <div class="d2h-file-header"> <span class="d2h-file-name-wrapper"> <svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"> <path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path> </svg> <span class="d2h-file-name"><a href="#d2h-668805">/data/lib/appydave/tools/subtitle_master/{_doc.md → _doc-clean.md}</a></span> <span class="d2h-tag d2h-moved d2h-moved-tag">RENAMED</span></span> <label class="d2h-file-collapse"> <input class="d2h-file-collapse-input" type="checkbox" name="viewed" value="viewed"> Viewed </label> </div> <div class="d2h-file-diff"> <div class="d2h-code-wrapper"> <table class="d2h-diff-table"> <tbody class="d2h-diff-tbody"> <tr> <td class="d2h-info"> <div class="d2h-code-line"> File without changes </div> </td> </tr> </tbody> </table> </div> </div> </div> </div> </div> </div> </div> </div> <footer class='sticky-footer mt-3'> <div class='container text-center mb-3 copyright'> <a class='mr-4 text-gray-600' href='mailto:diffend@whitesourcesoftware.com'> Contact Us </a> <a class='mr-4 text-gray-600' href='https://www.whitesourcesoftware.com/terms-of-service/'> Terms of Service </a> <a class='mr-4 text-gray-600' href='https://www.whitesourcesoftware.com/privacy-policy/'> Privacy Policy </a> <a class='mr-4 text-gray-600' href='https://diffend.io/docs'> Docs </a> </div> <div class='container mt-4'> <div class='copyright text-center'> Copyright © 2025 Mend Software </div> </div> </footer> </div> </div> </div> </body> </html>