public Parser linage() {
        if (linageParser == null) {
           FutureParser future = scoped("linage");
           linageParser = future;
           future.setParser(
               sequence(
                   token("LINAGE"),
                   optional(
                       token("IS")
                   ),
                   choice(
                       dataName(),
                       integer()
                   ),
                   optional(
                       token("LINES")
                   ),
                   optional(
                       footing()
                   ),
                   optional(
                       linesAtTop()
                   ),
                   optional(
                       linesAtBottom()
                   )
               )
           );
        }

        return linageParser;
    }