. * * @author Daniil Gentili * @copyright 2016-2020 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto; use danog\MadelineProto\TL\Conversion\Extension; /** * Some tools. */ abstract class StrTools extends Extension { /** * Convert to camelCase. * * @param string $input String * * @return string */ public static function toCamelCase(string $input): string { return \lcfirst(\str_replace('_', '', \ucwords($input, '_'))); } /** * Convert to snake_case. * * @param string $input String * * @return string */ public static function toSnakeCase(string $input): string { \preg_match_all('!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!', $input, $matches); $ret = $matches[0]; foreach ($ret as &$match) { $match = $match == \strtoupper($match) ? \strtolower($match) : \lcfirst($match); } return \implode('_', $ret); } /** * Escape string for markdown. * * @param string $hwat String to escape * * @return string */ public static function markdownEscape(string $hwat): string { return \str_replace('_', '\\_', $hwat); } /** * Escape type name. * * @param string $type String to escape * * @return string */ public static function typeEscape(string $type): string { $type = \str_replace(['<', '>'], ['_of_', ''], $type); return \preg_replace('/.*_of_/', '', $type); } /** * Escape method name. * * @param string $method Method name * * @return string */ public static function methodEscape(string $method): string { return \str_replace('.', '->', $method); } }