Improve markdown_to_typst

This commit is contained in:
Sina Atalay
2025-02-08 16:24:33 -05:00
parent c6428adcd8
commit 361df43c57
6 changed files with 69 additions and 49 deletions

View File

@@ -190,7 +190,7 @@ def create_a_markdown_file(
file_name_without_extension = create_a_file_name_without_extension_from_name(
rendercv_data_model.cv.name
)
file_name = f"{file_name_without_extension}.typ"
file_name = f"{file_name_without_extension}.md"
return create_a_file_and_write_contents_to_it(
markdown_contents,

View File

@@ -561,6 +561,7 @@ def escape_typst_characters(string: Optional[str]) -> Optional[str]:
"%": "\\%",
"~": "\\~",
"_": "\\_",
"/": "\\/",
}
return escape_characters(string, escape_dictionary)
@@ -644,10 +645,10 @@ def markdown_to_typst(markdown_string: str) -> str:
# convert any remaining asterisks to Typst's asterisk
# - Asterisk with a space can just be replaced.
# - Asterisk without a space needs a zero-width box to delimit it.
TYPST_AST = "#sym.ast.basic"
ZERO_BOX = "#h(0pt, weak: true)"
markdown_string = markdown_string.replace("* ", TYPST_AST + " ")
markdown_string = markdown_string.replace("*", TYPST_AST + ZERO_BOX)
typst_asterisk = "#sym.ast.basic"
zero_box = "#h(0pt, weak: true) "
markdown_string = markdown_string.replace("* ", typst_asterisk + " ")
markdown_string = markdown_string.replace("*", typst_asterisk + zero_box)
# At this point, the document ought to have absolutely no '*' characters left!
# NOTE: The final typst file might still have some asterisks when specifying a
@@ -688,7 +689,7 @@ def transform_markdown_sections_to_something_else_sections(
transformed_list.append(result)
else:
# Then it means it's one of the other entries.
fields_to_skip = ["doi"]
fields_to_skip = ["doi", "url"]
entry_as_dict = entry.model_dump()
for entry_key, inner_value in entry_as_dict.items():
if entry_key in fields_to_skip:

View File

@@ -59,8 +59,8 @@ def test_markdown_file_class(tmp_path, rendercv_data_model, jinja2_environment):
"$a=5_4^3 % & #$ \\# $aaaa ___ &&$",
),
(
"$###$",
"\\$\\#\\#\\#\\$",
"$###$////",
"\\$\\#\\#\\#\\$\\/\\/\\/\\/",
),
(
"#test-typst-command[argument]",
@@ -99,8 +99,8 @@ def test_escape_typst_characters(string, expected_string):
(
"We can put asteri*sks in the middle of words",
(
"We can put asteri#sym.ast.basic#h(0pt, weak: true)sks in the middle of"
" words"
"We can put asteri#sym.ast.basic#h(0pt, weak: true) sks in the middle"
" of words"
),
),
(
@@ -109,9 +109,9 @@ def test_escape_typst_characters(string, expected_string):
" backslash: \\*"
),
(
"If we want to escape #sym.ast.basic#h(0pt, weak: true)'s such that"
"If we want to escape #sym.ast.basic#h(0pt, weak: true) 's such that"
" they don't become bold, we use a backslash: #sym.ast.basic#h(0pt,"
" weak: true)"
" weak: true) "
),
),
(
@@ -125,9 +125,28 @@ def test_escape_typst_characters(string, expected_string):
"Asterisk with a space after it does not need a zero-width space: *test",
(
"Asterisk with a space after it does not need a zero-width space:"
" #sym.ast.basic#h(0pt, weak: true)test"
" #sym.ast.basic#h(0pt, weak: true) test"
),
),
(
"\\* Asterisk should not be escaped\\*.Hey?",
(
"#sym.ast.basic Asterisk should not be escaped#sym.ast.basic#h(0pt,"
" weak: true) .Hey?"
),
),
(
"I would like to not have any \\*\\*bold\\*\\* text",
(
"I would like to not have any #sym.ast.basic#h(0pt, weak: true)"
" #sym.ast.basic#h(0pt, weak: true) bold#sym.ast.basic#h(0pt,"
" weak: true) #sym.ast.basic text"
),
),
(
"Keep Typst commands #test-typst-command[argument] as they are.",
"Keep Typst commands #test-typst-command[argument] as they are.",
),
],
)
def test_markdown_to_typst(markdown_string, expected_typst_string):

View File

@@ -466,18 +466,18 @@
[#box(original-link("mailto:john_doe@example.com")[john\_doe\@example.com])],
[#box(original-link("tel:+90-541-999-99-99")[0541 999 99 99])],
[#box(original-link("https://example.com/")[example.com])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com/in/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com/users/12323/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net/profile/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com/johndoe])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com\/in\/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com\/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com\/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org\/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com\/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com\/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com\/users\/12323\/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com\/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net\/profile\/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com\/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me\/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com\/johndoe])],
)
#connections(connections-list)

View File

@@ -466,18 +466,18 @@
[#box(original-link("mailto:john_doe@example.com")[john\_doe\@example.com])],
[#box(original-link("tel:+90-541-999-99-99")[0541 999 99 99])],
[#box(original-link("https://example.com/")[example.com])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com/in/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com/users/12323/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net/profile/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com/johndoe])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com\/in\/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com\/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com\/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org\/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com\/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com\/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com\/users\/12323\/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com\/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net\/profile\/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com\/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me\/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com\/johndoe])],
)
#connections(connections-list)

View File

@@ -466,18 +466,18 @@
[#box(original-link("mailto:john_doe@example.com")[john\_doe\@example.com])],
[#box(original-link("tel:+90-541-999-99-99")[0541 999 99 99])],
[#box(original-link("https://example.com/")[example.com])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com/in/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com/users/12323/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net/profile/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com/johndoe])],
[#box(original-link("https://linkedin.com/in/johndoe")[linkedin.com\/in\/johndoe])],
[#box(original-link("https://github.com/johndoe")[github.com\/johndoe])],
[#box(original-link("https://instagram.com/johndoe")[instagram.com\/johndoe])],
[#box(original-link("https://orcid.org/0000-0000-0000-0000")[orcid.org\/0000-0000-0000-0000])],
[#box(original-link("https://scholar.google.com/citations?user=F8IyYrQAAAAJ")[scholar.google.com\/citations?user=F8IyYrQAAAAJ])],
[#box(original-link("https://example.com/@johndoe")[example.com\/\@johndoe])],
[#box(original-link("https://stackoverflow.com/users/12323/johndoe")[stackoverflow.com\/users\/12323\/johndoe])],
[#box(original-link("https://gitlab.com/johndoe")[gitlab.com\/johndoe])],
[#box(original-link("https://researchgate.net/profile/johndoe")[researchgate.net\/profile\/johndoe])],
[#box(original-link("https://youtube.com/@johndoe")[youtube.com\/\@johndoe])],
[#box(original-link("https://t.me/johndoe")[t.me\/johndoe])],
[#box(original-link("https://x.com/johndoe")[x.com\/johndoe])],
)
#connections(connections-list)