├── .gitignore ├── .gitmodules ├── .idea └── .idea.Ameko │ └── .idea │ ├── .gitignore │ ├── avalonia.xml │ ├── indexLayout.xml │ └── vcs.xml ├── Amebu ├── AVPlugins │ ├── BaseAVLoader.cs │ └── L-Smash │ │ └── LSAVLoader.cs ├── Amebu.cs ├── Amebu.csproj └── SubPlugins │ ├── AssLoader.cs │ └── BaseSubLoader.cs ├── Ameko.sln ├── Ameko ├── .gitignore ├── Ameko.csproj ├── App.axaml ├── App.axaml.cs ├── Assets │ ├── avalonia-logo.ico │ └── test.ass ├── Models │ ├── EventGridItem.cs │ └── EventGridItems.cs ├── Program.cs ├── ViewLocator.cs ├── ViewModels │ ├── EventGroupViewModel.cs │ ├── MainWindowViewModel.cs │ └── ViewModelBase.cs ├── Views │ ├── EventGrid.axaml │ ├── EventGrid.axaml.cs │ ├── EventTextArea.axaml │ ├── EventTextArea.axaml.cs │ ├── MainWindow.axaml │ ├── MainWindow.axaml.cs │ ├── MenuBar.axaml │ └── MenuBar.axaml.cs └── icons.axaml ├── LICENSE └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | obj/ 3 | /packages/ 4 | riderModule.iml 5 | /_ReSharper.Caches/ 6 | 7 | ### Csharp ### 8 | ## Ignore Visual Studio temporary files, build results, and 9 | ## files generated by popular Visual Studio add-ons. 10 | ## 11 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore 12 | 13 | # User-specific files 14 | *.rsuser 15 | *.suo 16 | *.user 17 | *.userosscache 18 | *.sln.docstates 19 | 20 | # User-specific files (MonoDevelop/Xamarin Studio) 21 | *.userprefs 22 | 23 | # Mono auto generated files 24 | mono_crash.* 25 | 26 | # Build results 27 | [Dd]ebug/ 28 | [Dd]ebugPublic/ 29 | [Rr]elease/ 30 | [Rr]eleases/ 31 | x64/ 32 | x86/ 33 | [Ww][Ii][Nn]32/ 34 | [Aa][Rr][Mm]/ 35 | [Aa][Rr][Mm]64/ 36 | bld/ 37 | [Bb]in/ 38 | [Oo]bj/ 39 | [Ll]og/ 40 | [Ll]ogs/ 41 | 42 | # Visual Studio 2015/2017 cache/options directory 43 | .vs/ 44 | # Uncomment if you have tasks that create the project's static files in wwwroot 45 | #wwwroot/ 46 | 47 | # Visual Studio 2017 auto generated files 48 | Generated\ Files/ 49 | 50 | # MSTest test Results 51 | [Tt]est[Rr]esult*/ 52 | [Bb]uild[Ll]og.* 53 | 54 | # NUnit 55 | *.VisualState.xml 56 | TestResult.xml 57 | nunit-*.xml 58 | 59 | # Build Results of an ATL Project 60 | [Dd]ebugPS/ 61 | [Rr]eleasePS/ 62 | dlldata.c 63 | 64 | # Benchmark Results 65 | BenchmarkDotNet.Artifacts/ 66 | 67 | # .NET Core 68 | project.lock.json 69 | project.fragment.lock.json 70 | artifacts/ 71 | 72 | # ASP.NET Scaffolding 73 | ScaffoldingReadMe.txt 74 | 75 | # StyleCop 76 | StyleCopReport.xml 77 | 78 | # Files built by Visual Studio 79 | *_i.c 80 | *_p.c 81 | *_h.h 82 | *.ilk 83 | *.meta 84 | *.obj 85 | *.iobj 86 | *.pch 87 | *.pdb 88 | *.ipdb 89 | *.pgc 90 | *.pgd 91 | *.rsp 92 | *.sbr 93 | *.tlb 94 | *.tli 95 | *.tlh 96 | *.tmp 97 | *.tmp_proj 98 | *_wpftmp.csproj 99 | *.log 100 | *.tlog 101 | *.vspscc 102 | *.vssscc 103 | .builds 104 | *.pidb 105 | *.svclog 106 | *.scc 107 | 108 | # Chutzpah Test files 109 | _Chutzpah* 110 | 111 | # Visual C++ cache files 112 | ipch/ 113 | *.aps 114 | *.ncb 115 | *.opendb 116 | *.opensdf 117 | *.sdf 118 | *.cachefile 119 | *.VC.db 120 | *.VC.VC.opendb 121 | 122 | # Visual Studio profiler 123 | *.psess 124 | *.vsp 125 | *.vspx 126 | *.sap 127 | 128 | # Visual Studio Trace Files 129 | *.e2e 130 | 131 | # TFS 2012 Local Workspace 132 | $tf/ 133 | 134 | # Guidance Automation Toolkit 135 | *.gpState 136 | 137 | # ReSharper is a .NET coding add-in 138 | _ReSharper*/ 139 | *.[Rr]e[Ss]harper 140 | *.DotSettings.user 141 | 142 | # TeamCity is a build add-in 143 | _TeamCity* 144 | 145 | # DotCover is a Code Coverage Tool 146 | *.dotCover 147 | 148 | # AxoCover is a Code Coverage Tool 149 | .axoCover/* 150 | !.axoCover/settings.json 151 | 152 | # Coverlet is a free, cross platform Code Coverage Tool 153 | coverage*.json 154 | coverage*.xml 155 | coverage*.info 156 | 157 | # Visual Studio code coverage results 158 | *.coverage 159 | *.coveragexml 160 | 161 | # NCrunch 162 | _NCrunch_* 163 | .*crunch*.local.xml 164 | nCrunchTemp_* 165 | 166 | # MightyMoose 167 | *.mm.* 168 | AutoTest.Net/ 169 | 170 | # Web workbench (sass) 171 | .sass-cache/ 172 | 173 | # Installshield output folder 174 | [Ee]xpress/ 175 | 176 | # DocProject is a documentation generator add-in 177 | DocProject/buildhelp/ 178 | DocProject/Help/*.HxT 179 | DocProject/Help/*.HxC 180 | DocProject/Help/*.hhc 181 | DocProject/Help/*.hhk 182 | DocProject/Help/*.hhp 183 | DocProject/Help/Html2 184 | DocProject/Help/html 185 | 186 | # Click-Once directory 187 | publish/ 188 | 189 | # Publish Web Output 190 | *.[Pp]ublish.xml 191 | *.azurePubxml 192 | # Note: Comment the next line if you want to checkin your web deploy settings, 193 | # but database connection strings (with potential passwords) will be unencrypted 194 | *.pubxml 195 | *.publishproj 196 | 197 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 198 | # checkin your Azure Web App publish settings, but sensitive information contained 199 | # in these scripts will be unencrypted 200 | PublishScripts/ 201 | 202 | # NuGet Packages 203 | *.nupkg 204 | # NuGet Symbol Packages 205 | *.snupkg 206 | # The packages folder can be ignored because of Package Restore 207 | **/[Pp]ackages/* 208 | # except build/, which is used as an MSBuild target. 209 | !**/[Pp]ackages/build/ 210 | # Uncomment if necessary however generally it will be regenerated when needed 211 | #!**/[Pp]ackages/repositories.config 212 | # NuGet v3's project.json files produces more ignorable files 213 | *.nuget.props 214 | *.nuget.targets 215 | 216 | # Microsoft Azure Build Output 217 | csx/ 218 | *.build.csdef 219 | 220 | # Microsoft Azure Emulator 221 | ecf/ 222 | rcf/ 223 | 224 | # Windows Store app package directories and files 225 | AppPackages/ 226 | BundleArtifacts/ 227 | Package.StoreAssociation.xml 228 | _pkginfo.txt 229 | *.appx 230 | *.appxbundle 231 | *.appxupload 232 | 233 | # Visual Studio cache files 234 | # files ending in .cache can be ignored 235 | *.[Cc]ache 236 | # but keep track of directories ending in .cache 237 | !?*.[Cc]ache/ 238 | 239 | # Others 240 | ClientBin/ 241 | ~$* 242 | *~ 243 | *.dbmdl 244 | *.dbproj.schemaview 245 | *.jfm 246 | *.pfx 247 | *.publishsettings 248 | orleans.codegen.cs 249 | 250 | # Including strong name files can present a security risk 251 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 252 | #*.snk 253 | 254 | # Since there are multiple workflows, uncomment next line to ignore bower_components 255 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 256 | #bower_components/ 257 | 258 | # RIA/Silverlight projects 259 | Generated_Code/ 260 | 261 | # Backup & report files from converting an old project file 262 | # to a newer Visual Studio version. Backup files are not needed, 263 | # because we have git ;-) 264 | _UpgradeReport_Files/ 265 | Backup*/ 266 | UpgradeLog*.XML 267 | UpgradeLog*.htm 268 | ServiceFabricBackup/ 269 | *.rptproj.bak 270 | 271 | # SQL Server files 272 | *.mdf 273 | *.ldf 274 | *.ndf 275 | 276 | # Business Intelligence projects 277 | *.rdl.data 278 | *.bim.layout 279 | *.bim_*.settings 280 | *.rptproj.rsuser 281 | *- [Bb]ackup.rdl 282 | *- [Bb]ackup ([0-9]).rdl 283 | *- [Bb]ackup ([0-9][0-9]).rdl 284 | 285 | # Microsoft Fakes 286 | FakesAssemblies/ 287 | 288 | # GhostDoc plugin setting file 289 | *.GhostDoc.xml 290 | 291 | # Node.js Tools for Visual Studio 292 | .ntvs_analysis.dat 293 | node_modules/ 294 | 295 | # Visual Studio 6 build log 296 | *.plg 297 | 298 | # Visual Studio 6 workspace options file 299 | *.opt 300 | 301 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 302 | *.vbw 303 | 304 | # Visual Studio 6 auto-generated project file (contains which files were open etc.) 305 | *.vbp 306 | 307 | # Visual Studio 6 workspace and project file (working project files containing files to include in project) 308 | *.dsw 309 | *.dsp 310 | 311 | # Visual Studio 6 technical files 312 | 313 | # Visual Studio LightSwitch build output 314 | **/*.HTMLClient/GeneratedArtifacts 315 | **/*.DesktopClient/GeneratedArtifacts 316 | **/*.DesktopClient/ModelManifest.xml 317 | **/*.Server/GeneratedArtifacts 318 | **/*.Server/ModelManifest.xml 319 | _Pvt_Extensions 320 | 321 | # Paket dependency manager 322 | .paket/paket.exe 323 | paket-files/ 324 | 325 | # FAKE - F# Make 326 | .fake/ 327 | 328 | # CodeRush personal settings 329 | .cr/personal 330 | 331 | # Python Tools for Visual Studio (PTVS) 332 | __pycache__/ 333 | *.pyc 334 | 335 | # Cake - Uncomment if you are using it 336 | # tools/** 337 | # !tools/packages.config 338 | 339 | # Tabs Studio 340 | *.tss 341 | 342 | # Telerik's JustMock configuration file 343 | *.jmconfig 344 | 345 | # BizTalk build output 346 | *.btp.cs 347 | *.btm.cs 348 | *.odx.cs 349 | *.xsd.cs 350 | 351 | # OpenCover UI analysis results 352 | OpenCover/ 353 | 354 | # Azure Stream Analytics local run output 355 | ASALocalRun/ 356 | 357 | # MSBuild Binary and Structured Log 358 | *.binlog 359 | 360 | # NVidia Nsight GPU debugger configuration file 361 | *.nvuser 362 | 363 | # MFractors (Xamarin productivity tool) working folder 364 | .mfractor/ 365 | 366 | # Local History for Visual Studio 367 | .localhistory/ 368 | 369 | # Visual Studio History (VSHistory) files 370 | .vshistory/ 371 | 372 | # BeatPulse healthcheck temp database 373 | healthchecksdb 374 | 375 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 376 | MigrationBackup/ 377 | 378 | # Ionide (cross platform F# VS Code tools) working folder 379 | .ionide/ 380 | 381 | # Fody - auto-generated XML schema 382 | FodyWeavers.xsd 383 | 384 | # VS Code files for those working on multiple tools 385 | .vscode/* 386 | !.vscode/settings.json 387 | !.vscode/tasks.json 388 | !.vscode/launch.json 389 | !.vscode/extensions.json 390 | *.code-workspace 391 | 392 | # Local History for Visual Studio Code 393 | .history/ 394 | 395 | # Windows Installer files from build outputs 396 | *.cab 397 | *.msi 398 | *.msix 399 | *.msm 400 | *.msp 401 | 402 | # JetBrains Rider 403 | *.sln.iml 404 | 405 | ### JetBrains ### 406 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 407 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 408 | 409 | # User-specific stuff 410 | .idea/**/workspace.xml 411 | .idea/**/tasks.xml 412 | .idea/**/usage.statistics.xml 413 | .idea/**/dictionaries 414 | .idea/**/shelf 415 | 416 | # AWS User-specific 417 | .idea/**/aws.xml 418 | 419 | # Generated files 420 | .idea/**/contentModel.xml 421 | 422 | # Sensitive or high-churn files 423 | .idea/**/dataSources/ 424 | .idea/**/dataSources.ids 425 | .idea/**/dataSources.local.xml 426 | .idea/**/sqlDataSources.xml 427 | .idea/**/dynamic.xml 428 | .idea/**/uiDesigner.xml 429 | .idea/**/dbnavigator.xml 430 | 431 | # Gradle 432 | .idea/**/gradle.xml 433 | .idea/**/libraries 434 | 435 | # Gradle and Maven with auto-import 436 | # When using Gradle or Maven with auto-import, you should exclude module files, 437 | # since they will be recreated, and may cause churn. Uncomment if using 438 | # auto-import. 439 | # .idea/artifacts 440 | # .idea/compiler.xml 441 | # .idea/jarRepositories.xml 442 | # .idea/modules.xml 443 | # .idea/*.iml 444 | # .idea/modules 445 | # *.iml 446 | # *.ipr 447 | 448 | # CMake 449 | cmake-build-*/ 450 | 451 | # Mongo Explorer plugin 452 | .idea/**/mongoSettings.xml 453 | 454 | # File-based project format 455 | *.iws 456 | 457 | # IntelliJ 458 | out/ 459 | 460 | # mpeltonen/sbt-idea plugin 461 | .idea_modules/ 462 | 463 | # JIRA plugin 464 | atlassian-ide-plugin.xml 465 | 466 | # Cursive Clojure plugin 467 | .idea/replstate.xml 468 | 469 | # SonarLint plugin 470 | .idea/sonarlint/ 471 | 472 | # Crashlytics plugin (for Android Studio and IntelliJ) 473 | com_crashlytics_export_strings.xml 474 | crashlytics.properties 475 | crashlytics-build.properties 476 | fabric.properties 477 | 478 | # Editor-based Rest Client 479 | .idea/httpRequests 480 | 481 | # Android studio 3.1+ serialized cache file 482 | .idea/caches/build_file_checksums.ser 483 | 484 | ### JetBrains Patch ### 485 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 486 | 487 | # *.iml 488 | # modules.xml 489 | # .idea/misc.xml 490 | # *.ipr 491 | 492 | # Sonarlint plugin 493 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 494 | .idea/**/sonarlint/ 495 | 496 | # SonarQube Plugin 497 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 498 | .idea/**/sonarIssues.xml 499 | 500 | # Markdown Navigator plugin 501 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 502 | .idea/**/markdown-navigator.xml 503 | .idea/**/markdown-navigator-enh.xml 504 | .idea/**/markdown-navigator/ 505 | 506 | # Cache file creation bug 507 | # See https://youtrack.jetbrains.com/issue/JBR-2257 508 | .idea/$CACHE_FILE$ 509 | 510 | # CodeStream plugin 511 | # https://plugins.jetbrains.com/plugin/12206-codestream 512 | .idea/codestream.xml 513 | 514 | ### Rider ### 515 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 516 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 517 | 518 | # User-specific stuff 519 | 520 | # AWS User-specific 521 | 522 | # Generated files 523 | 524 | # Sensitive or high-churn files 525 | 526 | # Gradle 527 | 528 | # Gradle and Maven with auto-import 529 | # When using Gradle or Maven with auto-import, you should exclude module files, 530 | # since they will be recreated, and may cause churn. Uncomment if using 531 | # auto-import. 532 | # .idea/artifacts 533 | # .idea/compiler.xml 534 | # .idea/jarRepositories.xml 535 | # .idea/modules.xml 536 | # .idea/*.iml 537 | # .idea/modules 538 | # *.iml 539 | # *.ipr 540 | 541 | # CMake 542 | 543 | # Mongo Explorer plugin 544 | 545 | # File-based project format 546 | 547 | # IntelliJ 548 | 549 | # mpeltonen/sbt-idea plugin 550 | 551 | # JIRA plugin 552 | 553 | # Cursive Clojure plugin 554 | 555 | # SonarLint plugin 556 | 557 | # Crashlytics plugin (for Android Studio and IntelliJ) 558 | 559 | # Editor-based Rest Client 560 | 561 | # Android studio 3.1+ serialized cache file 562 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "External/AssCS"] 2 | path = External/AssCS 3 | url = https://github.com/ProjectAmeko/AssCS.git 4 | -------------------------------------------------------------------------------- /.idea/.idea.Ameko/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Rider ignored files 5 | /contentModel.xml 6 | /modules.xml 7 | /.idea.Ameko.iml 8 | /projectSettingsUpdater.xml 9 | # Editor-based HTTP Client requests 10 | /httpRequests/ 11 | # Datasource local storage ignored files 12 | /dataSources/ 13 | /dataSources.local.xml 14 | -------------------------------------------------------------------------------- /.idea/.idea.Ameko/.idea/avalonia.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 23 | -------------------------------------------------------------------------------- /.idea/.idea.Ameko/.idea/indexLayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/.idea.Ameko/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Amebu/AVPlugins/BaseAVLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Amebu.AVPlugins 6 | { 7 | public interface IFrame 8 | { 9 | public int Width { get; } 10 | public int Height { get; } 11 | public int Aspect { get; } 12 | public byte[] GetFrame(); 13 | } 14 | 15 | public enum TrackType 16 | { 17 | AUDIO, 18 | VIDEO, 19 | SUBTITLE, 20 | UNKNOWN 21 | } 22 | 23 | /// 24 | /// Provides the interface for a custom Audio/Video loader. 25 | /// The loader should not have to care about whether 26 | /// 27 | public interface IAVLoader 28 | { 29 | /// 30 | /// Returns the total frames loaded from the file. 31 | /// A value of -1 indicates the file has not been loaded. 32 | /// 33 | public int frameCount { get; } 34 | /// 35 | /// Returns true if the loader can provide audio. 36 | /// 37 | public bool AudioProvided { get; } 38 | /// 39 | /// Returns true if the loader can provide video. 40 | /// 41 | public bool VideoProvided { get; } 42 | /// 43 | /// Sets the color matrix for the video. 44 | /// 45 | /// 46 | /// 47 | public int SetColorMatrix(string matrix); 48 | public int SetTrackIndex(TrackType trackType, int idx); 49 | public int LoadFile(string path); 50 | /// 51 | /// Gets the frame 52 | /// 53 | /// 54 | /// 55 | public IFrame GetFrame(int index); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Amebu/AVPlugins/L-Smash/LSAVLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Text; 5 | 6 | namespace Amebu.AVPlugins.L_Smash 7 | { 8 | internal class LSAVLoader : IAVLoader 9 | { 10 | /* 11 | 12 | TODO: 13 | DllImports lsmash. 14 | - Refer to: https://github.com/l-smash/l-smash/blob/master/cli/remuxer.c#L704 15 | - https://github.com/l-smash/l-smash/blob/master/cli/remuxer.c#L446 16 | 17 | */ 18 | 19 | public int frameCount => throw new NotImplementedException(); 20 | 21 | public bool AudioProvided => throw new NotImplementedException(); 22 | 23 | public bool VideoProvided => throw new NotImplementedException(); 24 | 25 | public int LoadFile(string path) 26 | { 27 | if (File.Exists(path)) 28 | { 29 | return 1; 30 | } 31 | return 0; 32 | } 33 | 34 | public IFrame GetFrame(int index) 35 | { 36 | throw new NotImplementedException(); 37 | } 38 | 39 | public int SetColorMatrix(string matrix) 40 | { 41 | throw new NotImplementedException(); 42 | } 43 | 44 | public int SetTrackIndex(TrackType trackType, int idx) 45 | { 46 | throw new NotImplementedException(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Amebu/Amebu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Ameko.AssCS; 4 | 5 | namespace Amebu 6 | { 7 | public static class Amebu 8 | { 9 | private static readonly Dictionary TabRegistry = new Dictionary(); 10 | 11 | /// 12 | /// Generates a UUID string for a tab to use. 13 | /// UUIDs are used to associate objects, like AssFiles, 14 | /// with a tab without having to worry about indexing. 15 | /// 16 | /// UUID 17 | private static string GenerateTabUuid() 18 | => Guid.NewGuid().ToString(); 19 | 20 | /// 21 | /// Get the file associated with the tab UUID 22 | /// 23 | /// Tab UUID to look up 24 | /// AssFile object associated with the tab UUID given 25 | /// Thrown when the tab does not exist 26 | public static AssFile GetAssFile(string uuid) 27 | { 28 | if (TabRegistry.ContainsKey(uuid)) return TabRegistry[uuid]; 29 | throw new AssException($"Cannot get file for tab {uuid} as no such tab has been registered."); 30 | } 31 | 32 | /// 33 | /// Adds a tab to the registry 34 | /// 35 | /// AssFile used to create the tab 36 | /// UUID for the new tab 37 | public static string RegisterTab(AssFile file) 38 | { 39 | var uuid = GenerateTabUuid(); 40 | TabRegistry[uuid] = file; 41 | return uuid; 42 | } 43 | 44 | /// 45 | /// Removes a tab from the registry 46 | /// 47 | /// UUID of the tab to remove 48 | /// True if the tab was successfully removed 49 | /// Thrown when the tab does not exist 50 | public static bool DeregisterTab(string uuid) 51 | { 52 | if (TabRegistry.ContainsKey(uuid)) return TabRegistry.Remove(uuid); 53 | throw new AssException($"Cannot deregister tab as tab {uuid} does not exist."); 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /Amebu/Amebu.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.1 5 | enable 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Amebu/SubPlugins/AssLoader.cs: -------------------------------------------------------------------------------- 1 | using Ameko.AssCS; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Text; 6 | 7 | namespace Amebu.SubPlugins 8 | { 9 | public class AssLoader : ISubLoader 10 | { 11 | public string[] FileExtensions => new string[] {".ass","*"}; 12 | 13 | 14 | public string GetErrorMessage(int errCode) 15 | { 16 | throw new NotImplementedException(); 17 | } 18 | 19 | public SubtitleResponse LoadFile(string path, int index = -1) 20 | { 21 | SubtitleResponse subtitleResponse = new SubtitleResponse(); 22 | if (File.Exists(path)) 23 | { 24 | subtitleResponse.AssFile = AssParser.LoadAndParse(path); 25 | subtitleResponse.Status = "OK"; 26 | } 27 | else 28 | { 29 | subtitleResponse.Status = "File does not exist."; 30 | } 31 | return subtitleResponse; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Amebu/SubPlugins/BaseSubLoader.cs: -------------------------------------------------------------------------------- 1 | using Ameko.AssCS; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace Amebu.SubPlugins 7 | { 8 | public struct SubtitleResponse 9 | { 10 | public string Status { get; set; } 11 | public AssFile? AssFile { get; set; } 12 | } 13 | public interface ISubLoader 14 | { 15 | /// 16 | /// Loads the subtitle file specified. 17 | /// 18 | /// A *hopefully* valid file 19 | /// Index to determine which ass file to load. 20 | /// An integer, indicating if the file has been loaded or not. 21 | public SubtitleResponse LoadFile(string path, int index = -1); 22 | public string[] FileExtensions { get; } 23 | /// 24 | /// Gets the error code returned by "LoadFile" 25 | /// 26 | /// 27 | /// 28 | public string GetErrorMessage(int errCode); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Ameko.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.2.32516.85 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ameko", "Ameko\Ameko.csproj", "{C8211913-4F55-4EB0-A8BF-620F806255EC}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {B5A74488-8D6B-4E4F-96DA-739ABEBC165A} = {B5A74488-8D6B-4E4F-96DA-739ABEBC165A} 9 | EndProjectSection 10 | EndProject 11 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssCS", "External\AssCS\AssCS\AssCS.csproj", "{E6E98D15-85E2-4FF5-A0B0-274E0DA63C20}" 12 | EndProject 13 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Amebu", "Amebu\Amebu.csproj", "{B5A74488-8D6B-4E4F-96DA-739ABEBC165A}" 14 | ProjectSection(ProjectDependencies) = postProject 15 | {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20} = {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20} 16 | EndProjectSection 17 | EndProject 18 | Global 19 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 | Debug|Any CPU = Debug|Any CPU 21 | Release|Any CPU = Release|Any CPU 22 | EndGlobalSection 23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 24 | {C8211913-4F55-4EB0-A8BF-620F806255EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {C8211913-4F55-4EB0-A8BF-620F806255EC}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {C8211913-4F55-4EB0-A8BF-620F806255EC}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {C8211913-4F55-4EB0-A8BF-620F806255EC}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {E6E98D15-85E2-4FF5-A0B0-274E0DA63C20}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {B5A74488-8D6B-4E4F-96DA-739ABEBC165A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {B5A74488-8D6B-4E4F-96DA-739ABEBC165A}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {B5A74488-8D6B-4E4F-96DA-739ABEBC165A}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {B5A74488-8D6B-4E4F-96DA-739ABEBC165A}.Release|Any CPU.Build.0 = Release|Any CPU 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {3EAF93C7-ABFF-49F5-A25B-4CE3A9106950} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /Ameko/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # Tye 66 | .tye/ 67 | 68 | # ASP.NET Scaffolding 69 | ScaffoldingReadMe.txt 70 | 71 | # StyleCop 72 | StyleCopReport.xml 73 | 74 | # Files built by Visual Studio 75 | *_i.c 76 | *_p.c 77 | *_h.h 78 | *.ilk 79 | *.meta 80 | *.obj 81 | *.iobj 82 | *.pch 83 | *.pdb 84 | *.ipdb 85 | *.pgc 86 | *.pgd 87 | *.rsp 88 | *.sbr 89 | *.tlb 90 | *.tli 91 | *.tlh 92 | *.tmp 93 | *.tmp_proj 94 | *_wpftmp.csproj 95 | *.log 96 | *.vspscc 97 | *.vssscc 98 | .builds 99 | *.pidb 100 | *.svclog 101 | *.scc 102 | 103 | # Chutzpah Test files 104 | _Chutzpah* 105 | 106 | # Visual C++ cache files 107 | ipch/ 108 | *.aps 109 | *.ncb 110 | *.opendb 111 | *.opensdf 112 | *.sdf 113 | *.cachefile 114 | *.VC.db 115 | *.VC.VC.opendb 116 | 117 | # Visual Studio profiler 118 | *.psess 119 | *.vsp 120 | *.vspx 121 | *.sap 122 | 123 | # Visual Studio Trace Files 124 | *.e2e 125 | 126 | # TFS 2012 Local Workspace 127 | $tf/ 128 | 129 | # Guidance Automation Toolkit 130 | *.gpState 131 | 132 | # ReSharper is a .NET coding add-in 133 | _ReSharper*/ 134 | *.[Rr]e[Ss]harper 135 | *.DotSettings.user 136 | 137 | # TeamCity is a build add-in 138 | _TeamCity* 139 | 140 | # DotCover is a Code Coverage Tool 141 | *.dotCover 142 | 143 | # AxoCover is a Code Coverage Tool 144 | .axoCover/* 145 | !.axoCover/settings.json 146 | 147 | # Coverlet is a free, cross platform Code Coverage Tool 148 | coverage*.json 149 | coverage*.xml 150 | coverage*.info 151 | 152 | # Visual Studio code coverage results 153 | *.coverage 154 | *.coveragexml 155 | 156 | # NCrunch 157 | _NCrunch_* 158 | .*crunch*.local.xml 159 | nCrunchTemp_* 160 | 161 | # MightyMoose 162 | *.mm.* 163 | AutoTest.Net/ 164 | 165 | # Web workbench (sass) 166 | .sass-cache/ 167 | 168 | # Installshield output folder 169 | [Ee]xpress/ 170 | 171 | # DocProject is a documentation generator add-in 172 | DocProject/buildhelp/ 173 | DocProject/Help/*.HxT 174 | DocProject/Help/*.HxC 175 | DocProject/Help/*.hhc 176 | DocProject/Help/*.hhk 177 | DocProject/Help/*.hhp 178 | DocProject/Help/Html2 179 | DocProject/Help/html 180 | 181 | # Click-Once directory 182 | publish/ 183 | 184 | # Publish Web Output 185 | *.[Pp]ublish.xml 186 | *.azurePubxml 187 | # Note: Comment the next line if you want to checkin your web deploy settings, 188 | # but database connection strings (with potential passwords) will be unencrypted 189 | *.pubxml 190 | *.publishproj 191 | 192 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 193 | # checkin your Azure Web App publish settings, but sensitive information contained 194 | # in these scripts will be unencrypted 195 | PublishScripts/ 196 | 197 | # NuGet Packages 198 | *.nupkg 199 | # NuGet Symbol Packages 200 | *.snupkg 201 | # The packages folder can be ignored because of Package Restore 202 | **/[Pp]ackages/* 203 | # except build/, which is used as an MSBuild target. 204 | !**/[Pp]ackages/build/ 205 | # Uncomment if necessary however generally it will be regenerated when needed 206 | #!**/[Pp]ackages/repositories.config 207 | # NuGet v3's project.json files produces more ignorable files 208 | *.nuget.props 209 | *.nuget.targets 210 | 211 | # Microsoft Azure Build Output 212 | csx/ 213 | *.build.csdef 214 | 215 | # Microsoft Azure Emulator 216 | ecf/ 217 | rcf/ 218 | 219 | # Windows Store app package directories and files 220 | AppPackages/ 221 | BundleArtifacts/ 222 | Package.StoreAssociation.xml 223 | _pkginfo.txt 224 | *.appx 225 | *.appxbundle 226 | *.appxupload 227 | 228 | # Visual Studio cache files 229 | # files ending in .cache can be ignored 230 | *.[Cc]ache 231 | # but keep track of directories ending in .cache 232 | !?*.[Cc]ache/ 233 | 234 | # Others 235 | ClientBin/ 236 | ~$* 237 | *~ 238 | *.dbmdl 239 | *.dbproj.schemaview 240 | *.jfm 241 | *.pfx 242 | *.publishsettings 243 | orleans.codegen.cs 244 | 245 | # Including strong name files can present a security risk 246 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 247 | #*.snk 248 | 249 | # Since there are multiple workflows, uncomment next line to ignore bower_components 250 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 251 | #bower_components/ 252 | 253 | # RIA/Silverlight projects 254 | Generated_Code/ 255 | 256 | # Backup & report files from converting an old project file 257 | # to a newer Visual Studio version. Backup files are not needed, 258 | # because we have git ;-) 259 | _UpgradeReport_Files/ 260 | Backup*/ 261 | UpgradeLog*.XML 262 | UpgradeLog*.htm 263 | ServiceFabricBackup/ 264 | *.rptproj.bak 265 | 266 | # SQL Server files 267 | *.mdf 268 | *.ldf 269 | *.ndf 270 | 271 | # Business Intelligence projects 272 | *.rdl.data 273 | *.bim.layout 274 | *.bim_*.settings 275 | *.rptproj.rsuser 276 | *- [Bb]ackup.rdl 277 | *- [Bb]ackup ([0-9]).rdl 278 | *- [Bb]ackup ([0-9][0-9]).rdl 279 | 280 | # Microsoft Fakes 281 | FakesAssemblies/ 282 | 283 | # GhostDoc plugin setting file 284 | *.GhostDoc.xml 285 | 286 | # Node.js Tools for Visual Studio 287 | .ntvs_analysis.dat 288 | node_modules/ 289 | 290 | # Visual Studio 6 build log 291 | *.plg 292 | 293 | # Visual Studio 6 workspace options file 294 | *.opt 295 | 296 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 297 | *.vbw 298 | 299 | # Visual Studio LightSwitch build output 300 | **/*.HTMLClient/GeneratedArtifacts 301 | **/*.DesktopClient/GeneratedArtifacts 302 | **/*.DesktopClient/ModelManifest.xml 303 | **/*.Server/GeneratedArtifacts 304 | **/*.Server/ModelManifest.xml 305 | _Pvt_Extensions 306 | 307 | # Paket dependency manager 308 | .paket/paket.exe 309 | paket-files/ 310 | 311 | # FAKE - F# Make 312 | .fake/ 313 | 314 | # CodeRush personal settings 315 | .cr/personal 316 | 317 | # Python Tools for Visual Studio (PTVS) 318 | __pycache__/ 319 | *.pyc 320 | 321 | # Cake - Uncomment if you are using it 322 | # tools/** 323 | # !tools/packages.config 324 | 325 | # Tabs Studio 326 | *.tss 327 | 328 | # Telerik's JustMock configuration file 329 | *.jmconfig 330 | 331 | # BizTalk build output 332 | *.btp.cs 333 | *.btm.cs 334 | *.odx.cs 335 | *.xsd.cs 336 | 337 | # OpenCover UI analysis results 338 | OpenCover/ 339 | 340 | # Azure Stream Analytics local run output 341 | ASALocalRun/ 342 | 343 | # MSBuild Binary and Structured Log 344 | *.binlog 345 | 346 | # NVidia Nsight GPU debugger configuration file 347 | *.nvuser 348 | 349 | # MFractors (Xamarin productivity tool) working folder 350 | .mfractor/ 351 | 352 | # Local History for Visual Studio 353 | .localhistory/ 354 | 355 | # BeatPulse healthcheck temp database 356 | healthchecksdb 357 | 358 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 359 | MigrationBackup/ 360 | 361 | # Ionide (cross platform F# VS Code tools) working folder 362 | .ionide/ 363 | 364 | # Fody - auto-generated XML schema 365 | FodyWeavers.xsd 366 | 367 | ## 368 | ## Visual studio for Mac 369 | ## 370 | 371 | 372 | # globs 373 | Makefile.in 374 | *.userprefs 375 | *.usertasks 376 | config.make 377 | config.status 378 | aclocal.m4 379 | install-sh 380 | autom4te.cache/ 381 | *.tar.gz 382 | tarballs/ 383 | test-results/ 384 | 385 | # Mac bundle stuff 386 | *.dmg 387 | *.app 388 | 389 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore 390 | # General 391 | .DS_Store 392 | .AppleDouble 393 | .LSOverride 394 | 395 | # Icon must end with two \r 396 | Icon 397 | 398 | 399 | # Thumbnails 400 | ._* 401 | 402 | # Files that might appear in the root of a volume 403 | .DocumentRevisions-V100 404 | .fseventsd 405 | .Spotlight-V100 406 | .TemporaryItems 407 | .Trashes 408 | .VolumeIcon.icns 409 | .com.apple.timemachine.donotpresent 410 | 411 | # Directories potentially created on remote AFP share 412 | .AppleDB 413 | .AppleDesktop 414 | Network Trash Folder 415 | Temporary Items 416 | .apdisk 417 | 418 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore 419 | # Windows thumbnail cache files 420 | Thumbs.db 421 | ehthumbs.db 422 | ehthumbs_vista.db 423 | 424 | # Dump file 425 | *.stackdump 426 | 427 | # Folder config file 428 | [Dd]esktop.ini 429 | 430 | # Recycle Bin used on file shares 431 | $RECYCLE.BIN/ 432 | 433 | # Windows Installer files 434 | *.cab 435 | *.msi 436 | *.msix 437 | *.msm 438 | *.msp 439 | 440 | # Windows shortcuts 441 | *.lnk 442 | 443 | # JetBrains Rider 444 | .idea/ 445 | *.sln.iml 446 | 447 | ## 448 | ## Visual Studio Code 449 | ## 450 | .vscode/* 451 | !.vscode/settings.json 452 | !.vscode/tasks.json 453 | !.vscode/launch.json 454 | !.vscode/extensions.json 455 | -------------------------------------------------------------------------------- /Ameko/Ameko.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | WinExe 4 | net6.0 5 | enable 6 | 7 | copyused 8 | true 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | EventTextArea.axaml 39 | Code 40 | 41 | 42 | MenuBar.axaml 43 | Code 44 | 45 | 46 | MainWindow.axaml 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Ameko/App.axaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Ameko/App.axaml.cs: -------------------------------------------------------------------------------- 1 | using Ameko.ViewModels; 2 | using Ameko.Views; 3 | using Avalonia; 4 | using Avalonia.Controls.ApplicationLifetimes; 5 | using Avalonia.Markup.Xaml; 6 | 7 | namespace Ameko 8 | { 9 | public partial class App : Application 10 | { 11 | public override void Initialize() 12 | { 13 | AvaloniaXamlLoader.Load(this); 14 | } 15 | 16 | public override void OnFrameworkInitializationCompleted() 17 | { 18 | if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) 19 | { 20 | desktop.MainWindow = new MainWindow 21 | { 22 | DataContext = new MainWindowViewModel(), 23 | }; 24 | } 25 | 26 | base.OnFrameworkInitializationCompleted(); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Ameko/Assets/avalonia-logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProjectAmeko/oldameko/6ad75965748067662613b11b53f75a032ae7a3b6/Ameko/Assets/avalonia-logo.ico -------------------------------------------------------------------------------- /Ameko/Assets/test.ass: -------------------------------------------------------------------------------- 1 | [Script Info] 2 | ; Script generated by Aegisub 9214, Daydream Cafe Edition [Shinon] 3 | ; http://www.aegisub.org/ 4 | Title: English (US) 5 | Original Translation: 6 | Original Editing: 7 | Original Timing: 8 | Synch Point: 9 | Script Updated By: 10 | Update Details: 11 | ScriptType: v4.00+ 12 | PlayResX: 1920 13 | PlayResY: 1080 14 | WrapStyle: 0 15 | ScaledBorderAndShadow: yes 16 | YCbCr Matrix: TV.709 17 | 18 | [Aegisub Project Garbage] 19 | Last Style Storage: shikimori 20 | Audio File: ../../raws/[premux] shiki 01 (amzn eac3) [BB4A434C].mkv 21 | Video File: ../../raws/[premux] shiki 01 (amzn eac3) [BB4A434C].mkv 22 | Keyframes File: ../../raws/[premux] shiki 01 (amzn eac3) [BB4A434C]_keyframes.txt 23 | Video AR Mode: 4 24 | Video AR Value: 1.777778 25 | Video Zoom Percent: 0.625000 26 | Scroll Position: 311 27 | Active Line: 314 28 | 29 | [V4+ Styles] 30 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 31 | Style: DMain,Amaranth,75,&H00FFFFFF,&H00000000,&H00371F2A,&H46311E27,0,0,0,0,100,100,0,0,1,4.5,1.5,2,135,135,50,1 32 | Style: DItalics,Amaranth,75,&H00FFFFFF,&H00000000,&H00371F2A,&H46311E27,0,-1,0,0,100,100,0,0,1,4.5,1.5,2,135,135,50,1 33 | Style: DAlt,Amaranth,75,&H00FFFFFF,&H00000000,&H002D371F,&H46311E27,0,0,0,0,100,100,0,0,1,4.5,1.5,2,135,135,50,1 34 | 35 | [Events] 36 | Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text 37 | Dialogue: 0,0:00:08.39,0:00:09.99,DMain,Motoko,0,0,0,,ludwig7.png 38 | Dialogue: 0,0:00:10.65,0:00:12.62,DMain,Motoko,0,0,0,,Don't you need to hurry? 39 | Dialogue: 0,0:00:13.49,0:00:14.70,DMain,Izumi,0,0,0,,Coming! 40 | Dialogue: 0,0:00:30.75,0:00:33.33,DMain,Motoko,0,0,0,,You've got a bit sticking out in the back. 41 | Dialogue: 0,0:00:33.33,0:00:34.47,DMain,Izumi,0,0,0,,Shoot, really? 42 | Dialogue: 0,0:00:40.85,0:00:42.81,DMain,Motoko,0,0,0,,There, fixed it. 43 | Dialogue: 0,0:00:44.11,0:00:45.80,DMain,Izumi,0,0,0,,Thanks, Mom. 44 | Dialogue: 0,0:00:47.07,0:00:49.61,DMain,Akisada,0,0,0,,You're leaving a little earlier than usual. 45 | Dialogue: 0,0:00:49.61,0:00:52.75,DMain,Izumi,0,0,0,,It's the first day. I don't want to be late, 46 | Dialogue: 0,0:00:52.75,0:00:54.33,DMain,Izumi,0,0,0,,and I don't want to keep her waiting. 47 | Dialogue: 0,0:00:54.71,0:00:56.45,DMain,Akisada,0,0,0,,Tell Shikimori-san we said hello. 48 | Dialogue: 0,0:00:57.45,0:00:58.45,DMain,Izumi,0,0,0,,Sure. 49 | Dialogue: 0,0:00:58.45,0:01:00.47,DMain,Motoko,0,0,0,,Be careful. 50 | Dialogue: 0,0:01:00.47,0:01:05.42,DMain,Motoko,0,0,0,,Watch out for rocks, and cars,\Nand crows, and shingles... 51 | Dialogue: 0,0:01:05.42,0:01:07.46,DMain,Izumi,0,0,0,,I will. See you later. 52 | Dialogue: 0,0:01:09.22,0:01:11.10,DMain,Motoko; Akisada,0,0,0,,Have a good day! 53 | Dialogue: 0,0:01:18.56,0:01:20.44,DMain,Izumi,0,0,0,,Ow, ow, ow... 54 | Dialogue: 0,0:01:21.06,0:01:22.86,DMain,Izumi,0,0,0,,Seriously? Already? 55 | Dialogue: 0,0:01:41.83,0:01:43.08,DMain,Izumi,0,0,0,,Hup! 56 | Dialogue: 0,0:01:52.30,0:01:54.06,DMain,Izumi,0,0,0,,Ow, ow, ow... 57 | Dialogue: 0,0:02:00.96,0:02:03.10,DMain,Izumi,0,0,0,,Ma'am, are you all right there? 58 | Dialogue: 0,0:02:04.86,0:02:07.07,DMain,Lady,0,0,0,,Are {\i1}you{\i0} all right, young man? 59 | Dialogue: 0,0:02:07.07,0:02:09.42,DMain,Lady,0,0,0,,Your hair's a mess. 60 | Dialogue: 0,0:02:11.08,0:02:13.32,DMain,Izumi,0,0,0,,I'm fine. Let me help you with that. 61 | Dialogue: 0,0:02:17.91,0:02:19.74,DItalics,Izumi,0,0,0,,I made sure to fix my hair... 62 | Dialogue: 0,0:02:20.75,0:02:22.08,DItalics,Izumi,0,0,0,,And all for nothing! 63 | Dialogue: 0,0:02:37.06,0:02:39.47,DMain,Izumi,0,0,0,,Shikimori-san! 64 | Dialogue: 0,0:02:48.28,0:02:50.06,DMain,Izumi,0,0,0,,Morning, Shikimori-san. 65 | Dialogue: 0,0:02:50.57,0:02:53.29,DMain,Shikimori,0,0,0,,Good morning, Izumi-san. 66 | Dialogue: 0,0:02:55.95,0:02:58.32,DMain,Girl Student 1,0,0,0,,{\an8}Look at her! She's {\i1}so{\i0} cute! 67 | Dialogue: 0,0:02:58.32,0:03:01.12,DMain,Girl Student 2,0,0,0,,{\an8}Wow, you're right! She looks like an idol! 68 | Dialogue: 0,0:03:03.83,0:03:06.21,DMain,Izumi,0,0,0,,Sorry I always keep you waiting. 69 | Dialogue: 0,0:03:06.21,0:03:10.34,DMain,Shikimori,0,0,0,,Not at all. I enjoy waiting for you. 70 | Dialogue: 0,0:03:10.97,0:03:12.76,DMain,Shikimori,0,0,0,,But that aside... 71 | Dialogue: 0,0:03:13.21,0:03:16.96,DMain,Shikimori,0,0,0,,It looks like you had a rough\Ntime again this morning. 72 | Dialogue: 0,0:03:16.96,0:03:18.47,DMain,Shikimori,0,0,0,,Are you all right? 73 | Dialogue: 0,0:03:19.69,0:03:21.42,DMain,Izumi,0,0,0,,Yeah, I'm used to it. 74 | Dialogue: 0,0:03:26.05,0:03:28.98,DItalics,Izumi,0,0,0,,My girlfriend is super cute, 75 | Dialogue: 0,0:03:29.88,0:03:31.61,DItalics,Izumi,0,0,0,,but sometimes she's... 76 | Dialogue: 0,0:03:32.34,0:03:33.96,DMain,Izumi,0,0,0,,not cute in the slightest... 77 | Dialogue: 0,0:03:33.96,0:03:35.11,DMain,Shikimori,0,0,0,,Huh?! 78 | Dialogue: 0,0:03:37.86,0:03:41.38,DMain,Shikimori,0,0,0,,I'm not cute?! That's so mean! 79 | Dialogue: 0,0:03:41.38,0:03:43.37,DMain,Izumi,0,0,0,,Sorry! I didn't mean to say it out loud! 80 | Dialogue: 0,0:03:43.81,0:03:45.87,DMain,Shikimori,0,0,0,,That just makes it even worse! 81 | Dialogue: 0,0:03:45.87,0:03:48.41,DMain,Izumi,0,0,0,,Er, that's not what I meant... 82 | Dialogue: 0,0:03:53.12,0:03:54.49,DMain,Shikimori,0,0,0,,Izumi-san! 83 | Dialogue: 0,0:04:03.15,0:04:04.89,DMain,Shikimori,0,0,0,,That was close... 84 | Dialogue: 0,0:04:07.27,0:04:10.14,DMain,Izumi,0,0,0,,Sorry this stuff always happens.\NYou're not hurt, are you? 85 | Dialogue: 0,0:04:12.52,0:04:14.15,DMain,Shikimori,0,0,0,,You don't need to apologize. 86 | Dialogue: 0,0:04:15.32,0:04:18.65,DItalics,Izumi,0,0,0,,Sometimes, my girlfriend... 87 | Dialogue: 0,0:04:18.65,0:04:22.97,DMain,Shikimori,0,0,0,,I swear... You gotta stop worrying me so much. 88 | Dialogue: 0,0:04:25.53,0:04:27.62,DItalics,Izumi,0,0,0,,...is just the coolest. 89 | Dialogue: 0,0:06:06.18,0:06:07.87,DMain,Izumi,0,0,0,,They're in full bloom! 90 | Dialogue: 0,0:06:07.87,0:06:09.75,DMain,Shikimori,0,0,0,,Aren't they beautiful? 91 | Dialogue: 0,0:06:10.34,0:06:11.18,DMain,Izumi,0,0,0,,Yeah. 92 | Dialogue: 0,0:06:13.09,0:06:17.15,DMain,Shikimori,0,0,0,,They were beautiful during the\Nentrance ceremony last year, too. 93 | Dialogue: 0,0:06:17.15,0:06:19.00,DMain,Izumi,0,0,0,,Y-Yeah, they were. 94 | Dialogue: 0,0:06:19.00,0:06:23.20,DMain,Izumi,0,0,0,,I remember being so nervous that day. 95 | Dialogue: 0,0:06:27.29,0:06:30.66,DMain,Shikimori,0,0,0,,I remember too, {\i1}Ijumi-san.{\i0} 96 | Dialogue: 0,0:06:30.66,0:06:32.99,DMain,Izumi,0,0,0,,You can forget that part! 97 | Dialogue: 0,0:06:34.96,0:06:36.21,DMain,Guy,0,0,0,,There! That's me! 98 | Dialogue: 0,0:06:36.96,0:06:39.46,DMain,Izumi,0,0,0,,Oh, everyone's already checking the board. 99 | Dialogue: 0,0:06:39.46,0:06:42.17,DMain,Shikimori,0,0,0,,Indeed. There's quite a crowd. 100 | Dialogue: 0,0:06:44.74,0:06:47.09,DMain,Shikimori,0,0,0,,Are you nervous, Izumi-san? 101 | Dialogue: 0,0:06:47.71,0:06:51.43,DMain,Izumi,0,0,0,,I am. We're about to find out which class we're in. 102 | Dialogue: 0,0:06:51.84,0:06:56.99,DMain,Izumi,0,0,0,,God, please put me in class\Nwith Shikimori-san again this year! 103 | Dialogue: 0,0:06:57.44,0:07:01.62,DMain,Izumi,0,0,0,,Please... Please! 104 | Dialogue: 0,0:07:02.33,0:07:04.70,DMain,Shikimori,0,0,0,,Do you really need to pray that hard? 105 | Dialogue: 0,0:07:05.71,0:07:09.91,DMain,Izumi,0,0,0,,Well, I want to be in the same class as you! 106 | Dialogue: 0,0:07:09.91,0:07:11.88,DMain,Shikimori,0,0,0,,Don't worry. 107 | Dialogue: 0,0:07:11.88,0:07:13.96,DMain,Shikimori,0,0,0,,Even if we're in different classes, 108 | Dialogue: 0,0:07:13.96,0:07:16.06,DMain,Shikimori,0,0,0,,I'll come visit you lots. 109 | Dialogue: 0,0:07:16.06,0:07:17.00,DItalics,Izumi,0,0,0,,I love her! 110 | Dialogue: 0,0:07:17.42,0:07:18.52,DMain,Guy,0,0,0,,Look, look! Right there! 111 | Dialogue: 0,0:07:18.52,0:07:19.12,DMain,Guy 2,0,0,0,,Move over! 112 | Dialogue: 0,0:07:19.12,0:07:19.79,DMain,Guy,0,0,0,,Look, look! 113 | Dialogue: 0,0:07:19.79,0:07:20.46,DMain,Guy 3,0,0,0,,Outta the way! 114 | Dialogue: 0,0:07:20.46,0:07:21.81,DMain,Guy 4,0,0,0,,Dude, same class! 115 | Dialogue: 0,0:07:24.73,0:07:26.26,DMain,Izumi,0,0,0,,Where's my name? 116 | Dialogue: 0,0:07:28.89,0:07:30.72,DMain,Izumi,0,0,0,,There it is! In Class 4! 117 | Dialogue: 0,0:07:36.26,0:07:38.14,DMain,Izumi,0,0,0,,And Shikimori-san, you're... 118 | Dialogue: 0,0:07:46.11,0:07:48.66,DMain,Izumi,0,0,0,,We're in the same class, Shikimori-san! 119 | Dialogue: 0,0:07:48.66,0:07:50.26,DMain,Izumi,0,0,0,,Look! It's right there! 120 | Dialogue: 0,0:07:51.80,0:07:54.08,DMain,Shikimori,0,0,0,,Oh... So we are. 121 | Dialogue: 0,0:07:54.08,0:07:56.62,DItalics,Izumi,0,0,0,,Thank you, God! 122 | Dialogue: 0,0:07:58.27,0:08:00.63,DMain,Shikimori,0,0,0,,I look forward to studying with you again this year. 123 | Dialogue: 0,0:08:00.63,0:08:04.13,DMain,Izumi,0,0,0,,Oh, likewise! Let's make it a good one. 124 | Dialogue: 0,0:08:04.13,0:08:06.63,DMain,Nekozaki,0,0,0,,Micchon! 125 | Dialogue: 0,0:08:08.87,0:08:10.09,DMain,Shikimori,0,0,0,,Neko! 126 | Dialogue: 0,0:08:11.97,0:08:14.27,DMain,Nekozaki,0,0,0,,We're together again this year!\N Hachimitsu, too! 127 | Dialogue: 0,0:08:14.27,0:08:15.73,DMain,Hachimitsu,0,0,0,,'Sup? 128 | Dialogue: 0,0:08:17.60,0:08:18.78,DMain,Nekozaki,0,0,0,,Let's take a pic! 129 | Dialogue: 0,0:08:20.16,0:08:21.56,DMain,Inuzuka,0,0,0,,Izumi! 130 | Dialogue: 0,0:08:21.88,0:08:23.72,DMain,Inuzuka,0,0,0,,Looks like we're in the same class again. 131 | Dialogue: 0,0:08:23.72,0:08:25.11,DMain,Izumi,0,0,0,,Inuzuka-kun! 132 | Dialogue: 0,0:08:26.07,0:08:29.51,DMain,Izumi,0,0,0,,You're in Class 4, too? That's great! 133 | Dialogue: 0,0:08:29.51,0:08:31.25,DMain,Izumi,0,0,0,,Looking forward to another year together. 134 | Dialogue: 0,0:08:31.25,0:08:32.28,DMain,Inuzuka,0,0,0,,Same. 135 | Dialogue: 0,0:08:32.79,0:08:34.41,DMain,Inuzuka,0,0,0,,Shikimori's with us, too, huh? 136 | Dialogue: 0,0:08:35.49,0:08:36.45,DMain,Izumi,0,0,0,,Yep. 137 | Dialogue: 0,0:08:36.93,0:08:39.61,DMain,Izumi,0,0,0,,Shikimori-san, I'll see you later, okay? 138 | Dialogue: 0,0:08:39.61,0:08:40.71,DMain,Shikimori,0,0,0,,Okay. 139 | Dialogue: 0,0:08:42.30,0:08:45.16,DItalics,Izumi,0,0,0,,I'm so glad we're in the same class. 140 | Dialogue: 0,0:08:46.18,0:08:49.97,DItalics,Izumi,0,0,0,,But I got kinda carried away, didn't I? 141 | Dialogue: 0,0:08:51.32,0:08:52.12,DMain,Izumi,0,0,0,,Oh... 142 | Dialogue: 0,0:08:53.28,0:08:56.85,DMain,Izumi,0,0,0,,By the way, Shikimori-san, when we go home today... 143 | Dialogue: 0,0:08:57.63,0:09:00.85,DMain,Shikimori,0,0,0,,Hell yeah! 144 | Dialogue: 0,0:09:02.91,0:09:04.34,DMain,Izumi,0,0,0,,Shikimori-san? 145 | Dialogue: 0,0:09:05.47,0:09:08.67,DMain,Nekozaki,0,0,0,,Looks like you flipped out a little too soon, Micchon. 146 | Dialogue: 0,0:09:08.67,0:09:10.30,DMain,Hachimitsu,0,0,0,,You're really on cloud nine. 147 | Dialogue: 0,0:09:15.82,0:09:19.96,DMain,Homeroom Teacher,0,0,0,,The younger students will now\Nlook up to you as their upperclassmen. 148 | Dialogue: 0,0:09:20.53,0:09:23.67,DMain,Homeroom Teacher,0,0,0,,You'll most likely be the central focus at school events. 149 | Dialogue: 0,0:09:24.33,0:09:26.50,DMain,Homeroom Teacher,0,0,0,,Let's make this a fun year. 150 | Dialogue: 0,0:09:26.99,0:09:29.27,DMain,Homeroom Teacher,0,0,0,,I'm sure not all of you are acquainted yet, 151 | Dialogue: 0,0:09:29.27,0:09:32.05,DMain,Homeroom Teacher,0,0,0,,so let's start with some quick introductions. 152 | Dialogue: 0,0:09:32.59,0:09:35.67,DMain,Homeroom Teacher,0,0,0,,We'll go in seat number order,\Nso Izumi-kun, you're up first. 153 | Dialogue: 0,0:09:35.67,0:09:36.80,DMain,Izumi,0,0,0,,Yes, ma'am! 154 | Dialogue: 0,0:09:39.11,0:09:40.37,DMain,Izumi,0,0,0,,I'm Ijumi. 155 | Dialogue: 0,0:09:41.22,0:09:42.94,DMain,Classmate 1,0,0,0,,He blew it! 156 | Dialogue: 0,0:09:47.14,0:09:50.21,DItalics,Izumi,0,0,0,,Today, I started my second year of high school. 157 | Dialogue: 0,0:09:51.95,0:09:53.84,DMain,Classmate 2,0,0,0,,Huh? What just happened? 158 | Dialogue: 0,0:09:53.84,0:09:56.83,DMain,Classmate 3,0,0,0,,It just kinda... went flying... 159 | Dialogue: 0,0:09:57.36,0:10:00.70,DMain,Izumi,0,0,0,,Shikimori-san, you never get angry, do you? 160 | Dialogue: 0,0:10:01.47,0:10:04.08,DMain,Shikimori,0,0,0,,You're asking me that {\i1}right now?{\i0} 161 | Dialogue: 0,0:10:05.30,0:10:06.59,DMain,Izumi,0,0,0,,Sorry. 162 | Dialogue: 0,0:10:19.42,0:10:21.77,DMain,Izumi,0,0,0,,Th-Thanks... 163 | Dialogue: 0,0:10:21.77,0:10:22.68,DMain,Shikimori,0,0,0,,Sure. 164 | Dialogue: 0,0:10:23.06,0:10:24.42,DMain,Izumi,0,0,0,,Are you okay? 165 | Dialogue: 0,0:10:24.42,0:10:29.07,DMain,Shikimori,0,0,0,,I'm fine. I'm just glad you weren't hurt. 166 | Dialogue: 0,0:10:32.48,0:10:34.17,DMain,Izumi,0,0,0,,Sorry this stuff always happens. 167 | Dialogue: 0,0:10:38.53,0:10:41.50,DMain,Shikimori,0,0,0,,I-I'm going to the restroom to clean up! 168 | Dialogue: 0,0:10:41.89,0:10:42.71,DMain,Izumi,0,0,0,,Uh... 169 | Dialogue: 0,0:10:43.11,0:10:44.33,DMain,Classmate 4,0,0,0,,Izumi! 170 | Dialogue: 0,0:10:44.71,0:10:48.68,DMain,Classmate 4,0,0,0,,Look at you, showing off. I'm jealous, man. 171 | Dialogue: 0,0:10:48.68,0:10:51.46,DMain,Classmate 5,0,0,0,,Being naturally unlucky must really suck, huh? 172 | Dialogue: 0,0:10:52.12,0:10:55.33,DMain,Classmate 6,0,0,0,,Where'd that eraser even come from, anyway? 173 | Dialogue: 0,0:10:55.33,0:10:56.59,DMain,Izumi,0,0,0,,Good question... 174 | Dialogue: 0,0:10:56.97,0:10:58.59,DMain,Classmate 4,0,0,0,,Better be careful. 175 | Dialogue: 0,0:10:58.59,0:11:01.41,DMain,Classmate 4,0,0,0,,Don't cause too much trouble for\Nthat cute girlfriend of yours. 176 | Dialogue: 0,0:11:01.41,0:11:03.75,DMain,Classmate 6,0,0,0,,Yeah, she'd get tangled up in your misfortune. 177 | Dialogue: 0,0:11:05.15,0:11:09.66,DMain,Classmate 5,0,0,0,,Why the heck is Shikimori-san with {\i1}Izumi{\i0}, anyway? 178 | Dialogue: 0,0:11:09.66,0:11:11.48,DMain,Classmate 4,0,0,0,,Yeah, he's so dull. 179 | Dialogue: 0,0:11:11.48,0:11:13.52,DMain,Classmate 4,0,0,0,,I mean, so are we, but... 180 | Dialogue: 0,0:11:13.52,0:11:16.03,DMain,Classmate 6,0,0,0,,Damn, I'm so jealous! 181 | Dialogue: 0,0:11:16.45,0:11:21.78,DMain,Classmate 5,0,0,0,,Seriously, what's a guy gotta do\Nto get a girlfriend that cute? 182 | Dialogue: 0,0:11:21.79,0:11:23.11,DMain,Classmate 4,0,0,0,,I know, right? 183 | Dialogue: 0,0:11:25.17,0:11:27.54,DMain,Shikimori,0,0,0,,Izumi-san, I'm back. 184 | Dialogue: 0,0:11:27.54,0:11:31.12,DMain,Izumi,0,0,0,,Oh, hey. Are you okay, Shikimori-san? 185 | Dialogue: 0,0:11:31.12,0:11:32.09,DMain,Shikimori,0,0,0,,Yes. 186 | Dialogue: 0,0:11:32.09,0:11:36.05,DMain,Shikimori,0,0,0,,Izumi-san, would you mind coming\Nto the library with me for a sec? 187 | Dialogue: 0,0:11:36.05,0:11:36.89,DMain,Izumi,0,0,0,,Sure. 188 | Dialogue: 0,0:11:36.89,0:11:39.49,DMain,Classmate 6,0,0,0,,Uh-oh. I hope she didn't hear us. 189 | Dialogue: 0,0:11:39.49,0:11:41.31,DMain,Classmate 4,0,0,0,,Nah, we're probably fine. 190 | Dialogue: 0,0:11:50.60,0:11:51.63,DMain,Classmate 4,0,0,0,,That was scary! 191 | Dialogue: 0,0:11:51.63,0:11:52.57,DMain,Classmate 5,0,0,0,,But... 192 | Dialogue: 0,0:11:52.57,0:11:55.11,DMain,Classmate 6,0,0,0,,I-It was kinda awesome. 193 | Dialogue: 0,0:11:57.84,0:12:01.87,DMain,Shikimori,0,0,0,,I might just be a little bit petty. 194 | Dialogue: 0,0:12:02.88,0:12:05.12,DMain,Izumi,0,0,0,,I wouldn't say that. 195 | Dialogue: 0,0:12:06.73,0:12:10.21,DMain,Shikimori,0,0,0,,I don't think you need to worry\Nabout what happened back there! 196 | Dialogue: 0,0:12:10.21,0:12:11.21,DMain,Izumi,0,0,0,,Huh? 197 | Dialogue: 0,0:12:11.84,0:12:12.96,DMain,Izumi,0,0,0,,What do you mean? 198 | Dialogue: 0,0:12:14.71,0:12:16.97,DMain,Shikimori,0,0,0,,Oh, nothing... 199 | Dialogue: 0,0:12:18.52,0:12:21.97,DItalics,Izumi,0,0,0,,My girlfriend is cute, but... 200 | Dialogue: 0,0:12:23.10,0:12:28.74,DItalics,Izumi,0,0,0,,I'd really hate it if she were hurt because of me. 201 | Dialogue: 0,0:12:35.36,0:12:37.00,DMain,Inuzuka,0,0,0,,Izumi! 202 | Dialogue: 0,0:12:37.82,0:12:40.26,DMain,Inuzuka,0,0,0,,Wanna go do something now that school's out? 203 | Dialogue: 0,0:12:42.47,0:12:44.58,DMain,Izumi,0,0,0,,You don't have work today, Inuzuka-kun? 204 | Dialogue: 0,0:12:46.76,0:12:49.58,DMain,Inuzuka,0,0,0,,I got the day off to celebrate the start of the school year! 205 | Dialogue: 0,0:12:49.90,0:12:50.89,DMain,Izumi,0,0,0,,Let's go, then. 206 | Dialogue: 0,0:12:50.89,0:12:53.84,DMain,Inuzuka,0,0,0,,That's my boy! You might look boring,\Nbut you're down for anything! 207 | Dialogue: 0,0:12:53.84,0:12:58.34,DMain,Izumi,0,0,0,,Well, I've been thinking I want to hang out with you more. 208 | Dialogue: 0,0:12:58.34,0:13:01.09,DMain,Inuzuka,0,0,0,,Oh, yeah? 209 | Dialogue: 0,0:13:02.01,0:13:03.80,DMain,Izumi,0,0,0,,I'll go let Shikimori-san know. 210 | Dialogue: 0,0:13:03.80,0:13:04.50,DMain,Inuzuka,0,0,0,,Okay. 211 | Dialogue: 0,0:13:05.46,0:13:08.13,DMain,Nekozaki,0,0,0,,Oh, you guys are going out, too? 212 | Dialogue: 0,0:13:08.79,0:13:11.06,DMain,Nekozaki,0,0,0,,We should all hang out together, then! 213 | Dialogue: 0,0:13:11.06,0:13:13.41,DMain,Hachimitsu,0,0,0,,I guess we're all about to become better friends. 214 | Dialogue: 0,0:13:13.41,0:13:15.11,DMain,Izumi,0,0,0,,Is that okay with you, Shikimori-san? 215 | Dialogue: 0,0:13:15.11,0:13:17.11,DMain,Shikimori,0,0,0,,Yes! Of course! 216 | Dialogue: 0,0:13:17.49,0:13:18.88,DMain,Izumi,0,0,0,,This should be fun. 217 | Dialogue: 0,0:13:18.88,0:13:21.49,DMain,Shikimori-san,0,0,0,,Y-Yeah, you're right... 218 | Dialogue: 0,0:13:25.37,0:13:27.53,DMain,Nekozaki,0,0,0,,Such innocence. 219 | Dialogue: 0,0:13:27.53,0:13:29.48,DMain,Hachimitsu,0,0,0,,Even if we get an unasked-for tag-along. 220 | Dialogue: 0,0:13:29.48,0:13:30.37,DMain,Inuzuka,0,0,0,,You mean me?! 221 | Dialogue: 0,0:13:30.37,0:13:32.99,DMain,Inuzuka,0,0,0,,I could say the same about you two! 222 | Dialogue: 0,0:13:35.88,0:13:40.05,DMain,Inuzuka,0,0,0,,Loser has to treat whoever gets the highest score. 223 | Dialogue: 0,0:13:40.40,0:13:41.80,DMain,Nekozaki,0,0,0,,Fine by me. 224 | Dialogue: 0,0:13:44.06,0:13:46.06,DMain,Hachimitsu,0,0,0,,Count me out. 225 | Dialogue: 0,0:13:46.43,0:13:48.09,DMain,Izumi,0,0,0,,How spirited... 226 | Dialogue: 0,0:13:48.09,0:13:50.18,DMain,Shikimori,0,0,0,,They sure are raring to go. 227 | Dialogue: 0,0:13:50.91,0:13:53.63,DMain,Izumi,0,0,0,,Have you ever bowled before, Shikimori-san? 228 | Dialogue: 0,0:13:53.63,0:13:57.24,DMain,Shikimori,0,0,0,,Not very often. Two or three times, maybe. 229 | Dialogue: 0,0:13:57.24,0:13:59.57,DMain,Izumi,0,0,0,,Yeah, about the same for me. 230 | Dialogue: 0,0:14:03.87,0:14:06.15,DMain,Shikimori,0,0,0,,But I'm looking forward to it. 231 | Dialogue: 0,0:14:09.95,0:14:13.00,DMain,Izumi,0,0,0,,I-I'll go get our balls! 232 | Dialogue: 0,0:14:13.51,0:14:15.01,DMain,Izumi,0,0,0,,Come with me, Inuzuka-kun! 233 | Dialogue: 0,0:14:15.01,0:14:17.00,DMain,Inuzuka,0,0,0,,Huh? Oh, sure. 234 | Dialogue: 0,0:14:19.02,0:14:20.59,DMain,Nekozaki,0,0,0,,Micchon! 235 | Dialogue: 0,0:14:21.33,0:14:23.99,DMain,Nekozaki,0,0,0,,This is your chance, Micchon. 236 | Dialogue: 0,0:14:23.99,0:14:25.40,DMain,Shikimori,0,0,0,,My chance? 237 | Dialogue: 0,0:14:25.40,0:14:27.05,DMain,Hachimitsu,0,0,0,,Don't play dumb. 238 | Dialogue: 0,0:14:27.05,0:14:29.46,DMain,Nekozaki,0,0,0,,You pretend to suck at bowling 239 | Dialogue: 0,0:14:29.46,0:14:32.11,DMain,Nekozaki,0,0,0,,and let your bae have all the glory! 240 | Dialogue: 0,0:14:32.11,0:14:34.31,DMain,Shikimori,0,0,0,,My b-bae? 241 | Dialogue: 0,0:14:34.31,0:14:36.49,DMain,Shikimori,0,0,0,,But pretending to be bad at it is just... 242 | Dialogue: 0,0:14:36.49,0:14:40.44,DMain,Hachimitsu,0,0,0,,For girls, being bad at stuff translates to cuteness. 243 | Dialogue: 0,0:14:40.74,0:14:42.71,DMain,Inuzuka,0,0,0,,All right! Let's get started! 244 | Dialogue: 0,0:14:42.71,0:14:44.32,DMain,Inuzuka,0,0,0,,I'm up first! 245 | Dialogue: 0,0:14:44.87,0:14:46.30,DMain,Nekozaki,0,0,0,,Woo-hoo! 246 | Dialogue: 0,0:14:50.95,0:14:54.83,DMain,Inuzuka,0,0,0,,Gah! Shoulda known I wouldn't get a strike on the first throw! 247 | Dialogue: 0,0:14:58.39,0:14:59.94,DMain,Nekozaki,0,0,0,,He's pretty good... 248 | Dialogue: 0,0:14:59.94,0:15:01.46,DMain,Hachimitsu,0,0,0,,Not bad. 249 | Dialogue: 0,0:15:10.05,0:15:11.89,DMain,Hachimitsu,0,0,0,,Keep it down, Nekozaki. 250 | Dialogue: 0,0:15:11.89,0:15:13.98,DMain,Inuzuka,0,0,0,,Don't break the pins. 251 | Dialogue: 0,0:15:28.15,0:15:29.22,DMain,Hachimitsu,0,0,0,,Hup! 252 | Dialogue: 0,0:15:34.04,0:15:35.29,DMain,Inuzuka,0,0,0,,So slow... 253 | Dialogue: 0,0:15:41.72,0:15:43.03,DMain,Inuzuka,0,0,0,,What the—?! 254 | Dialogue: 0,0:15:43.50,0:15:44.58,DMain,Hachimitsu,0,0,0,,Ayup. 255 | Dialogue: 0,0:15:44.58,0:15:46.55,DMain,Izumi,0,0,0,,That was awesome, Hachimitsu-san! 256 | Dialogue: 0,0:15:52.14,0:15:53.18,DMain,Izumi,0,0,0,,Shikimori-san? 257 | Dialogue: 0,0:15:53.18,0:15:55.18,DMain,Shikimori,0,0,0,,Y-Yes?! 258 | Dialogue: 0,0:15:55.18,0:15:56.27,DMain,Izumi,0,0,0,,What's wrong? 259 | Dialogue: 0,0:15:56.27,0:15:57.47,DMain,Shikimori,0,0,0,,Uh, nothing... 260 | Dialogue: 0,0:15:58.18,0:16:00.83,DMain,Shikimori,0,0,0,,Maybe it {\i1}would{\i0} be better to go for cuteness... 261 | Dialogue: 0,0:15:59.36,0:16:01.44,DMain,Inuzuka,0,0,0,,{\an8}I can't believe Hachimitsu got a strike. 262 | Dialogue: 0,0:16:01.44,0:16:02.94,DMain,Nekozaki,0,0,0,,{\an8}That came outta nowhere. 263 | Dialogue: 0,0:16:01.44,0:16:02.94,DMain,Izumi,0,0,0,,Hmm? What'd you say? 264 | Dialogue: 0,0:16:03.47,0:16:05.11,DMain,Inuzuka,0,0,0,,You're up next, Izumi. 265 | Dialogue: 0,0:16:05.49,0:16:07.30,DMain,Izumi,0,0,0,,Oh, but... 266 | Dialogue: 0,0:16:07.30,0:16:09.36,DMain,Shikimori,0,0,0,,Go on, Izumi-san. 267 | Dialogue: 0,0:16:10.65,0:16:11.62,DMain,Izumi,0,0,0,,Okay. 268 | Dialogue: 0,0:16:15.73,0:16:17.50,DMain,Nekozaki,0,0,0,,Think it'll stay on course? 269 | Dialogue: 0,0:16:20.60,0:16:21.66,DMain,Izumi,0,0,0,,Huh? 270 | Dialogue: 0,0:16:28.76,0:16:30.92,DMain,Inuzuka,0,0,0,,Now {\i1}that{\i0} was a real miracle! 271 | Dialogue: 0,0:16:30.92,0:16:33.71,DMain,Nekozaki,0,0,0,,Just too frickin' predictable! 272 | Dialogue: 0,0:16:33.71,0:16:36.02,DMain,Izumi,0,0,0,,The ball just curved on its own... 273 | Dialogue: 0,0:16:36.42,0:16:38.27,DMain,Inuzuka,0,0,0,,You're up, Shikimori. 274 | Dialogue: 0,0:16:38.93,0:16:40.15,DMain,Nekozaki,0,0,0,,Micchon. 275 | Dialogue: 0,0:16:40.56,0:16:41.91,DMain,Nekozaki,0,0,0,,You know what to do, right? 276 | Dialogue: 0,0:16:42.36,0:16:45.20,DMain,Nekozaki,0,0,0,,You want your bae to think you're cute, don't you? 277 | Dialogue: 0,0:16:48.64,0:16:50.11,DItalics,Shikimori,0,0,0,,Cute... 278 | Dialogue: 0,0:16:51.39,0:16:55.20,DItalics,Shikimori,0,0,0,,I want to hear that!\NI want to hear him say I'm cute! 279 | Dialogue: 0,0:16:58.98,0:17:00.58,DMain,Izumi,0,0,0,,Shikimori-san! 280 | Dialogue: 0,0:17:01.30,0:17:02.55,DMain,Izumi,0,0,0,,You can do it! 281 | Dialogue: 0,0:17:22.05,0:17:24.00,DMain,Man,0,0,0,,Hey, check it out. 282 | Dialogue: 0,0:17:24.73,0:17:26.24,DMain,Woman,0,0,0,,What's up? 283 | Dialogue: 0,0:17:26.24,0:17:27.86,DMain,Man,0,0,0,,She's about to get a perfect score. 284 | Dialogue: 0,0:17:28.21,0:17:29.64,DMain,Woman 2,0,0,0,,Whoa, no way! 285 | Dialogue: 0,0:17:29.64,0:17:31.61,DMain,Woman 3,0,0,0,,For real?! That's nuts! 286 | Dialogue: 0,0:17:32.44,0:17:34.62,DMain,Nekozaki,0,0,0,,Y-You've gotta be kidding... 287 | Dialogue: 0,0:17:34.62,0:17:37.12,DMain,Inuzuka,0,0,0,,What is she, a monster? 288 | Dialogue: 0,0:17:51.34,0:17:53.44,DMain,Izumi,0,0,0,,Th-That was so cool! 289 | Dialogue: 0,0:17:53.44,0:17:55.20,DMain,Shikimori,0,0,0,,Izumi-san, hold up your hands! 290 | Dialogue: 0,0:17:56.17,0:17:57.85,DMain,Izumi,0,0,0,,L-Like this? 291 | Dialogue: 0,0:17:57.85,0:17:59.42,DMain,Shikimori,0,0,0,,I did it! 292 | Dialogue: 0,0:18:02.50,0:18:04.98,DItalics,Izumi,0,0,0,,She is seriously so cute! 293 | Dialogue: 0,0:18:05.37,0:18:08.75,DMain,Inuzuka,0,0,0,,All I see is the bold, fearless smile of a powerhouse. 294 | Dialogue: 0,0:18:08.75,0:18:10.09,DMain,Nekozaki,0,0,0,,Just what {\i1}is{\i0} she? 295 | Dialogue: 0,0:18:10.59,0:18:13.74,DMain,Hachimitsu,0,0,0,,I guess she chose looking cool over looking cute. 296 | Dialogue: 0,0:18:18.74,0:18:20.30,DMain,Inuzuka,0,0,0,,See ya. 297 | Dialogue: 0,0:18:20.30,0:18:21.87,DMain,Nekozaki,0,0,0,,Bye-bee! 298 | Dialogue: 0,0:18:21.87,0:18:23.75,DMain,Hachimitsu,0,0,0,,Adieu. 299 | Dialogue: 0,0:18:29.15,0:18:30.67,DMain,Izumi,0,0,0,,Oh, I almost forgot. 300 | Dialogue: 0,0:18:30.67,0:18:33.85,DMain,Izumi,0,0,0,,The loser was supposed to treat the highest scorer, right? 301 | Dialogue: 0,0:18:33.85,0:18:36.26,DMain,Shikimori,0,0,0,,Oh, you don't have to do that. 302 | Dialogue: 0,0:18:36.82,0:18:37.82,DMain,Izumi,0,0,0,,But... 303 | Dialogue: 0,0:18:38.53,0:18:41.27,DMain,Shikimori,0,0,0,,In that case, please walk home with me. 304 | Dialogue: 0,0:18:41.27,0:18:46.02,DMain,Izumi,0,0,0,,Huh? But we always do that... 305 | Dialogue: 0,0:18:46.02,0:18:47.97,DMain,Shikimori,0,0,0,,That's why I want it. 306 | Dialogue: 0,0:18:56.24,0:18:59.15,DMain,Izumi,0,0,0,,W-Wow, it's so windy! 307 | Dialogue: 0,0:18:59.84,0:19:01.85,DMain,Shikimori,0,0,0,,It's messing up your hair! 308 | Dialogue: 0,0:19:01.85,0:19:04.00,DMain,Izumi,0,0,0,,Well, you should see yours! 309 | Dialogue: 0,0:19:05.20,0:19:09.75,DMain,Shikimori,0,0,0,,There have been a lot of empty cans\Nand things blowing around... 310 | Dialogue: 0,0:19:09.75,0:19:11.39,DMain,Shikimori,0,0,0,,straight at you. 311 | Dialogue: 0,0:19:11.39,0:19:12.76,DMain,Izumi,0,0,0,,Sorry. 312 | Dialogue: 0,0:19:19.77,0:19:21.32,DMain,Shikimori,0,0,0,,Are you all right? 313 | Dialogue: 0,0:19:21.32,0:19:22.93,DMain,Izumi,0,0,0,,Y-Yeah. 314 | Dialogue: 0,0:19:23.53,0:19:27.20,DItalics,Izumi,0,0,0,,How did she perfectly block\Nthat newspaper without even looking at it? 315 | Dialogue: 0,0:19:27.60,0:19:28.94,DItalics,Izumi,0,0,0,,Incredible. 316 | Dialogue: 0,0:19:30.70,0:19:32.73,DMain,Izumi,0,0,0,,Thanks, Shikimori-san. 317 | Dialogue: 0,0:19:32.73,0:19:34.69,DMain,Izumi,0,0,0,,I really am sorry this stuff always happens. 318 | Dialogue: 0,0:19:36.09,0:19:40.20,DMain,Shikimori,0,0,0,,Aren't I always telling you that you don't need to apologize? 319 | Dialogue: 0,0:19:40.20,0:19:42.69,DMain,Izumi,0,0,0,,Oh, sorry— Er... 320 | Dialogue: 0,0:19:44.87,0:19:47.38,DMain,Shikimori,0,0,0,,I've gotten used to this stuff happening. 321 | Dialogue: 0,0:19:47.38,0:19:48.92,DMain,Shikimori,0,0,0,,Don't worry about it. 322 | Dialogue: 0,0:19:50.71,0:19:55.33,DMain,Izumi,0,0,0,,Yeah, but I feel pathetic when you\Nhave to protect me all the time. 323 | Dialogue: 0,0:20:03.21,0:20:04.59,DMain,Izumi,0,0,0,,Shikimori-san? 324 | Dialogue: 0,0:20:05.75,0:20:09.81,DMain,Shikimori,0,0,0,,Did it bother you when those guys in class were teasing you? 325 | Dialogue: 0,0:20:10.46,0:20:14.32,DMain,Izumi,0,0,0,,Well, no... What they said was true, after all. 326 | Dialogue: 0,0:20:14.71,0:20:18.00,DMain,Izumi,0,0,0,,I really don't do a thing for you. 327 | Dialogue: 0,0:20:21.01,0:20:23.83,DMain,Izumi,0,0,0,,At this rate, I'll... 328 | Dialogue: 0,0:20:38.84,0:20:40.68,DMain,Shikimori,0,0,0,,Izumi-san... 329 | Dialogue: 0,0:20:46.51,0:20:49.27,DMain,Shikimori,0,0,0,,All you need to do is stay by my side. 330 | Dialogue: 0,0:20:50.15,0:20:54.25,DMain,Shikimori,0,0,0,,It doesn't matter to me what people say. 331 | Dialogue: 0,0:20:54.25,0:20:58.62,DMain,Shikimori,0,0,0,,I'm going to keep protecting you because I {\i1}want{\i0} to. 332 | Dialogue: 0,0:21:01.73,0:21:04.80,DItalics,Izumi,0,0,0,,After all, my girlfriend is so incredibly cool. 333 | Dialogue: 0,0:21:05.45,0:21:06.96,DItalics,Izumi,0,0,0,,And for that... 334 | Dialogue: 0,0:21:07.73,0:21:08.46,DMain,Izumi,0,0,0,,I'm in love. 335 | Dialogue: 0,0:21:08.46,0:21:10.37,DMain,Shikimori,0,0,0,,I-Is this really the time to say that?! 336 | Dialogue: 0,0:21:14.42,0:21:16.72,DMain,Izumi,0,0,0,,Oh, you're not hurt, are you? 337 | Dialogue: 0,0:21:16.72,0:21:18.60,DMain,Izumi,0,0,0,,Is your foot okay? 338 | Dialogue: 0,0:21:18.60,0:21:19.55,DMain,Shikimori,0,0,0,,Huh?! 339 | Dialogue: 0,0:21:19.55,0:21:22.43,DMain,Shikimori,0,0,0,,Uh, y-yes! It's just fine! 340 | Dialogue: 0,0:21:23.27,0:21:27.36,DMain,Izumi,0,0,0,,You were amazing just now!\NIt was almost like... like... 341 | Dialogue: 0,0:21:29.14,0:21:31.19,DMain,Shikimori,0,0,0,,It was just a coincidence! Pure coincidence! 342 | Dialogue: 0,0:21:33.20,0:21:34.31,DMain,Izumi,0,0,0,,Really? 343 | Dialogue: 0,0:21:35.27,0:21:36.23,DMain,Shikimori,0,0,0,,Yes. 344 | Dialogue: 0,0:21:36.65,0:21:37.57,DMain,Izumi,0,0,0,,Are you sure? 345 | Dialogue: 0,0:21:37.57,0:21:38.93,DMain,Shikimori,0,0,0,,Huh? 346 | Dialogue: 0,0:21:39.44,0:21:42.59,DMain,Shikimori,0,0,0,,Yes, I'm sure! I'm absolutely fine! 347 | Dialogue: 0,0:21:42.59,0:21:44.62,DMain,Shikimori,0,0,0,,What about you? Are you all right? 348 | Dialogue: 0,0:21:44.62,0:21:47.77,DMain,Izumi,0,0,0,,I'm totally fine, thanks to you. 349 | Dialogue: 0,0:21:48.26,0:21:50.03,DMain,Shikimori,0,0,0,,That's a relief! 350 | Comment: 0,0:04:31.00,0:04:31.00,DMain,,0,0,0,import-shifted,../Common/OP1.ass 351 | Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,import,../Common/OP1_E.ass 352 | Comment: 0,0:04:31.00,0:04:31.00,DMain,,0,0,0,import-shifted,../Common/OP Signs.ass 353 | Comment: 0,0:21:53.96,0:21:53.96,DMain,,0,0,0,import-shifted,../Common/ED1v0.ass 354 | Comment: 0,0:00:00.00,0:00:00.00,DMain,,0,0,0,import,Kawaii dake ja Nai Shikimori-san - 01 - TS1.ass 355 | Comment: 0,0:00:00.00,0:00:00.00,DMain,,0,0,0,import,Kawaii dake ja Nai Shikimori-san - 01 - TS2.ass 356 | -------------------------------------------------------------------------------- /Ameko/Models/EventGridItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Ameko.AssCS; 3 | using Ameko.ViewModels; 4 | using AvaloniaEdit.Document; 5 | using ReactiveUI; 6 | 7 | namespace Ameko.Models; 8 | 9 | /// 10 | /// This class wraps the AssEvent object allowing for dynamic adjustment of 11 | /// values in the UI 12 | /// 13 | public class EventGridItem : ViewModelBase 14 | { 15 | private uint _index; 16 | private readonly AssEvent _event; 17 | private TextDocument _document; 18 | 19 | private bool _comment; 20 | private int _layer; 21 | private AssTime? _start; 22 | private AssTime? _end; 23 | private string? _startT; 24 | private string? _endT; 25 | private string? _style; 26 | private string? _actor; 27 | private int _marL; 28 | private int _marR; 29 | private int _marV; 30 | private string? _effect; 31 | private string? _text; 32 | 33 | public EventGridItem(uint index) 34 | { 35 | this._index = index; 36 | this._event = AssEvent.Default(); 37 | this._comment = _event.Comment; 38 | this._layer = _event.Layer; 39 | this._start = _event.Start; 40 | this._end = _event.End; 41 | this._startT = this._start!.ToString(); 42 | this._endT = this._end!.ToString(); 43 | this._style = _event.Style; 44 | this._actor = _event.Actor; 45 | this._marL = _event.MarginL; 46 | this._marR = _event.MarginR; 47 | this._marV = _event.MarginV; 48 | this._effect = _event.Effect; 49 | this._text = _event.Text; 50 | this._document = new TextDocument(_event.Text); 51 | this._document.TextChanged += this.OnDocumentTextChanged; 52 | } 53 | 54 | public EventGridItem(uint index, AssEvent line) { 55 | this._index = index; 56 | this._event = line; 57 | this._document = new TextDocument(); 58 | this._document.TextChanged += this.OnDocumentTextChanged; 59 | } 60 | 61 | #region Getters/Setters 62 | 63 | public uint Index 64 | { 65 | get => _index; 66 | set => this.RaiseAndSetIfChanged(ref _index, value); 67 | } 68 | 69 | public bool Comment 70 | { 71 | get => _comment; 72 | set 73 | { 74 | this.RaiseAndSetIfChanged(ref _comment, value); 75 | _event.Comment = _comment; 76 | } 77 | } 78 | 79 | public int Layer 80 | { 81 | get => _layer; 82 | set 83 | { 84 | this.RaiseAndSetIfChanged(ref _layer, value); 85 | _event.Layer = _layer; 86 | } 87 | } 88 | 89 | public AssTime? Start 90 | { 91 | get => _start; 92 | set 93 | { 94 | this.RaiseAndSetIfChanged(ref _start, value); 95 | _event.Start = _start; 96 | _startT = _start!.ToString(); 97 | } 98 | } 99 | 100 | public string? StartText 101 | { 102 | get => _startT; 103 | set 104 | { 105 | this.RaiseAndSetIfChanged(ref _startT, value); 106 | _event.Start = AssTime.Make(value); 107 | } 108 | } 109 | 110 | public AssTime? End 111 | { 112 | get => _end; 113 | set 114 | { 115 | this.RaiseAndSetIfChanged(ref _end, value); 116 | _event.End = _end; 117 | _endT = _end!.ToString(); 118 | } 119 | } 120 | 121 | public string? EndText 122 | { 123 | get => _endT; 124 | set 125 | { 126 | this.RaiseAndSetIfChanged(ref _endT, value); 127 | _event.End = AssTime.Make(value); 128 | } 129 | } 130 | 131 | public string? Style 132 | { 133 | get => _style; 134 | set 135 | { 136 | this.RaiseAndSetIfChanged(ref _style, value); 137 | _event.Style = _style; 138 | } 139 | } 140 | 141 | public string? Actor 142 | { 143 | get => _actor; 144 | set 145 | { 146 | this.RaiseAndSetIfChanged(ref _actor, value); 147 | _event.Actor = _actor; 148 | } 149 | } 150 | 151 | public int MarginL 152 | { 153 | get => _marL; 154 | set 155 | { 156 | this.RaiseAndSetIfChanged(ref _marL, value); 157 | _event.MarginL = _marL; 158 | } 159 | } 160 | 161 | public int MarginR 162 | { 163 | get => _marR; 164 | set 165 | { 166 | this.RaiseAndSetIfChanged(ref _marR, value); 167 | _event.MarginR = _marR; 168 | } 169 | } 170 | 171 | public int MarginV 172 | { 173 | get => _marV; 174 | set 175 | { 176 | this.RaiseAndSetIfChanged(ref _marV, value); 177 | _event.MarginV = _marV; 178 | } 179 | } 180 | 181 | public string? Effect 182 | { 183 | get => _effect; 184 | set 185 | { 186 | this.RaiseAndSetIfChanged(ref _effect, value); 187 | _event.Effect = _effect; 188 | } 189 | } 190 | 191 | public string? Text 192 | { 193 | get => _text; 194 | set 195 | { 196 | this.RaiseAndSetIfChanged(ref _text, value); 197 | _event.Text = _text; 198 | if (!_document.Text.Equals(value)) 199 | _document.Text = value; 200 | } 201 | } 202 | 203 | public TextDocument Document 204 | { 205 | get => _document; 206 | set => this.RaiseAndSetIfChanged(ref _document, value); 207 | } 208 | 209 | #endregion Getters/Setters 210 | 211 | private void OnDocumentTextChanged(object? sender, EventArgs e) 212 | { 213 | Text = _document.Text; 214 | } 215 | } -------------------------------------------------------------------------------- /Ameko/Models/EventGridItems.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | 3 | namespace Ameko.Models; 4 | 5 | public class EventGridItems : ObservableCollection 6 | { 7 | public EventGridItems() 8 | { 9 | this.Add(new EventGridItem(1)); 10 | } 11 | } -------------------------------------------------------------------------------- /Ameko/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Avalonia; 3 | using Avalonia.Controls.ApplicationLifetimes; 4 | using Avalonia.ReactiveUI; 5 | 6 | namespace Ameko 7 | { 8 | class Program 9 | { 10 | // Initialization code. Don't use any Avalonia, third-party APIs or any 11 | // SynchronizationContext-reliant code before AppMain is called: things aren't initialized 12 | // yet and stuff might break. 13 | [STAThread] 14 | public static void Main(string[] args) => BuildAvaloniaApp() 15 | .StartWithClassicDesktopLifetime(args); 16 | 17 | // Avalonia configuration, don't remove; also used by visual designer. 18 | public static AppBuilder BuildAvaloniaApp() 19 | => AppBuilder.Configure() 20 | .UsePlatformDetect() 21 | .LogToTrace() 22 | .UseReactiveUI(); 23 | } 24 | } -------------------------------------------------------------------------------- /Ameko/ViewLocator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Ameko.ViewModels; 3 | using Avalonia.Controls; 4 | using Avalonia.Controls.Templates; 5 | 6 | namespace Ameko 7 | { 8 | public class ViewLocator : IDataTemplate 9 | { 10 | public IControl Build(object data) 11 | { 12 | var name = data.GetType().FullName!.Replace("ViewModel", "View"); 13 | var type = Type.GetType(name); 14 | 15 | if (type != null) 16 | { 17 | return (Control)Activator.CreateInstance(type)!; 18 | } 19 | else 20 | { 21 | return new TextBlock { Text = "Not Found: " + name }; 22 | } 23 | } 24 | 25 | public bool Match(object data) 26 | { 27 | return data is ViewModelBase; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Ameko/ViewModels/EventGroupViewModel.cs: -------------------------------------------------------------------------------- 1 | using Ameko.Models; 2 | using ReactiveUI; 3 | 4 | namespace Ameko.ViewModels; 5 | 6 | public class EventGroupViewModel : ViewModelBase 7 | { 8 | private EventGridItem? _currentEvent; 9 | 10 | public EventGridItem? CurrentEvent 11 | { 12 | get => _currentEvent; 13 | set => this.RaiseAndSetIfChanged(ref _currentEvent, value); 14 | } 15 | } -------------------------------------------------------------------------------- /Ameko/ViewModels/MainWindowViewModel.cs: -------------------------------------------------------------------------------- 1 |  2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Reactive; 5 | using Ameko.AssCS; 6 | using Ameko.Views; 7 | using Avalonia.Controls; 8 | using ReactiveUI; 9 | 10 | namespace Ameko.ViewModels 11 | { 12 | public class MainWindowViewModel : ViewModelBase 13 | { 14 | private AssFile? _file; 15 | public MainWindowViewModel() 16 | { 17 | EventGroupVm = new EventGroupViewModel(); 18 | } 19 | 20 | private EventGroupViewModel EventGroupVm { get; } 21 | 22 | public AssFile CurrentFile 23 | { 24 | get => _file!; 25 | set => this.RaiseAndSetIfChanged(ref _file, value); 26 | } 27 | 28 | } 29 | } -------------------------------------------------------------------------------- /Ameko/ViewModels/ViewModelBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using ReactiveUI; 5 | 6 | namespace Ameko.ViewModels 7 | { 8 | public class ViewModelBase : ReactiveObject 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /Ameko/Views/EventGrid.axaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Ameko/Views/EventGrid.axaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using Ameko.Models; 3 | using Avalonia; 4 | using Avalonia.Controls; 5 | using Avalonia.Markup.Xaml; 6 | 7 | namespace Ameko.Views; 8 | 9 | public partial class EventGrid : UserControl 10 | { 11 | public EventGrid() 12 | { 13 | InitializeComponent(); 14 | var grid = this.Get("SubGrid"); 15 | grid.Items = new EventGridItems(); 16 | grid.SelectedIndex = 0; 17 | } 18 | 19 | private void InitializeComponent() 20 | { 21 | AvaloniaXamlLoader.Load(this); 22 | } 23 | } -------------------------------------------------------------------------------- /Ameko/Views/EventTextArea.axaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Comment 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Ameko/Views/EventTextArea.axaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using Ameko.Models; 3 | using Avalonia; 4 | using Avalonia.Controls; 5 | using Avalonia.Data; 6 | using Avalonia.Markup.Xaml; 7 | using AvaloniaEdit; 8 | using AvaloniaEdit.Document; 9 | using ReactiveUI; 10 | 11 | namespace Ameko.Views; 12 | 13 | public partial class EventTextArea : UserControl 14 | { 15 | public EventTextArea() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void InitializeComponent() 21 | { 22 | AvaloniaXamlLoader.Load(this); 23 | } 24 | } -------------------------------------------------------------------------------- /Ameko/Views/MainWindow.axaml: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Ameko/Views/MainWindow.axaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Reactive; 3 | using System.Threading.Tasks; 4 | using Ameko.ViewModels; 5 | using Avalonia.Controls; 6 | using Avalonia.ReactiveUI; 7 | using ReactiveUI; 8 | 9 | namespace Ameko.Views 10 | { 11 | public partial class MainWindow : ReactiveWindow 12 | { 13 | public MainWindow() 14 | { 15 | InitializeComponent(); 16 | } 17 | 18 | } 19 | } -------------------------------------------------------------------------------- /Ameko/Views/MenuBar.axaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Ameko/Views/MenuBar.axaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Collections.ObjectModel; 3 | using System.Reactive; 4 | using Ameko.Models; 5 | using Avalonia; 6 | using Avalonia.Controls; 7 | using Avalonia.Markup.Xaml; 8 | using ReactiveUI; 9 | 10 | namespace Ameko.Views; 11 | 12 | public partial class MenuBar : UserControl 13 | { 14 | public MenuBar() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | private void InitializeComponent() 20 | { 21 | AvaloniaXamlLoader.Load(this); 22 | } 23 | } -------------------------------------------------------------------------------- /Ameko/icons.axaml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | 9 | This version of the GNU Lesser General Public License incorporates 10 | the terms and conditions of version 3 of the GNU General Public 11 | License, supplemented by the additional permissions listed below. 12 | 13 | 0. Additional Definitions. 14 | 15 | As used herein, "this License" refers to version 3 of the GNU Lesser 16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU 17 | General Public License. 18 | 19 | "The Library" refers to a covered work governed by this License, 20 | other than an Application or a Combined Work as defined below. 21 | 22 | An "Application" is any work that makes use of an interface provided 23 | by the Library, but which is not otherwise based on the Library. 24 | Defining a subclass of a class defined by the Library is deemed a mode 25 | of using an interface provided by the Library. 26 | 27 | A "Combined Work" is a work produced by combining or linking an 28 | Application with the Library. The particular version of the Library 29 | with which the Combined Work was made is also called the "Linked 30 | Version". 31 | 32 | The "Minimal Corresponding Source" for a Combined Work means the 33 | Corresponding Source for the Combined Work, excluding any source code 34 | for portions of the Combined Work that, considered in isolation, are 35 | based on the Application, and not on the Linked Version. 36 | 37 | The "Corresponding Application Code" for a Combined Work means the 38 | object code and/or source code for the Application, including any data 39 | and utility programs needed for reproducing the Combined Work from the 40 | Application, but excluding the System Libraries of the Combined Work. 41 | 42 | 1. Exception to Section 3 of the GNU GPL. 43 | 44 | You may convey a covered work under sections 3 and 4 of this License 45 | without being bound by section 3 of the GNU GPL. 46 | 47 | 2. Conveying Modified Versions. 48 | 49 | If you modify a copy of the Library, and, in your modifications, a 50 | facility refers to a function or data to be supplied by an Application 51 | that uses the facility (other than as an argument passed when the 52 | facility is invoked), then you may convey a copy of the modified 53 | version: 54 | 55 | a) under this License, provided that you make a good faith effort to 56 | ensure that, in the event an Application does not supply the 57 | function or data, the facility still operates, and performs 58 | whatever part of its purpose remains meaningful, or 59 | 60 | b) under the GNU GPL, with none of the additional permissions of 61 | this License applicable to that copy. 62 | 63 | 3. Object Code Incorporating Material from Library Header Files. 64 | 65 | The object code form of an Application may incorporate material from 66 | a header file that is part of the Library. You may convey such object 67 | code under terms of your choice, provided that, if the incorporated 68 | material is not limited to numerical parameters, data structure 69 | layouts and accessors, or small macros, inline functions and templates 70 | (ten or fewer lines in length), you do both of the following: 71 | 72 | a) Give prominent notice with each copy of the object code that the 73 | Library is used in it and that the Library and its use are 74 | covered by this License. 75 | 76 | b) Accompany the object code with a copy of the GNU GPL and this license 77 | document. 78 | 79 | 4. Combined Works. 80 | 81 | You may convey a Combined Work under terms of your choice that, 82 | taken together, effectively do not restrict modification of the 83 | portions of the Library contained in the Combined Work and reverse 84 | engineering for debugging such modifications, if you also do each of 85 | the following: 86 | 87 | a) Give prominent notice with each copy of the Combined Work that 88 | the Library is used in it and that the Library and its use are 89 | covered by this License. 90 | 91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license 92 | document. 93 | 94 | c) For a Combined Work that displays copyright notices during 95 | execution, include the copyright notice for the Library among 96 | these notices, as well as a reference directing the user to the 97 | copies of the GNU GPL and this license document. 98 | 99 | d) Do one of the following: 100 | 101 | 0) Convey the Minimal Corresponding Source under the terms of this 102 | License, and the Corresponding Application Code in a form 103 | suitable for, and under terms that permit, the user to 104 | recombine or relink the Application with a modified version of 105 | the Linked Version to produce a modified Combined Work, in the 106 | manner specified by section 6 of the GNU GPL for conveying 107 | Corresponding Source. 108 | 109 | 1) Use a suitable shared library mechanism for linking with the 110 | Library. A suitable mechanism is one that (a) uses at run time 111 | a copy of the Library already present on the user's computer 112 | system, and (b) will operate properly with a modified version 113 | of the Library that is interface-compatible with the Linked 114 | Version. 115 | 116 | e) Provide Installation Information, but only if you would otherwise 117 | be required to provide such information under section 6 of the 118 | GNU GPL, and only to the extent that such information is 119 | necessary to install and execute a modified version of the 120 | Combined Work produced by recombining or relinking the 121 | Application with a modified version of the Linked Version. (If 122 | you use option 4d0, the Installation Information must accompany 123 | the Minimal Corresponding Source and Corresponding Application 124 | Code. If you use option 4d1, you must provide the Installation 125 | Information in the manner specified by section 6 of the GNU GPL 126 | for conveying Corresponding Source.) 127 | 128 | 5. Combined Libraries. 129 | 130 | You may place library facilities that are a work based on the 131 | Library side by side in a single library together with other library 132 | facilities that are not Applications and are not covered by this 133 | License, and convey such a combined library under terms of your 134 | choice, if you do both of the following: 135 | 136 | a) Accompany the combined library with a copy of the same work based 137 | on the Library, uncombined with any other library facilities, 138 | conveyed under the terms of this License. 139 | 140 | b) Give prominent notice with the combined library that part of it 141 | is a work based on the Library, and explaining where to find the 142 | accompanying uncombined form of the same work. 143 | 144 | 6. Revised Versions of the GNU Lesser General Public License. 145 | 146 | The Free Software Foundation may publish revised and/or new versions 147 | of the GNU Lesser General Public License from time to time. Such new 148 | versions will be similar in spirit to the present version, but may 149 | differ in detail to address new problems or concerns. 150 | 151 | Each version is given a distinguishing version number. If the 152 | Library as you received it specifies that a certain numbered version 153 | of the GNU Lesser General Public License "or any later version" 154 | applies to it, you have the option of following the terms and 155 | conditions either of that published version or of any later version 156 | published by the Free Software Foundation. If the Library as you 157 | received it does not specify a version number of the GNU Lesser 158 | General Public License, you may choose any version of the GNU Lesser 159 | General Public License ever published by the Free Software Foundation. 160 | 161 | If the Library as you received it specifies that a proxy can decide 162 | whether future versions of the GNU Lesser General Public License shall 163 | apply, that proxy's public statement of acceptance of any version is 164 | permanent authorization for you to choose that version for the 165 | Library. -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

