User avatar
Wazburi
Posts: 24
Joined: Wed Jan 06, 2016 4:22 am
Location: Appalachia

SimplyHTML -Graphical Word Processor for HTML

Sun Mar 26, 2023 7:24 pm

LibreOffice Writer is a good wordprocessor. It's in the recommended list. It can 'Save as' html with nearly identical appearance to its native format "odt".

However, Writer's html "code" can be complex.

By comparison, simplyhtml is only a simple graphical html word processor, described in the software repository as a:
Java word processor based on HTML and CSS.
SimplyHTML is an application built for working with text documents.
Text documents are stored in HTML and CSS format, but the application is
meant as a word processor rather than a code editor or web site builder.
SimplyHTML can be used standalone as well like a library/plugin"
Without editing code, you can include images, make links to other documents or specific locations within a document, and use simple formatting such as font face, font size, bold, italics, underline, bullet and numbered lists, and tables.

By using the simplyhtml app, one can also:
  • Learn how html tags work by toggling to the "code view" window.
  • Edit the html code directly in code view.
Note 1:
Image files added to documents are copied into an "images" subfolder in lower-case to satisfy case sensitivity.

Note 2:
There is no "<!DOCTYPE>" specified in a simplyhtml document.
LibreOffice Writer can open html documents and preserves formatting by simplyhtml, automatically adding Doctype, meta info, and style definitions.

Installation of simplyhtml:
Preferences "Add / Remove Software" includes "simplyhtml" in the "Internet" category. To install, select simplyhtml and click the 'Apply' button.
or
install from terminal with command:

Code: Select all

sudo apt install simplyhtml
After install, simplyhtml is not automatically added to the Menu. Add it with Preferences "Main Menu Editor" by browsing to:
"/usr/bin/simplyhtml".
Then, click the icon box to browse to "/usr/share/icons/" to select whatever icon image you like.
For example:
"/usr/share/icons/gnome/48x48/mimetypes/x-office-document.png"
My friends call me "Word Salad"
  • All Hail Raspberry Pi !

pi5b
Posts: 87
Joined: Thu Jan 06, 2022 2:53 am

Re: SimplyHTML -Graphical Word Processor for HTML

Sat Apr 01, 2023 5:24 pm

I installed it, ran it, and it crashed in a blaze of Java errors.
I wonder how it ever got included in the Debian archive.

The idea of a simple, fast word processor is great, but tying it to one particular file format is not a good idea.
There are many useful formats besides HTML.
Export to HTML is fine, even importing. But I wonder if importing would have to scrap a bunch of tags and CSS, which is fine but it shows that HTML may not be ideal.
IMHO there is no need to support M$ formats, except RTF.
RTF also has a lot of complexity, some of which would need to be ignored.
Lastly I am not convinced that Java code will be fast enough. C++ would be better.

The errors:

Code: Select all

java.lang.reflect.InvocationTargetException
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1369)
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1344)
	at com.lightdev.app.shtm.FrmMain.start(FrmMain.java:68)
	at com.lightdev.app.shtm.FrmMain.run(FrmMain.java:116)
	at com.lightdev.app.shtm.App.main(App.java:67)
