001/* 002 * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved. 003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 004 * 005 * This code is free software; you can redistribute it and/or modify it 006 * under the terms of the GNU General Public License version 2 only, as 007 * published by the Free Software Foundation. Oracle designates this 008 * particular file as subject to the "Classpath" exception as provided 009 * by Oracle in the LICENSE file that accompanied this code. 010 * 011 * This code is distributed in the hope that it will be useful, but WITHOUT 012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 014 * version 2 for more details (a copy is included in the LICENSE file that 015 * accompanied this code). 016 * 017 * You should have received a copy of the GNU General Public License version 018 * 2 along with this work; if not, write to the Free Software Foundation, 019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 020 * 021 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 022 * or visit www.oracle.com if you need additional information or have any 023 * questions. 024 */ 025 026package org.jdrupes.mdoclet.internal.doclets.formats.html.markup; 027 028import java.io.IOException; 029import java.io.StringWriter; 030import java.io.Writer; 031 032import org.jdrupes.mdoclet.internal.doclets.toolkit.Content; 033import org.jdrupes.mdoclet.internal.doclets.toolkit.util.DocFile; 034import org.jdrupes.mdoclet.internal.doclets.toolkit.util.DocFileIOException; 035 036/** 037 * Class for generating an HTML document for javadoc output. 038 */ 039public class HtmlDocument { 040 private final DocType docType = DocType.HTML5; 041 private final Content docContent; 042 043 /** 044 * Constructs an HTML document. 045 * 046 * @param html the {@link TagName#HTML HTML} element of the document 047 */ 048 public HtmlDocument(Content html) { 049 docContent = html; 050 } 051 052 /** 053 * Writes the content of this document to the specified file. 054 * Newlines are written using the platform line separator. 055 * 056 * @param docFile the file 057 * @throws DocFileIOException if an {@code IOException} occurs while writing the file 058 */ 059 public void write(DocFile docFile) throws DocFileIOException { 060 try (Writer writer = docFile.openWriter()) { 061 write(writer, DocFile.PLATFORM_LINE_SEPARATOR); 062 } catch (IOException e) { 063 throw new DocFileIOException(docFile, DocFileIOException.Mode.WRITE, 064 e); 065 } 066 } 067 068 @Override 069 public String toString() { 070 try (Writer writer = new StringWriter()) { 071 write(writer, "\n"); 072 return writer.toString(); 073 } catch (IOException e) { 074 throw new Error(e); 075 } 076 } 077 078 private void write(Writer writer, String newline) throws IOException { 079 writer.write(docType.text); 080 writer.write(newline); 081 docContent.write(writer, newline, true); 082 } 083}