Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/uu/nl/locales/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,27 @@ nl-after-help = STYLE is one of:
- ln left justified, no leading zeros
- rn right justified, no leading zeros
- rz right justified, leading zeros

# Help messages
nl-help-help = Print help information.
nl-help-body-numbering = use STYLE for numbering body lines
nl-help-section-delimiter = use CC for separating logical pages
nl-help-footer-numbering = use STYLE for numbering footer lines
nl-help-header-numbering = use STYLE for numbering header lines
nl-help-line-increment = line number increment at each line
nl-help-join-blank-lines = group of NUMBER empty lines counted as one
nl-help-number-format = insert line numbers according to FORMAT
nl-help-no-renumber = do not reset line numbers at logical pages
nl-help-number-separator = add STRING after (possible) line number
nl-help-starting-line-number = first line number on each logical page
nl-help-number-width = use NUMBER columns for line numbers

# Error messages
nl-error-invalid-arguments = Invalid arguments supplied.
nl-error-could-not-read-line = could not read line
nl-error-line-number-overflow = line number overflow
nl-error-invalid-line-width = Invalid line number field width: ‘{ $value }’: Numerical result out of range
nl-error-invalid-blank-lines = Invalid line number of blank lines: ‘{ $value }’: Numerical result out of range
nl-error-invalid-regex = invalid regular expression
nl-error-invalid-numbering-style = invalid numbering style: '{ $style }'
nl-error-is-directory = { $path }: Is a directory
39 changes: 39 additions & 0 deletions src/uu/nl/locales/fr-FR.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
nl-about = Numéroter les lignes des fichiers
nl-usage = nl [OPTION]... [FICHIER]...
nl-after-help = STYLE est l'un des suivants :

- a numéroter toutes les lignes
- t numéroter seulement les lignes non vides
- n ne numéroter aucune ligne
- pBRE numéroter seulement les lignes qui contiennent une correspondance pour
l'expression régulière de base, BRE

FORMAT est l'un des suivants :

- ln justifié à gauche, sans zéros en tête
- rn justifié à droite, sans zéros en tête
- rz justifié à droite, avec zéros en tête

# Messages d'aide
nl-help-help = Afficher les informations d'aide.
nl-help-body-numbering = utiliser STYLE pour numéroter les lignes du corps
nl-help-section-delimiter = utiliser CC pour séparer les pages logiques
nl-help-footer-numbering = utiliser STYLE pour numéroter les lignes de pied de page
nl-help-header-numbering = utiliser STYLE pour numéroter les lignes d'en-tête
nl-help-line-increment = incrément du numéro de ligne à chaque ligne
nl-help-join-blank-lines = groupe de NUMBER lignes vides comptées comme une seule
nl-help-number-format = insérer les numéros de ligne selon FORMAT
nl-help-no-renumber = ne pas remettre à zéro les numéros de ligne aux pages logiques
nl-help-number-separator = ajouter STRING après le numéro de ligne (éventuel)
nl-help-starting-line-number = premier numéro de ligne sur chaque page logique
nl-help-number-width = utiliser NUMBER colonnes pour les numéros de ligne

# Messages d'erreur
nl-error-invalid-arguments = Arguments fournis invalides.
nl-error-could-not-read-line = impossible de lire la ligne
nl-error-line-number-overflow = débordement du numéro de ligne
nl-error-invalid-line-width = Largeur de champ de numéro de ligne invalide : ‘{ $value }’ : Résultat numérique hors limites
nl-error-invalid-blank-lines = Nombre de lignes vides invalide : ‘{ $value }’ : Résultat numérique hors limites
nl-error-invalid-regex = expression régulière invalide
nl-error-invalid-numbering-style = style de numérotation invalide : '{ $style }'
nl-error-is-directory = { $path } : Est un répertoire
12 changes: 8 additions & 4 deletions src/uu/nl/src/helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
// spell-checker:ignore (ToDO) conv

use crate::options;
use std::collections::HashMap;
use uucore::locale::get_message_with_args;

