Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4118077
ReferencesData.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
ReferencesData.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
Cite\Parsoid
;
use
Wikimedia\Parsoid\NodeData\DataMwError
;
/**
* @license GPL-2.0-or-later
*/
class
ReferencesData
{
/**
* Global, auto-incrementing sequence number for all <ref>, no matter which group, starting
* from 1. Reflects the total number of <ref>.
*/
private
int
$refSequence
=
0
;
/** @var array<string,RefGroup> indexed by group name */
private
array
$refGroups
=
[];
/** @var array<string,list<DataMwError>> */
public
array
$embeddedErrors
=
[];
/** @var array<?string> */
private
array
$embeddedContentStack
=
[];
/**
* The current group name while we are in <references>, no matter how deeply nested. Null when
* parsing <ref> outside of <references>. Warning, an empty string is a valid group name!
*/
public
?
string
$referencesGroup
=
null
;
private
int
$nestedRefsDepth
=
0
;
/**
* True when we are inside of <references>, but not when we are in a deeper nested <ref>
*/
public
function
inReferenceList
():
bool
{
return
$this
->
referenceListGroup
()
!==
null
;
}
/**
* The default group name while we are inside of <references>. Null when we are outside of
* <references> or in a deeper nested <ref>
*/
public
function
referenceListGroup
():
?
string
{
return
$this
->
nestedRefsDepth
>
0
?
null
:
$this
->
referencesGroup
;
}
/**
* True when we are currently parsing <ref> that are embedded in some <…> tag
*/
public
function
inEmbeddedContent
():
bool
{
return
$this
->
inReferenceList
()
||
$this
->
embeddedContentStack
;
}
public
function
pushEmbeddedContentFlag
(
?
string
$needle
=
null
):
void
{
array_push
(
$this
->
embeddedContentStack
,
$needle
);
}
public
function
popEmbeddedContentFlag
():
void
{
array_pop
(
$this
->
embeddedContentStack
);
}
public
function
inIndicatorContext
():
bool
{
return
in_array
(
'indicator'
,
$this
->
embeddedContentStack
,
true
);
}
public
function
incrementRefDepth
():
void
{
$this
->
nestedRefsDepth
++;
}
public
function
decrementRefDepth
():
void
{
$this
->
nestedRefsDepth
--;
}
public
function
getOrCreateRefGroup
(
string
$groupName
):
RefGroup
{
$this
->
refGroups
[
$groupName
]
??=
new
RefGroup
(
$groupName
);
return
$this
->
refGroups
[
$groupName
];
}
public
function
lookupRefGroup
(
string
$groupName
):
?
RefGroup
{
return
$this
->
refGroups
[
$groupName
]
??
null
;
}
public
function
removeRefGroup
(
string
$groupName
):
void
{
// '' is a valid group (the default group)
unset
(
$this
->
refGroups
[
$groupName
]
);
}
public
function
addRef
(
RefGroup
$group
,
string
$refName
,
string
$refDir
,
?
string
$details
=
null
):
RefGroupItem
{
$ref
=
new
RefGroupItem
();
if
(
$details
===
null
)
{
// FIXME: This doesn't count correctly when <ref follow=…> is used on the page
$ref
->
numberInGroup
=
$group
->
getNextIndex
();
$ref
->
name
=
$refName
?:
null
;
}
else
{
$mainRef
=
$group
->
lookupRefByName
(
$refName
)
??
// TODO: dir could be different for the main
$this
->
addRef
(
$group
,
$refName
,
$refDir
);
$ref
->
numberInGroup
=
$mainRef
->
numberInGroup
;
$ref
->
subrefIndex
=
$group
->
getNextSubrefSequence
(
$refName
);
}
$ref
->
dir
=
$refDir
;
$ref
->
group
=
$group
->
name
;
$ref
->
globalId
=
++
$this
->
refSequence
;
$group
->
refs
[]
=
$ref
;
if
(
$ref
->
name
)
{
$group
->
indexByName
[
$ref
->
name
]
=
$ref
;
}
return
$ref
;
}
/** @return array<string,RefGroup> */
public
function
getRefGroups
():
array
{
return
$this
->
refGroups
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 02:33 (2 w, 2 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
de/a0/00cd2d42f853ac6543e03d493428
Default Alt Text
ReferencesData.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment