{"id":14977154,"url":"https://github.com/fbgencer/markdownipy","last_synced_at":"2025-10-28T01:30:35.998Z","repository":{"id":54317115,"uuid":"433501577","full_name":"fbgencer/markdownipy","owner":"fbgencer","description":"Markdownipy is a Python library to generate markdown files easily!","archived":false,"fork":false,"pushed_at":"2021-12-03T19:45:22.000Z","size":46,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-22T16:51:59.292Z","etag":null,"topics":["docs","ipython-display","ipython-notebook","jupyter-notebook","jupyter-notebooks","markdown","markdown-editor"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fbgencer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-30T16:22:02.000Z","updated_at":"2025-09-06T10:19:15.000Z","dependencies_parsed_at":"2022-08-13T11:50:42.746Z","dependency_job_id":null,"html_url":"https://github.com/fbgencer/markdownipy","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fbgencer/markdownipy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbgencer%2Fmarkdownipy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbgencer%2Fmarkdownipy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbgencer%2Fmarkdownipy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbgencer%2Fmarkdownipy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fbgencer","download_url":"https://codeload.github.com/fbgencer/markdownipy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbgencer%2Fmarkdownipy/sbom","scorecard":{"id":394250,"data":{"date":"2025-08-11","repo":{"name":"github.com/fbgencer/markdownipy","commit":"5a29ee241c62d32e7059a1477e44ad85d34e1176"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}}]},"last_synced_at":"2025-08-18T18:34:33.413Z","repository_id":54317115,"created_at":"2025-08-18T18:34:33.414Z","updated_at":"2025-08-18T18:34:33.414Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281361346,"owners_count":26487881,"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","status":"online","status_checked_at":"2025-10-27T02:00:05.855Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["docs","ipython-display","ipython-notebook","jupyter-notebook","jupyter-notebooks","markdown","markdown-editor"],"created_at":"2024-09-24T13:55:12.243Z","updated_at":"2025-10-28T01:30:35.707Z","avatar_url":"https://github.com/fbgencer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Markdownipy\n\n![](markdownipy_logo.png)\n\nMarkdownipy is a Python library to generate markdown files using only two operators and some helpers\n\nMarkdownipy can be used in jupyter notebooks to generate markdown outputs in python cells or inside any .py file, see below for examples\n\n##  `\u003c`(lower than operator) writes text to markdown file, `|`(pipe operator) just gives property to the text\n\nEven this README file is genereted by markdownipy!\n\n[Checkout example file](./example.py)\n\n## Motivation\n\n---\n\n\nLately, I'm trying to write markdown documentations for different codes and I needed to put\nsome specs, numbers etc. so just copy-paste some tables, links.\nI was trying to change some predefined strings to speed up my writing process, yet\ninstead of text manipulation I just wanted to make it as a library.\n\nSometimes I also forget markdown syntax, so this library requires no memory (I hope so, there is even no function calls) :)\n\nOnly requirement is remembering the properties of markdownipy and the rest will be handled\n\n\n---\n\n### Install\n\n`pip install markdownipy`\n\n---\n\n### Quick start - example Jupyter cell\n\n```python\nfrom markdownipy import markdownipy\nfrom IPython.display import display,Markdown\n\nmd = markdownipy.markdownipy()\n\nmd \u003c \"hello there\" | md.bold\n\nmd \u003c \"This should be a italic text\" | md.italic\ndisplay(Markdown(md.print()))\n```\n\n__See the example jupter notebook output:__ [Example jupyter file](jupyter_example.ipynb)\n\n---\n\n### Quick start - example Python code\n\n```python\nfrom markdownipy import markdownipy\nmd = markdownipy.markdownipy()\n\n#Simple line\nmd \u003c \"Hello there!\"\n\n#Bold text, numbers are also allowed\nmd \u003c 3.14159 | md.bold\n\n#Italic text\nmd \u003c \"Above bold text is just some digits of pi\" | md.italic\n\n#One line code and codeblock\n\nmd \u003c \"One line code \" | md.code\nmd \u003c '''\nvoid markdownipy_helper(int x, int y, int z):\n\treturn x*y*z\n''' | md.codeb(\"cpp\")\n\n\n#Lists \nmd \u003c [\"Item1\",\"Item2\",\"Item3\"]\n\n#Tables\nmd \u003c {\n\t\"Country\":[\"Fran\",\"Kate\",\"Ivan\"],\n\t\"Age\" : [30,48,73]\n}\n\n#E-mail, links\nmd \u003c \"fbgencer8@gmail.com\" | md.link\nmd \u003c \"fbgencer8@gmail.com\" | md.link(\"My mail\")\n\n#Image\nmd \u003c \"./markdownipy_logo.png\" | md.image\n\n#Writing to a file, README or README.md both works!\n#Even md \u003e\u003e sys.stdout prints the whole markdown document\nmd \u003e\u003e \"README\"\n```\n\n---\n\n### Library keywords\n\nThis table is the whole documentation of markdownipy! (Assuming md is the markdown object in python)\n\n|Keywords|Explanation|Markdown equivalent|\n|:---:|:---:|:---:|\n|md.bold|Bold text|`__text__`|\n|md.italic|Italic text|`_text_`|\n|md.strike|Strikethrough text|`~~text~~`|\n|md.code|For single line code|` `code` `|\n|md.codeb|Code fence, takes optional arg as language name|` ```code``` `|\n|md.link or md.link(link_name)|Link text|`[link_name(optional)](link)`|\n|md.hline|Horizontal line|`---`|\n|md.chapter|Chapter|`Chapter_name\\n===`|\n|md.h1|Header level 1|`# Header1`|\n|md.h2|Header level 2|`## Header2`|\n|md.h3|Header level 3|`### Header3`|\n|md.h4|Header level 4|`#### Header4`|\n|md.h5|Header level 5|`##### Header5`|\n|md.h6|Header level 6|`###### Header6`|\n|md.image or md.image(image_name)|Image insertion|`![image_name(optional)](image_path)`|\n|md.task|Task entry in a list|`[ ] text`|\n|md.task_check|Checked task entry in a list|`[x] text`|\n|`object` \\| md.`keyword`|Pipes the above defined line property keywords to the object||\n|md \u003c `object`|Adds any object to document (str,dict,list,numbers etc.)||\n|md \u003e `file_name`|Writes document to a file||\n|md \u003e `stdout`|Prints the document to console||\n|md.print()|Returns the markdown document as string||\n|md.clear()|Clears the markdown document||\n\n---\n\n---\n\n### Headers\n\n\n\n```python\nmd \u003c \"This is a chapter\" | md.chapter\nmd \u003c \"This is header1\" | md.h1\nmd \u003c \"This is header2\" | md.h2\nmd \u003c \"This is header3\" | md.h3\nmd \u003c \"This is header4\" | md.h4\nmd \u003c \"This is header5\" | md.h5\nmd \u003c \"This is header6\" | md.h6\n```\n\n_Output :_\n\n---\n\nThis is a chapter\n===\n\n# This is header1\n\n## This is header2\n\n### This is header3\n\n#### This is header4\n\n##### This is header5\n\n###### This is header6\n\n---\n\n---\n\n### Bold, italic, strikethrough texts\n\n\n\n```python\nmd \u003c \"This should be a bold text\" | md.bold\nmd \u003c \"This is an italic text\" | md.italic\nmd \u003c \"Strikethrough is banned\"  | md.strike\n```\n\n_Output :_\n\n---\n\n__This should be a bold text__\n\n_This is an italic text_\n\n~~Strikethrough is banned~~\n\n---\n\n---\n\n### Lists\n\n\n\n```python\nmd \u003c [\n\t\"Classical mechanics\" | md.bold,\n\t[\n\t\t\"Newton's law of motion\",\n\t\t\"Lagrangian Mechanics\"\n\t],\n\t\"Thermodynamics and statistical mechanics\" | md.italic,\n\t\"Electromagnetism and photonics\",\n\t\"Relativistic mechanics\",\n\t\"Quantum mechanics, atomic physics, and molecular physics\",\n\t[\n\t\t\"*\", #For dot bullet put bullet type\n\t\t\"Schrödinger equation\",\n\t\t\"Quantum field theory\",\n\t\t[\n\t\t\t\"Lists can be nested :)\",\n\t\t\t\"This is another liner\",\n\t\t\t[\n\t\t\t\t\"Oh this is getting serious\" | md.strike,\n\t\t\t\t\"And now bunch of numbers\",\n\t\t\t\t[\n\t\t\t\t\t3.1415,\n\t\t\t\t\t2.7176,\n\t\t\t\t\t99999,\n\t\t\t\t\t88888\n\t\t\t\t],\n\t\t\t\t\"Now another item\"\n\t\t\t],\n\t\t],\n\t\t\"Quantum statistical mechanics\"\n\t],\n\t\"Optics and acoustics\",\n\t\"Condensed matter physics\",\n\t\"High-energy particle physics and nuclear physics\",\n]\n```\n\n_Output :_\n\n---\n\n1. __Classical mechanics__\n\n\t1. Newton's law of motion\n\n\t2. Lagrangian Mechanics\n\n3. _Thermodynamics and statistical mechanics_\n\n4. Electromagnetism and photonics\n\n5. Relativistic mechanics\n\n6. Quantum mechanics, atomic physics, and molecular physics\n\n\t* Schrödinger equation\n\n\t* Quantum field theory\n\n\t\t1. Lists can be nested :)\n\n\t\t2. This is another liner\n\n\t\t\t1. ~~Oh this is getting serious~~\n\n\t\t\t2. And now bunch of numbers\n\n\t\t\t\t1. 3.1415\n\n\t\t\t\t2. 2.7176\n\n\t\t\t\t3. 99999\n\n\t\t\t\t4. 88888\n\n\t\t\t4. Now another item\n\n\t* Quantum statistical mechanics\n\n8. Optics and acoustics\n\n9. Condensed matter physics\n\n10. High-energy particle physics and nuclear physics\n\n---\n\n---\n\n### Table\n\n\n\n```python\nmd \u003c {\n\t\"Name\" : [\"Albert\", \"Paul\" | md.bold, \"Richard\"],\n\t\"Surname\" : [\"Einstein\" | md.italic, \"Dirac\" , \"Feynman\" | md.italic],\n}\n```\n\n_Output :_\n\n---\n\n|Name|Surname|\n|:---:|:---:|\n|Albert|_Einstein_|\n|__Paul__|Dirac|\n|Richard|_Feynman_|\n\n---\n\n---\n\n### Links\n\n\n\n```python\nmd \u003c \"https://github.com/fbgencer/markdownipy\" | md.link(\"Markdownipy website\")\n```\n\n_Output :_\n\n---\n\n[Markdownipy website](https://github.com/fbgencer/markdownipy)\n\n---\n\n---\n\n### Image\n\n\n\n```python\nmd \u003c (\"markdownipy_logo.png\" | md.image(\"Image name\"))\n```\n\n_Output :_\n\n---\n\n![Image name](markdownipy_logo.png)\n\n---\n\n---\n\n### Single line Quote\n\n\n\n```python\nmd \u003c\u003c (\"With Great Power Comes Great Responsibility\" | md.quote)\n```\n\n_Output :_\n\n---\n\n\u003e With Great Power Comes Great Responsibility\n\n---\n\n---\n\n### Task lists\n\n\n\n```python\nmd \u003c [\"-\", \n\t\"Take the key\" | md.bold | md.task,\n\t\"Cat food\" | md.bold | md.task_check\n]\n```\n\n_Output :_\n\n---\n\n- [ ] __Take the key__\n\n- [x] __Cat food__\n\n---\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffbgencer%2Fmarkdownipy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffbgencer%2Fmarkdownipy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffbgencer%2Fmarkdownipy/lists"}