* @param bool $linestart Is this the start of a line?
* @param bool $interface Is this text in the user interface language?
* @throws MWException
+ * @deprecated since 1.32 due to untidy output; use
+ * addWikiTextAsInterface() if $interface is default value or true,
+ * or else addWikiTextAsContent() if $interface is false.
*/
public function addWikiText( $text, $linestart = true, $interface = true ) {
- $title = $this->getTitle(); // Work around E_STRICT
+ $title = $this->getTitle();
if ( !$title ) {
throw new MWException( 'Title is null' );
}
$this->addWikiTextTitle( $text, $title, $linestart, /*tidy*/false, $interface );
}
+ /**
+ * Convert wikitext *in the user interface language* to HTML and
+ * add it to the buffer. The result will not be
+ * language-converted, as user interface messages are already
+ * localized into a specific variant. Assumes that the current
+ * page title will be used if optional $title is not
+ * provided. Output will be tidy.
+ *
+ * @param string $text Wikitext in the user interface language
+ * @param bool $linestart Is this the start of a line? (Defaults to true)
+ * @param Title|null $title Optional title to use; default of `null`
+ * means use current page title.
+ * @throws MWException if $title is not provided and OutputPage::getTitle()
+ * is null
+ * @since 1.32
+ */
+ public function addWikiTextAsInterface(
+ $text, $linestart = true, Title $title = null
+ ) {
+ if ( $title === null ) {
+ $title = $this->getTitle();
+ }
+ if ( !$title ) {
+ throw new MWException( 'Title is null' );
+ }
+ $this->addWikiTextTitle( $text, $title, $linestart, /*tidy*/true, /*interface*/true );
+ }
+
+ /**
+ * Convert wikitext *in the page content language* to HTML and add
+ * it to the buffer. The result with be language-converted to the
+ * user's preferred variant. Assumes that the current page title
+ * will be used if optional $title is not provided. Output will be
+ * tidy.
+ *
+ * @param string $text Wikitext in the page content language
+ * @param bool $linestart Is this the start of a line? (Defaults to true)
+ * @param Title|null $title Optional title to use; default of `null`
+ * means use current page title.
+ * @throws MWException if $title is not provided and OutputPage::getTitle()
+ * is null
+ * @since 1.32
+ */
+ public function addWikiTextAsContent(
+ $text, $linestart = true, Title $title = null
+ ) {
+ if ( $title === null ) {
+ $title = $this->getTitle();
+ }
+ if ( !$title ) {
+ throw new MWException( 'Title is null' );
+ }
+ $this->addWikiTextTitle( $text, $title, $linestart, /*tidy*/true, /*interface*/false );
+ }
+
/**
* Add wikitext with a custom Title object
*
* @param string $text Wikitext
* @param Title $title
* @param bool $linestart Is this the start of a line?
+ * @deprecated since 1.32 due to untidy output; use
+ * addWikiTextAsInterface()
*/
public function addWikiTextWithTitle( $text, Title $title, $linestart = true ) {
$this->addWikiTextTitle( $text, $title, $linestart );
}
/**
- * Add wikitext with a custom Title object and tidy enabled.
+ * Add wikitext *in content language* with a custom Title object.
+ * Output will be tidy.
*
- * @param string $text Wikitext
+ * @param string $text Wikitext in content language
* @param Title $title
* @param bool $linestart Is this the start of a line?
+ * @deprecated since 1.32 to rename methods consistently; use
+ * addWikiTextAsContent()
*/
function addWikiTextTitleTidy( $text, Title $title, $linestart = true ) {
$this->addWikiTextTitle( $text, $title, $linestart, true );
}
/**
- * Add wikitext with tidy enabled
+ * Add wikitext *in content language*. Output will be tidy.
*
- * @param string $text Wikitext
+ * @param string $text Wikitext in content language
* @param bool $linestart Is this the start of a line?
+ * @deprecated since 1.32 to rename methods consistently; use
+ * addWikiTextAsContent()
*/
public function addWikiTextTidy( $text, $linestart = true ) {
$title = $this->getTitle();
+ if ( !$title ) {
+ throw new MWException( 'Title is null' );
+ }
$this->addWikiTextTitleTidy( $text, $title, $linestart );
}
* @param string $text Wikitext
* @param Title $title
* @param bool $linestart Is this the start of a line?
- * @param bool $tidy Whether to use tidy
+ * @param bool $tidy Whether to use tidy.
+ * Setting this to false (or omitting it) is deprecated
+ * since 1.32; all wikitext should be tidied.
+ * For backwards-compatibility with prior MW releases,
+ * you may wish to invoke this method but set $tidy=true;
+ * this will result in equivalent output to the non-deprecated
+ * addWikiTextAsContent()/addWikiTextAsInterface() methods.
* @param bool $interface Whether it is an interface message
* (for example disables conversion)
+ * @deprecated since 1.32, use addWikiTextAsContent() or
+ * addWikiTextAsInterface() (depending on $interface)
*/
public function addWikiTextTitle( $text, Title $title, $linestart,
$tidy = false, $interface = false
/**
* @dataProvider provideAddWikiText
* @covers OutputPage::addWikiText
+ * @covers OutputPage::addWikiTextAsInterface
+ * @covers OutputPage::addWikiTextAsContent
* @covers OutputPage::addWikiTextWithTitle
* @covers OutputPage::addWikiTextTitle
* @covers OutputPage::addWikiTextTidy
// Special placeholder because we can't get the actual title in the provider
$args[1] = $op->getTitle();
}
+ if ( in_array(
+ $method,
+ [ 'addWikiTextAsInterface', 'addWikiTextAsContent' ]
+ ) && count( $args ) >= 3 && $args[2] === null ) {
+ // Special placeholder because we can't get the actual title in the provider
+ $args[2] = $op->getTitle();
+ }
$op->$method( ...$args );
$this->assertSame( $expected, $op->getHTML() );
public function provideAddWikiText() {
$tests = [
'addWikiText' => [
+ // Not tidied; this API is deprecated.
'Simple wikitext' => [
[ "'''Bold'''" ],
"<p><b>Bold</b>\n</p>",
],
],
'addWikiTextWithTitle' => [
+ // Untidied; this API is deprecated
'With title at start' => [
[ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ) ],
"<ul><li>Some page</li></ul>\n",
"* Some page",
],
],
- 'addWikiTextTidy' => [
+ 'addWikiTextAsInterface' => [
+ // Preferred interface: output is tidied
+ 'Simple wikitext' => [
+ [ "'''Bold'''" ],
+ "<p><b>Bold</b>\n</p>",
+ ], 'Untidy wikitext' => [
+ [ "<b>Bold" ],
+ "<p><b>Bold\n</b></p>",
+ ], 'List at start' => [
+ [ '* List' ],
+ "<ul><li>List</li></ul>\n",
+ ], 'List not at start' => [
+ [ '* Not a list', false ],
+ '<p>* Not a list</p>',
+ ], 'No section edit links' => [
+ [ '== Title ==' ],
+ "<h2><span class=\"mw-headline\" id=\"Title\">Title</span></h2>\n",
+ ], 'With title at start' => [
+ [ '* {{PAGENAME}}', true, Title::newFromText( 'Talk:Some page' ) ],
+ "<ul><li>Some page</li></ul>\n",
+ ], 'With title at start' => [
+ [ '* {{PAGENAME}}', false, Title::newFromText( 'Talk:Some page' ), false ],
+ "<p>* Some page</p>",
+ ], 'Untidy input' => [
+ [ '<b>{{PAGENAME}}', true, Title::newFromText( 'Talk:Some page' ) ],
+ "<p><b>Some page\n</b></p>",
+ ],
+ ],
+ 'addWikiTextAsContent' => [
+ // Preferred interface: output is tidied
'SpecialNewimages' => [
[ "<p lang='en' dir='ltr'>\nMy message" ],
'<p lang="en" dir="ltr">' . "\nMy message\n</p>"
], 'List not at start' => [
[ '* <b>Not a list', false ],
'<p>* <b>Not a list</b></p>',
- ],
- ],
- 'addWikiTextTitleTidy' => [
- 'With title at start' => [
- [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ) ],
+ ], 'With title at start' => [
+ [ '* {{PAGENAME}}', true, Title::newFromText( 'Talk:Some page' ) ],
"<ul><li>Some page</li></ul>\n",
], 'With title at start' => [
- [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ), false ],
+ [ '* {{PAGENAME}}', false, Title::newFromText( 'Talk:Some page' ), false ],
"<p>* Some page</p>",
], 'EditPage' => [
- [ "<div class='mw-editintro'>{{PAGENAME}}", Title::newFromText( 'Talk:Some page' ) ],
+ [ "<div class='mw-editintro'>{{PAGENAME}}", true, Title::newFromText( 'Talk:Some page' ) ],
'<div class="mw-editintro">' . "Some page\n</div>"
],
],
$tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
array_merge( [ $args ], array_slice( $val, 1 ) );
}
- foreach ( $tests['addWikiTextTidy'] as $key => $val ) {
- $args = [ $val[0][0], null, $val[0][1] ?? true, true, false ];
+ foreach ( $tests['addWikiTextAsInterface'] as $key => $val ) {
+ $args = [ $val[0][0], $val[0][2] ?? null, $val[0][1] ?? true, true, true ];
$tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
array_merge( [ $args ], array_slice( $val, 1 ) );
}
- foreach ( $tests['addWikiTextTitleTidy'] as $key => $val ) {
- $args = [ $val[0][0], $val[0][1], $val[0][2] ?? true, true, false ];
+ foreach ( $tests['addWikiTextAsContent'] as $key => $val ) {
+ $args = [ $val[0][0], $val[0][2] ?? null, $val[0][1] ?? true, true, false ];
$tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
array_merge( [ $args ], array_slice( $val, 1 ) );
}
+ // addWikiTextTidy / addWikiTextTitleTidy were old aliases of
+ // addWikiTextAsContent
+ foreach ( $tests['addWikiTextAsContent'] as $key => $val ) {
+ if ( count( $val[0] ) > 2 ) {
+ $args = [ $val[0][0], $val[0][2], $val[0][1] ?? true ];
+ $tests['addWikiTextTitleTidy']["$key (addWikiTextTitleTidy)"] =
+ array_merge( [ $args ], array_slice( $val, 1 ) );
+ } else {
+ $args = [ $val[0][0], $val[0][1] ?? true ];
+ $tests['addWikiTextTidy']["$key (addWikiTextTidy)"] =
+ array_merge( [ $args ], array_slice( $val, 1 ) );
+ }
+ }
// We have to reformat our array to match what PHPUnit wants
$ret = [];
$op->addWikiText( 'a' );
}
+ /**
+ * @covers OutputPage::addWikiTextAsInterface
+ */
+ public function testAddWikiTextAsInterfaceNoTitle() {
+ $this->setExpectedException( MWException::class, 'Title is null' );
+
+ $op = $this->newInstance( [], null, 'notitle' );
+ $op->addWikiTextAsInterface( 'a' );
+ }
+
+ /**
+ * @covers OutputPage::addWikiTextAsContent
+ */
+ public function testAddWikiTextAsContentNoTitle() {
+ $this->setExpectedException( MWException::class, 'Title is null' );
+
+ $op = $this->newInstance( [], null, 'notitle' );
+ $op->addWikiTextAsContent( 'a' );
+ }
+
/**
* @covers OutputPage::addWikiMsg
*/