wishthis/vendor/phpcsstandards/phpcsutils/PHPCSUtils/Utils/Orthography.php
2023-09-20 13:52:46 +02:00

120 lines
4.7 KiB
PHP

<?php
/**
* PHPCSUtils, utility functions and classes for PHP_CodeSniffer sniff developers.
*
* @package PHPCSUtils
* @copyright 2019-2020 PHPCSUtils Contributors
* @license https://opensource.org/licenses/LGPL-3.0 LGPL3
* @link https://github.com/PHPCSStandards/PHPCSUtils
*/
namespace PHPCSUtils\Utils;
use PHPCSUtils\BackCompat\Helper;
/**
* Utility functions for checking the orthography of arbitrary text strings.
*
* > An orthography is a set of conventions for writing a language. It includes norms of spelling,
* > hyphenation, capitalization, word breaks, emphasis, and punctuation.
* > Source: https://en.wikipedia.org/wiki/Orthography
*
* @since 1.0.0
*/
final class Orthography
{
/**
* Characters which are considered terminal points for a sentence.
*
* @link https://www.thepunctuationguide.com/terminal-points.html Punctuation guide on terminal points.
*
* @since 1.0.0
*
* @var string
*/
const TERMINAL_POINTS = '.?!';
/**
* Check if the first character of an arbitrary text string is a capital letter.
*
* Letter characters which do not have a concept of lower/uppercase will
* be accepted as correctly capitalized.
*
* @since 1.0.0
*
* @param string $textString The text string to examine.
* This can be the contents of a text string token,
* but also, for instance, a comment text.
* Potential text delimiter quotes should be stripped
* off a text string before passing it to this method.
* Also see: {@see \PHPCSUtils\Utils\TextStrings::stripQuotes()}.
*
* @return bool `TRUE` when the first character is a capital letter or a letter
* which doesn't have a concept of capitalization.
* `FALSE` otherwise, including for non-letter characters.
*/
public static function isFirstCharCapitalized($textString)
{
$textString = \ltrim($textString);
return (\preg_match('`^[\p{Lu}\p{Lt}\p{Lo}]`u', $textString) > 0);
}
/**
* Check if the first character of an arbitrary text string is a lowercase letter.
*
* @since 1.0.0
*
* @param string $textString The text string to examine.
* This can be the contents of a text string token,
* but also, for instance, a comment text.
* Potential text delimiter quotes should be stripped
* off a text string before passing it to this method.
* Also see: {@see \PHPCSUtils\Utils\TextStrings::stripQuotes()}.
*
* @return bool `TRUE` when the first character is a lowercase letter.
* `FALSE` otherwise, including for letters which don't have a concept of
* capitalization and for non-letter characters.
*/
public static function isFirstCharLowercase($textString)
{
$textString = \ltrim($textString);
return (\preg_match('`^\p{Ll}`u', $textString) > 0);
}
/**
* Check if the last character of an arbitrary text string is a valid punctuation character.
*
* @since 1.0.0
*
* @param string $textString The text string to examine.
* This can be the contents of a text string token,
* but also, for instance, a comment text.
* Potential text delimiter quotes should be stripped
* off a text string before passing it to this method.
* Also see: {@see \PHPCSUtils\Utils\TextStrings::stripQuotes()}.
* @param string $allowedChars Characters which are considered valid punctuation
* to end the text string.
* Defaults to `'.?!'`, i.e. a full stop, question mark
* or exclamation mark.
*
* @return bool
*/
public static function isLastCharPunctuation($textString, $allowedChars = self::TERMINAL_POINTS)
{
$encoding = Helper::getEncoding();
$textString = \rtrim($textString);
if (\function_exists('iconv_substr') === true) {
$lastChar = \iconv_substr($textString, -1, 1, $encoding);
} else {
$lastChar = \substr($textString, -1);
}
if (\function_exists('iconv_strpos') === true) {
return (\iconv_strpos($allowedChars, $lastChar, 0, $encoding) !== false);
} else {
return (\strpos($allowedChars, $lastChar) !== false);
}
}
}