diff options
Diffstat (limited to 'MLEB/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php')
-rw-r--r-- | MLEB/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/MLEB/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php b/MLEB/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php new file mode 100644 index 00000000..516a31bd --- /dev/null +++ b/MLEB/Translate/src/PageTranslation/TranslatablePageInsertablesSuggester.php @@ -0,0 +1,44 @@ +<?php +declare( strict_types = 1 ); + +namespace MediaWiki\Extension\Translate\PageTranslation; + +use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\Insertable; +use MediaWiki\Extension\Translate\TranslatorInterface\Insertable\MediaWikiInsertablesSuggester; + +/** + * Special insertables for translatable pages. + * @author Niklas Laxström + * @license GPL-2.0-or-later + * @since 2013.11 + */ +class TranslatablePageInsertablesSuggester extends MediaWikiInsertablesSuggester { + public function getInsertables( string $text ): array { + $insertables = parent::getInsertables( $text ); + + // Translatable pages allow naming the variables. Basically anything is + // allowed in a variable name, but here we are stricter to avoid too many + // false positives. + $matches = []; + preg_match_all( '/\$([a-zA-Z0-9-_]+)/', $text, $matches, PREG_SET_ORDER ); + + $new = array_map( function ( $match ) { + // Numerical ones are already handled by parent + if ( ctype_digit( $match[1] ) ) { + return null; + } + + return new Insertable( $match[0], $match[0] ); + }, $matches ); + + $new = array_filter( $new ); + $insertables = array_merge( $insertables, $new ); + + return $insertables; + } +} + +class_alias( + TranslatablePageInsertablesSuggester::class, + '\MediaWiki\Extensions\Translate\TranslatablePageInsertablesSuggester' +); |