/extensions/WikiScripts/interpreter/lib/String.php

https://github.com/ChuguluGames/mediawiki-svn · PHP · 106 lines · 89 code · 17 blank · 0 comment · 2 complexity · b2a086c0952b0b724a2ab216ed42b48f MD5 · raw file

  1. <?php
  2. class WSStringLibrary extends WSLibraryModuleBase {
  3. public function getFunctions() {
  4. return array(
  5. 'lowercase' => array( 'lowercase', 1 ),
  6. 'uppercase' => array( 'uppercase', 1 ),
  7. 'uppercase_first' => array( 'uppercaseFirst', 1 ),
  8. 'url_encode' => array( 'urlEncode', 1 ),
  9. 'anchor_encode' => array( 'anchorEncode', 1 ),
  10. 'grammar' => array( 'grammar', 2 ),
  11. 'plural' => array( 'plural', 2 ),
  12. 'length' => array( 'length', 1 ),
  13. 'sub' => array( 'sub', 3 ),
  14. 'replace' => array( 'replace', 3 ),
  15. 'split' => array( 'split', 2 ),
  16. 'join' => array( 'join', 2 ),
  17. 'join_list' => array( 'join_list', 2 ),
  18. );
  19. }
  20. public function lowercase( $args, $context, $line ) {
  21. global $wgContLang;
  22. return new WSData( WSData::DString, $wgContLang->lc( $args[0]->toString() ) );
  23. }
  24. public function uppercase( $args, $context, $line ) {
  25. global $wgContLang;
  26. return new WSData( WSData::DString, $wgContLang->uc( $args[0]->toString() ) );
  27. }
  28. public function uppercaseFirst( $args, $context, $line ) {
  29. global $wgContLang;
  30. return new WSData( WSData::DString, $wgContLang->ucfirst( $args[0]->toString() ) );
  31. }
  32. public function urlEncode( $args, $context, $line ) {
  33. return new WSData( WSData::DString, wfUrlencode( $args[0]->toString() ) );
  34. }
  35. public function anchorEncode( $args, $context, $line ) {
  36. $s = urlencode( $args[0]->toString() );
  37. $s = strtr( $s, array( '%' => '.', '+' => '_' ) );
  38. $s = str_replace( '.3A', ':', $s );
  39. return new WSData( WSData::DString, $s );
  40. }
  41. public function grammar( $args, $context, $line ) {
  42. list( $case, $word ) = $args;
  43. $res = $context->mParser->getFunctionLang()->convertGrammar(
  44. $case->toString(), $word->toString() );
  45. return new WSData( WSData::DString, $res );
  46. }
  47. public function plural( $args, $context, $line ) {
  48. $num = $args[0]->toInt();
  49. for( $i = 1; $i < count( $args ); $i++ )
  50. $forms[] = $args[$i]->toString();
  51. $res = $context->mParser->getFunctionLang()->convertPlural( $num, $forms );
  52. return new WSData( WSData::DString, $res );
  53. }
  54. public function length( $args, $context, $line ) {
  55. return new WSData( WSData::DInt, mb_strlen( $args[0]->toString() ) );
  56. }
  57. public function sub( $args, $context, $line ) {
  58. $s = $args[0]->toString();
  59. $start = $args[1]->toInt();
  60. $length = $args[2]->toInt();
  61. return new WSData( WSData::DString, mb_substr( $s, $start, $length ) );
  62. }
  63. public function replace( $args, $context, $line ) {
  64. $s = $args[0]->toString();
  65. $old = $args[1]->toString();
  66. $new = $args[2]->toString();
  67. return new WSData( WSData::DString, str_replace( $old, $new, $s ) );
  68. }
  69. public function split( $args, $context, $line ) {
  70. $list = explode( $args[1]->toString(), $args[0]->toString() );
  71. return WSData::newFromPHPVar( $list );
  72. }
  73. public function join( $args, $context, $line ) {
  74. $bits = array();
  75. for( $i = 1; $i < count( $args ); $i++ ) {
  76. $bits[] = $args[$i]->toString();
  77. }
  78. return new WSData( WSData::DString, implode( $args[0]->toString(), $bits ) );
  79. }
  80. public function join_list( $args, $context, $line ) {
  81. $bits = array();
  82. foreach( $args[0]->toList() as $bit ) {
  83. $prefix = isset( $args[2] ) ? $args[2]->toString() : '';
  84. $postfix = isset( $args[3] ) ? $args[3]->toString() : '';
  85. $bits[] = $prefix . $bit->toString() . $postfix;
  86. }
  87. return new WSData( WSData::DString, implode( $args[1]->toString(), $bits ) );
  88. }
  89. }