I#1857 - Composer: Markdown should prevent soft line breaks

Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1857
This commit is contained in:
Milan Crha
2022-04-11 16:18:04 +02:00
parent 938392ed92
commit 3abf2c0b3e
3 changed files with 32 additions and 8 deletions

View File

@ -1669,7 +1669,7 @@ e_html_editor_update_content_on_mode_change_cb (GObject *source_object,
text = e_content_editor_util_get_content_data (content_hash, E_CONTENT_EDITOR_GET_TO_SEND_HTML);
if (editor->priv->mode == E_CONTENT_EDITOR_MODE_HTML && text) {
if (editor->priv->mode != E_CONTENT_EDITOR_MODE_PLAIN_TEXT && text) {
e_content_editor_insert_content (editor->priv->use_content_editor, text,
E_CONTENT_EDITOR_INSERT_CONVERT |
E_CONTENT_EDITOR_INSERT_TEXT_HTML |

View File

@ -863,7 +863,7 @@ e_markdown_editor_insert_signature (EContentEditor *cnt_editor,
tmp = g_strconcat ("-- \n",
/* Add an empty line between the delimiter and the markdown signature */
editor_mode == E_CONTENT_EDITOR_MODE_PLAIN_TEXT ? "" : "\n",
"\n",
content, NULL);
g_free (plain_text);

View File

@ -105,6 +105,11 @@ markdown_utils_apply_composer_quirks (GString *buffer,
if (quirks->to_body_credits) {
g_string_insert (buffer, 0, "\n");
/* For Inline/Outlook style replies */
if (!quirks->cite_body)
g_string_insert (buffer, 0, "<br>");
g_string_insert (buffer, 0, quirks->to_body_credits);
}
}
@ -116,7 +121,9 @@ typedef struct _HTMLToTextData {
gint in_pre;
gint in_paragraph;
gboolean in_paragraph_end;
gboolean in_div_begin;
gboolean in_li;
gboolean last_was_br; /* To avoid double "<br>" in "<div>...<br></div>" */
GString *quote_prefix;
gchar *href;
GString *link_text;
@ -132,6 +139,8 @@ markdown_utils_sax_start_element_cb (gpointer ctx,
{
HTMLToTextData *data = ctx;
const gchar *name = (const gchar *) xcname;
gboolean was_in_div_begin;
gboolean last_was_br;
#if dd(1)+0
{
gint ii;
@ -173,6 +182,11 @@ markdown_utils_sax_start_element_cb (gpointer ctx,
if (!data->in_body)
return;
was_in_div_begin = data->in_div_begin;
last_was_br = data->last_was_br;
data->in_div_begin = FALSE;
data->last_was_br = FALSE;
if (g_ascii_strcasecmp (name, "a") == 0) {
if (!data->plain_text && !data->href) {
const gchar *href;
@ -202,12 +216,14 @@ markdown_utils_sax_start_element_cb (gpointer ctx,
}
if (g_ascii_strcasecmp (name, "br") == 0) {
data->last_was_br = TRUE;
if (data->plain_text) {
g_string_append (data->buffer, "\n");
if (data->quote_prefix->len)
g_string_append (data->buffer, data->quote_prefix->str);
} else if (!data->composer_quirks.enabled) {
} else if (!data->composer_quirks.enabled || !was_in_div_begin) {
g_string_append (data->buffer, "<br>");
}
@ -290,13 +306,14 @@ markdown_utils_sax_start_element_cb (gpointer ctx,
if (data->in_paragraph_end) {
data->in_paragraph_end = FALSE;
if (data->quote_prefix->len)
if (!last_was_br && data->quote_prefix->len)
g_string_append (data->buffer, data->quote_prefix->str);
g_string_append_c (data->buffer, '\n');
}
data->in_paragraph++;
data->in_div_begin = g_ascii_strcasecmp (name, "div") == 0;
if (data->quote_prefix->len)
g_string_append (data->buffer, data->quote_prefix->str);
return;
@ -434,10 +451,14 @@ markdown_utils_sax_end_element_cb (gpointer ctx,
g_ascii_strcasecmp (name, "h5") == 0 ||
g_ascii_strcasecmp (name, "h6") == 0) {
/* To avoid double-line ends when parsing composer HTML */
if (data->composer_quirks.enabled && !(
if (data->composer_quirks.enabled) {
if (data->plain_text && !(
g_ascii_strcasecmp (name, "p") == 0 ||
g_ascii_strcasecmp (name, "div") == 0))
g_string_append_c (data->buffer, '\n');
else if (!data->plain_text && !data->last_was_br)
g_string_append (data->buffer, "<br>");
}
data->in_paragraph_end = TRUE;
@ -493,6 +514,9 @@ markdown_utils_sax_characters_cb (gpointer ctx,
dd (printf ("%s: text:'%.*s' in_body:%d in_paragraph:%d in_li:%d\n", G_STRFUNC, len, text, data->in_body, data->in_paragraph, data->in_li);)
if (data->in_body && (data->in_paragraph || data->in_li || !markdown_utils_only_whitespace (text, len))) {
data->in_div_begin = FALSE;
data->last_was_br = FALSE;
if (data->link_text) {
g_string_append_len (data->link_text, text, len);
} else {