]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/winterwell.markdown/src/winterwell/markdown/views/MarkdownPreview.java
migrated to svn revision 33108
[simantics/platform.git] / bundles / winterwell.markdown / src / winterwell / markdown / views / MarkdownPreview.java
diff --git a/bundles/winterwell.markdown/src/winterwell/markdown/views/MarkdownPreview.java b/bundles/winterwell.markdown/src/winterwell/markdown/views/MarkdownPreview.java
new file mode 100644 (file)
index 0000000..c103953
--- /dev/null
@@ -0,0 +1,100 @@
+package winterwell.markdown.views;
+
+
+import java.io.File;
+import java.net.URI;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IPathEditorInput;
+import org.eclipse.ui.part.ViewPart;
+
+import winterwell.markdown.editors.ActionBarContributor;
+import winterwell.markdown.editors.MarkdownEditor;
+import winterwell.markdown.pagemodel.MarkdownPage;
+
+
+
+
+public class MarkdownPreview extends ViewPart {
+       
+       public static MarkdownPreview preview = null;
+       
+       private Browser viewer = null;
+
+       /**
+        * The constructor.
+        */
+       public MarkdownPreview() {
+               preview = this;
+       }
+
+       /**
+        * This is a callback that will allow us
+        * to create the viewer and initialize it.
+        */
+       @Override
+       public void createPartControl(Composite parent) {
+               viewer = new Browser(parent, SWT.MULTI); // | SWT.H_SCROLL | SWT.V_SCROLL
+       }
+
+
+
+
+       /**
+        * Passing the focus request to the viewer's control.
+        */
+       @Override
+       public void setFocus() {
+               if (viewer==null) return;
+               viewer.setFocus();
+               update();
+       }
+
+       public void update() {
+               if (viewer==null) return;
+               try {
+                       IEditorPart editor = ActionBarContributor.getActiveEditor();
+                       if (!(editor instanceof MarkdownEditor)) {
+                               viewer.setText("");
+                               return;
+                       }
+                       MarkdownEditor ed = (MarkdownEditor) editor;
+                       MarkdownPage page = ed.getMarkdownPage();
+                       String html = page.html();
+                       html = addBaseURL(editor, html);
+                       if (page != null) viewer.setText(html);
+                       else viewer.setText("");
+               } catch (Exception ex) {
+                       // Smother
+                       System.out.println(ex);
+                       
+                       if (viewer != null && !viewer.isDisposed())
+                               viewer.setText(ex.getMessage());
+               }
+       }
+
+       /**
+        * Adjust the URL base to be the file's directory.
+        * @param editor
+        * @param html
+        * @return
+        */
+       private String addBaseURL(IEditorPart editor, String html) {
+       try {
+               IPathEditorInput input = (IPathEditorInput) editor.getEditorInput();
+               IPath path = input.getPath();
+               path = path.removeLastSegments(1);
+               File f = path.toFile();
+               URI fileURI = f.toURI();
+               String html2 = "<html><head><base href='"+fileURI+"' /></head><body>\r\n"+html
+               +"\r\n</body></html>";
+               return html2;
+       } catch (Exception ex) {
+               return html;
+       }
+       }
+}
\ No newline at end of file