1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-19 03:19:52 +08:00
Commit Graph

1 Commits

  • Implement fallback decoder registration
    After the preparatory introduction of LineBufferedReader, it is now
    possible to introduce registration of fallback decoders that won't drop
    input supplied in the first line of the file.
    
    A fallback decoder is used when the magic in the first line of the file
    does not match any of the other known decoders. In such a case,
    the fallback decoder is constructed and provided a LineBufferedReader
    instance. The process of matching magic only peeks the first non-empty
    line, so it is available for re-reading in Decode() using ReadLine().
    
    There can be only one fallback decoder per type; a second attempt of
    registering a fallback will result in an exception to avoid bugs.
    
    To address the issue of parsing failing on badly or non-headered files,
    set the legacy decoders for Beatmaps and Storyboards as the fallbacks.
    
    Due to non-trivial logic, several new, passing unit tests with possible
    edge cases also included.