version 1 . PreprocessorInput = [@context Context, @book Book] . Context = { "root": @root string, "config": @config any, "renderer": @renderer string, "mdbook_version": @mdbook_version string, } . Book = { "sections": @sections [BookItem ...], "__non_exhaustive": =null, } . BookItem = / @chapter { "Chapter": @value Chapter } / @separator "Separator" / @partTitle { "PartTitle": @value string } . Chapter = { "name": @name string, "content": @content string, "number": @number MaybeSectionNumber, "sub_items": @sub_items [BookItem ...], "path": @path MaybePath, "source_path": @source_path MaybePath, "parent_names": @parent_names [string ...], } . MaybeSectionNumber = @absent =null / @present [int ...] . MaybePath = @absent =null / @present string .