{"id":20644228,"url":"https://github.com/senselogic/pendown","last_synced_at":"2025-04-16T02:07:47.594Z","repository":{"id":37819931,"uuid":"90125144","full_name":"SenseLogic/PENDOWN","owner":"SenseLogic","description":"Text-to-HTML conversion tool for web writers, with integrated styling and tag customization.","archived":false,"fork":false,"pushed_at":"2023-12-09T09:22:28.000Z","size":741507,"stargazers_count":49,"open_issues_count":1,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-16T02:07:22.955Z","etag":null,"topics":["client-side","css","html","javascript","markup-language","server-side","text-to-html"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SenseLogic.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-05-03T08:17:32.000Z","updated_at":"2024-10-07T20:06:05.000Z","dependencies_parsed_at":"2023-12-09T10:37:27.675Z","dependency_job_id":null,"html_url":"https://github.com/SenseLogic/PENDOWN","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SenseLogic%2FPENDOWN","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SenseLogic%2FPENDOWN/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SenseLogic%2FPENDOWN/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SenseLogic%2FPENDOWN/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SenseLogic","download_url":"https://codeload.github.com/SenseLogic/PENDOWN/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249183104,"owners_count":21226142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-side","css","html","javascript","markup-language","server-side","text-to-html"],"created_at":"2024-11-16T16:15:27.544Z","updated_at":"2025-04-16T02:07:47.570Z","avatar_url":"https://github.com/SenseLogic.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://github.com/senselogic/PENDOWN/blob/master/LOGO/pendown.png)\n\n# Pendown\n\nText-to-HTML conversion tool for web writers, with integrated styling and tag customization.\n\n## Description\n\nPendown allows web writers to write their content in plain text.\n\nIt provides a lightweight markup which can be efficiently converted to HTML in the web browser or on the server.\n\nIts tags can be dynamically redefined and styled with any CSS property or HTML attribute, and code snippets can be automatically colorized.\n\n## Rationale\n\nWhile HTML tags are fine to define the structure and semantics of a document, their verbosity can make them inconvenient\nto write its text.\n\nThe classical solution for this problem is generally to use a HTML preprocessor with a more concise syntax.\n\nOn one hand, there are redactional preprocessors like Markdown or Creole, which allow to write a webpage content\nin plain text, without requiring any prior HTML knowledge at all.\n\nThat's nice, but unfortunately the text presentation can't be freely changed on a case by case basis, unless we resign ourselves to\nuse standard HTML tags where we want to diverge from the predefined CSS stylesheet.\n\nOn the other hand, there are templating preprocessors like Jade or Slim, which have absolutely no limitations at all,\nas they are actually complete alternatives to HTML.\n\nThey are very useful to build HTML pages for a dynamic website, but not really convenient to just write textual content.\n\nPendown tries to fill that gap, by providing an advanced redactional preprocessor which directly integrates\npowerful style customization features.\n\n## Syntax\n\nPendown was designed according to the following main goals :\n\n*   Provide short and readable plain-text tags minimizing conflicts with most texts and code snippets;\n*   Be available and efficient both on web servers and browsers;\n*   Be customizable and extensible, by allowing to dynamically :\n    *    change the tag colors, font sizes, CSS properties and HTML attributes;\n    *    create new tags and override the predefined tags.\n*   Provide both manual and automatic syntax highlighting.\n\nHere are a few sample tags :\n\n```\n! Heading 1\n!! Heading 2\n!!! Heading 3\n!!!! Heading 4\n!!!!! Heading 5\n!!!!!! Heading 6\n\n**bold**\n%%italics%%\n^^superscript^^\n,,subscript,,\n~~strikethrough~~\n__underlined__\n##highlighted##\n´´monospaced´´\n((framed))\n\n{{ span }}\n{{{ div }}}\n### box ###\n+++ frame +++\n\u003e\u003e\u003e quote \u003e\u003e\u003e\n::: code :::\n\n[[[\n(( Monday | Tuesday | Wednesday ))\n(( 1      | 2       | 3         ))\n(( 1      | 2       | 3         ))\n(( 1      | 2       | 3         ))\n]]]\n\n*   List\n*   List\n    *   Sub-list\n    *   Sub-list\n        #   Numbered sub-list\n        #   Numbered sub-list\n            #   Numbered sub-list\n            #   Numbered sub-list\n        #   Numbered\n            sub-list\n\n@@http://www.github.com A link to Github@@\n@@http://www.github.com [[image.jpg:20]]@@\n@@http://www.github.com@@\n\n[[image.jpg]]\n[[image.jpg:20]]\n[[image.jpg:20vw,20%]]\n```\n\n## Styling\n\nPendown tags can be followed by one or several lists of style modifiers :\n\n```\n{{¨big,red,yellow_fill¨ A big red text with a yellow background }}\n\n{{¨@2.5,$00f,#eee,black_outline¨ A big blue text with a gray background and a black outline }}\n```\n\nThese modifiers can be of several kinds :\n\n*   Id : `?menu`\n*   Class : `bold`\n*   Property : `border-style=dotted`\n*   Attribute : `\u0026onclick=\"alert('Hello!')\"`\n*   Text color : `$rgb` `$rgba` `$rrggbb` `$rrggbbaa`\n*   Decoration color : `~rgb` `~rgba` `~rrggbb` `~rrggbbaa`\n*   Background color : `#rgb` `#rgba` `#rrggbb` `#rrggbbaa`\n*   Border color : `+rgb` `+rgba` `+rrggbb` `+rrggbbaa`\n*   Font size : `@1.25` `@1.25rem` `@1.25vw`\n*   Column span : `=2`\n\nModifier lists can be named, so that they can be reused multiple times in the document :\n\n```\n{{¨blue,italic:gangnam¨ A blue text in italics }}\n\n!¨gangnam¨ This title also uses the gangnam style.\n```\n\nIn a modifier list, special characters can be escaped with the \"not\" character :\n\n```\n{{¨\u0026onclick=\"alert('¬,¬:')\"¨ Click me! }}\n```\n\n## Extensibility\n\nThe modifier list of a predefined color tag can also be redefined :\n\n```\n{{¨#ffd,$f87:²¨}}\nThis is a ²salmon text on a yellow background².\n{{¨red:²¨}}\nBut this ²text is red².\n```\n\nMoreover, the special modifier `!` allows to override the definition of any predefined tag.\n\n```\n{{¨![[ \u003cdel$\u003e,!]] \u003c/del\u003e¨}}\n[[ This is not an image. ]]\n{{¨![[,!]]¨}}\n```\n\nThe dollar sign in the definition will be replaced by the actual tag attributes.\n\nA tag without definition is removed.\n\nNew tags are created in the same way.\n\n```\n{{¨!%%% \u003cprogress max=\"100\"$\u003e\u003c/progress\u003e¨}}\n\nProgress : %%%¨\u0026value=\"40\"¨\n```\n\nThe same tag can be used to open or close a block, by defining it several times.\n\n```\n{{¨!$$$ \u003cdel$\u003e,!$$$ \u003c/del\u003e¨}}\n\n$$$¨~00f¨ This text has been deleted. $$$\n```\n\nCustom tags are recognized in their definition order, before predefined tags.\n\n## Syntax highlighting\n\nPendown can automatically add colors to C-like code snippets, by specifying their language through a dedicated modifier :\n\n```\n:::¨cpp¨\n// Colorized source code\n\n#include \u003ciostream\u003e\n\nusing namespace std;\n\nint main()\n{\n    cout \u003c\u003c \"Hello world!\";\n\n    return 0;\n}\n:::\n```\n\nThe following programming languages are currently supported :\n\n*   C : c h\n*   C++ : cpp hpp cxx hxx\n*   C# : cs\n*   D : d\n*   Java : java\n*   JavaScript : js\n*   TypeScript : ts\n\nFiles with any of the above extensions can also be colorized individually, through the command line application.\n\n## Client-side compiler\n\n### Installation\n\nJust put the `pendown.css` and `pendown.js` files in the same folder as your HTML files, or in any folder accessible from them.\n\n### Usage\n\nInclude both files in your HTML file, and write your Pendown text inside one or several `\u003cxmp\u003e` blocks :\n\n```html\n\u003cmeta charset=\"utf8\"/\u003e\n\u003clink rel=\"stylesheet\" href=\"pendown.css\"\u003e\n\u003cxmp\u003e\n! This is the title\n\nPut your **Pendown** text here :)\n\u003c/xmp\u003e\n\u003cscript src=\"pendown.js\"\u003e\u003c/script\u003e\n```\n\nAll the Pendown tags contained in those blocks will automatically be converted to HTML when the file is opened\nin a web browser.\n\nJust make sure that the relative paths towards `pendown.css` and `pendown.js` are right.\n\n### Sample\n\nOpen the `SAMPLE/sample.html` file in a modern web browser like `Firefox` or `Chrome`, and you should see this :\n\n![](https://github.com/senselogic/PENDOWN/blob/master/SAMPLE/sample.png)\n\nHere is its actual content, which can be edited with any plain text editor like `Geany` or `Notepad++`.\n\nAs you can see, no HTML tags were needed to write this text :\n\n```html\n\u003cmeta charset=\"utf8\"/\u003e\n\u003clink rel=\"stylesheet\" href=\"../pendown.css\"\u003e\n\u003cxmp\u003e\n**Pendown** tags are automatically converted into **HTML** tags when the file is opened in a web browser.\n\n---\n\n! Giant Title\n\n!! Huge title\n\n!!! Big title\n\n!!!! Large title\n\n!!!!! Medium title\n\n!!!!!! Small title\n\n!! Line break\n\nManual line break§\ninside a paragraph.\n\nAnother paragraph.\n\n!! Page break\n\n~~~\n\nThis is printed on a new page.\n\n!! Escape\n\n¬_¬_\n\n`** \u003cb\u003enot bold\u003c/b\u003e **`\n\n!! Alignment\n\n\u003c\u003cleft\u003c\u003c\n\n$$center$$\n\n\u003e\u003eright\u003e\u003e\n\n!! Styling\n\n**bold**\n\n%%italics%%\n\n^^superscript^^\n\n,,subscript,,\n\n~~strikethrough~~\n\n~~¨~f00¨strikethrough~~\n\n__underlined__\n\n__¨~f00¨underlined__\n\n##highlighted##\n\n##¨#fce¨highlighted##\n\n##¨#0f02¨highlighted##\n\n´´monospaced´´\n\n{{¨$6f42c1¨colored}}\n\n{{¨$0cc¨colored}}\n\n{{¨$f4f,@1.25¨colored}}\n\n{{¨$80f,large:violet_large¨colored}}\n\n{{¨violet_large,bold¨colored}}\n\n{{¨cyan¨colored}}\n\n{{¨pink,@1.25¨colored}}\n\n{{¨blue,large:blue_large¨colored}}\n\n{{¨blue_large,bold¨colored}}\n\n{{{¨black_outline,large,bold¨\n°gray°\n\n⁰orange⁰\n\n¹pink¹\n\n²red²\n\n³blue³\n\n⁴violet⁴\n\n⁵cyan⁵\n\n⁶black⁶\n\n⁷yellow⁷\n\n⁸white⁸\n\n⁹green⁹\n}}}\n\nHit ´´Ctrl´´ + ´´Alt´´ + ´´Del´´.\n\nHit ((Ctrl)) + ((Alt)) + ((Del)).\n\nClick on ((File)) \u0026gt; ((Save As)) \u0026gt; ((PNG)).\n\n!! Code\n\n:::\n##// ²Colorized source code²##\n\n²if² ³(³ ... ³)³\n³{³\n    ...\n³}³\n²else²\n³{³\n    ...\n³}³\n:::\n\n:::¨cpp¨\n// Colorized source code\n\n#include \u003ciostream\u003e\n\nusing namespace std;\n\nint main()\n{\n    cout \u003c\u003c \"Hello world!\";\n\n    return 0;\n}\n:::\n\n???\n\u003ctags\u003e\n    \u003care completely/\u003e\n    \u003cignored here/\u003e\n\u003c/tags\u003e\n???\n\n!! Block\n\n{{{¨pastel_gray_fill¨\nBlock\n}}}\n\n{{{¨pastel_gray_fill,black¨\nBlock\n}}}\n\n{{{¨#cef¨\nBlock\n}}}\n\n{{{¨#cef,$000¨\nBlock\n}}}\n\n!! Box\n\n###\nBox\n###\n\n###¨black¨\nBox\n###\n\n###¨#cef¨\nBox\n###\n\n###¨#cef,$000¨\nBox\n###\n\n!! Frame\n\n+++\nFrame\n+++\n\n+++¨red_border¨\nFrame\n+++\n\n+++¨+f00,#ffd¨\nFrame\n+++\n\n+++¨+f00,#ffd,$000¨\nFrame\n+++\n\n!! Quote\n\n\u003e\u003e\u003e\nQuote\n\u003e\u003e\u003e\n\n\u003e\u003e\u003e¨+f00¨\nQuote\n\u003e\u003e\u003e\n\n\u003e\u003e\u003e¨+f00,#ffd¨\nQuote\n\u003e\u003e\u003e\n\n\u003e\u003e\u003e¨+f00,#ffd,$000¨\nQuote\n\u003e\u003e\u003e\n\n!! Column\n\n+++¨column_2¨\nBatlh biqsip 'ugh chang'eng chuy duran lung dir ghogh habli' jer lor motlh.\nQan siqwi' tuj muvwi' wogh yor 'o'megh be'etor boqha''egh lodni'pu' jij laq lol lo' law' mevyap.\n\nPivchem qid red rutlh saqjan say'qu'moh siq torgh tlhach mu'mey vilinhod vithay' yem 'iqnah 'irneh.\nGhitlhwi' jer loghqam me'nal nav habli' notqa' podmoh qaywi' qin qi'tu' red ril siqwi' tagh tahqeq.\n\nTiqnagh lemdu' 'och 'orghen rojmab 'urwi' bop chevwi' tlhoy' der mara nuh bey' peghmey vittlhegh.\nQa'meh quv qep'it qid qin ros saqjan serrum tahqeq tatlh toq van yu'egh 'aqtu' em.\n\nNaq pach pujwi' qanwi' qutluch qi'lop ron rutlh say'qu'moh tennusnal tlhej.\nDenibya'ngan ghay'cha' janluq dugh hu je lotlhmoq tlhoy' sas valqis ghubdaq hos chohwi' janluq.\n+++\n\n!! Table\n\n[[[\n((        | Monday | Tuesday | Wednesday ))\n(( Apple  | 1      | 2       | 3         ))\n(( Orange | 1      | 2       | 3         ))\n(( Banana | 1      | 2       | 3         ))\n]]]\n\n{{¨orange,bold:²¨}}\n[[[¨orange_border,tiny_border,padding,black:table¨\n((¨orange_fill,white,bold,center:title¨¨=2¨ Subject pronouns ))\n(( ²yo² | I ))\n(( ²tú² | you ))\n(( ²él², ²ella², ²usted² | he, she, %%you%% ))\n(( ²nosotros², ²nosotras² | we ))\n(( ²vosotros², ²vosotras² | you ))\n(( ²ellos², ²ellas², ²ustedes² | they, %%you%% ))\n]]]\n\n[[[¨table¨\n((¨no_top_left_border¨ |¨title¨ -AR§cantar |¨title¨ -ER§comer |¨title¨ -IR§vivir ))\n(( °(yo)° | cant²o² | com²o² | viv²o² ))\n(( °(tú)° | cant²as² | com²es² | viv²es² ))\n(( °(él,ella,usted)° | cant²a² | com²e² | viv²e² ))\n(( °(nosotros,-as)° | cant²amos² | com²emos² | viv²imos² ))\n(( °(vosotros,-as)° | cant²áis² | com²éis² | viv²ís² ))\n(( °(ellos,-as,uds)° | cant²an² | com²en² | viv²en² ))\n]]]\n{{¨red:²¨}}\n\n[[[¨width_5_6,border,light_gray_border,padding¨\n((¨width_20¨\n    Batlh biqsip 'ugh chang'eng chuy duran lung dir ghogh habli' jer lor motlh.§\n    Qan siqwi' tuj muvwi' wogh yor 'o'megh be'etor boqha''egh lodni'pu' jij laq lol lo' law' mevyap.\n|\n    Pivchem qid red rutlh saqjan say'qu'moh siq torgh tlhach mu'mey vilinhod vithay' yem 'iqnah 'irneh.§\n    Ghitlhwi' jer loghqam me'nal nav habli' notqa' podmoh qaywi' qin qi'tu' red ril siqwi' tagh tahqeq.§\n    Tiqnagh lemdu' 'och 'orghen rojmab 'urwi' bop chevwi' tlhoy' der mara nuh bey' peghmey vittlhegh.§\n    Qa'meh quv qep'it qid qin ros saqjan serrum tahqeq tatlh toq van yu'egh 'aqtu' em.\n|¨width_20¨\n    Naq pach pujwi' qanwi' qutluch qi'lop ron rutlh say'qu'moh tennusnal tlhej.§\n    Denibya'ngan ghay'cha' janluq dugh hu je lotlhmoq tlhoy' sas valqis ghubdaq hos chohwi' janluq.\n))\n]]]\n\n[[[¨width_100,no_padding¨\n((\n    [[[¨width_100,padding,small:table¨\n    ((¨black_fill,dark_gray¨ black ))\n    ]]]\n|\n    [[[¨table¨\n    ((¨dark_gray_fill,gray¨ dark gray ))\n    ((¨dark_orange_fill,orange¨ dark orange ))\n    ((¨dark_red_fill,red¨ dark red ))\n    ((¨dark_pink_fill,pink¨ dark pink ))\n    ((¨dark_violet_fill,violet¨ dark violet ))\n    ((¨dark_blue_fill,blue¨ dark blue ))\n    ((¨dark_cyan_fill,cyan¨ dark cyan ))\n    ((¨dark_green_fill,green¨ dark green ))\n    ((¨dark_yellow_fill,yellow¨ dark yellow ))\n    ]]]\n|\n    [[[¨table¨\n    ((¨gray_fill,light_gray¨ gray ))\n    ((¨orange_fill,light_orange¨ orange ))\n    ((¨red_fill,light_red¨ red ))\n    ((¨pink_fill,light_pink¨ pink ))\n    ((¨violet_fill,light_violet¨ violet ))\n    ((¨blue_fill,light_blue¨ blue ))\n    ((¨cyan_fill,light_cyan¨ cyan ))\n    ((¨green_fill,light_green¨ green ))\n    ((¨yellow_fill,white¨ yellow ))\n    ]]]\n|\n    [[[¨table¨\n    ((¨light_gray_fill,pastel_gray¨ light gray ))\n    ((¨light_orange_fill,pastel_orange¨ light orange ))\n    ((¨light_red_fill,pastel_red¨ light red ))\n    ((¨light_pink_fill,pastel_pink¨ light pink ))\n    ((¨light_violet_fill,pastel_violet¨ light violet ))\n    ((¨light_blue_fill,pastel_blue¨ light blue ))\n    ((¨light_cyan_fill,pastel_cyan¨ light cyan ))\n    ((¨light_green_fill,pastel_green¨ light green ))\n    ((¨light_yellow_fill,white¨ light yellow ))\n    ]]]\n|\n    [[[¨table¨\n    ((¨pastel_gray_fill,white¨ pastel gray ))\n    ((¨pastel_orange_fill,white¨ pastel orange ))\n    ((¨pastel_red_fill,white¨ pastel red ))\n    ((¨pastel_pink_fill,white¨ pastel pink ))\n    ((¨pastel_violet_fill,white¨ pastel violet ))\n    ((¨pastel_blue_fill,white¨ pastel blue ))\n    ((¨pastel_cyan_fill,white¨ pastel cyan ))\n    ((¨pastel_green_fill,white¨ pastel green ))\n    ((¨pastel_yellow_fill,white¨ pastel yellow ))\n    ]]]\n|\n    [[[¨table¨\n    ((¨white_fill,pastel_gray¨ white ))\n    ]]]\n))\n]]]\n\n[[[¨line_height_2¨\n(( ((Ctrl)) | + | ((Del)) ))\n(( ((Shift)) | + | ((Enter)) ))\n]]]\n\n!! List\n\nFour spaces per level.\n\n*   List\n*   List\n    *   Sub-list\n    *   Sub-list\n        #   Numbered sub-list\n        #   Numbered sub-list\n            #   Numbered sub-list\n            #   Numbered sub-list\n        #   Numbered\n            sub-list\n*   List\n    *   Sub-list\n        *   Sub-list\n        *   Sub-list\n    *   Sub-list\n        *   Sub-list\n        *   Sub-list\n*   List§\n    ...\n\n{{{¨dash¨\n*   List\n*   List\n    *   Sub-list\n    *   Sub-list\n        #   Numbered sub-list\n        #   Numbered sub-list\n            #   Numbered sub-list\n            #   Numbered sub-list\n        #   Numbered\n            sub-list\n*   List\n    *   Sub-list\n        *   Sub-list\n        *   Sub-list\n    *   Sub-list\n        *   Sub-list\n        *   Sub-list\n*   List§\n    ...\n}}}\n\n!! Link\n\n@@http://www.github.com This is a link@@\n\n@@http://www.github.com [[image.jpg:20]]@@\n\n@@http://www.github.com@@\n\n!! Image\n\nSmall :\n\n[[image.jpg:20]][[image_2.jpg:20]]§\n[[image_3.jpg:20]][[image_4.jpg:20]][[image_5.jpg:20]]\n\nMedium :\n\n[[image_3.jpg:40]][[image_4.jpg:40]]\n\nLarge :\n\n[[image.jpg]]§\n[[image_2.jpg:]]§\n[[image_4.jpg:,100]]\n\nCustom :\n\n[[image_5.jpg:50vw,50%]]\n\nInline :\n\n[[#iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=png:2rem]]\n\nRemote :\n\n[[https://upload.wikimedia.org/wikipedia/commons/b/bb/Ifaty_beach_Madagascar.jpg:40]]\n[[https://upload.wikimedia.org/wikipedia/commons/8/80/Wikipedia-logo-v2.svg:36]]\n\nEffects :\n\n[[¨shadow_3¨image_6.jpg:20]] [[¨shadow_6¨image_6.jpg:20]] [[¨shadow_9¨image_6.jpg:20]] [[¨shadow_-6¨image_6.jpg:20]]\n\n[[¨round_10¨image_6.jpg:20]] [[¨round_20¨image_6.jpg:20]] [[¨round_50¨image_6.jpg:20]] [[¨opacity_50¨image_6.jpg:20]]\n\n[[¨blur_1¨image_6.jpg:20]] [[¨lightness_130¨image_6.jpg:20]] [[¨contrast_180¨image_6.jpg:20]] [[¨saturation_200¨image_6.jpg:20]]\n\n[[¨hue_180¨image_6.jpg:20]] [[¨inverse_100¨image_6.jpg:20]] [[¨gray_100¨image_6.jpg:20]] [[¨sepia_100¨image_6.jpg:20]]\n\n!! Video\n\n[[¨\u0026autoplay,\u0026loop,\u0026muted,\u0026controls¨video.mp4:20]]\n\n[[¨\u0026controls,lightness_130¨video.mp4:40]]\n\n!! Styling\n\n{{{¨?id,big,padding=1rem,border-style=dotted,background-color=rgb(128¬,128¬,128¬,0.2),$00c,center¨\nYou can use any CSS id, class or property you need.\n}}}\n\n{{¨\u0026onclick=\"alert('¬,¬:')\"¨ Click me! }}\n\n!! Extensibility\n\n{{¨!%%% \u003cprogress max=\"100\"$\u003e\u003c/progress\u003e¨}}\n\nProgress : %%%¨\u0026value=\"40\"¨\n\n{{¨!$$$ \u003cdel$\u003e,!$$$ \u003c/del\u003e¨}}\n\n$$$¨~00f¨ This text has been deleted. $$$\n\n{{¨![[ \u003cdel$\u003e,!]] \u003c/del\u003e¨}}\n[[ This is not an image. ]]\n{{¨![[,!]]¨}}\n\n!! HTML\n\n²Pendown tags² can be mixed with \u003cspan style=\"color:green\"\u003eHTML tags\u003c/span\u003e.\n\u003c/xmp\u003e\n\u003cscript src=\"../pendown.js\"\u003e\u003c/script\u003e\n```\n\n### Frequently asked questions\n\n\u003e How can I force Pendown to use black as the default text color ?\n\nReplace `\u003cxmp\u003e` by `\u003cxmp class=\"black\"\u003e` in the HTML file.\n\n\u003e How can I hide the Pendown text until it has been converted into HTML ?\n\nReplace `\u003cxmp\u003e` by `\u003cxmp style=\"display:none\"\u003e` in the HTML file.\n\n\u003e How can I generate a PDF file from my Pendown HTML file ?\n\n* Open it in Chrome or Chromium.\n* Press `Ctrl-P`.\n* Select the PDF printer.\n* Click on `More settings` to enable `Background graphics` and disable `Headers and footers`.\n* Click on `Print`.\n\n### Troubleshooting\n\n\u003e The Pendown page doesn't show the converted text.\n\nCheck that the Pendown file extension is \".html\".\n\nCheck that your text is between the `\u003cxmp\u003e` and `\u003c/xmp\u003e` tags.\n\nCheck that the relative paths to \"pendown.css\" and \"pendown.js\" are correct.\n\n\u003e The Pendown page doens't show the page breaks in the browser.\n\nThis is normal, page breaks are only applied when the web page is printed from the browser, or when the generated HTML file is loaded in LibreOffice Writer.\n\n## Server-side compiler\n\nPendown documents can also be converted offline through a command line tool.\n\nIt's available as a single file application implemented in the D language.\n\n### Installation\n\nInstall the [DMD 2 compiler](https://dlang.org/download.html) (using the MinGW setup option on Windows).\n\nThen build the executable with the following command line :\n\n```bash\ndmd -m64 pendown.d\n```\n\n### Command line\n\n```bash\npendown [options] input_file output_file\n```\n\n### Options\n\n```\n--colorize : generate a Pendown file from a source code file\n--process : generate a HTML file from a Pendown file\n--loadable : make the HTML file loadable in LibreOffice Writer\n--script : make the HTML file import the Pendown script file\n--style : make the HTML file import the Pendown style file\n--language c|cpp|cs|d|java|js|ts : set the source code language\n--tabulation 4 : set the text tabulation space count\n--indentation 4 : set the list indentation space count\n--page 21 29.7 2 1 1 1 : resize the images for a LibreOffice Writer document of this page width, height, left margin, right margin, top margin and bottom margin\n--path PENDOWN_FOLDER/ : set the path of the imported Pendown files\n```\n\n### Examples\n\n```bash\npendown --process --style --path ../ document.pd document.html\n```\n\nConverts a Pendown file to a HTML file which imports Pendown's CSS file from the upper folder.\n\n```bash\npendown --process --page 18 27.7 --style --path ../ document.pd document.html\n```\n\nConverts a Pendown file to a HTML file which can be imported in LibreOffice Writer\n\n```bash\npendown --script --style --path ../ document.pd document.html\n```\n\nConverts a Pendown file to a HTML file which imports Pendown's Javascript and CSS style files from the upper folder,\nso that the Pendown tags will be converted directly by the web browser.\n\n```bash\npendown --colorize code.d code.pd\n```\n\nConverts a D source code file to a Pendown file.\n\n```bash\npendown --colorize --process --style --path ../ code.d code.html\n```\n\nConverts a D source code file to a HTML file which imports the Pendown style file.\n\n```bash\npendown --colorize --script --style --path ../ code.d code.html\n```\n\nConverts a D source code file to a HTML file which imports the Pendown script and style files to convert the Pendown tags inside the web browser.\n\n## Limitations\n\n* Lists are not processed inside preformatted blocks.\n* A Pendown text can't contain `\u003cxmp\u003e` tags if it is to be converted to HTML by the web browser script.\n\n## Version\n\n4.0\n\n## Author\n\nEric Pelzer (ecstatic.coder@gmail.com).\n\n## License\n\nThis project is licensed under the GNU General Public License version 3.\n\nSee the [LICENSE.md](LICENSE.md) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsenselogic%2Fpendown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsenselogic%2Fpendown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsenselogic%2Fpendown/lists"}