Skip to content
Open
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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@ echo f::create()
| [ImperialAreaFormatter](docs/ImperialAreaFormatter.md) | Imperial area promotion (in², ft², yd², ac, mi²) |
| [ImperialLengthFormatter](docs/ImperialLengthFormatter.md) | Imperial length promotion (in, ft, yd, mi) |
| [ImperialMassFormatter](docs/ImperialMassFormatter.md) | Imperial mass promotion (oz, lb, st, ton) |
| [LowercaseFormatter](docs/LowercaseFormatter.md) | Convert string to lowercase |
| [MaskFormatter](docs/MaskFormatter.md) | Range-based string masking with Unicode support |
| [MassFormatter](docs/MassFormatter.md) | Metric mass promotion (mg, g, kg, t) |
| [MetricFormatter](docs/MetricFormatter.md) | Metric length promotion (mm, cm, m, km) |
| [NumberFormatter](docs/NumberFormatter.md) | Number formatting with thousands and decimal separators |
| [PatternFormatter](docs/PatternFormatter.md) | Pattern-based string filtering with placeholders |
| [PlaceholderFormatter](docs/PlaceholderFormatter.md) | Template interpolation with placeholder replacement |
| [TimeFormatter](docs/TimeFormatter.md) | Time promotion (mil, c, dec, y, mo, w, d, h, min, s, ms, us, ns) |
| [UppercaseFormatter](docs/UppercaseFormatter.md) | Convert string to uppercase |

## Contributing

Expand Down
88 changes: 88 additions & 0 deletions docs/LowercaseFormatter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!--
SPDX-FileCopyrightText: (c) Respect Project Contributors
SPDX-License-Identifier: ISC
SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
-->

# LowercaseFormatter

The `LowercaseFormatter` converts strings to lowercase with proper UTF-8 character support for international text.

## Usage

### Basic Usage

```php
use Respect\StringFormatter\LowercaseFormatter;

$formatter = new LowercaseFormatter();

echo $formatter->format('HELLO WORLD');
// Outputs: "hello world"
```

### Unicode Characters

```php
use Respect\StringFormatter\LowercaseFormatter;

$formatter = new LowercaseFormatter();

echo $formatter->format('CAFÉ FRANÇAIS');
// Outputs: "café français"

echo $formatter->format('コンニチハ');
// Outputs: "コンニチハ"
```

### Mixed Content

```php
use Respect\StringFormatter\LowercaseFormatter;

$formatter = new LowercaseFormatter();

echo $formatter->format('HELLO WORLD 😊');
// Outputs: "hello world 😊"
```

## API

### `LowercaseFormatter::__construct`

- `__construct()`

Creates a new lowercase formatter instance.

### `format`

- `format(string $input): string`

Converts the input string to lowercase using UTF-8 aware conversion.

**Parameters:**

- `$input`: The string to convert to lowercase

**Returns:** The lowercase string

## Examples

| Input | Output | Description |
| ------------ | ------------ | ----------------------------- |
| `HELLO` | `hello` | Simple ASCII text |
| `CAFÉ` | `café` | Latin characters with accents |
| `ПРИВЕТ` | `привет` | Cyrillic text |
| `コンニチハ` | `コンニチハ` | Japanese text |
| `HELLO 😊` | `hello 😊` | Text with emoji |
| `ÉÎÔÛ` | `éîôû` | Multiple accented characters |

## Notes

- Uses `mb_strtolower()` for proper Unicode handling
- Preserves accent marks and diacritical marks
- Works with all Unicode scripts (Latin, Cyrillic, Greek, CJK, etc.)
- Emoji and special symbols are preserved unchanged
- Combining diacritics are properly handled
- Numbers and special characters remain unchanged
- Empty strings return empty strings
88 changes: 88 additions & 0 deletions docs/UppercaseFormatter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!--
SPDX-FileCopyrightText: (c) Respect Project Contributors
SPDX-License-Identifier: ISC
SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
-->

# UppercaseFormatter

The `UppercaseFormatter` converts strings to uppercase with proper UTF-8 character support for international text.

## Usage

### Basic Usage

```php
use Respect\StringFormatter\UppercaseFormatter;

$formatter = new UppercaseFormatter();

echo $formatter->format('hello world');
// Outputs: "HELLO WORLD"
```

### Unicode Characters

```php
use Respect\StringFormatter\UppercaseFormatter;

$formatter = new UppercaseFormatter();

echo $formatter->format('café français');
// Outputs: "CAFÉ FRANÇAIS"

echo $formatter->format('こんにちは');
// Outputs: "コンニチハ"
```

### Mixed Content

