Interpret \n
as newline for MFM
Markdown doesn't generally consider `\n` a newline, but Misskey does for MFM. Now we do to for MFM (and not for Markdown) :)
This commit is contained in:
parent
ef279ac53f
commit
b4952a81fe
5 changed files with 11 additions and 7 deletions
|
@ -124,8 +124,8 @@ def mentions_escape(text, options \\ []) do
|
|||
end
|
||||
end
|
||||
|
||||
def markdown_to_html(text) do
|
||||
Earmark.as_html!(text, %Earmark.Options{compact_output: true})
|
||||
def markdown_to_html(text, opts \\ %{}) do
|
||||
Earmark.as_html!(text, %Earmark.Options{compact_output: true} |> Map.merge(opts))
|
||||
end
|
||||
|
||||
def html_escape({text, mentions, hashtags}, type) do
|
||||
|
|
|
@ -104,9 +104,9 @@ defp remote_mention_resolver(
|
|||
end
|
||||
end
|
||||
|
||||
# https://github.com/misskey-dev/misskey/pull/8787
|
||||
# Misskey has an awful tendency to drop all custom formatting when it sends remotely
|
||||
# So this basically reprocesses their MFM source
|
||||
# See https://akkoma.dev/FoundKeyGang/FoundKey/issues/343
|
||||
# Misskey/Foundkey drops some of the custom formatting when it sends remotely
|
||||
# So this basically reprocesses the MFM source
|
||||
defp fix_misskey_content(
|
||||
%{"source" => %{"mediaType" => "text/x.misskeymarkdown", "content" => content}} = object
|
||||
)
|
||||
|
@ -121,6 +121,8 @@ defp fix_misskey_content(
|
|||
Map.put(object, "content", linked)
|
||||
end
|
||||
|
||||
# See https://github.com/misskey-dev/misskey/pull/8787
|
||||
# This is for compatibility with older Misskey instances
|
||||
defp fix_misskey_content(%{"_misskey_content" => content} = object) when is_binary(content) do
|
||||
mention_handler = fn nick, buffer, opts, acc ->
|
||||
remote_mention_resolver(object, nick, buffer, opts, acc)
|
||||
|
|
|
@ -289,7 +289,7 @@ def format_input(text, "text/html", options) do
|
|||
|
||||
def format_input(text, "text/x.misskeymarkdown", options) do
|
||||
text
|
||||
|> Formatter.markdown_to_html()
|
||||
|> Formatter.markdown_to_html(%{breaks: true})
|
||||
|> MfmParser.Parser.parse()
|
||||
|> MfmParser.Encoder.to_html()
|
||||
|> Formatter.linkify(options)
|
||||
|
|
2
test/fixtures/misskey/mfm_x_format.json
vendored
2
test/fixtures/misskey/mfm_x_format.json
vendored
|
@ -5,7 +5,7 @@
|
|||
"summary": null,
|
||||
"content": "this does not get replaced",
|
||||
"source": {
|
||||
"content": "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
|
||||
"content": "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa\n\nsome text\nnewline",
|
||||
"mediaType": "text/x.misskeymarkdown"
|
||||
},
|
||||
"published": "2022-07-10T15:37:36.368Z",
|
||||
|
|
|
@ -136,6 +136,8 @@ test "a misskey MFM status with a content field should work and be linked", _ do
|
|||
|
||||
assert content =~
|
||||
"<span class=\"mfm _mfm_jelly_\" style=\"display: inline-block; animation: 1s linear 0s infinite normal both running mfm-rubberBand;\">mfm goes here</span> </p>aaa"
|
||||
|
||||
assert content =~ "some text<br/>newline"
|
||||
end
|
||||
|
||||
test "a misskey MFM status with a _misskey_content field should work and be linked", _ do
|
||||
|
|
Loading…
Reference in a new issue