Page MenuHomePhabricator

Cite_body-def-2009-06-04.php.diff

Authored By
bzimport
Nov 21 2014, 10:44 PM
Size
8 KB
Referenced Files
None
Subscribers
None

Cite_body-def-2009-06-04.php.diff

--- Cite_body.php 2009-06-03 18:59:50.000000000 -0600
+++ Cite_body-def-2009-06-04.php 2009-06-03 21:50:48.000000000 -0600
@@ -1,4 +1,34 @@
<?php
+/*
+** This is a modified version of cite-body.php from Cite-MW1.14-r45577
+** The modification adds an optional Ref tag parameter named "def"
+**
+** From the editor's perspective, if the def attribute is present in a Ref tag, two things are done:
+**
+** 1. Generation of the superscripted forward-link to the expanded references is suppressed;
+** 2. Generation of the associated backlink in the expanded References item is suppressed
+** (and appropriate adjustments are made in the other backlinks if needed).
+**
+** This allows Ref tag body declarations to be done in a block outside of the article prose.
+** This block may be located anywhere preceding the <references /> tag which would expand the references.
+**
+** If the block is located at the head of the article (ahead of any <ref name=whatever /> tags),
+** the Refs declared therein will be expanded in the order of declaration.
+**
+** A Ref declaration block would look something like the following:
+**
+** <ref def name=c1>
+** This is a comment which should be placed in the References section
+** </ref><ref def name=c2>
+** This is another comment which should be placed in the References section
+** </ref><ref def name="Cited source">
+** This is a citation of [http://something.somewhere.com a supporting source]
+** </ref>
+**
+** Note that that the Ref tag arrangement above places all newlines inside Ref tag bodies
+** This is done to avoid introducing newlines into the article text between Ref tags.
+**
+**/
/**#@+
* A parser extension that adds two tags, <ref> and <references> for adding
@@ -12,8 +42,8 @@
*
* @bug 4579
*
- * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @author &#198;var Arnfj&#246;r&#240; Bjarmason <avarab@gmail.com>
+ * @copyright Copyright &#169; 2005, &#198;var Arnfj&#246;r&#240; Bjarmason
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
*/
@@ -126,10 +156,14 @@
function guardedRef( $str, $argv, $parser, $default_group=CITE_DEFAULT_GROUP ) {
$this->mParser = $parser;
-
# The key here is the "name" attribute.
- list($key,$group) = $this->refArg( $argv );
-
+ $temp = $this->refArg ( $argv );
+ if ( is_string( $temp ) ) {
+ // Cite.i18n.php needs an error in many languages for this
+ return $this->error ( 'cite_error_ref_unk_elements', $temp);
+ } else {
+ list($key,$group,$def) = $temp;
+ }
if( $str === '' ) {
# <ref ...></ref>. This construct is invalid if
# it's a contentful ref, but OK if it's a named duplicate and should
@@ -186,7 +220,7 @@
# fers to an existing one. If it refers to a nonexistent ref,
# we'll figure that out later. Likewise it's definitely valid
# if there's any content, regardless of key.
- return $this->stack( $str, $key, $group );
+ return $this->stack( $str, $key, $group , $def);
}
# Not clear how we could get here, but something is probably
@@ -205,37 +239,30 @@
*/
function refArg( $argv ) {
global $wgAllowCiteGroups;
- $cnt = count( $argv );
$group = null;
$key = null;
+ $def = false;
- if ( $cnt > 2 )
- // There should only be one key and one group
- return false;
- else if ( $cnt >= 1 ) {
if ( isset( $argv['name'] ) ) {
// Key given.
$key = Sanitizer::escapeId( $argv['name'], 'noninitial' );
unset( $argv['name']);
- --$cnt;
+ }
+ if ( isset( $argv['def'] ) ) {
+ // def given.
+ $def = true;
+ unset( $argv['def']);
}
if ( isset( $argv['group'] ) ){
if (! $wgAllowCiteGroups ) return array(false); //remove when groups are fully tested.
// Group given.
$group = $argv['group'];
unset( $argv['group']);
- --$cnt;
}
-
- if ( $cnt == 0)
- return array ($key,$group);
+ if ( count($argv) > 0 )
+ return ( implode(", ", array_keys($argv)) );
else
- // Invalid key
- return array(false,false);
- }
- else
- // No key
- return array(null,$group);
+ return array ($key,$group,$def);
}
/**
@@ -245,7 +272,7 @@
* @param mixed $key Argument to the <ref> tag as returned by $this->refArg()
* @return string
*/
- function stack( $str, $key = null, $group ) {
+ function stack( $str, $key = null, $group, $def ) {
if (! isset($this->mRefs[$group]))
$this->mRefs[$group]=array();
if (! isset($this->mGroupCnt[$group]))
@@ -264,10 +291,12 @@
$this->mRefs[$group][$key] = array(
'text' => $str,
'count' => 0,
+ 'def' => array(),
'key' => ++$this->mOutCnt,
'number' => ++$this->mGroupCnt[$group]
);
$this->mInCnt++;
+ if ( ! $def ) {
return
$this->linkRef(
$group,
@@ -276,12 +305,18 @@
$this->mRefs[$group][$key]['number'],
"-".$this->mRefs[$group][$key]['key']
);
+ }
+ else {
+ $this->mRefs[$group][$key]['def'][0] = true;
+ return "";
+ }
} else {
// We've been here before
if ( $this->mRefs[$group][$key]['text'] === null && $str !== '' ) {
// If no text found before, use this text
$this->mRefs[$group][$key]['text'] = $str;
};
+ if ( ! $def ) {
return
$this->linkRef(
$group,
@@ -289,7 +324,13 @@
$this->mRefs[$group][$key]['key']."-".++$this->mRefs[$group][$key]['count'],
$this->mRefs[$group][$key]['number'],
"-".$this->mRefs[$group][$key]['key']
- ); }
+ );
+ }
+ else {
+ $this->mRefs[$group][$key]['def'][++$this->mRefs[$group][$key]['count']] = true;
+ return "";
+ }
+ }
}
else
@@ -363,7 +404,7 @@
wfProfileOut( __METHOD__ .'-entries' );
wfProfileIn( __METHOD__ .'-parse' );
- // Live hack: parse() adds two newlines on WM, can't reproduce it locally -ævar
+ // Live hack: parse() adds two newlines on WM, can't reproduce it locally -&#230;var
$ret = rtrim( $this->parse( $prefix . $content . $suffix ), "\n" );
wfProfileOut( __METHOD__ .'-parse' );
wfProfileOut( __METHOD__ );
@@ -384,6 +425,7 @@
* @return string Wikitext
*/
function referencesFormatEntry( $key, $val ) {
+
// Anonymous reference
if ( ! is_array( $val ) )
return
@@ -414,30 +456,36 @@
// anonymous reference because displaying "1. 1.1 Ref text" is
// overkill and users frequently use named references when they
// don't need them for convenience
- else if ( $val['count'] === 0 )
+ else if ( $val['count'] === 0 ) {
+ if ( $val['def'] )
+ $ret = $this->error( 'cite_error_orphan_ref', $key );
+ else
+ $ret = ( $val['text'] != '' ? $val['text'] : $this->error( 'cite_error_references_no_text', $key ) );
return
wfMsgForContentNoTrans(
'cite_references_link_one',
$this->referencesKey( $key ."-" . $val['key'] ),
#$this->refKey( $key, $val['count'] ),
$this->refKey( $key, $val['key']."-".$val['count'] ),
- ( $val['text'] != '' ? $val['text'] : $this->error( 'cite_error_references_no_text', $key ) )
+ $ret
);
+ }
// Named references with >1 occurrences
else {
$links = array();
//for group handling, we have an extra key here.
- for ( $i = 0; $i <= $val['count']; ++$i ) {
+ for ( $i = 0, $j = 0; $i <= $val['count']; ++$i ) {
+ if ( ! $val['def'][$i] ) {
$links[] = wfMsgForContentNoTrans(
'cite_references_link_many_format',
$this->refKey( $key, $val['key']."-$i" ),
- $this->referencesFormatEntryNumericBacklinkLabel( $val['number'], $i, $val['count'] ),
- $this->referencesFormatEntryAlternateBacklinkLabel( $i )
+ $this->referencesFormatEntryNumericBacklinkLabel( $val['number'], $j, $i ),
+ $this->referencesFormatEntryAlternateBacklinkLabel( $j )
);
+ $j++;
+ }
}
-
$list = $this->listToText( $links );
-
return
wfMsgForContentNoTrans( 'cite_references_link_many',
$this->referencesKey( $key ."-" . $val['key'] ),

File Metadata

Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5461
Default Alt Text
Cite_body-def-2009-06-04.php.diff (8 KB)

Event Timeline