migrated plugin from 3.0 to 3.1
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / HTMLPrinter.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.ui.text;
12
13
14 import java.io.IOException;
15 import java.io.Reader;
16
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.graphics.RGB;
19 import org.eclipse.swt.widgets.Display;
20 import org.eclipse.ui.IWorkbenchWindow;
21 import org.eclipse.ui.PlatformUI;
22
23
24 /**
25  * Provides a set of convenience methods for creating HTML pages.
26  */
27 public class HTMLPrinter {
28                         
29         private HTMLPrinter() {
30         }
31         
32         private static String replace(String text, char c, String s) {
33                                 
34                 int previous= 0;
35                 int current= text.indexOf(c, previous);
36                 
37                 if (current == -1)
38                         return text;
39                 
40                 StringBuffer buffer= new StringBuffer();        
41                 while (current > -1) {
42                         buffer.append(text.substring(previous, current));
43                         buffer.append(s);
44                         previous= current + 1;
45                         current= text.indexOf(c, previous);
46                 }
47                 buffer.append(text.substring(previous));
48                 
49                 return buffer.toString();
50         }
51         
52         public static String convertToHTMLContent(String content) {
53                 content= replace(content, '<', "&lt;"); //$NON-NLS-1$
54                 return replace(content, '>', "&gt;"); //$NON-NLS-1$
55         }
56         
57         public static String read(Reader rd) {
58                 
59                 StringBuffer buffer= new StringBuffer();
60                 char[] readBuffer= new char[2048];
61                 
62                 try {
63                         int n= rd.read(readBuffer);
64                         while (n > 0) {
65                                 buffer.append(readBuffer, 0, n);
66                                 n= rd.read(readBuffer);
67                         }
68                         return buffer.toString();
69                 } catch (IOException x) {
70                 }
71                 
72                 return null;
73         }
74
75         public static void insertPageProlog(StringBuffer buffer, int position, RGB bgRGB) {
76                 if (bgRGB == null)
77                         insertPageProlog(buffer, position);
78                 else {
79                         StringBuffer pageProlog= new StringBuffer(60);
80                         pageProlog.append("<html><body text=\"#000000\" bgcolor=\""); //$NON-NLS-1$
81                         appendColor(pageProlog, bgRGB);
82                         pageProlog.append("\"><font size=-1>"); //$NON-NLS-1$
83                         buffer.insert(position,  pageProlog.toString());
84                 }
85         }
86         
87         private static void appendColor(StringBuffer buffer, RGB rgb) {
88                 buffer.append('#');
89                 buffer.append(Integer.toHexString(rgb.red));
90                 buffer.append(Integer.toHexString(rgb.green));
91                 buffer.append(Integer.toHexString(rgb.blue));
92         }
93
94         public static void insertPageProlog(StringBuffer buffer, int position) {
95                 RGB bgColor= null;
96                 IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
97                 if (window != null) {
98                         Display display= window.getShell().getDisplay();
99                         if (display != null && !display.isDisposed())
100                                 bgColor= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
101                 }
102                 if (bgColor == null)
103                         bgColor= new RGB(255,255, 225); // RGB value of info bg color on WindowsXP
104                         
105                 insertPageProlog(buffer, position, bgColor); //$NON-NLS-1$
106         }
107         
108         public static void addPageProlog(StringBuffer buffer) {
109                 insertPageProlog(buffer, buffer.length());
110         }
111         
112         public static void addPageEpilog(StringBuffer buffer) {
113                 buffer.append("</font></body></html>"); //$NON-NLS-1$
114         }
115         
116         public static void startBulletList(StringBuffer buffer) {
117                 buffer.append("<ul>"); //$NON-NLS-1$
118         }
119         
120         public static void endBulletList(StringBuffer buffer) {
121                 buffer.append("</ul>"); //$NON-NLS-1$
122         }
123         
124         public static void addBullet(StringBuffer buffer, String bullet) {
125                 if (bullet != null) {
126                         buffer.append("<li>"); //$NON-NLS-1$
127                         buffer.append(bullet);
128                         buffer.append("</li>"); //$NON-NLS-1$
129                 }
130         }
131         
132         public static void addSmallHeader(StringBuffer buffer, String header) {
133                 if (header != null) {
134                         buffer.append("<h5>"); //$NON-NLS-1$
135                         buffer.append(header);
136                         buffer.append("</h5>"); //$NON-NLS-1$
137                 }
138         }
139         
140         public static void addParagraph(StringBuffer buffer, String paragraph) {
141                 if (paragraph != null) {
142                         buffer.append("<p>"); //$NON-NLS-1$
143                         buffer.append(paragraph);
144                 }
145         }
146         
147         public static void addParagraph(StringBuffer buffer, Reader paragraphReader) {
148                 if (paragraphReader != null)
149                         addParagraph(buffer, read(paragraphReader));
150         }
151 }