// parse_options loads the options into the settings, returning an array of
// error messages.
Expand Down Expand Up @@ -59,15 +61,17 @@ pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) ->
match opts.get_one::<usize>(options::NUMBER_WIDTH) {
None => {}
Some(num) if *num > 0 => settings.number_width = *num,
Some(_) => errs.push(String::from(
"Invalid line number field width: ‘0’: Numerical result out of range",
Some(_) => errs.push(get_message_with_args(
"nl-error-invalid-line-width",
HashMap::from([("value".to_string(), "0".to_string())]),
)),
}
match opts.get_one::<u64>(options::JOIN_BLANK_LINES) {
None => {}
Some(num) if *num > 0 => settings.join_blank_lines = *num,
Some(_) => errs.push(String::from(
"Invalid line number of blank lines: ‘0’: Numerical result out of range",
Some(_) => errs.push(get_message_with_args(
"nl-error-invalid-blank-lines",
HashMap::from([("value".to_string(), "0".to_string())]),
)),
}
if let Some(num) = opts.get_one::<i64>(options::LINE_INCREMENT) {
Expand Down
55 changes: 36 additions & 19 deletions src/uu/nl/src/nl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
// file that was distributed with this source code.

use clap::{Arg, ArgAction, Command};
use std::collections::HashMap;
use std::fs::File;
use std::io::{BufRead, BufReader, Read, stdin};
use std::path::Path;
use uucore::error::{FromIo, UResult, USimpleError, set_exit_code};
use uucore::locale::get_message;
use uucore::locale::{get_message, get_message_with_args};
use uucore::{format_usage, show_error};

mod helper;
Expand Down Expand Up @@ -89,9 +90,12 @@ impl TryFrom<&str> for NumberingStyle {
"n" => Ok(Self::None),
_ if s.starts_with('p') => match regex::Regex::new(&s[1..]) {
Ok(re) => Ok(Self::Regex(Box::new(re))),
Err(_) => Err(String::from("invalid regular expression")),
Err(_) => Err(get_message("nl-error-invalid-regex")),
},
_ => Err(format!("invalid numbering style: '{s}'")),
_ => Err(get_message_with_args(
"nl-error-invalid-numbering-style",
HashMap::from([("style".to_string(), s.to_string())]),
)),
}
}
}
Expand Down Expand Up @@ -185,7 +189,11 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
if !parse_errors.is_empty() {
return Err(USimpleError::new(
1,
format!("Invalid arguments supplied.\n{}", parse_errors.join("\n")),
format!(
"{}\n{}",
get_message("nl-error-invalid-arguments"),
parse_errors.join("\n")
),
));
}

Expand All @@ -204,7 +212,13 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
let path = Path::new(file);

if path.is_dir() {
show_error!("{}: Is a directory", path.display());
show_error!(
"{}",
get_message_with_args(
"nl-error-is-directory",
HashMap::from([("path".to_string(), path.display().to_string())])
)
);
set_exit_code(1);
} else {
let reader = File::open(path).map_err_context(|| file.to_string())?;
Expand All @@ -228,7 +242,7 @@ pub fn uu_app() -> Command {
.arg(
Arg::new(options::HELP)
.long(options::HELP)
.help("Print help information.")
.help(get_message("nl-help-help"))
.action(ArgAction::Help),
)
.arg(
Expand All @@ -241,81 +255,81 @@ pub fn uu_app() -> Command {
Arg::new(options::BODY_NUMBERING)
.short('b')
.long(options::BODY_NUMBERING)
.help("use STYLE for numbering body lines")
.help(get_message("nl-help-body-numbering"))
.value_name("STYLE"),
)
.arg(
Arg::new(options::SECTION_DELIMITER)
.short('d')
.long(options::SECTION_DELIMITER)
.help("use CC for separating logical pages")
.help(get_message("nl-help-section-delimiter"))
.value_name("CC"),
)
.arg(
Arg::new(options::FOOTER_NUMBERING)
.short('f')
.long(options::FOOTER_NUMBERING)
.help("use STYLE for numbering footer lines")
.help(get_message("nl-help-footer-numbering"))
.value_name("STYLE"),
)
.arg(
Arg::new(options::HEADER_NUMBERING)
.short('h')
.long(options::HEADER_NUMBERING)
.help("use STYLE for numbering header lines")
.help(get_message("nl-help-header-numbering"))
.value_name("STYLE"),
)
.arg(
Arg::new(options::LINE_INCREMENT)
.short('i')
.long(options::LINE_INCREMENT)
.help("line number increment at each line")
.help(get_message("nl-help-line-increment"))
.value_name("NUMBER")
.value_parser(clap::value_parser!(i64)),
)
.arg(
Arg::new(options::JOIN_BLANK_LINES)
.short('l')
.long(options::JOIN_BLANK_LINES)
.help("group of NUMBER empty lines counted as one")
.help(get_message("nl-help-join-blank-lines"))
.value_name("NUMBER")
.value_parser(clap::value_parser!(u64)),
)
.arg(
Arg::new(options::NUMBER_FORMAT)
.short('n')
.long(options::NUMBER_FORMAT)
.help("insert line numbers according to FORMAT")
.help(get_message("nl-help-number-format"))
.value_name("FORMAT")
.value_parser(["ln", "rn", "rz"]),
)
.arg(
Arg::new(options::NO_RENUMBER)
.short('p')
.long(options::NO_RENUMBER)
.help("do not reset line numbers at logical pages")
.help(get_message("nl-help-no-renumber"))
.action(ArgAction::SetFalse),
)
.arg(
Arg::new(options::NUMBER_SEPARATOR)
.short('s')
.long(options::NUMBER_SEPARATOR)
.help("add STRING after (possible) line number")
.help(get_message("nl-help-number-separator"))
.value_name("STRING"),
)
.arg(
Arg::new(options::STARTING_LINE_NUMBER)
.short('v')
.long(options::STARTING_LINE_NUMBER)
.help("first line number on each logical page")
.help(get_message("nl-help-starting-line-number"))
.value_name("NUMBER")
.value_parser(clap::value_parser!(i64)),
)
.arg(
Arg::new(options::NUMBER_WIDTH)
.short('w')
.long(options::NUMBER_WIDTH)
.help("use NUMBER columns for line numbers")
.help(get_message("nl-help-number-width"))
.value_name("NUMBER")
.value_parser(clap::value_parser!(usize)),
)
Expand All @@ -326,7 +340,7 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings
let mut current_numbering_style = &settings.body_numbering;

for line in reader.lines() {
let line = line.map_err_context(|| "could not read line".to_string())?;
let line = line.map_err_context(|| get_message("nl-error-could-not-read-line"))?;

if line.is_empty() {
stats.consecutive_empty_lines += 1;
Expand Down Expand Up @@ -366,7 +380,10 @@ fn nl<T: Read>(reader: &mut BufReader<T>, stats: &mut Stats, settings: &Settings

if is_line_numbered {
let Some(line_number) = stats.line_number else {
return Err(USimpleError::new(1, "line number overflow"));
return Err(USimpleError::new(
1,
get_message("nl-error-line-number-overflow"),
));
};
println!(
"{}{}{line}",
Expand Down
Loading