Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4101480
TexUtil.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
TexUtil.php
View Options
<?php
declare
(
strict_types
=
1
);
namespace
MediaWiki\Extension\Math\WikiTexVC
;
use
InvalidArgumentException
;
/**
* @method false|mixed callback(string $getArg)
* @method false|mixed is_literal(string $litArg)
* @method false|mixed latex_function_names(string $getArg)
* @method false|mixed nullary_macro(string $litArg)
* @method false|mixed operator(string $getArg)
* @method false|mixed cancel_required(string $getArg)
* @method false|mixed nullary_macro_in_mbox(string $getArg)
* @method false|mixed unicode_char(string $getArg)
* @method false|mixed identifier(string $getArg)
* @method false|mixed delimiter(string $getArg)
* @method false|string mathchar(string $getArg)
* @method false|string color(string $getArg)
*/
class
TexUtil
{
/** @var self|null */
private
static
$instance
=
null
;
/** @var array<string,true> */
private
$allFunctions
;
/** @var array[] */
private
$baseElements
;
/**
* Loads the file texutil.json
* allFunctions holds the root-level function keys
* other objects are second level elements and hold all functions which are assigned to this second level elements
*/
private
function
__construct
()
{
$jsonContent
=
$this
->
getJSON
();
// dynamically create functions from the content
$this
->
allFunctions
=
[];
$this
->
baseElements
=
[];
$this
->
allFunctions
[
"
\\
begin"
]
=
true
;
$this
->
allFunctions
[
"
\\
end"
]
=
true
;
foreach
(
$jsonContent
as
$key
=>
$value
)
{
// Adding all basic elements as functions
foreach
(
$value
as
$elementKey
=>
$element
)
{
if
(
!
array_key_exists
(
$elementKey
,
$this
->
baseElements
)
)
{
$this
->
baseElements
[
$elementKey
]
=
[];
$this
->
baseElements
[
$elementKey
][
$key
]
=
$element
;
}
else
{
if
(
!
array_key_exists
(
$key
,
$this
->
baseElements
[
$elementKey
]
)
)
{
$this
->
baseElements
[
$elementKey
][
$key
]
=
$element
;
}
}
}
// Adding function to all functions
$this
->
allFunctions
[
$key
]
=
true
;
}
}
public
static
function
removeInstance
()
{
self
::
$instance
=
null
;
}
public
static
function
getInstance
():
TexUtil
{
if
(
self
::
$instance
==
null
)
{
self
::
$instance
=
new
TexUtil
();
}
return
self
::
$instance
;
}
/**
* Returning the base elements array.
* This is only used for testing in TexUtilTest.php.
* @return array
*/
public
function
getBaseElements
()
{
return
$this
->
baseElements
;
}
/**
* Getting an element by key in allFunctions.
* If the key is defined, return true if not false.
* @param string $key string to check in allFunctions
* @return bool
*/
public
function
getAllFunctionsAt
(
string
$key
)
{
if
(
array_key_exists
(
$key
,
$this
->
allFunctions
)
)
{
return
true
;
}
else
{
return
false
;
}
}
/**
* Allows to directly call functions defined in from the json-file.
* @param mixed $func
* @param mixed $params
* @return false|mixed
*/
public
function
__call
(
$func
,
$params
)
{
if
(
!
array_key_exists
(
$func
,
$this
->
baseElements
)
)
{
throw
new
InvalidArgumentException
(
"Function not defined in json "
.
$func
);
}
$currentFunction
=
$this
->
baseElements
[
$func
];
if
(
array_key_exists
(
$params
[
0
],
$currentFunction
)
)
{
return
$currentFunction
[
$params
[
0
]];
}
return
false
;
}
/**
* Reads the json file to an object
* @return array
*/
private
function
getJSON
()
{
$file
=
self
::
getJsonFile
();
$json
=
json_decode
(
$file
,
true
);
return
$json
;
}
/**
* @return false|string
*/
public
static
function
getJsonFile
()
{
return
file_get_contents
(
__DIR__
.
'/texutil.json'
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 16:58 (3 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7a/82/be1bf879a0d2da2b0ffb20e05fe5
Default Alt Text
TexUtil.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment