summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/RegexFunctions
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/RegexFunctions
first commit
Diffstat (limited to 'www/wiki/extensions/RegexFunctions')
-rw-r--r--www/wiki/extensions/RegexFunctions/.gitignore7
-rw-r--r--www/wiki/extensions/RegexFunctions/.gitreview6
-rw-r--r--www/wiki/extensions/RegexFunctions/CODE_OF_CONDUCT.md1
-rw-r--r--www/wiki/extensions/RegexFunctions/Gruntfile.js29
-rw-r--r--www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.magic.php114
-rw-r--r--www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.php35
-rw-r--r--www/wiki/extensions/RegexFunctions/RegexFunctions.php228
-rw-r--r--www/wiki/extensions/RegexFunctions/gitinfo.json1
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ar.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/arz.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ast.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/be-tarask.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/br.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/bs.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ca.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/cs.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/de.json4
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/dsb.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/el.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/en.json6
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/es.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/eu.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/fa.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/fi.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/fr.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/frp.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/gl.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/gsw.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/he.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/hil.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/hr.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/hsb.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/hu.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ia.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/id.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/it.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ja.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ko.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ksh.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/lb.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/li.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/lij.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/min.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/mk.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ms.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/nb.json4
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/nds.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/nl.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/nn.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/oc.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/pl.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/pms.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/pt-br.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/pt.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/qqq.json11
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ro.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/roa-tara.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/ru.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/sk.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/sr-ec.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/sr-el.json9
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/sv.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/tl.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/tr.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/uk.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/vi.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/zh-hans.json8
-rw-r--r--www/wiki/extensions/RegexFunctions/i18n/zh-hant.json4
-rw-r--r--www/wiki/extensions/RegexFunctions/package.json12
-rw-r--r--www/wiki/extensions/RegexFunctions/version4
70 files changed, 915 insertions, 0 deletions
diff --git a/www/wiki/extensions/RegexFunctions/.gitignore b/www/wiki/extensions/RegexFunctions/.gitignore
new file mode 100644
index 00000000..e62fc28b
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/.gitignore
@@ -0,0 +1,7 @@
+node_modules/
+vendor/
+
+.svn
+*~
+*.kate-swp
+.*.swp
diff --git a/www/wiki/extensions/RegexFunctions/.gitreview b/www/wiki/extensions/RegexFunctions/.gitreview
new file mode 100644
index 00000000..1d685bc8
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/.gitreview
@@ -0,0 +1,6 @@
+[gerrit]
+host=gerrit.wikimedia.org
+port=29418
+project=mediawiki/extensions/RegexFunctions.git
+track=1
+defaultrebase=0 \ No newline at end of file
diff --git a/www/wiki/extensions/RegexFunctions/CODE_OF_CONDUCT.md b/www/wiki/extensions/RegexFunctions/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..d8e5d087
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/CODE_OF_CONDUCT.md
@@ -0,0 +1 @@
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
diff --git a/www/wiki/extensions/RegexFunctions/Gruntfile.js b/www/wiki/extensions/RegexFunctions/Gruntfile.js
new file mode 100644
index 00000000..2db815fa
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/Gruntfile.js
@@ -0,0 +1,29 @@
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ grunt.loadNpmTasks( 'grunt-jsonlint' );
+ grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+
+ grunt.initConfig( {
+ banana: {
+ all: 'i18n/'
+ },
+ jshint: {
+ all: [
+ '**/*.js',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ },
+ jsonlint: {
+ all: [
+ '**/*.json',
+ '!node_modules/**',
+ '!vendor/**'
+ ]
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'jshint' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.magic.php b/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.magic.php
new file mode 100644
index 00000000..8cb3e9b6
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.magic.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ *
+ */
+
+$magicWords = array();
+
+/** English (English) */
+$magicWords['en'] = array(
+ 'rmatch' => array( 0, 'rmatch' ),
+ 'rsplit' => array( 0, 'rsplit' ),
+ 'rreplace' => array( 0, 'rreplace' ),
+);
+
+/** Arabic (العربية) */
+$magicWords['ar'] = array(
+ 'rmatch' => array( 0, 'مطابقة_ريجيكس' ),
+ 'rsplit' => array( 0, 'فصل_ريجيكس' ),
+ 'rreplace' => array( 0, 'استبدال_ريجيكس' ),
+);
+
+/** Egyptian Arabic (مصرى) */
+$magicWords['arz'] = array(
+ 'rmatch' => array( 0, 'مطابقه_ريجيكس' ),
+ 'rsplit' => array( 0, 'فصل_ريجيكس' ),
+ 'rreplace' => array( 0, 'استبدال_ريجيكس' ),
+);
+
+/** Chuvash (Чӑвашла) */
+$magicWords['cv'] = array(
+ 'rmatch' => array( 0, 'rmatch' ),
+ 'rsplit' => array( 0, 'rsplit' ),
+ 'rreplace' => array( 0, 'rreplace' ),
+);
+
+/** German (Deutsch) */
+$magicWords['de'] = array(
+ 'rmatch' => array( 0, 'r_zuordnen' ),
+ 'rsplit' => array( 0, 'r_aufteilen' ),
+ 'rreplace' => array( 0, 'r_ersetzen' ),
+);
+
+/** Japanese (日本語) */
+$magicWords['ja'] = array(
+ 'rmatch' => array( 0, '正規表現一致' ),
+ 'rsplit' => array( 0, '正規表現分割' ),
+ 'rreplace' => array( 0, '正規表現置き換え' ),
+);
+
+/** Korean (한국어) */
+$magicWords['ko'] = array(
+ 'rmatch' => array( 0, 'r찾기' ),
+ 'rsplit' => array( 0, 'r분할' ),
+ 'rreplace' => array( 0, 'r바꾸기' ),
+);
+
+/** Macedonian (македонски) */
+$magicWords['mk'] = array(
+ 'rmatch' => array( 0, 'рсовпадни' ),
+ 'rsplit' => array( 0, 'родвој' ),
+ 'rreplace' => array( 0, 'рзамени' ),
+);
+
+/** Malayalam (മലയാളം) */
+$magicWords['ml'] = array(
+ 'rmatch' => array( 0, 'ചേരുമ്പടി' ),
+ 'rsplit' => array( 0, 'വിഘടിപ്പിക്കൽ' ),
+ 'rreplace' => array( 0, 'മാറ്റിച്ചേർക്കൽ' ),
+);
+
+/** Marathi (मराठी) */
+$magicWords['mr'] = array(
+ 'rmatch' => array( 0, 'रिजुळवा', 'रजुळवा' ),
+ 'rsplit' => array( 0, 'रितोडा', 'रतोडा' ),
+ 'rreplace' => array( 0, 'रिबदला', 'रबदला' ),
+);
+
+/** Low Saxon (Netherlands) (Nedersaksies) */
+$magicWords['nds-nl'] = array(
+ 'rmatch' => array( 0, 'rvergelieken' ),
+);
+
+/** Dutch (Nederlands) */
+$magicWords['nl'] = array(
+ 'rmatch' => array( 0, 'rvergelijken' ),
+ 'rsplit' => array( 0, 'rsplitsen' ),
+ 'rreplace' => array( 0, 'rvervangen' ),
+);
+
+/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
+$magicWords['sr-ec'] = array(
+ 'rmatch' => array( 0, 'рпоклопи' ),
+ 'rsplit' => array( 0, 'рраздвоји', 'рподели' ),
+ 'rreplace' => array( 0, 'рзамени' ),
+);
+
+/** Serbian (Latin script) (srpski (latinica)‎) */
+$magicWords['sr-el'] = array(
+ 'rmatch' => array( 0, 'rpoklopi' ),
+ 'rsplit' => array( 0, 'rrazdvoji', 'rpodeli' ),
+ 'rreplace' => array( 0, 'rzameni' ),
+);
+
+/** Simplified Chinese (中文(简体)‎) */
+$magicWords['zh-hans'] = array(
+ 'rmatch' => array( 0, '重新匹配' ),
+ 'rsplit' => array( 0, '重新分解' ),
+ 'rreplace' => array( 0, '重新取代' ),
+);
+
+/** Traditional Chinese (中文(繁體)‎) */
+$magicWords['zh-hant'] = array(
+ 'rmatch' => array( 0, '重新分配' ),
+); \ No newline at end of file
diff --git a/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.php b/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.php
new file mode 100644
index 00000000..64828741
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/RegexFunctions.i18n.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * This is a backwards-compatibility shim, generated by:
+ * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
+ *
+ * Beginning with MediaWiki 1.23, translation strings are stored in json files,
+ * and the EXTENSION.i18n.php file only exists to provide compatibility with
+ * older releases of MediaWiki. For more information about this migration, see:
+ * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
+ *
+ * This shim maintains compatibility back to MediaWiki 1.17.
+ */
+$messages = array();
+if ( !function_exists( 'wfJsonI18nShim002b8fe1be843f74' ) ) {
+ function wfJsonI18nShim002b8fe1be843f74( $cache, $code, &$cachedData ) {
+ $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
+ foreach ( $codeSequence as $csCode ) {
+ $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
+ if ( is_readable( $fileName ) ) {
+ $data = FormatJson::decode( file_get_contents( $fileName ), true );
+ foreach ( array_keys( $data ) as $key ) {
+ if ( $key === '' || $key[0] === '@' ) {
+ unset( $data[$key] );
+ }
+ }
+ $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
+ }
+
+ $cachedData['deps'][] = new FileDependency( $fileName );
+ }
+ return true;
+ }
+
+ $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim002b8fe1be843f74';
+}
diff --git a/www/wiki/extensions/RegexFunctions/RegexFunctions.php b/www/wiki/extensions/RegexFunctions/RegexFunctions.php
new file mode 100644
index 00000000..1fa34329
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/RegexFunctions.php
@@ -0,0 +1,228 @@
+<?php
+/**
+ * RegexFunctions extension -- Regular Expression parser functions
+ *
+ * @file
+ * @ingroup Extensions
+ * @author Ryan Schmidt
+ * @license http://en.wikipedia.org/wiki/Public_domain Public domain
+ * @link http://www.mediawiki.org/wiki/Extension:RegexFunctions Documentation
+ */
+
+if( !defined( 'MEDIAWIKI' ) ) {
+ echo "This file is an extension of the MediaWiki software and cannot be used standalone\n";
+ die( 1 );
+}
+
+// Extension credits that will show up on Special:Version
+$wgExtensionCredits['parserhook'][] = array(
+ 'path' => __FILE__,
+ 'name' => 'RegexFunctions',
+ 'author' => 'Ryan Schmidt',
+ 'version' => '1.5.0',
+ 'descriptionmsg' => 'regexfunctions-desc',
+ 'url' => 'https://www.mediawiki.org/wiki/Extension:RegexFunctions',
+);
+
+$dir = dirname( __FILE__ ) . '/';
+$wgMessagesDirs['RegexFunctions'] = __DIR__ . '/i18n';
+$wgExtensionMessagesFiles['RegexFunctions'] = $dir . 'RegexFunctions.i18n.php';
+$wgExtensionMessagesFiles['RegexFunctionsMagic'] = $dir . 'RegexFunctions.i18n.magic.php';
+
+$wgHooks['ParserFirstCallInit'][] = 'ExtRegexFunctions::onParserFirstCallInit';
+$wgHooks['ParserClearState'][] = 'ExtRegexFunctions::onParserClearState';
+
+// default globals
+// how many functions are allowed in a single page? Keep this at least above 3 for usability
+$wgRegexFunctionsPerPage = 10;
+// should we allow modifiers in the functions, e.g. the /i modifier for case-insensitive?
+$wgRegexFunctionsAllowModifiers = true;
+// should we allow internal options to be set (e.g. (?opts) or (?opts:some regex))
+$wgRegexFunctionsAllowOptions = true;
+// limit for rsplit and rreplace functions. -1 is unlimited
+$wgRegexFunctionsLimit = -1;
+// array of functions to disable, aka these functions cannot be used :)
+$wgRegexFunctionsDisable = array();
+
+class ExtRegexFunctions {
+ private static $num = 0;
+ private static $modifiers = array(
+ 'i', 'm', 's', 'x', 'A', 'D', 'S', 'U', 'X', 'J', 'u', 'e'
+ );
+ private static $options = array( 'i', 'm', 's', 'x', 'U', 'X', 'J' );
+
+ public static function onParserFirstCallInit( $parser ) {
+ $parser->setFunctionHook( 'rmatch', array( __CLASS__, 'rmatch' ) );
+ $parser->setFunctionHook( 'rsplit', array( __CLASS__, 'rsplit' ) );
+ $parser->setFunctionHook( 'rreplace', array( __CLASS__, 'rreplace' ) );
+ return true;
+ }
+
+ public static function onParserClearState( $parser ) {
+ self::$num = 0;
+ return true;
+ }
+
+ public static function rmatch( &$parser, $string = '', $pattern = '', $return = '', $notfound = '', $offset = 0 ) {
+ global $wgRegexFunctionsPerPage, $wgRegexFunctionsAllowModifiers, $wgRegexFunctionsDisable;
+ if( in_array( 'rmatch', $wgRegexFunctionsDisable ) ) {
+ return;
+ }
+ self::$num++;
+ if( self::$num > $wgRegexFunctionsPerPage ) {
+ return;
+ }
+ $pattern = self::sanitize(
+ $pattern,
+ $wgRegexFunctionsAllowModifiers
+ );
+ $num = preg_match(
+ $pattern, $string, $matches, PREG_OFFSET_CAPTURE, (int) $offset
+ );
+ if ( $num === false ) {
+ return;
+ }
+ if ( $num === 0 ) {
+ if ( $notfound == '$0' ) {
+ //Return the original string if specified to display it with $0.
+ return $string;
+ }
+ return $notfound;
+ }
+
+ // change all backslashes to $
+ $return = str_replace( '\\', '%$', $return );
+ $return = preg_replace_callback(
+ '/%?\$%?\$([0-9]+)/',
+ function ( $_callbackMatches ) use ( $matches ) {
+ return array_key_exists($_callbackMatches[1], $matches) ? $matches[$_callbackMatches[1]][1] : '';
+ },
+ $return
+ );
+ $return = preg_replace_callback(
+ '/%?\$%?\$\{([0-9]+)\}/',
+ function ( $_callbackMatches ) use ( $matches ) {
+ return array_key_exists($_callbackMatches[1], $matches) ? $matches[$_callbackMatches[1]][1] : '';
+ },
+ $return
+ );
+ $return = preg_replace_callback(
+ '/%?\$([0-9]+)/',
+ function ( $_callbackMatches ) use ( $matches ) {
+ return array_key_exists($_callbackMatches[1], $matches) ? $matches[$_callbackMatches[1]][0] : '';
+ },
+ $return
+ );
+ $return = preg_replace_callback(
+ '/%?\$\{([0-9]+)\}/',
+ function ( $_callbackMatches ) use ( $matches ) {
+ return array_key_exists($_callbackMatches[1], $matches) ? $matches[$_callbackMatches[1]][0] : '';
+ },
+ $return
+ );
+ $return = str_replace( '%$', '\\', $return );
+
+ return $return;
+ }
+
+ public static function rsplit( &$parser, $string = '', $pattern = '', $piece = 0 ) {
+ global $wgRegexFunctionsPerPage, $wgRegexFunctionsAllowModifiers, $wgRegexFunctionsLimit, $wgRegexFunctionsDisable;
+ if( in_array( 'rsplit', $wgRegexFunctionsDisable ) ) {
+ return;
+ }
+ self::$num++;
+ if( self::$num > $wgRegexFunctionsPerPage ) {
+ return;
+ }
+ $pattern = self::sanitize(
+ $pattern,
+ $wgRegexFunctionsAllowModifiers
+ );
+ $res = preg_split( $pattern, $string, $wgRegexFunctionsLimit );
+ $p = (int) $piece;
+ // allow negative pieces to work from the end of the array
+ if( $p < 0 ) {
+ $p = $p + count( $res );
+ }
+ // sanitation for pieces that don't exist
+ if( $p < 0 ) {
+ $p = 0;
+ }
+ if( $p >= count( $res ) ) {
+ $p = count( $res ) - 1;
+ }
+ return $res[$p];
+ }
+
+ public static function rreplace( &$parser, $string = '', $pattern = '', $replace = '' ) {
+ global $wgRegexFunctionsPerPage, $wgRegexFunctionsAllowModifiers, $wgRegexFunctionsLimit, $wgRegexFunctionsDisable;
+ if( in_array( 'rreplace', $wgRegexFunctionsDisable ) ) {
+ return;
+ }
+ self::$num++;
+ if( self::$num > $wgRegexFunctionsPerPage ) {
+ return;
+ }
+ $pattern = self::sanitize(
+ str_replace(chr(0), '', $pattern),
+ $wgRegexFunctionsAllowModifiers
+ );
+ $res = preg_replace(
+ $pattern,
+ $replace,
+ $string,
+ $wgRegexFunctionsLimit
+ );
+ return $res;
+ }
+
+ // santizes a regex pattern
+ private static function sanitize( $pattern, $m = false ) {
+ if( preg_match( '/^\/(.*)([^\\\\])\/(.*?)$/', $pattern, $matches ) ) {
+ $pat = preg_replace_callback(
+ '/([^\\\\])?\(\?(.*\:)?(.*)\)/U',
+ function ( $_callbackMatches ) {
+ return "{$_callbackMatches[1]}(" . self::cleanupInternal( $_callbackMatches[2] ) . "{$_callbackMatches[3]})";
+ },
+ $matches[1] . $matches[2]
+ );
+ $ret = '/' . $pat . '/';
+ if( $m ) {
+ $mod = '';
+ foreach( self::$modifiers as $val ) {
+ if( strpos( $matches[3], $val ) !== false ) {
+ $mod .= $val;
+ }
+ }
+ $mod = str_replace( 'e', '', $mod ); //Get rid of eval modifier.
+ $ret .= $mod;
+ }
+ } else {
+ $pat = preg_replace_callback(
+ '/([^\\\\])?\(\?(.*\:)?(.*)\)/U',
+ function ( $_callbackMatches ) {
+ return "{$_callbackMatches[1]}(" . self::cleanupInternal( $_callbackMatches[2] ) . "{$_callbackMatches[3]})";
+ },
+ $pattern
+ );
+ $pat = preg_replace( '!([^\\\\])/!', '$1\\/', $pat );
+ $ret = '/' . $pat . '/';
+ }
+ return $ret;
+ }
+
+ // cleans up internal options, making sure they are valid
+ private static function cleanupInternal( $str ) {
+ global $wgRegexFunctionsAllowOptions;
+ $ret = '';
+ if ( !$wgRegexFunctionsAllowOptions ) {
+ return '';
+ }
+ foreach ( self::$options as $opt ) {
+ if( strpos( $str, $opt ) !== false ) {
+ $ret .= $opt;
+ }
+ }
+ return $ret;
+ }
+}
diff --git a/www/wiki/extensions/RegexFunctions/gitinfo.json b/www/wiki/extensions/RegexFunctions/gitinfo.json
new file mode 100644
index 00000000..742093cc
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/gitinfo.json
@@ -0,0 +1 @@
+{"headSHA1": "46808899e85f4ff465c28cb7553588002283970b\n", "head": "46808899e85f4ff465c28cb7553588002283970b\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/RegexFunctions", "branch": "46808899e85f4ff465c28cb7553588002283970b\n", "headCommitDate": "1496833865"} \ No newline at end of file
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ar.json b/www/wiki/extensions/RegexFunctions/i18n/ar.json
new file mode 100644
index 00000000..237c539c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ar.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25"
+ ]
+ },
+ "regexfunctions-desc": "دوال محلل تعبيرات منتظمة"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/arz.json b/www/wiki/extensions/RegexFunctions/i18n/arz.json
new file mode 100644
index 00000000..237c539c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/arz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25"
+ ]
+ },
+ "regexfunctions-desc": "دوال محلل تعبيرات منتظمة"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ast.json b/www/wiki/extensions/RegexFunctions/i18n/ast.json
new file mode 100644
index 00000000..1e215400
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ast.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "regexfunctions-desc": "Funciones de analís d'espresiones regulares"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/be-tarask.json b/www/wiki/extensions/RegexFunctions/i18n/be-tarask.json
new file mode 100644
index 00000000..d3e51f45
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/be-tarask.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko"
+ ]
+ },
+ "regexfunctions-desc": "Функцыі парсэра для працы з рэгулярнымі выразамі"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/br.json b/www/wiki/extensions/RegexFunctions/i18n/br.json
new file mode 100644
index 00000000..666e00c0
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fulup"
+ ]
+ },
+ "regexfunctions-desc": "Arc'hwelioù parser lavarennoù reoliek"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/bs.json b/www/wiki/extensions/RegexFunctions/i18n/bs.json
new file mode 100644
index 00000000..04edb263
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/bs.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator"
+ ]
+ },
+ "regexfunctions-desc": "Regularni izraz parserskih funkcija"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ca.json b/www/wiki/extensions/RegexFunctions/i18n/ca.json
new file mode 100644
index 00000000..c64318ab
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ca.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "SMP"
+ ]
+ },
+ "regexfunctions-desc": "Funcions parser amb expressions regulars (regexp)"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/cs.json b/www/wiki/extensions/RegexFunctions/i18n/cs.json
new file mode 100644
index 00000000..023f6163
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/cs.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vks",
+ "Matěj Grabovský"
+ ]
+ },
+ "regexfunctions-desc": "Funkce syntaktického analyzátoru pro regulární výrazy"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/de.json b/www/wiki/extensions/RegexFunctions/i18n/de.json
new file mode 100644
index 00000000..42c33f3e
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/de.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "regexfunctions-desc": "Parserfunktionen für reguläre Ausdrücke"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/dsb.json b/www/wiki/extensions/RegexFunctions/i18n/dsb.json
new file mode 100644
index 00000000..e309d277
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/dsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "regexfunctions-desc": "Parserowe funkcije za regularne wuraze"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/el.json b/www/wiki/extensions/RegexFunctions/i18n/el.json
new file mode 100644
index 00000000..16488c39
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/el.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omnipaedista"
+ ]
+ },
+ "regexfunctions-desc": "Λεξιαναλυτικές συναρτήσεις τακτικών εκφράσεων"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/en.json b/www/wiki/extensions/RegexFunctions/i18n/en.json
new file mode 100644
index 00000000..e001cad6
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/en.json
@@ -0,0 +1,6 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "regexfunctions-desc": "Regular expression parser functions"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/es.json b/www/wiki/extensions/RegexFunctions/i18n/es.json
new file mode 100644
index 00000000..bf41985b
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/es.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sanbec"
+ ]
+ },
+ "regexfunctions-desc": "Funciones sintácticas de expresiones regulares"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/eu.json b/www/wiki/extensions/RegexFunctions/i18n/eu.json
new file mode 100644
index 00000000..37765165
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/eu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Theklan"
+ ]
+ },
+ "regexfunctions-desc": "Espresio erregularra parser funtzioa"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/fa.json b/www/wiki/extensions/RegexFunctions/i18n/fa.json
new file mode 100644
index 00000000..bb01f12f
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/fa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ZxxZxxZ"
+ ]
+ },
+ "regexfunctions-desc": "توابع تجزیه‌گر عبارت باقاعده"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/fi.json b/www/wiki/extensions/RegexFunctions/i18n/fi.json
new file mode 100644
index 00000000..ad586d9d
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/fi.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "Vililikku"
+ ]
+ },
+ "regexfunctions-desc": "Säännöllisten lausekkeiden jäsennysfunktioita"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/fr.json b/www/wiki/extensions/RegexFunctions/i18n/fr.json
new file mode 100644
index 00000000..6b79d152
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/fr.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Grondin",
+ "Urhixidur"
+ ]
+ },
+ "regexfunctions-desc": "Fonctions d’analyse syntaxique concernant les expressions rationnelles"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/frp.json b/www/wiki/extensions/RegexFunctions/i18n/frp.json
new file mode 100644
index 00000000..1d124c57
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/frp.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "regexfunctions-desc": "Fonccions du parsor de les èxprèssions racionèles"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/gl.json b/www/wiki/extensions/RegexFunctions/i18n/gl.json
new file mode 100644
index 00000000..9ed4a51c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/gl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toliño"
+ ]
+ },
+ "regexfunctions-desc": "Funcións de análise de expresións regulares"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/gsw.json b/www/wiki/extensions/RegexFunctions/i18n/gsw.json
new file mode 100644
index 00000000..76bfb647
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/gsw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder"
+ ]
+ },
+ "regexfunctions-desc": "Parserfunktione fir reguläri Uusdrick"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/he.json b/www/wiki/extensions/RegexFunctions/i18n/he.json
new file mode 100644
index 00000000..bdce8810
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/he.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rotemliss"
+ ]
+ },
+ "regexfunctions-desc": "פונקציות פענוח לביטויים רגולריים"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/hil.json b/www/wiki/extensions/RegexFunctions/i18n/hil.json
new file mode 100644
index 00000000..63decaec
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/hil.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tagimata"
+ ]
+ },
+ "regexfunctions-desc": "Regular nga ekspresyon parser panksiyon"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/hr.json b/www/wiki/extensions/RegexFunctions/i18n/hr.json
new file mode 100644
index 00000000..564e1bac
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits"
+ ]
+ },
+ "regexfunctions-desc": "Parserske funkcije s regularnim izrazom"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/hsb.json b/www/wiki/extensions/RegexFunctions/i18n/hsb.json
new file mode 100644
index 00000000..fd8edbbc
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/hsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "regexfunctions-desc": "Analyzowanske funkcije za regularne wurazy"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/hu.json b/www/wiki/extensions/RegexFunctions/i18n/hu.json
new file mode 100644
index 00000000..1fd62d88
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/hu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "Glanthor Reviol"
+ ]
+ },
+ "regexfunctions-desc": "Értelmezőfüggvények reguláris kifejezések használatához"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ia.json b/www/wiki/extensions/RegexFunctions/i18n/ia.json
new file mode 100644
index 00000000..a95bfbce
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ia.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "regexfunctions-desc": "Functiones del analysator syntactic pro expressiones regular"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/id.json b/www/wiki/extensions/RegexFunctions/i18n/id.json
new file mode 100644
index 00000000..a8de809e
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/id.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin"
+ ]
+ },
+ "regexfunctions-desc": "Fungsi parser untuk \"regular expression\" (regex)"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/it.json b/www/wiki/extensions/RegexFunctions/i18n/it.json
new file mode 100644
index 00000000..515adb1c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/it.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Darth Kule"
+ ]
+ },
+ "regexfunctions-desc": "Funzioni parser di espressioni regolari"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ja.json b/www/wiki/extensions/RegexFunctions/i18n/ja.json
new file mode 100644
index 00000000..c5d98c55
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ja.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fryed-peach"
+ ]
+ },
+ "regexfunctions-desc": "正規表現パーサー関数"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ko.json b/www/wiki/extensions/RegexFunctions/i18n/ko.json
new file mode 100644
index 00000000..e369201d
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ko.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwj2772"
+ ]
+ },
+ "regexfunctions-desc": "정규 표현식 파서 함수"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ksh.json b/www/wiki/extensions/RegexFunctions/i18n/ksh.json
new file mode 100644
index 00000000..af6abb9e
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ksh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "regexfunctions-desc": "Paaser-Fungxjuhne met rejolähre Ußdrök dren."
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/lb.json b/www/wiki/extensions/RegexFunctions/i18n/lb.json
new file mode 100644
index 00000000..b370606b
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/lb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "regexfunctions-desc": "Parserfunktioune fir regulär Ausdréck"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/li.json b/www/wiki/extensions/RegexFunctions/i18n/li.json
new file mode 100644
index 00000000..ab0879ca
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/li.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "regexfunctions-desc": "Regelierexpressieparserfunksje"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/lij.json b/www/wiki/extensions/RegexFunctions/i18n/lij.json
new file mode 100644
index 00000000..05622de8
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/lij.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Giromin Cangiaxo"
+ ]
+ },
+ "regexfunctions-desc": "Fonçioin parser d'esprescioin regolæ"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/min.json b/www/wiki/extensions/RegexFunctions/i18n/min.json
new file mode 100644
index 00000000..8bb76185
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/min.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iwan Novirion"
+ ]
+ },
+ "regexfunctions-desc": "Fungsi parser untuak \"regular expression\" (regex)"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/mk.json b/www/wiki/extensions/RegexFunctions/i18n/mk.json
new file mode 100644
index 00000000..a198bc60
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/mk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "regexfunctions-desc": "Расчленувачки функции со регуларен израз"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ms.json b/www/wiki/extensions/RegexFunctions/i18n/ms.json
new file mode 100644
index 00000000..5566c8f6
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ms.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia"
+ ]
+ },
+ "regexfunctions-desc": "Fungsi penghurai ungkapan nalar"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/nb.json b/www/wiki/extensions/RegexFunctions/i18n/nb.json
new file mode 100644
index 00000000..1db0c474
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/nb.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "regexfunctions-desc": "Parserfunksjon for regulære uttrykk"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/nds.json b/www/wiki/extensions/RegexFunctions/i18n/nds.json
new file mode 100644
index 00000000..03f49a0c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/nds.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "regexfunctions-desc": "Parserfunktionen för reguläre Utdrück"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/nl.json b/www/wiki/extensions/RegexFunctions/i18n/nl.json
new file mode 100644
index 00000000..4c6205f3
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/nl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand"
+ ]
+ },
+ "regexfunctions-desc": "Parserfuncties voor reguliere expressies"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/nn.json b/www/wiki/extensions/RegexFunctions/i18n/nn.json
new file mode 100644
index 00000000..7a3a8171
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/nn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "regexfunctions-desc": "Parserfunksjonar for regulære uttrykk"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/oc.json b/www/wiki/extensions/RegexFunctions/i18n/oc.json
new file mode 100644
index 00000000..d1650b9b
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/oc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "regexfunctions-desc": "Foncions parsers de las expressions regularas"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/pl.json b/www/wiki/extensions/RegexFunctions/i18n/pl.json
new file mode 100644
index 00000000..d22d497e
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/pl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Matma Rex",
+ "Sp5uhe"
+ ]
+ },
+ "regexfunctions-desc": "Funkcje parsera obsługi wyrażeń regularnych"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/pms.json b/www/wiki/extensions/RegexFunctions/i18n/pms.json
new file mode 100644
index 00000000..51bfe702
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/pms.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dragonòt"
+ ]
+ },
+ "regexfunctions-desc": "Fonsion ëd parser d'espression regolar"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/pt-br.json b/www/wiki/extensions/RegexFunctions/i18n/pt-br.json
new file mode 100644
index 00000000..6afe9aa1
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/pt-br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo.mps"
+ ]
+ },
+ "regexfunctions-desc": "Funções de análise (parser) para expressões regulares"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/pt.json b/www/wiki/extensions/RegexFunctions/i18n/pt.json
new file mode 100644
index 00000000..3f669380
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/pt.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Waldir"
+ ]
+ },
+ "regexfunctions-desc": "Funções do analisador sintático para expressões regulares"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/qqq.json b/www/wiki/extensions/RegexFunctions/i18n/qqq.json
new file mode 100644
index 00000000..ca711229
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/qqq.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha",
+ "Shirayuki",
+ "The Evil IP address",
+ "Umherirrender"
+ ]
+ },
+ "regexfunctions-desc": "{{desc|name=Regex Functions|url=https://www.mediawiki.org/wiki/Extension:RegexFunctions}}"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ro.json b/www/wiki/extensions/RegexFunctions/i18n/ro.json
new file mode 100644
index 00000000..70dd334c
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "KlaudiuMihaila"
+ ]
+ },
+ "regexfunctions-desc": "Funcții de parsare a expresiilor regulate"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/roa-tara.json b/www/wiki/extensions/RegexFunctions/i18n/roa-tara.json
new file mode 100644
index 00000000..1764c032
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/roa-tara.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "regexfunctions-desc": "Funziune d'u 'nderprete de le espressiune regolere"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/ru.json b/www/wiki/extensions/RegexFunctions/i18n/ru.json
new file mode 100644
index 00000000..c3ffa327
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/ru.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ferrer"
+ ]
+ },
+ "regexfunctions-desc": "Функции парсера с регулярными выражениями"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/sk.json b/www/wiki/extensions/RegexFunctions/i18n/sk.json
new file mode 100644
index 00000000..e6224f1e
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/sk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "regexfunctions-desc": "Funkcie syntaktického analyzátora regulárnych výrazov"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/sr-ec.json b/www/wiki/extensions/RegexFunctions/i18n/sr-ec.json
new file mode 100644
index 00000000..64809beb
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/sr-ec.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rancher",
+ "Михајло Анђелковић"
+ ]
+ },
+ "regexfunctions-desc": "Рашчлањивачке функције с регуларним изразом"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/sr-el.json b/www/wiki/extensions/RegexFunctions/i18n/sr-el.json
new file mode 100644
index 00000000..f698f4b6
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/sr-el.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Rancher"
+ ]
+ },
+ "regexfunctions-desc": "Raščlanjivačke funkcije s regularnim izrazom"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/sv.json b/www/wiki/extensions/RegexFunctions/i18n/sv.json
new file mode 100644
index 00000000..f8b8a5b5
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/sv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Boivie"
+ ]
+ },
+ "regexfunctions-desc": "Parserfunktioner för Reguljära uttryck"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/tl.json b/www/wiki/extensions/RegexFunctions/i18n/tl.json
new file mode 100644
index 00000000..6c46238b
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/tl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "regexfunctions-desc": "Mga tungkuling pambanghay ng pangkaraniwang pagsasaad"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/tr.json b/www/wiki/extensions/RegexFunctions/i18n/tr.json
new file mode 100644
index 00000000..31beb8cf
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/tr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vito Genovese"
+ ]
+ },
+ "regexfunctions-desc": "Kurallı ifade ayrıştırıcı fonksiyonları"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/uk.json b/www/wiki/extensions/RegexFunctions/i18n/uk.json
new file mode 100644
index 00000000..f06e9310
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/uk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS"
+ ]
+ },
+ "regexfunctions-desc": "Парсерні функції регулярних виразів"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/vi.json b/www/wiki/extensions/RegexFunctions/i18n/vi.json
new file mode 100644
index 00000000..70e8533a
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/vi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vinhtantran"
+ ]
+ },
+ "regexfunctions-desc": "Hàm phân tích biểu thức chính quy"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/zh-hans.json b/www/wiki/extensions/RegexFunctions/i18n/zh-hans.json
new file mode 100644
index 00000000..478cfd52
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/zh-hans.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hydra"
+ ]
+ },
+ "regexfunctions-desc": "正则表达式解析器功能"
+}
diff --git a/www/wiki/extensions/RegexFunctions/i18n/zh-hant.json b/www/wiki/extensions/RegexFunctions/i18n/zh-hant.json
new file mode 100644
index 00000000..41c4cc31
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/i18n/zh-hant.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "regexfunctions-desc": "正則表達式解析器功能"
+}
diff --git a/www/wiki/extensions/RegexFunctions/package.json b/www/wiki/extensions/RegexFunctions/package.json
new file mode 100644
index 00000000..e87548ca
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/package.json
@@ -0,0 +1,12 @@
+{
+ "private": true,
+ "scripts": {
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "grunt": "1.0.1",
+ "grunt-banana-checker": "0.5.0",
+ "grunt-contrib-jshint": "1.1.0",
+ "grunt-jsonlint": "1.1.0"
+ }
+}
diff --git a/www/wiki/extensions/RegexFunctions/version b/www/wiki/extensions/RegexFunctions/version
new file mode 100644
index 00000000..15c1d3b3
--- /dev/null
+++ b/www/wiki/extensions/RegexFunctions/version
@@ -0,0 +1,4 @@
+RegexFunctions: REL1_30
+2017-09-21T22:17:51
+
+4680889