@massimo-cassandro/minimo 1.43.4 → 1.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
/*! minimo - Better Text with places */
|
|
3
3
|
|
|
4
|
-
import { betterText, NBSP_AFTER_PARTICLE_REGEX } from './better-text.js';
|
|
4
|
+
import { betterText, NBSP_AFTER_PARTICLE_REGEX, PARTICELLE } from './better-text.js';
|
|
5
5
|
|
|
6
6
|
const places = [
|
|
7
7
|
// EUROPA
|
|
@@ -467,6 +467,19 @@ function buildPlacesMatcher(list) {
|
|
|
467
467
|
|
|
468
468
|
const defaultMatcher = buildPlacesMatcher(places);
|
|
469
469
|
|
|
470
|
+
/*
|
|
471
|
+
Corrisponde agli spazi (normali o non separabili) NON seguiti da una particella:
|
|
472
|
+
usata con l'opzione `addNbsp` per unire le parole dei nomi composti, lasciando
|
|
473
|
+
separabile lo spazio prima di una particella (es. "Lago di Como" → spazio normale
|
|
474
|
+
tra "Lago" e "di", mentre quello tra "di" e "Como" è già gestito da betterText())
|
|
475
|
+
*/
|
|
476
|
+
const SPACE_BEFORE_NON_PARTICLE_REGEX = new RegExp(
|
|
477
|
+
'[ \\u00A0]+(?!(?:' +
|
|
478
|
+
PARTICELLE.map(p => p.replace(/[.*+?^${}()|[\]\\/]/g, '\\$&')).join('|') +
|
|
479
|
+
')(?![\\p{L}\\p{N}]))',
|
|
480
|
+
'giu'
|
|
481
|
+
);
|
|
482
|
+
|
|
470
483
|
/**
|
|
471
484
|
* Versione di betterText() che normalizza anche le occorrenze di luoghi noti
|
|
472
485
|
* (paesi, città, fiumi, monti, località turistiche) presenti nel testo:
|
|
@@ -480,18 +493,33 @@ const defaultMatcher = buildPlacesMatcher(places);
|
|
|
480
493
|
* ovunque compaiano.
|
|
481
494
|
*
|
|
482
495
|
* @param {string} str - stringa da elaborare
|
|
483
|
-
* @param {
|
|
484
|
-
* @param {string[]} [
|
|
496
|
+
* @param {object} [options] - opzioni (default: {})
|
|
497
|
+
* @param {string[]} [options.custom_words] - elenco di parole di cui va mantenuta la capitalizzazione esatta (es. `['iPhone', 'macOS']`) (default: [])
|
|
498
|
+
* @param {string[]} [options.extra_places] - luoghi aggiuntivi, uniti all'elenco predefinito (default: [])
|
|
499
|
+
* @param {boolean} [options.addNbsp] - se `true`, nei nomi di luogo composti da più parole gli spazi vengono
|
|
500
|
+
* sostituiti da spazi non separabili, tranne quelli che precedono una particella
|
|
501
|
+
* (es. in "Monte Bianco" lo spazio diventa non separabile, in "Lago di Como" solo quello dopo "di") (default: false)
|
|
485
502
|
* @returns {string} stringa elaborata, oppure stringa vuota se l'input è falsy
|
|
486
503
|
*
|
|
487
504
|
* @example
|
|
488
505
|
* betterTextWithPlaces("vacanza a new york e nel lago di como ,l'avana");
|
|
489
506
|
* // → "vacanza a New York e nel Lago di Como, L’Avana"
|
|
490
507
|
*
|
|
491
|
-
* betterTextWithPlaces('gita a monte cervino', ['iPhone'], ['Monte Cervino']);
|
|
508
|
+
* betterTextWithPlaces('gita a monte cervino', { custom_words: ['iPhone'], extra_places: ['Monte Cervino'] });
|
|
492
509
|
* // → 'gita a Monte Cervino'
|
|
510
|
+
*
|
|
511
|
+
* // opzioni con i valori di default
|
|
512
|
+
* betterTextWithPlaces('monte bianco e lago di como', {
|
|
513
|
+
* custom_words: [],
|
|
514
|
+
* extra_places: [],
|
|
515
|
+
* addNbsp: false
|
|
516
|
+
* });
|
|
517
|
+
* // → 'Monte Bianco e Lago di Como' (spazio non separabile solo dopo "di")
|
|
518
|
+
*
|
|
519
|
+
* betterTextWithPlaces('monte bianco e lago di como', { addNbsp: true });
|
|
520
|
+
* // → 'Monte Bianco e Lago di Como' (spazi non separabili tra "Monte" e "Bianco" e dopo "di")
|
|
493
521
|
*/
|
|
494
|
-
export function betterTextWithPlaces(str, custom_words = [], extra_places = []) {
|
|
522
|
+
export function betterTextWithPlaces(str, { custom_words = [], extra_places = [], addNbsp = false } = {}) {
|
|
495
523
|
|
|
496
524
|
str = betterText(str, custom_words);
|
|
497
525
|
|
|
@@ -503,7 +531,12 @@ export function betterTextWithPlaces(str, custom_words = [], extra_places = [])
|
|
|
503
531
|
? buildPlacesMatcher([...places, ...extra_places])
|
|
504
532
|
: defaultMatcher;
|
|
505
533
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
534
|
+
if (!matcher) {
|
|
535
|
+
return str;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return str.replace(matcher.regex, match => {
|
|
539
|
+
const place = matcher.canonical.get(placeKey(match)) ?? match;
|
|
540
|
+
return addNbsp ? place.replace(SPACE_BEFORE_NON_PARTICLE_REGEX, '\u00A0') : place;
|
|
541
|
+
});
|
|
509
542
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
che nulla di tutto ciò dipende dagli argomenti della funzione e in precedenza veniva
|
|
10
10
|
ricostruito a ogni singola chiamata di betterText().
|
|
11
11
|
*/
|
|
12
|
-
const PARTICELLE = [
|
|
12
|
+
export const PARTICELLE = [
|
|
13
13
|
'e', 'ed',
|
|
14
14
|
'di', 'a', 'da', 'in', 'per', 'con', 'su', 'per', 'tra', 'fra',
|
|
15
15
|
'il', 'lo', 'la', 'i', 'gli', 'le',
|