package jnpf.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;

import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.io.*;

public class Html2Text extends HTMLEditorKit.ParserCallback {

    private static Html2Text html2Text = new Html2Text();
    StringBuffer s;

    public Html2Text() {
    }

    public static void main(String[] args) {
        String ss = "<p class=\"ql-align-justify\">首先要说明的是，我既没有资格也没有能力来评价这本书。作者的深厚功力，读过这本书的人都应该能够体会得到。这一本薄薄的册子，把新中国建立以来我国在社会主义建设的过程中的种种艰难，明明白白地展示在我们面前。笔法平实，却又引人入胜，同时又让我们对整体的时代有了一个框架行的了解，实属不易。</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">其实对于这段历史，最精辟的总结，还是十九届六中全会公报中的那两段话：</p><p class=\"ql-align-justify\">全会提出，社会主义革命和建设时期，党面临的主要任务是，实现从新民主主义到社会主义的转变，进行社会主义革命，推进社会主义建设，为实现中华民族伟大复兴奠定根本政治前提和制度基础。在这个时期，以毛泽东同志为主要代表的中国共产党人提出关于社会主义建设的一系列重要思想。毛泽东思想是马克思列宁主义在中国的创造性运用和发展，是被实践证明了的关于中国革命和建设的正确的理论原则和经验总结，是马克思主义中国化的第一次历史性飞跃。党领导人民自力更生、发愤图强，创造了社会主义革命和建设的伟大成就，实现了中华民族有史以来最为广泛而深刻的社会变革，实现了一穷二白、人口众多的东方大国大步迈进社会主义社会的伟大飞跃。我国建立起独立的比较完整的工业体系和国民经济体系，农业生产条件显著改变，教育、科学、文化、卫生、体育事业有很大发展，人民解放军得到壮大和提高，彻底结束了旧中国的屈辱外交。中国共产党和中国人民以英勇顽强的奋斗向世界庄严宣告，中国人民不但善于破坏一个旧世界、也善于建设一个新世界，只有社会主义才能救中国，只有社会主义才能发展中国。&nbsp;</p><p class=\"ql-align-justify\">全会提出，改革开放和社会主义现代化建设新时期，党面临的主要任务是，继续探索中国建设社会主义的正确道路，解放和发展社会生产力，使人民摆脱贫困、尽快富裕起来，为实现中华民族伟大复兴提供充满新的活力的体制保证和快速发展的物质条件。党的十一届三中全会以后，以邓小平同志为主要代表的中国共产党人，团结带领全党全国各族人民，深刻总结新中国成立以来正反两方面经验，围绕什么是社会主义、怎样建设社会主义这一根本问题，借鉴世界社会主义历史经验，创立了邓小平理论，解放思想，实事求是，作出把党和国家工作中心转移到经济建设上来、实行改革开放的历史性决策，深刻揭示社会主义本质，确立社会主义初级阶段基本路线，明确提出走自己的路、建设中国特色社会主义，科学回答了建设中国特色社会主义的一系列基本问题，制定了到二十一世纪中叶分三步走、基本实现社会主义现代化的发展战略，成功开创了中国特色社会主义。&nbsp;</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">原谅我把这么长的原文罗列在这，因为当你读完这本书以后，就会发现这两短话确实相当凝练且精准。当然，既然是读书笔记，也不能不说点自己的想法，其实也就是简单的以下几条：</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">当我们在讨论一段历史的时候，我们很容易会带入一种幻想，就是如果当初怎么怎么样，现在就会是怎么怎么样。确实，对于发现问题这件事来说，我们在事后总会更容易的发现，毕竟我们是基于已经发生了的事实来去回溯过去存在的问题。但是这里总归还是要思考两个方面的事情。</p><p class=\"ql-align-justify\">首先，我们是以过来人的视角来看过去的已经发生的事情，所以从现在看过去很多事情都已经是确定了的，但是在当时的人并不知道未来会发生什么。就拿当时领导人对世界局势的判断来说，在转型时期，领导人对世界局势的判断是总还要又一次大战，所以很多决策是基于这样的局势判断下做出的。虽然我们从后世看到并没有什么世界性的战争，但是我们并不能就以此作为当时人们的判断错误的依据。当我们在回看过去的历史的时候，一定要把当时的情境考虑进去，才能公平和客观地看待当时的所有决策。</p><p class=\"ql-align-justify\">其次，我们要看到中国变成现在这个样子，虽然过程很艰难，但是一定是作对了什么。历史并不是历史书上的断代史一样，到了一个时间节点，出现了一个人，发生了一个什么事，历史就立马转向了。不会的。每一个变化其实都是在连续的、积累的过程中逐渐发生的。虽然不可否认的是，政策的变化会使得历史走向有很大的转折，但是政策也绝不是某个人头脑一热的简单决定。至少在我个人的观点里，政策更多时候是一种社会能量积累以后的结果，一定是在各方进行长时间博弈以后，为了破解或者保持一个局面而产生的。所以我们在看待历史的时候，除了关注关键节点的重要事件，还要关注整个世界和社会的发展趋势，才能真正理解历史是如何演变的，也才能真正在历史中学习到我们应该学到的宏观视角。</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">书的最后的几篇文章里，有位学者提出了一个观点，就是党的理论更多是事后的总结，并对今后一段时期具有指导意义的理论，而不是一种先验性的、全能式的理论。我个人深以为然，或者说，党的理论最重要的一点，就是实事求是。中国的体量和复杂性，确实不是一般国家可以比拟的。中国几个领先省份的GDP，单拿出来都可以排在全球国家的前列的。但是，我们总归要知道的是，没有全国的资源、市场等等的支持，这或许也是很难达到的。想象一下如果每个省份都需要像一个独立国家一样，需要花费大量的精力来获取资源和市场，怎么可能有这么快的发展速度。也正是因为如此，在发展的过程中肯定就会遇到太多太多的问题，而有些问题在一个如此复杂、如此大体量的国家内，就会被更加放大，变得更加复杂。也正是在这样的实际情况下，党领导的国家总是在一步一步地小心探索，我们既尊重当今世界上的最新的理论研究，同时我们也非常注重是否和我们的实际情况符合。这是一个相当难的事情，就跟我们说为什么懂了很多道理却过不好一生一样，每一个人都已经如此复杂，不能有一个个理论来解释和说明，更别说如此大的一个国家了。而这也是我为什么相信党、相信政府的原因，因为我们并不是不知道有什么问题，而是在整体大局的框架下，我们需要根据实际情况用更合理和有效的方式去解决。这需要勇气、智慧和时间。</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">还有最后一点，是最重要也是最简单的一点，就是党的执政基础是全体人民。正因为是全体人民，所以我们就不能只是一部分人的利益受到保护，就不能是某个方面的单独发展，更不能是放弃某一类人的权利。所以这里面就会有不同群体的矛盾和声音，这是必然的。就拿疫情防控的政策来说，我们正是为了不放弃每一个人的生命，所以才要做到动态清零。这中间就会有很多的质疑和不理解，但是这就是担当和责任，无他。</p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\">奋斗的路程总归是艰难的，对一个人是如此，对一个国家更是如此。且前行，无他。</p><p><br></p>";
//        String str = getContent(ss);
//        System.out.println(str);

        String prettyPrintedBodyFragment = Jsoup.clean(ss, "", Whitelist.none().addTags("br", "p"), new Document.OutputSettings().prettyPrint(true));
        String clean = Jsoup.clean(prettyPrintedBodyFragment, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
        System.out.println(clean);
    }

    //获取富文本内容
    public static String getContent(String str) {
        try {
            html2Text.parse(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return html2Text.getText();
    }


    public void parse(String str) throws IOException {
        InputStream iin = new ByteArrayInputStream(str.getBytes());
        Reader in = new InputStreamReader(iin);
        s = new StringBuffer();
        ParserDelegator delegator = new ParserDelegator();
        delegator.parse(in, this, Boolean.TRUE);
        iin.close();
        in.close();
    }

    public void handleText(char[] text, int pos) {
        s.append(text);
    }

    public String getText() {
        return s.toString();
    }
}