From 4bc233b80c00fedcc17467ab396fbef27b1d63ae Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 12:36:16 +0100 Subject: [PATCH 1/8] Facilitate share directory usage in development --- MANIFEST.SKIP | 2 ++ lib/auto/share/dist/Zonemaster-CLI | 1 + 2 files changed, 3 insertions(+) create mode 120000 lib/auto/share/dist/Zonemaster-CLI diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP index 65465a1c..6f9ae3b4 100644 --- a/MANIFEST.SKIP +++ b/MANIFEST.SKIP @@ -73,3 +73,5 @@ ^MYMETA\. #!end included /usr/share/perl/5.20/ExtUtils/MANIFEST.SKIP +# Development mode aid for File::ShareDir +^lib/auto/share/dist/Zonemaster-CLI diff --git a/lib/auto/share/dist/Zonemaster-CLI b/lib/auto/share/dist/Zonemaster-CLI new file mode 120000 index 00000000..63277d37 --- /dev/null +++ b/lib/auto/share/dist/Zonemaster-CLI @@ -0,0 +1 @@ +../../../../share/ \ No newline at end of file From cf7fb95b15b7cbd8fd772c5f652692d960cb6063 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 10:45:03 +0100 Subject: [PATCH 2/8] Remove separation space from msgid --- lib/Zonemaster/CLI.pm | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 7b557d3b..1bbb5226 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -512,31 +512,39 @@ sub run { } if ( $translator ) { + my %header = ( + seconds => __( 'Seconds' ), + level => __( 'Level ' ), + module => __( 'Module ' ), + testcase => __( 'Testcase ' ), + message => __( 'Message' ) + ); + if ( $self->time ) { - print __( 'Seconds ' ); + printf "%s ", $header{seconds}; } if ( $self->show_level ) { - print __( 'Level ' ); + printf "%s ", $header{level}; } if ( $self->show_module ) { - print __( 'Module ' ); + printf "%s ", $header{module}; } if ( $self->show_testcase ) { - print __( 'Testcase ' ); + printf "%s ", $header{testcase}; } - say __( 'Message' ); + printf "%s\n", $header{message}; if ( $self->time ) { - print __( '======= ' ); + printf "%s ", __( '=======' ); } if ( $self->show_level ) { - print __( '========= ' ); + printf "%s ", __( '=========' ); } if ( $self->show_module ) { - print __( '============ ' ); + printf "%s ", __( '============' ); } if ( $self->show_testcase ) { - print __( '============== ' ); + printf "%s ", __( '==============' ); } say __( '=======' ); } ## end if ( $translator ) From 832727efe5afa98d32bdb94b33a125b8c12b3ddb Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 11:06:15 +0100 Subject: [PATCH 3/8] Refactor: store header string before printing --- lib/Zonemaster/CLI.pm | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 1bbb5226..50fce94e 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -512,7 +512,7 @@ sub run { } if ( $translator ) { - my %header = ( + my %header_names = ( seconds => __( 'Seconds' ), level => __( 'Level ' ), module => __( 'Module ' ), @@ -520,33 +520,37 @@ sub run { message => __( 'Message' ) ); + my $header = q{}; + if ( $self->time ) { - printf "%s ", $header{seconds}; + $header .= sprintf "%s ", $header_names{seconds}; } if ( $self->show_level ) { - printf "%s ", $header{level}; + $header .= sprintf "%s ", $header_names{level}; } if ( $self->show_module ) { - printf "%s ", $header{module}; + $header .= sprintf "%s ", $header_names{module}; } if ( $self->show_testcase ) { - printf "%s ", $header{testcase}; + $header .= sprintf "%s ", $header_names{testcase}; } - printf "%s\n", $header{message}; + $header .= sprintf "%s\n", $header_names{message}; if ( $self->time ) { - printf "%s ", __( '=======' ); + $header .= sprintf "%s ", __( '=======' ); } if ( $self->show_level ) { - printf "%s ", __( '=========' ); + $header .= sprintf "%s ", __( '=========' ); } if ( $self->show_module ) { - printf "%s ", __( '============' ); + $header .= sprintf "%s ", __( '============' ); } if ( $self->show_testcase ) { - printf "%s ", __( '==============' ); + $header .= sprintf "%s ", __( '==============' ); } - say __( '=======' ); + $header .= sprintf "%s\n", __( '=======' ); + + print $header; } ## end if ( $translator ) # Actually run tests! From 8a8f0c64565d6f056441243d6b1d4ecbb20fc532 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 11:01:14 +0100 Subject: [PATCH 4/8] Reuse hard coded width values See between lines 399 and 413 --- lib/Zonemaster/CLI.pm | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 50fce94e..774cdf90 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -514,41 +514,52 @@ sub run { if ( $translator ) { my %header_names = ( seconds => __( 'Seconds' ), - level => __( 'Level ' ), - module => __( 'Module ' ), - testcase => __( 'Testcase ' ), + level => __( 'Level' ), + module => __( 'Module' ), + testcase => __( 'Testcase' ), message => __( 'Message' ) ); + my %header_width = ( + seconds => 7, + level => 9, + module => 12, + testcase => 14 + ); + my %remaining_space = (); + foreach ( keys %header_names ) { + $header_width{$_} = _max( $header_width{$_}, length( $header_names{$_} ) ); + $remaining_space{$_} = $header_width{$_} - length( $header_names{$_} ); + } my $header = q{}; if ( $self->time ) { - $header .= sprintf "%s ", $header_names{seconds}; + $header .= sprintf "%s%s ", $header_names{seconds}, " " x $remaining_space{seconds}; } if ( $self->show_level ) { - $header .= sprintf "%s ", $header_names{level}; + $header .= sprintf "%s%s ", $header_names{level}, " " x $remaining_space{level}; } if ( $self->show_module ) { - $header .= sprintf "%s ", $header_names{module}; + $header .= sprintf "%s%s ", $header_names{module}, " " x $remaining_space{module}; } if ( $self->show_testcase ) { - $header .= sprintf "%s ", $header_names{testcase}; + $header .= sprintf "%s%s ", $header_names{testcase}, " " x $remaining_space{testcase}; } $header .= sprintf "%s\n", $header_names{message}; if ( $self->time ) { - $header .= sprintf "%s ", __( '=======' ); + $header .= sprintf "%s ", "=" x $header_width{seconds}; } if ( $self->show_level ) { - $header .= sprintf "%s ", __( '=========' ); + $header .= sprintf "%s ", "=" x $header_width{level}; } if ( $self->show_module ) { - $header .= sprintf "%s ", __( '============' ); + $header .= sprintf "%s ", "=" x $header_width{module}; } if ( $self->show_testcase ) { - $header .= sprintf "%s ", __( '==============' ); + $header .= sprintf "%s ", "=" x $header_width{testcase}; } - $header .= sprintf "%s\n", __( '=======' ); + $header .= sprintf "%s\n", "=" x $header_width{message}; print $header; } ## end if ( $translator ) @@ -791,6 +802,13 @@ sub translate_severity { } } +sub _max { + my ( $a, $b ) = @_; + $a //= 0; + $b //= 0; + return ( $a > $b ? $a : $b ) ; +} + 1; __END__ From cfd5e57088a8b82f60a570ef330acd23ff370a6b Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 12:53:30 +0100 Subject: [PATCH 5/8] Properly handle UTF-8 string length --- lib/Zonemaster/CLI.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 774cdf90..058111ef 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -527,8 +527,8 @@ sub run { ); my %remaining_space = (); foreach ( keys %header_names ) { - $header_width{$_} = _max( $header_width{$_}, length( $header_names{$_} ) ); - $remaining_space{$_} = $header_width{$_} - length( $header_names{$_} ); + $header_width{$_} = _max( $header_width{$_}, length( decode( 'UTF-8', $header_names{$_} ) ) ); + $remaining_space{$_} = $header_width{$_} - length( decode( 'UTF-8', $header_names{$_} ) ); } my $header = q{}; From 8d6d13d7a42647ee0c775fa43fb75b8c1eac2273 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 14:22:00 +0100 Subject: [PATCH 6/8] Compute field width based on header length Or use hard coded default value if no header displayed. --- lib/Zonemaster/CLI.pm | 65 ++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 058111ef..21575895 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -382,6 +382,28 @@ sub run { Zonemaster::Engine->preload_cache( $self->restore ); } + my %field_width = ( + seconds => 7, + level => 9, + module => 12, + testcase => 14 + ); + my %header_names = (); + my %remaining_space = (); + if ( $translator ) { + %header_names = ( + seconds => __( 'Seconds' ), + level => __( 'Level' ), + module => __( 'Module' ), + testcase => __( 'Testcase' ), + message => __( 'Message' ) + ); + foreach ( keys %header_names ) { + $field_width{$_} = _max( $field_width{$_}, length( decode( 'UTF-8', $header_names{$_} ) ) ); + $remaining_space{$_} = $field_width{$_} - length( decode( 'UTF-8', $header_names{$_} ) ); + } + } + # Callback defined here so it closes over the setup above. Zonemaster::Engine->logger->callback( sub { @@ -397,19 +419,19 @@ sub run { if ( $translator ) { my $header = q{}; if ( $self->time ) { - $header .= sprintf "%7.2f ", $entry->timestamp; + $header .= sprintf "%${field_width{seconds}}.2f ", $entry->timestamp; } if ( $self->show_level ) { - $header .= sprintf "%-9s ", translate_severity( $entry->level ); + $header .= sprintf "%-${field_width{level}}s ", translate_severity( $entry->level ); } if ( $self->show_module ) { - $header .= sprintf "%-12s ", $entry->module; + $header .= sprintf "%-${field_width{module}}s ", $entry->module; } if ( $self->show_testcase ) { - $header .= sprintf "%-14s ", $entry->testcase; + $header .= sprintf "%-${field_width{testcase}}s ", $entry->testcase; } print $header; @@ -444,12 +466,12 @@ sub run { # Don't do anything } else { - my $prefix = sprintf "%7.2f %-9s ", $entry->timestamp, $entry->level; + my $prefix = sprintf "%${field_width{seconds}}.2f %-${field_width{level}}s ", $entry->timestamp, $entry->level; if ( $self->show_module ) { - $prefix .= sprintf "%-12s ", $entry->module; + $prefix .= sprintf "%-${field_width{module}}s ", $entry->module; } if ( $self->show_testcase ) { - $prefix .= sprintf "%-14s ", $entry->testcase; + $prefix .= sprintf "%-${field_width{testcase}}s ", $entry->testcase; } $prefix .= $entry->tag; @@ -512,25 +534,6 @@ sub run { } if ( $translator ) { - my %header_names = ( - seconds => __( 'Seconds' ), - level => __( 'Level' ), - module => __( 'Module' ), - testcase => __( 'Testcase' ), - message => __( 'Message' ) - ); - my %header_width = ( - seconds => 7, - level => 9, - module => 12, - testcase => 14 - ); - my %remaining_space = (); - foreach ( keys %header_names ) { - $header_width{$_} = _max( $header_width{$_}, length( decode( 'UTF-8', $header_names{$_} ) ) ); - $remaining_space{$_} = $header_width{$_} - length( decode( 'UTF-8', $header_names{$_} ) ); - } - my $header = q{}; if ( $self->time ) { @@ -548,18 +551,18 @@ sub run { $header .= sprintf "%s\n", $header_names{message}; if ( $self->time ) { - $header .= sprintf "%s ", "=" x $header_width{seconds}; + $header .= sprintf "%s ", "=" x $field_width{seconds}; } if ( $self->show_level ) { - $header .= sprintf "%s ", "=" x $header_width{level}; + $header .= sprintf "%s ", "=" x $field_width{level}; } if ( $self->show_module ) { - $header .= sprintf "%s ", "=" x $header_width{module}; + $header .= sprintf "%s ", "=" x $field_width{module}; } if ( $self->show_testcase ) { - $header .= sprintf "%s ", "=" x $header_width{testcase}; + $header .= sprintf "%s ", "=" x $field_width{testcase}; } - $header .= sprintf "%s\n", "=" x $header_width{message}; + $header .= sprintf "%s\n", "=" x $field_width{message}; print $header; } ## end if ( $translator ) From 8d8d2ac21472d2dc14abafd7327ef85c431a6e21 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Wed, 15 Feb 2023 12:19:08 +0100 Subject: [PATCH 7/8] Update translations --- share/da.po | 31 ++++++++----------------------- share/es.po | 52 ++++++++-------------------------------------------- share/fi.po | 31 ++++++++----------------------- share/fr.po | 31 ++++++++----------------------- share/nb.po | 31 ++++++++----------------------- share/sv.po | 31 ++++++++----------------------- 6 files changed, 48 insertions(+), 159 deletions(-) diff --git a/share/da.po b/share/da.po index cf71722d..f84f1b8b 100644 --- a/share/da.po +++ b/share/da.po @@ -188,36 +188,21 @@ msgstr "Domænenavn, der skal testes, skal angives.\n" msgid "The domain name contains consecutive dots.\n" msgstr "Domænenavnet indeholder flere dots (.) efter hinanden.\n" -msgid "Seconds " -msgstr "Sekunder " +msgid "Seconds" +msgstr "Sekunder" -msgid "Level " -msgstr "Niveau " +msgid "Level" +msgstr "Niveau" -msgid "Module " -msgstr "Modul " +msgid "Module" +msgstr "Modul" -msgid "Testcase " -msgstr "Testcase " +msgid "Testcase" +msgstr "Testcase" msgid "Message" msgstr "Besked" -msgid "======= " -msgstr "======= " - -msgid "========= " -msgstr "========= " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "=======" - msgid "Looks OK." msgstr "Ser OK ud." diff --git a/share/es.po b/share/es.po index c8bf26e5..fdf8cce9 100644 --- a/share/es.po +++ b/share/es.po @@ -206,36 +206,21 @@ msgstr "Debe indicar el nombre de un dominio a probar.\n" msgid "The domain name contains consecutive dots.\n" msgstr "El nombre de dominio contiene puntos consecutivos.\n" -msgid "Seconds " -msgstr "Segundos " +msgid "Seconds" +msgstr "Segundos" -msgid "Level " -msgstr "Nivel " +msgid "Level" +msgstr "Nivel" -msgid "Module " -msgstr "Módulo " +msgid "Module" +msgstr "Módulo" -msgid "Testcase " -msgstr "Caso de prueba " +msgid "Testcase" +msgstr "Caso de prueba" msgid "Message" msgstr "Mensaje" -msgid "======= " -msgstr "======= " - -msgid "========= " -msgstr "========= " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "=======" - msgid "Looks OK." msgstr "Se ve bien." @@ -284,24 +269,3 @@ msgstr "ERROR" msgid "CRITICAL" msgstr "CRÍTICO" - -#~ msgid "The minimum severity level to display" -#~ msgstr "El nivel mínimo de gravedad que despliega" - -#~ msgid "Name of configuration file to load." -#~ msgstr "Nombre del archivo de configuración a cargar." - -#~ msgid "Loading configuration from {path}." -#~ msgstr "Cargando configuración desde {path}." - -#~ msgid "Print the effective configuration used in JSON format, then exit." -#~ msgstr "" -#~ "Despliega la configuración definitiva usada en formato JSON, luego " -#~ "termina." - -#~ msgid "" -#~ "Local IP address that the test engine should try to send its requests " -#~ "from." -#~ msgstr "" -#~ "Dirección IP local que debería usar el motor de pruebas como origen de " -#~ "sus solicitudes." diff --git a/share/fi.po b/share/fi.po index 88683e71..859a34fd 100644 --- a/share/fi.po +++ b/share/fi.po @@ -203,36 +203,21 @@ msgstr "Testattavan verkkoalueen nimi on annettava.\n" msgid "The domain name contains consecutive dots.\n" msgstr "Verkkotunnus sisältää peräkkäisiä pisteitä.\n" -msgid "Seconds " -msgstr "Sekuntia " +msgid "Seconds" +msgstr "Sekuntia" -msgid "Level " -msgstr "Taso " +msgid "Level" +msgstr "Taso" -msgid "Module " -msgstr "Moduuli " +msgid "Module" +msgstr "Moduuli" -msgid "Testcase " -msgstr "Testitapaus " +msgid "Testcase" +msgstr "Testitapaus" msgid "Message" msgstr "Viesti" -msgid "======= " -msgstr "======= " - -msgid "========= " -msgstr "========= " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "=======" - msgid "Looks OK." msgstr "Näyttää olevan OK." diff --git a/share/fr.po b/share/fr.po index c2baa7e6..e5df6f5a 100644 --- a/share/fr.po +++ b/share/fr.po @@ -218,36 +218,21 @@ msgstr "Il est nécessaire d'indiquer un nom de domaine pour lancer le test.\n" msgid "The domain name contains consecutive dots.\n" msgstr "Le nom de domaine contient des points consécutifs.\n" -msgid "Seconds " -msgstr "Durée " +msgid "Seconds" +msgstr "Durée" -msgid "Level " -msgstr "Niveau " +msgid "Level" +msgstr "Niveau" -msgid "Module " -msgstr "Module " +msgid "Module" +msgstr "Module" -msgid "Testcase " -msgstr "Plan de test " +msgid "Testcase" +msgstr "Plan de test" msgid "Message" msgstr "Message" -msgid "======= " -msgstr "======= " - -msgid "========= " -msgstr "========= " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "=======" - msgid "Looks OK." msgstr "Le résultat semble concluant." diff --git a/share/nb.po b/share/nb.po index 243326ba..9bd02416 100644 --- a/share/nb.po +++ b/share/nb.po @@ -190,36 +190,21 @@ msgstr "Må angi navnet på domenet som skal testes.\n" msgid "The domain name contains consecutive dots.\n" msgstr "Domenenavnet inneholder flere punkter på rad.\n" -msgid "Seconds " -msgstr "Sekunder " +msgid "Seconds" +msgstr "Sekunder" -msgid "Level " -msgstr "Nivå " +msgid "Level" +msgstr "Nivå" -msgid "Module " -msgstr "Modul " +msgid "Module" +msgstr "Modul" -msgid "Testcase " -msgstr "Test " +msgid "Testcase" +msgstr "Test" msgid "Message" msgstr "Melding" -msgid "======= " -msgstr "======== " - -msgid "========= " -msgstr "========= " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "=======" - msgid "Looks OK." msgstr "Ser OK ut." diff --git a/share/sv.po b/share/sv.po index 72923254..14371ec0 100644 --- a/share/sv.po +++ b/share/sv.po @@ -192,36 +192,21 @@ msgstr "Måste ange namnet på en domän att testa.\n" msgid "The domain name contains consecutive dots.\n" msgstr "Domännamnet innehåller flera punkter i följd.\n" -msgid "Seconds " -msgstr "Sekund " +msgid "Seconds" +msgstr "Sekund" -msgid "Level " -msgstr "Nivå " +msgid "Level" +msgstr "Nivå" -msgid "Module " -msgstr "Modul " +msgid "Module" +msgstr "Modul" -msgid "Testcase " -msgstr "Testfall " +msgid "Testcase" +msgstr "Testfall" msgid "Message" msgstr "Meddelande" -msgid "======= " -msgstr "======= " - -msgid "========= " -msgstr "==== " - -msgid "============ " -msgstr "============ " - -msgid "============== " -msgstr "============== " - -msgid "=======" -msgstr "==========" - msgid "Looks OK." msgstr "Ser OK ut." From 4c184eaf9ba19f0bc88b42862cb2e583125fad73 Mon Sep 17 00:00:00 2001 From: Alexandre Pion Date: Mon, 20 Feb 2023 10:11:02 +0100 Subject: [PATCH 8/8] Use field width argument --- lib/Zonemaster/CLI.pm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/Zonemaster/CLI.pm b/lib/Zonemaster/CLI.pm index 21575895..fdd0745f 100755 --- a/lib/Zonemaster/CLI.pm +++ b/lib/Zonemaster/CLI.pm @@ -419,19 +419,19 @@ sub run { if ( $translator ) { my $header = q{}; if ( $self->time ) { - $header .= sprintf "%${field_width{seconds}}.2f ", $entry->timestamp; + $header .= sprintf "%*.2f ", ${field_width{seconds}}, $entry->timestamp; } if ( $self->show_level ) { - $header .= sprintf "%-${field_width{level}}s ", translate_severity( $entry->level ); + $header .= sprintf "%-*s ", ${field_width{level}}, translate_severity( $entry->level ); } if ( $self->show_module ) { - $header .= sprintf "%-${field_width{module}}s ", $entry->module; + $header .= sprintf "%-*s ", ${field_width{module}}, $entry->module; } if ( $self->show_testcase ) { - $header .= sprintf "%-${field_width{testcase}}s ", $entry->testcase; + $header .= sprintf "%-*s ", ${field_width{testcase}}, $entry->testcase; } print $header; @@ -466,12 +466,12 @@ sub run { # Don't do anything } else { - my $prefix = sprintf "%${field_width{seconds}}.2f %-${field_width{level}}s ", $entry->timestamp, $entry->level; + my $prefix = sprintf "%*.2f %-*s ", ${field_width{seconds}}, $entry->timestamp, ${field_width{level}}, $entry->level; if ( $self->show_module ) { - $prefix .= sprintf "%-${field_width{module}}s ", $entry->module; + $prefix .= sprintf "%-*s ", ${field_width{module}}, $entry->module; } if ( $self->show_testcase ) { - $prefix .= sprintf "%-${field_width{testcase}}s ", $entry->testcase; + $prefix .= sprintf "%-*s ", ${field_width{testcase}}, $entry->testcase; } $prefix .= $entry->tag;