```php
use Respect\StringFormatter\UppercaseFormatter;

$formatter = new UppercaseFormatter();

echo $formatter->format('Hello World 😊');
// Outputs: "HELLO WORLD 😊"
```

## API

### `UppercaseFormatter::__construct`

- `__construct()`

Creates a new uppercase formatter instance.

### `format`

- `format(string $input): string`

Converts the input string to uppercase using UTF-8 aware conversion.

**Parameters:**

- `$input`: The string to convert to uppercase

**Returns:** The uppercase string

## Examples

| Input | Output | Description |
| ------------ | ------------ | --------------------------------------- |
| `hello` | `HELLO` | Simple ASCII text |
| `café` | `CAFÉ` | Latin characters with accents |
| `привет` | `ПРИВЕТ` | Cyrillic text |
| `こんにちは` | `コンニチハ` | Japanese hiragana converted to katakana |
| `Hello 😊` | `HELLO 😊` | Text with emoji |
| `éîôû` | `ÉÎÔÛ` | Multiple accented characters |

## Notes

- Uses `mb_strtoupper()` for proper Unicode handling
- Preserves accent marks and diacritical marks
- Works with all Unicode scripts (Latin, Cyrillic, Greek, CJK, etc.)
- Emoji and special symbols are preserved unchanged
- Combining diacritics are properly handled
- Numbers and special characters remain unchanged
- Empty strings return empty strings
21 changes: 21 additions & 0 deletions src/LowercaseFormatter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

/*
* SPDX-FileCopyrightText: (c) Respect Project Contributors
* SPDX-License-Identifier: ISC
* SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
*/

declare(strict_types=1);

namespace Respect\StringFormatter;

use function mb_strtolower;

final readonly class LowercaseFormatter implements Formatter
{
public function format(string $input): string
{
return mb_strtolower($input);
}
}
10 changes: 7 additions & 3 deletions src/Mixin/Builder.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,34 @@ interface Builder
{
public function area(string $unit): FormatterBuilder;

public function date(string $format = 'Y-m-d H:i:s'): FormatterBuilder;

public function imperialArea(string $unit): FormatterBuilder;

public function imperialLength(string $unit): FormatterBuilder;

public function imperialMass(string $unit): FormatterBuilder;

public function date(string $format = 'Y-m-d H:i:s'): FormatterBuilder;
public function lowercase(): FormatterBuilder;

public function mask(string $range, string $replacement = '*'): FormatterBuilder;

public function metric(string $unit): FormatterBuilder;

public function metricMass(string $unit): FormatterBuilder;

public function number(
int $decimals = 0,
string $decimalSeparator = '.',
string $thousandsSeparator = ',',
): FormatterBuilder;

public function metricMass(string $unit): FormatterBuilder;

public function pattern(string $pattern): FormatterBuilder;

/** @param array<string, mixed> $parameters */
public function placeholder(array $parameters): FormatterBuilder;

public function time(string $unit): FormatterBuilder;

public function uppercase(): FormatterBuilder;
}
10 changes: 7 additions & 3 deletions src/Mixin/Chain.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,34 @@ interface Chain extends Formatter
{
public function area(string $unit): FormatterBuilder;

public function date(string $format = 'Y-m-d H:i:s'): FormatterBuilder;

public function imperialArea(string $unit): FormatterBuilder;

public function imperialLength(string $unit): FormatterBuilder;

public function imperialMass(string $unit): FormatterBuilder;

public function date(string $format = 'Y-m-d H:i:s'): FormatterBuilder;
public function lowercase(): FormatterBuilder;

public function mask(string $range, string $replacement = '*'): FormatterBuilder;

public function metric(string $unit): FormatterBuilder;

public function metricMass(string $unit): FormatterBuilder;

public function number(
int $decimals = 0,
string $decimalSeparator = '.',
string $thousandsSeparator = ',',
): FormatterBuilder;

public function metricMass(string $unit): FormatterBuilder;

public function pattern(string $pattern): FormatterBuilder;

/** @param array<string, mixed> $parameters */
public function placeholder(array $parameters): FormatterBuilder;

public function time(string $unit): FormatterBuilder;

public function uppercase(): FormatterBuilder;
}
21 changes: 21 additions & 0 deletions src/UppercaseFormatter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

/*
* SPDX-FileCopyrightText: (c) Respect Project Contributors
* SPDX-License-Identifier: ISC
* SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
*/

declare(strict_types=1);

namespace Respect\StringFormatter;

use function mb_strtoupper;

final readonly class UppercaseFormatter implements Formatter
{
public function format(string $input): string
{
return mb_strtoupper($input);
}
}
Loading