class LineEndingProcessor extends Processor {

        private LineEndingProcessingProvider _lineEndingProcessingProvider;

        @Override
        public Provider preProcess(Provider innerProvider) {
            if (isDetectOriginalLineSeparator()) {
                _lineEndingProcessingProvider = new LineEndingProcessingProvider(innerProvider);
                return _lineEndingProcessingProvider;
            }
            return innerProvider;
        }

        @Override
        public void postProcess(ParseResult<? extends Node> result, ParserConfiguration configuration) {
            if (isDetectOriginalLineSeparator()) {
                result.getResult().ifPresent(rootNode -> {
                    LineSeparator detectedLineSeparator = _lineEndingProcessingProvider.getDetectedLineEnding();
                    // Set the line ending on the root node
                    rootNode.setData(Node.LINE_SEPARATOR_KEY, detectedLineSeparator);
                    // // Set the line ending on all children of the root node -- FIXME: Should ignore """textblocks"""
                    // rootNode.findAll(Node.class)
                    // .forEach(node -> node.setData(Node.LINE_SEPARATOR_KEY, detectedLineSeparator));
                });
            }
        }
    }

    public ParserConfiguration() {
        processors.add(() -> ParserConfiguration.this.new UnicodeEscapeProcessor());
        processors.add(() -> ParserConfiguration.this.new LineEndingProcessor());
        processors.add(() -> new Processor() {

            @Override
            public void postProcess(ParseResult<? extends Node> result, ParserConfiguration configuration) {<FILL_FUNCTION_BODY>

                if (configuration.isAttributeComments()) {
                    result.ifSuccessful(resultNode -> result.getCommentsCollection().ifPresent(comments -> new CommentsInserter(configuration).insertComments(resultNode, comments.copy().getComments())));
                }
            
<no_super_class>