{"id":22829138,"url":"https://github.com/eric-philippe/juliamarkdownjoy","last_synced_at":"2026-04-18T15:38:27.104Z","repository":{"id":216897085,"uuid":"742636530","full_name":"Eric-Philippe/JuliaMarkdownJoy","owner":"Eric-Philippe","description":"Julia Markdown Joy is a Julia package that provides a set of tools to help you write your markdown documents and then convert those human-readable documents into machine-readable code. (Json, HTML, etc.)","archived":false,"fork":false,"pushed_at":"2024-03-11T14:12:01.000Z","size":394,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-08T13:07:42.059Z","etag":null,"topics":["converter","json","julia","markdown"],"latest_commit_sha":null,"homepage":"","language":"Julia","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/Eric-Philippe.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-12T23:28:35.000Z","updated_at":"2024-03-13T10:54:12.000Z","dependencies_parsed_at":"2024-12-12T19:13:32.919Z","dependency_job_id":"b86419c3-bc3b-4b1e-ada0-edf7e7a808b7","html_url":"https://github.com/Eric-Philippe/JuliaMarkdownJoy","commit_stats":null,"previous_names":["eric-philippe/markdownparser"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Eric-Philippe/JuliaMarkdownJoy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Philippe%2FJuliaMarkdownJoy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Philippe%2FJuliaMarkdownJoy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Philippe%2FJuliaMarkdownJoy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Philippe%2FJuliaMarkdownJoy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eric-Philippe","download_url":"https://codeload.github.com/Eric-Philippe/JuliaMarkdownJoy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eric-Philippe%2FJuliaMarkdownJoy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31974951,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["converter","json","julia","markdown"],"created_at":"2024-12-12T19:13:25.193Z","updated_at":"2026-04-18T15:38:22.096Z","avatar_url":"https://github.com/Eric-Philippe.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch3 align=\"center\"\u003e\n  \u003cimg\n    src=\"img/logo.png\"\n    height=\"200\"\n  \u003e\n\u003c/h3\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://actions-badge.atrox.dev/Eric-Philippe/JuliaMarkdownJoy/goto?ref=main\"\u003e\u003cimg alt=\"Build Status\" src=\"https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FEric-Philippe%2FJuliaMarkdownJoy%2Fbadge%3Fref%3Dmain\u0026style=for-the-badge\" /\u003e\u003c/a\u003e\n\n![Julia](https://img.shields.io/badge/-Julia-9558B2?style=for-the-badge\u0026logo=julia\u0026logoColor=white)\n![Markdown](https://img.shields.io/badge/markdown-%23000000.svg?style=for-the-badge\u0026logo=markdown\u0026logoColor=white)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003eJulia Markdown Joy\u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cstrong\u003eJulia Markdown Joy\u003c/strong\u003e is a Julia package that provides a set of tools to help you write your markdown documents and then convert those human-readable documents into machine-readable code. (Json, HTML, etc.)\n\n## Introduction\n\nThe idea behind this package is from my [Portfolio](https://github.com/Eric-Philippe/portfolio) where I wanted to simplify the process of inserting my projects and photos albumbs into the website. I wanted to be able to insert my projecrs without having to write a single line of code, and maybe forget to update somewhere else. I wanted to be able to write my projects in a markdown file and.\n\nI first try to make a first version in Python, but way too specific to my needs. So I decided to make a more general version in Julia.\n\n#### Why Julia?\n\nBecause It's been a long time since I was trying to make a project in Julia. I wanted to learn more about the language and its ecosystem.\nIt also a good language in terms of performance and I wanted to see how it would perform in this kind of project compared to Python.\n\n## Getting Started\n\nDownload the repository or clone it :\n\n```bash\ngit clone https://github.com/Eric-Philippe/JuliaMarkdownJoy.git\n```\n\nIn order to execute this project, Julia is required.\n\n```bash\ncurl -fsSL https://install.julialang.org | sh\n```\n\nThen, you need to install the dependencies.\n\n```bash\njulia --project=. -e 'using Pkg; Pkg.instantiate()'\n```\n\n## Usage\n\n### CLI\n\n```bash\njulia --project=. src/run.jl\n```\n\nAt the moment, the CLI only supports the following commands:\n\n| Command           | Description                                                        | Status             |\n| ----------------- | ------------------------------------------------------------------ | ------------------ |\n| `help`            | Display the help message                                           | W.I.P              |\n| `parse`           | Parse a markdown file to an intermediate JSON representation       | ✅                 |\n| `extract`         | Extract specific fields from a Markdown file to a proper JSON file | ✅                 |\n| `test-dead-links` | Test all the links in a markdown file                              | ✅                 |\n| `convert`         | Convert a Markdown file to [HTML, YAML, JSON]                      | W.I.P (HTML Ready) |\n\n#### Parse command\n\n```bash\njulia --project=. src/run.jl parse --file \u003cpath_to_markdown_file\u003e.md --output \u003cpath_to_output_file\u003e.json\n```\n\nThe extract command will parse the markdown file and output a JSON file that looks like this :\n\n```json\n{\n  \"_content\": [\n    {\n      \"type\": \"h1\",\n      \"content\": \"Hello World\"\n    },\n    {\n      \"type\": \"p\",\n      \"content\": \"simple paragraph\"\n    },\n    {\n      \"type\": \"code_block\",\n      \"content\": [\"python\", \"print(\\\"Julia\\\")\\nprint(\\\"Markdown\\\")\"]\n    },\n    {\n      \"type\": \"code_block\",\n      \"content\": [\"unknown\", \"println(\\\"Julia\\\")\\nprintln(\\\"Markdown\\\")\"]\n    },\n    {\n      \"type\": \"img\",\n      \"content\": [\"alt content\", \"url\"]\n    },\n    {\n      \"type\": \"link\",\n      \"content\": [\"alt content\", \"url\"]\n    },\n    {\n      \"type\": \"quote\",\n      \"content\": \"quote content\"\n    },\n    {\n      \"type\": \"table_headers\",\n      \"content\": [\"header1\", \"header2\"]\n    },\n    {\n      \"type\": \"table_row\",\n      \"content\": [\"cell1_row1\", \"cell2_row1\"]\n    },\n    ...\n  ]\n}\n```\n\n##### Flags\n\n| Flag      | Description                        | Required | Alias | format  |\n| --------- | ---------------------------------- | -------- | ----- | ------- |\n| `-input`  | Path to the markdown file to parse | ✅       | `-i`  | `.md`   |\n| `-output` | Path to the output file            | ❌       | `-o`  | `.json` |\n\n\u003e The input can also be a directory, in this case, the program will parse all the markdown files in the directory **except** the ones that start with an underscore `_`.\n\n#### Extract command\n\n```bash\njulia --project=. src/run.jl extract -input \u003cpath_to_markdown_file\u003e.md -conf config.json --output \u003cpath_to_output_file\u003e.json\n```\n\nThe extract command will parse the markdown file and output a json file only with the fields specified in the config file.\n\n##### Config file\n\nThe config file allow you to pick the properties you want, where, and with what format\n\n```json\n{\n  \"fields\": [\n    {\n      \"find_property_\": \"title\",\n      \"after_a_\": \"title\",\n      \"named_\": [\"Titre\", \"Title\"]\n    },\n    {\n      \"find_property_\": \"content\",\n      \"after_a_\": \"title\",\n      \"named_\": [\n        \"Contenu\",\n        \"Contenu du projet\",\n        \"Description\",\n        \"Description du projet\"\n      ],\n      \"take_everything_after_\": true\n    },\n    {\n      \"find_property_\": \"previewImg\",\n      \"after_a_\": \"image\",\n      \"named_\": [\n        \"Image\",\n        \"Image de prévisualisation\",\n        \"Image de preview\",\n        \"Preview\",\n        \"Preview image\"\n      ]\n    }\n  ]\n}\n```\n\nWe can easily read the config file as a human text, take the first field :\n\nI want to **find the property** `title` **after** a `title` **named** `Titre` or `Title`\n\nSo, at the end if the field is well in the markdown file, the output will be :\n\n```json\n{\n  \"title\": \"My title\"\n  ...\n}\n```\n\n\u003e I plan to add a flag to specify to make a pre-check to see if the field is in the markdown file, otherwise, depending on the flag, it will throw an error or (as it is now) put a \"NOT_FOUND\" string in the output.\n\n##### Flags\n\n| Flag      | Description                        | Required | Alias | format  |\n| --------- | ---------------------------------- | -------- | ----- | ------- |\n| `-input`  | Path to the markdown file to parse | ✅       | `-i`  | `.md`   |\n| `-output` | Path to the output file            | ❌       | `-o`  | `.json` |\n| `-conf`   | Path to the config file            | ✅       | `-c`  | `.json` |\n\n\u003e The input can also be a directory, in this case, the program will parse all the markdown files in the directory **except** the ones that start with an underscore `_`.\n\n##### Facultative attributes\n\nYou can put the following attributes in the config file for each field :\n\n- `take_everything_after_` : If true, the program will take everything after the field, and parse it to pure html. (Useful for the content of a project for example)\n\n- `format_` : The format of the field. [uppercase, lowercase...]\n\n## How it works\n\n![Schéma](img/how_it_works.png)\n\n## Roadmap\n\n- [x] Parse markdown file to JSON\n- [x] Extract specific fields from a Markdown file to a proper JSON file\n- [x] Test all the links in a markdown file\n- [ ] Convert a Markdown file to [HTML, YAML, JSON]\n\n## Suggestions\n\nThis project at this time only aims to be a tool to help me with my portfolio. But if you have any suggestions, feel free to open an issue or a pull request, I'd be happy to make it better for your usage too.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-philippe%2Fjuliamarkdownjoy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feric-philippe%2Fjuliamarkdownjoy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-philippe%2Fjuliamarkdownjoy/lists"}