* Presenting Hyperorg version 0.1.0: The Org to HTML Converter @ 2024-03-19 9:23 c.buhtz 2024-03-20 13:09 ` Ihor Radchenko 0 siblings, 1 reply; 10+ messages in thread From: c.buhtz @ 2024-03-19 9:23 UTC (permalink / raw) To: Emacs orgmode Hello, I am excited to introduce Hyperorg 0.1.0 [1], designed to efficiently convert files from Emacs Org-mode and Org-roam into clean HTML files. Ideal for Zettelkasten enthusiasts and personal wiki creators, Hyperorg simplifies the conversion process, ensuring your nodes correctly interlinked and accurately transformed into HTML format. Key Features: - Converts Emacs Org-mode and Org-roam files to pure HTML5 and CSS. - Tailored for Zettelkasten and personal wiki use cases. - Written in Python3. Visit the project website for clear installation instructions [2]. Have questions, feature ideas, or encountered any bugs? I appreciate your feed back and do work now on the issues for the next release. I am also very thankful the support of this community who helped and inspired me with some parsing details. Best regards Christian Buhtz [1] -- <https://codeberg.org/buhtz/hyperorg> [2] -- <https://codeberg.org/buhtz/hyperorg#installation> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-19 9:23 Presenting Hyperorg version 0.1.0: The Org to HTML Converter c.buhtz @ 2024-03-20 13:09 ` Ihor Radchenko 2024-03-23 13:50 ` c.buhtz 0 siblings, 1 reply; 10+ messages in thread From: Ihor Radchenko @ 2024-03-20 13:09 UTC (permalink / raw) To: c.buhtz; +Cc: Emacs orgmode c.buhtz@posteo.jp writes: > I am excited to introduce Hyperorg 0.1.0 [1], designed to efficiently > convert files > from Emacs Org-mode and Org-roam into clean HTML files. Ideal for > Zettelkasten > enthusiasts and personal wiki creators, Hyperorg simplifies the > conversion process, > ensuring your nodes correctly interlinked and accurately transformed > into HTML format. Thanks for sharing! I am wondering why you used pure python rather than built-in export backend extension support. > Key Features: > - Converts Emacs Org-mode and Org-roam files to pure HTML5 and CSS. May you outline the benefits compared to built-in ox-html (with org-html-html5-fancy enabled), ox-publish, and possibly with other Org mode blog generators (see "Publishing" section in https://orgmode.org/tools.html)? > - Tailored for Zettelkasten and personal wiki use cases. May you elaborate what exactly is specially tailored? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-20 13:09 ` Ihor Radchenko @ 2024-03-23 13:50 ` c.buhtz 2024-03-23 13:58 ` Ihor Radchenko 0 siblings, 1 reply; 10+ messages in thread From: c.buhtz @ 2024-03-23 13:50 UTC (permalink / raw) To: Emacs orgmode On 2024-03-20 13:09 Ihor Radchenko <yantar92@posteo.net> wrote: > May you outline the benefits Now I added a section about that topic. Of course I am open for discussion and feedback. https://codeberg.org/buhtz/hyperorg#benefits-compared-to-similar-tools ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-23 13:50 ` c.buhtz @ 2024-03-23 13:58 ` Ihor Radchenko 2024-03-23 19:45 ` c.buhtz 0 siblings, 1 reply; 10+ messages in thread From: Ihor Radchenko @ 2024-03-23 13:58 UTC (permalink / raw) To: c.buhtz; +Cc: Emacs orgmode <c.buhtz@posteo.jp> writes: > On 2024-03-20 13:09 Ihor Radchenko <yantar92@posteo.net> wrote: >> May you outline the benefits > > Now I added a section about that topic. Of course I am open for > discussion and feedback. > > https://codeberg.org/buhtz/hyperorg#benefits-compared-to-similar-tools Thanks! Although I am actually more interested in other questions - why custom parser and what is tailored for zettelkasten. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-23 13:58 ` Ihor Radchenko @ 2024-03-23 19:45 ` c.buhtz 2024-03-24 13:31 ` Ihor Radchenko 0 siblings, 1 reply; 10+ messages in thread From: c.buhtz @ 2024-03-23 19:45 UTC (permalink / raw) To: Emacs orgmode On 2024-03-23 13:58 Ihor Radchenko <yantar92@posteo.net> wrote: > Although I am actually more interested in other questions - > why custom parser and what is tailored for zettelkasten. What do you mean by "custom parser"? Zettelkasten? Hyperorg handles the links between nodes out of the box including the backlinks. It also creates an index (nodes sorted by title, tags, etc pp). Of course with Emacs is everything possible even Coffee making. But the difference are the resources you have to invest into configure it. This is much even if you know Lisp. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-23 19:45 ` c.buhtz @ 2024-03-24 13:31 ` Ihor Radchenko 2024-03-24 14:22 ` c.buhtz 0 siblings, 1 reply; 10+ messages in thread From: Ihor Radchenko @ 2024-03-24 13:31 UTC (permalink / raw) To: c.buhtz; +Cc: Emacs orgmode <c.buhtz@posteo.jp> writes: > On 2024-03-23 13:58 Ihor Radchenko <yantar92@posteo.net> wrote: >> Although I am actually more interested in other questions - >> why custom parser and what is tailored for zettelkasten. > > What do you mean by "custom parser"? Hmm. I thought that you implemented Org parser in python from scratch. Now, I see that you are using orgparse. Wondering what you are referring to when mentioning "resilient when dealing with parser issues". > Zettelkasten? Hyperorg handles the links between nodes out of the box > including the backlinks. It also creates an index (nodes sorted by > title, tags, etc pp). > > Of course with Emacs is everything possible even Coffee making. But the > difference are the resources you have to invest into configure it. This > is much even if you know Lisp. index can be produced with minimal configuration via ox-publish. Backlinks are certainly a novelty. I do not recall Org publishing systems that produce backlinks automatically (not via dynamic block). -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-24 13:31 ` Ihor Radchenko @ 2024-03-24 14:22 ` c.buhtz 2024-03-24 14:40 ` Ihor Radchenko 0 siblings, 1 reply; 10+ messages in thread From: c.buhtz @ 2024-03-24 14:22 UTC (permalink / raw) To: Emacs orgmode Dear Ihor, thanks for your reply. Am 24.03.2024 14:31 schrieb Ihor Radchenko: > Hmm. I thought that you implemented Org parser in python from scratch. > Now, I see that you are using orgparse. The orgparse package do not parse much of on org file. IT does parse the meta infos (property drawers, etc) but not the content of an orgfile. In the long run I might replay orgparse to reduce dependencies. Beside orgparse yes I implement an org parser. > Wondering what you are referring to when mentioning "resilient when > dealing with parser issues". Orgparse do throw exceptions e.g. UnicodeDecodeError or when timestamps are invalid. Hyperorg catch that exceptions and go on with the next node without interrupting the whole process. Other things are "invalid" links, e.g. unknown orgids, unknown roam links, unsupported "link kinds" ("protocols" in org syntax?; e.g. "inkscape:"). Additionally there are multiple fancy but not supported org features (e.g. tables) currently not supported. Hyperorg shouldn't stop or crash at this point. > index can be produced with minimal configuration via ox-publish. "minimal" is a subjective term here. Again I don't blame the tools or the Emacs universe. But for me it is not even minimal to get ox-publish run in the first place. Not speaking about further modifications, e.g. an index. Emacs, Lisp and its "documentation" is a special thing not everybody can or want to handle. I would have to invest so much resources into basics like Lisp just to understand the documentation in a way that I would be able to modify the publishing feature in a (for me) satisfying way. I am the problem not Emacs and Co. ;) Kind Christian Buhtz ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-24 14:22 ` c.buhtz @ 2024-03-24 14:40 ` Ihor Radchenko 2024-03-24 16:59 ` c.buhtz 0 siblings, 1 reply; 10+ messages in thread From: Ihor Radchenko @ 2024-03-24 14:40 UTC (permalink / raw) To: c.buhtz; +Cc: Emacs orgmode c.buhtz@posteo.jp writes: > Am 24.03.2024 14:31 schrieb Ihor Radchenko: >> Hmm. I thought that you implemented Org parser in python from scratch. >> Now, I see that you are using orgparse. > > The orgparse package do not parse much of on org file. IT does parse the > meta infos (property drawers, etc) but not the content of an orgfile. In > the long run I might replay orgparse to reduce dependencies. > > Beside orgparse yes I implement an org parser. Thanks for the clarification. If it is an option, it would be nice if you upstreamed your additions to orgparse. This way, we can get a better Python-based Org parser for everyone's benefit. >> Wondering what you are referring to when mentioning "resilient when >> dealing with parser issues". > > Orgparse do throw exceptions e.g. UnicodeDecodeError or when timestamps > are invalid. Hyperorg catch that exceptions and go on with the next node > without interrupting the whole process. I see. FYI, it is a bug to throw an error when parsing Org document. Any kind of text file is a valid Org document. There is no notion of invalid syntax in Org markup. > Other things are "invalid" links, e.g. unknown orgids, unknown roam > links, unsupported "link kinds" ("protocols" in org syntax?; e.g. > "inkscape:"). In Org terminology, we call these "broken" links. "link kinds" are link "types". > Additionally there are multiple fancy but not supported org features > (e.g. tables) currently not supported. Hyperorg shouldn't stop or crash > at this point. Do you mean that orgparse throws an error when encountering tables? If so, it is slightly odd to see this implementation detail listed in "Benefits". Generally, part of the "Benefits" section is a bit hand-wavy. I recommend using more clear statements. Otherwise, it is not clear what exactly the benefits are. I'd suggest the following: 1. Drop "Fairly resilient when dealing with parser issues." 2. Reword "Fairly resilient managing dead and problematic links which are a common phenomenon when working with a constantly evolving Zettelkasten or personal wiki." And instead clearly explain how broken links are exported. 3. Supply "Generates a comprehensive index of all nodes." with a screenshot 4. Drop "Adhers to World Wide Web Consortium (W3C) standards for HTML5 and CSS (<!DOCTYPE html>)." Most other blog exporters for Org mode adhere to standards. And those that are not are probably out of interest for the purposes of comparison. 5. Maybe mention the "tag cloud" visible in the example screenshot (btw, the screenshot is not very sexy; compare it with something like https://one.tonyaldon.com/). >> index can be produced with minimal configuration via ox-publish. > > "minimal" is a subjective term here. Again I don't blame the tools or > the Emacs universe. > But for me it is not even minimal to get ox-publish run in the first > place. Not speaking about further modifications, e.g. an index. Clear. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-24 14:40 ` Ihor Radchenko @ 2024-03-24 16:59 ` c.buhtz 2024-03-24 18:15 ` Ihor Radchenko 0 siblings, 1 reply; 10+ messages in thread From: c.buhtz @ 2024-03-24 16:59 UTC (permalink / raw) To: Emacs orgmode Dear Ihor, I will consider your points and take them into account. On 2024-03-24 14:40 Ihor Radchenko <yantar92@posteo.net> wrote: > If it is an option, it would be nice if you upstreamed your additions > to orgparse. This way, we can get a better Python-based Org parser for > everyone's benefit. The code is free. The orgparse maintainer is free to re-use it of course. On the other hand in the long run I will consider to separate my parsing code into an extra package. But currently it is to unstable and do support only a small subset of all org(roam) features. > > Orgparse do throw exceptions e.g. UnicodeDecodeError or when > > timestamps are invalid. Hyperorg catch that exceptions and go on > > with the next node without interrupting the whole process. > > I see. FYI, it is a bug to throw an error when parsing Org document. > Any kind of text file is a valid Org document. There is no notion of > invalid syntax in Org markup. You mean throw an error is a bug because it is not possible to write invalid org documents? I am not convinced yet. But I am open to it and willing to learn. Even org-html-export* itself do throw errors and stop processing when there are unknown orgids. What is about an inconsistent block? #begin_src foobar #end_example > > Other things are "invalid" links, e.g. unknown orgids, unknown roam > > links, unsupported "link kinds" ("protocols" in org syntax?; e.g. > > "inkscape:"). > > In Org terminology, we call these "broken" links. > "link kinds" are link "types". The term "types" is to broad and conflicts with Pythons in build functions. ;) That is the main reason why I used "kind". On the other hand the org syntax reference IMHO also use the term "protocol". > Do you mean that orgparse throws an error when encountering tables? No. I was referring to Hyperorg. OrgParse do not parse any org content except headings and properties. Nearly everything else is unparsed and given raw to my. > Generally, part of the "Benefits" section is a bit hand-wavy. I > recommend using more clear statements. Otherwise, it is not clear what > exactly the benefits are. Again. It is also not "clear" for me. There are benefits just for myself as an low-level-Emacs-and-org-user, someone who get headaches reading Lisp code and feeling very comfortable using Python. In short: My opinion is very subjective. And I don't have enough experience to compare my tool to others. I tried to make this point clear in my benefits section. And this is also the reason why there was no benefits section in the first place because I wasn't clear enough about what to write in there. Maybe I should rephrase the section to "Benefits and design goals". > 1. Drop "Fairly resilient when dealing with parser issues." Why? The "design goal" is to process all nodes no matter how bad/invalid they are. > 2. Reword "Fairly resilient managing dead and problematic links which > are a common phenomenon when working with a constantly evolving > Zettelkasten or personal wiki." And instead clearly explain how broken > links are exported. I don't want to blow up the text. Not sure what you expect here. The node is exported as HTML but the link is colorful highlighted and a tooltip explaining the problem is added. > 4. Drop "Adhers to World Wide Web Consortium (W3C) standards for HTML5 > and CSS (<!DOCTYPE html>)." Most other blog exporters for Org mode > adhere to standards. And those that are not are probably out of > interest for the purposes of comparison. Why? Btw: Even code generated by org-html-export* (XHTML 1.0 Strict) give errors on W3C. e.g. "type" attribute is missing in <style> tag. > 5. Maybe mention the "tag cloud" visible in the example screenshot > (btw, the screenshot is not very sexy; compare it with something like > https://one.tonyaldon.com/). There nothing fancy as a "tag cloud". ;) btw: There is no cloud on the link you provided. About the "sexy"ness of Hyperorg output: There is a specific label for that issues: <https://codeberg.org/buhtz/hyperorg/issues?labels=180551> But as you can see on the "milestone" the priority is low. Thanks for your effort and your discussion. I learn a lot. Kind Christian Buhtz ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Presenting Hyperorg version 0.1.0: The Org to HTML Converter 2024-03-24 16:59 ` c.buhtz @ 2024-03-24 18:15 ` Ihor Radchenko 0 siblings, 0 replies; 10+ messages in thread From: Ihor Radchenko @ 2024-03-24 18:15 UTC (permalink / raw) To: c.buhtz; +Cc: Emacs orgmode <c.buhtz@posteo.jp> writes: > I will consider your points and take them into account. Thanks! > On 2024-03-24 14:40 Ihor Radchenko <yantar92@posteo.net> wrote: >> If it is an option, it would be nice if you upstreamed your additions >> to orgparse. This way, we can get a better Python-based Org parser for >> everyone's benefit. > > The code is free. The orgparse maintainer is free to re-use it of > course. On the other hand in the long run I will consider to separate > my parsing code into an extra package. But currently it is to unstable > and do support only a small subset of all org(roam) features. It would help if you notify orgparse maintainer once your code gets more stable ;) >> I see. FYI, it is a bug to throw an error when parsing Org document. >> Any kind of text file is a valid Org document. There is no notion of >> invalid syntax in Org markup. > > You mean throw an error is a bug because it is not possible to > write invalid org documents? Yup. > I am not convinced yet. But I am open to it and willing to learn. > > Even org-html-export* itself do throw errors and stop processing when > there are unknown orgids. This has nothing to do with the parser. Erring on unknown ids/paths is a special _feature_ of Org exporter controlled by `org-export-with-broken-links' variable. `org-export-with-broken-links' is nil by default simply because (1) Org export has no sensible way to export links that point to nowhere; (2) Such links are generally unwanted and need to be corrected by the user in many use cases. > What is about an inconsistent block? > > #begin_src > foobar > #end_example With your example, the following AST will be produced by Org parser (`org-element-parse-buffer'): (org-data (section (paragraph "#+begin" (subscript "src") "\nfoobar\n#+end" (subscript "example") "\n")) >> > Other things are "invalid" links, e.g. unknown orgids, unknown roam >> > links, unsupported "link kinds" ("protocols" in org syntax?; e.g. >> > "inkscape:"). >> >> In Org terminology, we call these "broken" links. >> "link kinds" are link "types". > > The term "types" is to broad and conflicts with Pythons in build > functions. ;) That is the main reason why I used "kind". On the other > hand the org syntax reference IMHO also use the term "protocol". Syntax reference says the following: PROTOCOL A string which is one of the link type strings in org-link-parameters ^^^^^^^^^ We also always say "link type" in the manual. I just made things more explicit, replacing PROTOCOL with LINKTYPE: https://git.sr.ht/~bzg/worg/commit/0634eed3 >> Generally, part of the "Benefits" section is a bit hand-wavy. I >> recommend using more clear statements. Otherwise, it is not clear what >> exactly the benefits are. > > Again. It is also not "clear" for me. There are benefits just for > myself as an low-level-Emacs-and-org-user, someone who get headaches > reading Lisp code and feeling very comfortable using Python. In short: > My opinion is very subjective. And I don't have enough experience to > compare my tool to others. > I tried to make this point clear in my benefits section. And this is > also the reason why there was no benefits section in the first place > because I wasn't clear enough about what to write in there. > > Maybe I should rephrase the section to "Benefits and design goals". Maybe something like "Motivation"; to emphasize that the listed points are your subjective reasons to write the exporter. Still, it would be useful to have an objective comparison; if you want to get others to use your package. Having a clear list of reasons why your package is better is important then. (I implicitly assumed that you are interested to attract users after you announced the package in public) >> 1. Drop "Fairly resilient when dealing with parser issues." > > Why? The "design goal" is to process all nodes no matter how > bad/invalid they are. Simply because Org mode has no notion of invalid nodes. So, this kind of goal sounds very strange for me. >> 2. Reword "Fairly resilient managing dead and problematic links which >> are a common phenomenon when working with a constantly evolving >> Zettelkasten or personal wiki." And instead clearly explain how broken >> links are exported. > > I don't want to blow up the text. Not sure what you expect here. The > node is exported as HTML but the link is colorful highlighted and a > tooltip explaining the problem is added. Is it something akin when `org-export-with-broken-links' is set to 'mark? >> 4. Drop "Adhers to World Wide Web Consortium (W3C) standards for HTML5 >> and CSS (<!DOCTYPE html>)." Most other blog exporters for Org mode >> adhere to standards. And those that are not are probably out of >> interest for the purposes of comparison. > > Why? If Org export does not adhere to standards, it is a bug, it should, and it will be fixed. And some other blog generators that do not use Org export (like Hugo) do conform to the standards, AFAIK. > Btw: Even code generated by org-html-export* (XHTML 1.0 Strict) give > errors on W3C. e.g. "type" attribute is missing in <style> tag. May you please provide an example? I cannot reproduce. >> 5. Maybe mention the "tag cloud" visible in the example screenshot >> (btw, the screenshot is not very sexy; compare it with something like >> https://one.tonyaldon.com/). > > There nothing fancy as a "tag cloud". ;) btw: There is no cloud on the > link you provided. I was referring to top line listing tags. > About the "sexy"ness of Hyperorg output: There is a specific label for > that issues: > > <https://codeberg.org/buhtz/hyperorg/issues?labels=180551> > > But as you can see on the "milestone" the priority is low. Fair. Do note that "sexyness" is what attracts users :) -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-03-24 18:16 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-03-19 9:23 Presenting Hyperorg version 0.1.0: The Org to HTML Converter c.buhtz 2024-03-20 13:09 ` Ihor Radchenko 2024-03-23 13:50 ` c.buhtz 2024-03-23 13:58 ` Ihor Radchenko 2024-03-23 19:45 ` c.buhtz 2024-03-24 13:31 ` Ihor Radchenko 2024-03-24 14:22 ` c.buhtz 2024-03-24 14:40 ` Ihor Radchenko 2024-03-24 16:59 ` c.buhtz 2024-03-24 18:15 ` Ihor Radchenko
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).