Caused by: java.lang.NullPointerException: Cannot invoke "javax.swing.text.AttributeSet.getAttribute(Object)" because "a" is null
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:54)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFont(ScaledStyleSheet.java:38)
	at java.desktop/javax.swing.text.DefaultStyledDocument.getFont(DefaultStyledDocument.java:947)
	at java.desktop/javax.swing.text.LabelView.setPropertiesFromAttributes(LabelView.java:145)
	at java.desktop/javax.swing.text.html.InlineView.setPropertiesFromAttributes(InlineView.java:187)
	at java.desktop/javax.swing.text.LabelView.sync(LabelView.java:56)
	at java.desktop/javax.swing.text.LabelView.getFont(LabelView.java:209)
	at java.desktop/javax.swing.text.GlyphPainter1.sync(GlyphPainter1.java:224)
	at java.desktop/javax.swing.text.GlyphPainter1.getSpan(GlyphPainter1.java:59)
	at java.desktop/javax.swing.text.GlyphView.getPreferredSpan(GlyphView.java:585)
	at java.desktop/javax.swing.text.FlowView$LogicalView.getPreferredSpan(FlowView.java:753)
	at java.desktop/javax.swing.text.FlowView.calculateMinorAxisRequirements(FlowView.java:241)
	at java.desktop/javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:710)
	at java.desktop/javax.swing.text.html.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:162)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.getMinimumSpan(BoxView.java:569)
	at java.desktop/javax.swing.text.html.ParagraphView.getMinimumSpan(ParagraphView.java:275)
	at java.desktop/javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:904)
	at java.desktop/javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.getMinimumSpan(BoxView.java:569)
	at java.desktop/javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:378)
	at java.desktop/javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:904)
	at java.desktop/javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:344)
	at java.desktop/javax.swing.text.BoxView.layout(BoxView.java:709)
	at java.desktop/javax.swing.text.BoxView.setSize(BoxView.java:398)
	at java.desktop/javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1826)
	at java.desktop/javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:951)
	at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1725)
	at java.desktop/javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1401)
	at java.desktop/javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:799)
	at java.desktop/java.awt.Container.layout(Container.java:1541)
	at java.desktop/java.awt.Container.doLayout(Container.java:1530)
	at java.desktop/java.awt.Container.validateTree(Container.java:1725)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validate(Container.java:1660)
	at java.desktop/java.awt.Container.validateUnconditionally(Container.java:1697)
	at java.desktop/java.awt.Window.pack(Window.java:840)
	at com.lightdev.app.shtm.FrmMain$1.run(FrmMain.java:74)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "javax.swing.text.AttributeSet.getAttribute(Object)" because "a" is null
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:54)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFontScaleFactor(ScaledStyleSheet.java:67)
	at com.lightdev.app.shtm.ScaledStyleSheet.getFont(ScaledStyleSheet.java:38)
	at java.desktop/javax.swing.text.DefaultStyledDocument.getFont(DefaultStyledDocument.java:947)
	at java.desktop/javax.swing.text.LabelView.setPropertiesFromAttributes(LabelView.java:145)
	at java.desktop/javax.swing.text.html.InlineView.setPropertiesFromAttributes(InlineView.java:187)
	at java.desktop/javax.swing.text.LabelView.sync(LabelView.java:56)
	at java.desktop/javax.swing.text.LabelView.getFont(LabelView.java:209)
	at java.desktop/javax.swing.text.GlyphPainter1.sync(GlyphPainter1.java:224)
	at java.desktop/javax.swing.text.GlyphPainter1.getSpan(GlyphPainter1.java:59)
	at java.desktop/javax.swing.text.GlyphView.getPreferredSpan(GlyphView.java:585)
	at java.desktop/javax.swing.text.FlowView$LogicalView.getPreferredSpan(FlowView.java:753)
	at java.desktop/javax.swing.text.FlowView.calculateMinorAxisRequirements(FlowView.java:241)
	at java.desktop/javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:710)
	at java.desktop/javax.swing.text.html.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:162)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.getMinimumSpan(BoxView.java:569)
	at java.desktop/javax.swing.text.html.ParagraphView.getMinimumSpan(ParagraphView.java:275)
	at java.desktop/javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:904)
	at java.desktop/javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.getMinimumSpan(BoxView.java:569)
	at java.desktop/javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:378)
	at java.desktop/javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:904)
	at java.desktop/javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:146)
	at java.desktop/javax.swing.text.BoxView.checkRequests(BoxView.java:936)
	at java.desktop/javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:344)
	at java.desktop/javax.swing.text.BoxView.layout(BoxView.java:709)
	at java.desktop/javax.swing.text.BoxView.setSize(BoxView.java:398)
	at java.desktop/javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1826)
	at java.desktop/javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:951)
	at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1725)
	at java.desktop/javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1401)
	at java.desktop/javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:799)
	at java.desktop/java.awt.Container.layout(Container.java:1541)
	at java.desktop/java.awt.Container.doLayout(Container.java:1530)
	at java.desktop/java.awt.Container.validateTree(Container.java:1725)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validateTree(Container.java:1734)
	at java.desktop/java.awt.Container.validate(Container.java:1660)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2778)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

User avatar
Wazburi
Posts: 24
Joined: Wed Jan 06, 2016 4:22 am
Location: Appalachia

Re: SimplyHTML -Graphical Word Processor for HTML

Wed Apr 05, 2023 1:49 am

:( Thanks for reporting this issue after what must have been a disappointment.

I was not understanding the cause until considering that perhaps you use "Raspberry Pi Desktop for PC and Mac" (on a computer other than an actual Raspberry Pi computer.

Let me know if I have guessed incorrectly?

I attempted to duplicate the failure on an intel-based PC and sure enough, got a long series of Java errors followed by nothing -- the app failed just as you say. Someone with more knowledge might understand the reason for the Java failures on x86 hardware with RPi OS.

However, I believe simplyhtml is successful on the Raspberry Pi computer. I have tested it on raspberry pi models 400, 4b, 3b+, 3a+, and model 2 running the "bullseye" version of Raspberry Pi OS.

Oddly, the app also works on "Jammy" Ubuntu running on an intel PC as well as Ubuntu on an RPi 400.

Simplyhtml is definitely a no-frills app, just producing basic html documents in a graphical window. LibreOffice offers much more and I'm pretty sure it will work well for you.

Thanks for trying simplyhtml, reporting your results, and saving others from misfortune. 8-)
My friends call me "Word Salad"
  • All Hail Raspberry Pi !

Return to “General discussion”