Ameko

2 | 3 | Ameko Banner Logo 4 | 5 |
6 | 7 |
8 | GNU LGPLv3 License 9 | Framework 10 |
11 | Open Issues 12 | Forks 13 | Stars 14 | 15 |
16 | 17 |

18 | Ameko is a full-featured subtitle editing suite for Advanced Substation Alpha (ASS) subtitles built on the AssCS parsing engine. 19 |

20 | 21 |

Project Roadmap

22 |

23 | Ameko is being built in stages to streamline the development process and keep things from getting out of control. The current roadmap looks like this: 24 |

    25 |
  1. Subtitles can be loaded, edited, and saved (MVP) 26 |
  2. Audio
  3. 27 |
  4. Video
  5. 28 |
  6. Tools
  7. 29 |
30 |

31 | 32 |

Proposed Features

33 |

34 | Ameko is a fresh slate, allowing us to add some fun and unique features to enhance the experience. Here are some of the features we want to include: 35 |

    36 |
  • Project Workspaces
  • 37 |
  • C# Plugins
  • 38 |
  • Tabs
  • 39 |
  • Customizable UI
  • 40 |
  • Line Grouping/Line Trees
  • 41 |
  • Line Filtering
  • 42 |
43 |

44 | 45 |

Contributing

46 |

47 | Contributions and pull requests to Ameko are always welcome. 48 |

--------------------------------------------------------------------------------