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; } } }