package be.nikiroo.gofetch.output; import be.nikiroo.gofetch.data.Comment; import be.nikiroo.gofetch.data.Story; import be.nikiroo.gofetch.support.BasicSupport; import be.nikiroo.gofetch.support.Type; import be.nikiroo.utils.StringUtils; public class Html extends Output { public Html(Type type, String hostname, String preselector, int port) { super(type, hostname, preselector, port); } @Override public String getMainIndexHeader() { String sel = preselector; if (!sel.isEmpty()) { sel = "/1" + sel; } String gopherUrl = "gopher://" + hostname + sel + ":" + port; StringBuilder builder = new StringBuilder(); appendPre(builder); builder.append("

News

\n"// + "

You will find here a few pages full of news, mirroring " + gopherUrl + ".

\n"// + "

They are simply scrapped from their associated webpage and updated a few times a day.

\n"// ); appendPost(builder); return builder.toString(); } @Override public String getMainIndexFooter() { return ""; } @Override public String getIndexHeader(BasicSupport support) { return "

" + support.getDescription() + "

\n

"; } @Override public String getIndexFooter(BasicSupport support) { return ""; } @Override public String exportHeader(Story story) { StringBuilder builder = new StringBuilder(); appendPre(builder); builder.append("
\n"); appendHtml(builder, story, true); builder.append("
\n"); builder.append("
\n"); appendPost(builder); return builder.toString(); } @Override public String export(Story story) { StringBuilder builder = new StringBuilder(); appendPre(builder); builder.append("
\n"); appendHtml(builder, story, false); builder.append("
\n"); if (story.getComments() != null) { for (Comment comment : story.getComments()) { appendHtml(builder, comment, " "); } } builder.append("
\n"); appendPost(builder); return builder.toString(); } private void appendPre(StringBuilder builder) { builder.append("\n"); builder.append("\n"); builder.append("\n"); builder.append(" \n"); builder.append(" \n"); builder.append(" \n"); builder.append("\n"); builder.append("\n"); } private void appendPost(StringBuilder builder) { builder.append("\n"); } private void appendHtml(StringBuilder builder, Comment comment, String space) { builder.append(space) .append("
\n"); builder.append(space).append("

").append(comment.getTitle()) .append("

\n"); builder.append(space) .append("
") .append(comment.getAuthor()).append("
\n"); builder.append(space).append("
"); for (String line : comment.getContentLines()) { builder.append("

" + line + "

"); } builder.append("
\n"); for (Comment subComment : comment) { appendHtml(builder, subComment, space + " "); } builder.append(space).append("
\n"); } private StringBuilder appendHtml(StringBuilder builder, Story story, boolean resume) { if (resume) { builder.append("

" + story.getTitle() + "

\n"); } else { builder.append("

" + story.getTitle() + "

\n"); } builder.append("
"); if (story.getDetails() != null && !story.getDetails().isEmpty()) { builder.append("(") .append(StringUtils.xmlEscape(story.getDetails())) .append(")"); } builder.append("
\n"); builder.append("
\n"); if (!resume) { builder.append(" \n"); builder.append("
\n"); } builder.append("
\n"); if (resume) { builder.append(" " + StringUtils.xmlEscape(story.getContent()).replace("\n", "
") + "\n"); } else { builder.append(" " + StringUtils.xmlEscape(story.getFullContent()) .replace("\n", "
").replace("[ ", "

") .replace(" ]", "

") + "\n"); } builder.append("
\n"); return builder; } }