From edd47ac8bd569d380fe0e666d24def80c3026394 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Thu, 27 Feb 2025 00:14:14 +0100 Subject: [PATCH] fix(members/pdf): don't escape umlaut Partially reverts 2761efecaa. To handle invalid unicode characters, we now override the LaTeX error message to remove invalid characters instead of crashing. We also add various umlaut and invisible unicode characters to the test data. --- .../templates/members/crisis_intervention_list.tex | 4 ++++ jdav_web/members/templates/members/notelist_summary.tex | 4 ++++ jdav_web/members/templates/members/notes_list.tex | 4 ++++ jdav_web/members/templates/members/seminar_report.tex | 4 ++++ .../members/templates/members/seminar_report_docx.tex | 4 ++++ jdav_web/members/templatetags/tex_extras.py | 3 +-- jdav_web/members/tests.py | 8 ++++---- 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/jdav_web/members/templates/members/crisis_intervention_list.tex b/jdav_web/members/templates/members/crisis_intervention_list.tex index 237e956..d405ce7 100644 --- a/jdav_web/members/templates/members/crisis_intervention_list.tex +++ b/jdav_web/members/templates/members/crisis_intervention_list.tex @@ -3,6 +3,10 @@ \documentclass[a4paper]{article} \usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother \usepackage{booktabs} \usepackage{amssymb} \usepackage{cmbright} diff --git a/jdav_web/members/templates/members/notelist_summary.tex b/jdav_web/members/templates/members/notelist_summary.tex index 16311d0..182132a 100644 --- a/jdav_web/members/templates/members/notelist_summary.tex +++ b/jdav_web/members/templates/members/notelist_summary.tex @@ -3,6 +3,10 @@ \documentclass{article} \usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother \usepackage{booktabs} \usepackage{tabularx} \usepackage{ragged2e} diff --git a/jdav_web/members/templates/members/notes_list.tex b/jdav_web/members/templates/members/notes_list.tex index db18ca1..e7ed249 100644 --- a/jdav_web/members/templates/members/notes_list.tex +++ b/jdav_web/members/templates/members/notes_list.tex @@ -3,6 +3,10 @@ \documentclass[a4paper]{article} \usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother \usepackage{booktabs} \usepackage{tabularx} \usepackage{ragged2e} diff --git a/jdav_web/members/templates/members/seminar_report.tex b/jdav_web/members/templates/members/seminar_report.tex index b9b1009..c9acc16 100644 --- a/jdav_web/members/templates/members/seminar_report.tex +++ b/jdav_web/members/templates/members/seminar_report.tex @@ -3,6 +3,10 @@ \documentclass[a4paper]{article} \usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother \usepackage{booktabs} \usepackage{amssymb} \usepackage{cmbright} diff --git a/jdav_web/members/templates/members/seminar_report_docx.tex b/jdav_web/members/templates/members/seminar_report_docx.tex index 5995e45..21c58b8 100644 --- a/jdav_web/members/templates/members/seminar_report_docx.tex +++ b/jdav_web/members/templates/members/seminar_report_docx.tex @@ -3,6 +3,10 @@ \documentclass[a4paper]{article} \usepackage[utf8]{inputenc} +% remove all undefined unicode characters instead of throwing an error +\makeatletter +\def\UTFviii@undefined@err#1{} +\makeatother \usepackage{booktabs} \usepackage{amssymb} \usepackage{cmbright} diff --git a/jdav_web/members/templatetags/tex_extras.py b/jdav_web/members/templatetags/tex_extras.py index 256266d..beb678d 100644 --- a/jdav_web/members/templatetags/tex_extras.py +++ b/jdav_web/members/templatetags/tex_extras.py @@ -1,6 +1,5 @@ from django import template from django.utils.safestring import mark_safe -from utils import normalize_name register = template.Library() @@ -13,7 +12,7 @@ def checked_if_true(name, value): @register.filter def esc_all(val): - return mark_safe(str(normalize_name(str(val), False, False)).replace('_', '\\_').replace('&', '\\&')) + return mark_safe(str(val).replace('_', '\\_').replace('&', '\\&')) @register.filter diff --git a/jdav_web/members/tests.py b/jdav_web/members/tests.py index a1c6f64..8bf4e4f 100644 --- a/jdav_web/members/tests.py +++ b/jdav_web/members/tests.py @@ -215,15 +215,15 @@ class MemberTestCase(BasicMemberTestCase): class PDFTestCase(TestCase): def setUp(self): - self.ex = Freizeit.objects.create(name='Wild trip', kilometers_traveled=120, + self.ex = Freizeit.objects.create(name='Wild & ‬_törip', kilometers_traveled=120, tour_type=GEMEINSCHAFTS_TOUR, tour_approach=MUSKELKRAFT_ANREISE, difficulty=1) - self.note = MemberNoteList.objects.create(title='Cool list') + self.note = MemberNoteList.objects.create(title='Coolß! ‬löst') for i in range(7): - m = Member.objects.create(prename='Lise {}'.format(i), - lastname='Walter', + m = Member.objects.create(prename='Liääüuße {}'.format(i), + lastname='Walter&co ‬: _ kg &', birth_date=timezone.now().date(), email=settings.TEST_MAIL, gender=FEMALE) NewMemberOnList.objects.create(member=m, comments='a' * i, memberlist=self.ex)