diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index e07060616..a265ca604 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -1091,34 +1091,35 @@ class EditorWebView(AnkiWebView): return None txt = mime.text() + processed = '' + lines = txt.split("\n") - # inlined data in base64? - if txt.startswith("data:image/"): - return self.editor.inlinedImageToLink(txt) + for line in lines: + for token in re.split('(\S+)', line): + # inlined data in base64? + if token.startswith("data:image/"): + processed += self.editor.inlinedImageToLink(token) + elif self.editor.isURL(token): + # if the user is pasting an image or sound link, convert it to local + link = self.editor.urlToLink(token) + if link: + processed += link + else: + # not media; add it as a normal link + link = '{}'.format(token, html.escape(token)) + processed += link + else: + token = html.escape(token).replace("\t", " " * 4) + # if there's more than one consecutive space, + # use non-breaking spaces for the second one on + def repl(match): + return match.group(1).replace(" ", " ") + " " + token = re.sub(" ( +)", repl, token) + processed += token - # if the user is pasting an image or sound link, convert it to local - if self.editor.isURL(txt): - url = txt.split("\r\n")[0] - link = self.editor.urlToLink(url) - if link: - return link - - # not media; add it as a normal link if pasting with shift - link = '{}'.format(url, html.escape(txt)) - return link - - # normal text; convert it to HTML - txt = html.escape(txt) - txt = txt.replace("\n", "
").replace("\t", " " * 4) - - # if there's more than one consecutive space, - # use non-breaking spaces for the second one on - def repl(match): - return match.group(1).replace(" ", " ") + " " - - txt = re.sub(" ( +)", repl, txt) - - return txt + processed += "
" + # return without last
+ return processed[:-4] def _processHtml(self, mime: QMimeData) -> Tuple[Optional[str], bool]: if not mime.hasHtml():