Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-conte.../plugins/smart-sl.../Nextend/Framewor.../Asset/Css/Less
File: LessCompiler.php
$groupPassed = true;
[500] Fix | Delete
} else {
[501] Fix | Delete
$groupPassed = false;
[502] Fix | Delete
break;
[503] Fix | Delete
}
[504] Fix | Delete
}
[505] Fix | Delete
[506] Fix | Delete
if ($groupPassed) break;
[507] Fix | Delete
}
[508] Fix | Delete
[509] Fix | Delete
if (!$groupPassed) {
[510] Fix | Delete
return false;
[511] Fix | Delete
}
[512] Fix | Delete
}
[513] Fix | Delete
[514] Fix | Delete
$numCalling = count($callingArgs);
[515] Fix | Delete
[516] Fix | Delete
if (empty($block->args)) {
[517] Fix | Delete
return $block->isVararg || $numCalling == 0;
[518] Fix | Delete
}
[519] Fix | Delete
[520] Fix | Delete
$i = -1; // no args
[521] Fix | Delete
// try to match by arity or by argument literal
[522] Fix | Delete
foreach ($block->args as $i => $arg) {
[523] Fix | Delete
switch ($arg[0]) {
[524] Fix | Delete
case "lit":
[525] Fix | Delete
if (empty($callingArgs[$i]) || !$this->eq($arg[1], $callingArgs[$i])) {
[526] Fix | Delete
return false;
[527] Fix | Delete
}
[528] Fix | Delete
break;
[529] Fix | Delete
case "arg":
[530] Fix | Delete
// no arg and no default value
[531] Fix | Delete
if (!isset($callingArgs[$i]) && !isset($arg[2])) {
[532] Fix | Delete
return false;
[533] Fix | Delete
}
[534] Fix | Delete
break;
[535] Fix | Delete
case "rest":
[536] Fix | Delete
$i--; // rest can be empty
[537] Fix | Delete
break 2;
[538] Fix | Delete
}
[539] Fix | Delete
}
[540] Fix | Delete
[541] Fix | Delete
if ($block->isVararg) {
[542] Fix | Delete
return true; // not having enough is handled above
[543] Fix | Delete
} else {
[544] Fix | Delete
$numMatched = $i + 1;
[545] Fix | Delete
[546] Fix | Delete
// greater than becuase default values always match
[547] Fix | Delete
return $numMatched >= $numCalling;
[548] Fix | Delete
}
[549] Fix | Delete
}
[550] Fix | Delete
[551] Fix | Delete
protected function patternMatchAll($blocks, $callingArgs) {
[552] Fix | Delete
$matches = null;
[553] Fix | Delete
foreach ($blocks as $block) {
[554] Fix | Delete
if ($this->patternMatch($block, $callingArgs)) {
[555] Fix | Delete
$matches[] = $block;
[556] Fix | Delete
}
[557] Fix | Delete
}
[558] Fix | Delete
[559] Fix | Delete
return $matches;
[560] Fix | Delete
}
[561] Fix | Delete
[562] Fix | Delete
// attempt to find blocks matched by path and args
[563] Fix | Delete
protected function findBlocks($searchIn, $path, $args, $seen = array()) {
[564] Fix | Delete
if ($searchIn == null) return null;
[565] Fix | Delete
if (isset($seen[$searchIn->id])) return null;
[566] Fix | Delete
$seen[$searchIn->id] = true;
[567] Fix | Delete
[568] Fix | Delete
$name = $path[0];
[569] Fix | Delete
[570] Fix | Delete
if (isset($searchIn->children[$name])) {
[571] Fix | Delete
$blocks = $searchIn->children[$name];
[572] Fix | Delete
if (count($path) == 1) {
[573] Fix | Delete
$matches = $this->patternMatchAll($blocks, $args);
[574] Fix | Delete
if (!empty($matches)) {
[575] Fix | Delete
// This will return all blocks that match in the closest
[576] Fix | Delete
// scope that has any matching block, like lessjs
[577] Fix | Delete
return $matches;
[578] Fix | Delete
}
[579] Fix | Delete
} else {
[580] Fix | Delete
$matches = array();
[581] Fix | Delete
foreach ($blocks as $subBlock) {
[582] Fix | Delete
$subMatches = $this->findBlocks($subBlock, array_slice($path, 1), $args, $seen);
[583] Fix | Delete
[584] Fix | Delete
if (!is_null($subMatches)) {
[585] Fix | Delete
foreach ($subMatches as $sm) {
[586] Fix | Delete
$matches[] = $sm;
[587] Fix | Delete
}
[588] Fix | Delete
}
[589] Fix | Delete
}
[590] Fix | Delete
[591] Fix | Delete
return count($matches) > 0 ? $matches : null;
[592] Fix | Delete
}
[593] Fix | Delete
}
[594] Fix | Delete
[595] Fix | Delete
if ($searchIn->parent === $searchIn) return null;
[596] Fix | Delete
[597] Fix | Delete
return $this->findBlocks($searchIn->parent, $path, $args, $seen);
[598] Fix | Delete
}
[599] Fix | Delete
[600] Fix | Delete
// sets all argument names in $args to either the default value
[601] Fix | Delete
// or the one passed in through $values
[602] Fix | Delete
protected function zipSetArgs($args, $values) {
[603] Fix | Delete
$i = 0;
[604] Fix | Delete
$assignedValues = array();
[605] Fix | Delete
foreach ($args as $a) {
[606] Fix | Delete
if ($a[0] == "arg") {
[607] Fix | Delete
if ($i < count($values) && !is_null($values[$i])) {
[608] Fix | Delete
$value = $values[$i];
[609] Fix | Delete
} elseif (isset($a[2])) {
[610] Fix | Delete
$value = $a[2];
[611] Fix | Delete
} else $value = null;
[612] Fix | Delete
[613] Fix | Delete
$value = $this->reduce($value);
[614] Fix | Delete
$this->set($a[1], $value);
[615] Fix | Delete
$assignedValues[] = $value;
[616] Fix | Delete
}
[617] Fix | Delete
$i++;
[618] Fix | Delete
}
[619] Fix | Delete
[620] Fix | Delete
// check for a rest
[621] Fix | Delete
$last = end($args);
[622] Fix | Delete
if (!empty($last) && $last[0] == "rest") {
[623] Fix | Delete
$rest = array_slice($values, count($args) - 1);
[624] Fix | Delete
$this->set($last[1], $this->reduce(array(
[625] Fix | Delete
"list",
[626] Fix | Delete
" ",
[627] Fix | Delete
$rest
[628] Fix | Delete
)));
[629] Fix | Delete
}
[630] Fix | Delete
[631] Fix | Delete
$this->env->arguments = $assignedValues;
[632] Fix | Delete
}
[633] Fix | Delete
[634] Fix | Delete
// compile a prop and update $lines or $blocks appropriately
[635] Fix | Delete
protected function compileProp($prop, $block, $out) {
[636] Fix | Delete
// set error position context
[637] Fix | Delete
$this->sourceLoc = isset($prop[-1]) ? $prop[-1] : -1;
[638] Fix | Delete
[639] Fix | Delete
switch ($prop[0]) {
[640] Fix | Delete
case 'assign':
[641] Fix | Delete
list(, $name, $value) = $prop;
[642] Fix | Delete
if ($name[0] == $this->vPrefix) {
[643] Fix | Delete
$this->set($name, $value);
[644] Fix | Delete
} else {
[645] Fix | Delete
$out->lines[] = $this->formatter->property($name, $this->compileValue($this->reduce($value)));
[646] Fix | Delete
}
[647] Fix | Delete
break;
[648] Fix | Delete
case 'block':
[649] Fix | Delete
list(, $child) = $prop;
[650] Fix | Delete
$this->compileBlock($child);
[651] Fix | Delete
break;
[652] Fix | Delete
case 'mixin':
[653] Fix | Delete
list(, $path, $args, $suffix) = $prop;
[654] Fix | Delete
[655] Fix | Delete
$args = array_map(array(
[656] Fix | Delete
$this,
[657] Fix | Delete
"reduce"
[658] Fix | Delete
), (array)$args);
[659] Fix | Delete
$mixins = $this->findBlocks($block, $path, $args);
[660] Fix | Delete
[661] Fix | Delete
if ($mixins === null) {
[662] Fix | Delete
// fwrite(STDERR,"failed to find block: ".implode(" > ", $path)."\n");
[663] Fix | Delete
break; // throw error here??
[664] Fix | Delete
}
[665] Fix | Delete
[666] Fix | Delete
foreach ($mixins as $mixin) {
[667] Fix | Delete
$haveScope = false;
[668] Fix | Delete
if (isset($mixin->parent->scope)) {
[669] Fix | Delete
$haveScope = true;
[670] Fix | Delete
$mixinParentEnv = $this->pushEnv();
[671] Fix | Delete
$mixinParentEnv->storeParent = $mixin->parent->scope;
[672] Fix | Delete
}
[673] Fix | Delete
[674] Fix | Delete
$haveArgs = false;
[675] Fix | Delete
if (isset($mixin->args)) {
[676] Fix | Delete
$haveArgs = true;
[677] Fix | Delete
$this->pushEnv();
[678] Fix | Delete
$this->zipSetArgs($mixin->args, $args);
[679] Fix | Delete
}
[680] Fix | Delete
[681] Fix | Delete
$oldParent = $mixin->parent;
[682] Fix | Delete
if ($mixin != $block) $mixin->parent = $block;
[683] Fix | Delete
[684] Fix | Delete
foreach ($this->sortProps($mixin->props) as $subProp) {
[685] Fix | Delete
if ($suffix !== null && $subProp[0] == "assign" && is_string($subProp[1]) && $subProp[1][0] != $this->vPrefix) {
[686] Fix | Delete
$subProp[2] = array(
[687] Fix | Delete
'list',
[688] Fix | Delete
' ',
[689] Fix | Delete
array(
[690] Fix | Delete
$subProp[2],
[691] Fix | Delete
array(
[692] Fix | Delete
'keyword',
[693] Fix | Delete
$suffix
[694] Fix | Delete
)
[695] Fix | Delete
)
[696] Fix | Delete
);
[697] Fix | Delete
}
[698] Fix | Delete
[699] Fix | Delete
$this->compileProp($subProp, $mixin, $out);
[700] Fix | Delete
}
[701] Fix | Delete
[702] Fix | Delete
$mixin->parent = $oldParent;
[703] Fix | Delete
[704] Fix | Delete
if ($haveArgs) $this->popEnv();
[705] Fix | Delete
if ($haveScope) $this->popEnv();
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
break;
[709] Fix | Delete
case 'raw':
[710] Fix | Delete
$out->lines[] = $prop[1];
[711] Fix | Delete
break;
[712] Fix | Delete
case "directive":
[713] Fix | Delete
list(, $name, $value) = $prop;
[714] Fix | Delete
$out->lines[] = "@$name " . $this->compileValue($this->reduce($value)) . ';';
[715] Fix | Delete
break;
[716] Fix | Delete
case "comment":
[717] Fix | Delete
$out->lines[] = $prop[1];
[718] Fix | Delete
break;
[719] Fix | Delete
case "import";
[720] Fix | Delete
list(, $importPath, $importId) = $prop;
[721] Fix | Delete
$importPath = $this->reduce($importPath);
[722] Fix | Delete
[723] Fix | Delete
if (!isset($this->env->imports)) {
[724] Fix | Delete
$this->env->imports = array();
[725] Fix | Delete
}
[726] Fix | Delete
[727] Fix | Delete
$result = $this->tryImport($importPath, $block, $out);
[728] Fix | Delete
[729] Fix | Delete
$this->env->imports[$importId] = $result === false ? array(
[730] Fix | Delete
false,
[731] Fix | Delete
"@import " . $this->compileValue($importPath) . ";"
[732] Fix | Delete
) : $result;
[733] Fix | Delete
[734] Fix | Delete
break;
[735] Fix | Delete
case "import_mixin":
[736] Fix | Delete
list(, $importId) = $prop;
[737] Fix | Delete
$import = $this->env->imports[$importId];
[738] Fix | Delete
if ($import[0] === false) {
[739] Fix | Delete
$out->lines[] = $import[1];
[740] Fix | Delete
} else {
[741] Fix | Delete
list(, $bottom, $parser, $importDir) = $import;
[742] Fix | Delete
$this->compileImportedProps($bottom, $block, $out, $parser, $importDir);
[743] Fix | Delete
}
[744] Fix | Delete
[745] Fix | Delete
break;
[746] Fix | Delete
default:
[747] Fix | Delete
$this->throwError("unknown op: {$prop[0]}\n");
[748] Fix | Delete
}
[749] Fix | Delete
}
[750] Fix | Delete
[751] Fix | Delete
[752] Fix | Delete
/**
[753] Fix | Delete
* Compiles a primitive value into a CSS property value.
[754] Fix | Delete
*
[755] Fix | Delete
* Values in lessphp are typed by being wrapped in arrays, their format is
[756] Fix | Delete
* typically:
[757] Fix | Delete
*
[758] Fix | Delete
* array(type, contents [, additional_contents]*)
[759] Fix | Delete
*
[760] Fix | Delete
* The input is expected to be reduced. This function will not work on
[761] Fix | Delete
* things like expressions and variables.
[762] Fix | Delete
*/
[763] Fix | Delete
protected function compileValue($value) {
[764] Fix | Delete
switch ($value[0]) {
[765] Fix | Delete
case 'list':
[766] Fix | Delete
// [1] - delimiter
[767] Fix | Delete
// [2] - array of values
[768] Fix | Delete
return implode($value[1], array_map(array(
[769] Fix | Delete
$this,
[770] Fix | Delete
'compileValue'
[771] Fix | Delete
), $value[2]));
[772] Fix | Delete
case 'raw_color':
[773] Fix | Delete
if (!empty($this->formatter->compressColors)) {
[774] Fix | Delete
return $this->compileValue($this->coerceColor($value));
[775] Fix | Delete
}
[776] Fix | Delete
[777] Fix | Delete
return $value[1];
[778] Fix | Delete
case 'keyword':
[779] Fix | Delete
// [1] - the keyword
[780] Fix | Delete
return $value[1];
[781] Fix | Delete
case 'number':
[782] Fix | Delete
list(, $num, $unit) = $value;
[783] Fix | Delete
// [1] - the number
[784] Fix | Delete
// [2] - the unit
[785] Fix | Delete
if ($this->numberPrecision !== null) {
[786] Fix | Delete
$num = round($num, $this->numberPrecision);
[787] Fix | Delete
}
[788] Fix | Delete
[789] Fix | Delete
return $num . $unit;
[790] Fix | Delete
case 'string':
[791] Fix | Delete
// [1] - contents of string (includes quotes)
[792] Fix | Delete
list(, $delim, $content) = $value;
[793] Fix | Delete
foreach ($content as &$part) {
[794] Fix | Delete
if (is_array($part)) {
[795] Fix | Delete
$part = $this->compileValue($part);
[796] Fix | Delete
}
[797] Fix | Delete
}
[798] Fix | Delete
[799] Fix | Delete
return $delim . implode($content) . $delim;
[800] Fix | Delete
case 'color':
[801] Fix | Delete
// [1] - red component (either number or a %)
[802] Fix | Delete
// [2] - green component
[803] Fix | Delete
// [3] - blue component
[804] Fix | Delete
// [4] - optional alpha component
[805] Fix | Delete
list(, $r, $g, $b) = $value;
[806] Fix | Delete
$r = round($r);
[807] Fix | Delete
$g = round($g);
[808] Fix | Delete
$b = round($b);
[809] Fix | Delete
[810] Fix | Delete
if (count($value) == 5 && $value[4] != 1) { // rgba
[811] Fix | Delete
return 'rgba(' . $r . ',' . $g . ',' . $b . ',' . $value[4] . ')';
[812] Fix | Delete
}
[813] Fix | Delete
[814] Fix | Delete
$h = sprintf("#%02x%02x%02x", $r, $g, $b);
[815] Fix | Delete
[816] Fix | Delete
if (!empty($this->formatter->compressColors)) {
[817] Fix | Delete
// Converting hex color to short notation (e.g. #003399 to #039)
[818] Fix | Delete
if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) {
[819] Fix | Delete
$h = '#' . $h[1] . $h[3] . $h[5];
[820] Fix | Delete
}
[821] Fix | Delete
}
[822] Fix | Delete
[823] Fix | Delete
return $h;
[824] Fix | Delete
[825] Fix | Delete
case 'function':
[826] Fix | Delete
list(, $name, $args) = $value;
[827] Fix | Delete
[828] Fix | Delete
return $name . '(' . $this->compileValue($args) . ')';
[829] Fix | Delete
default: // assumed to be unit
[830] Fix | Delete
$this->throwError("unknown value type: $value[0]");
[831] Fix | Delete
}
[832] Fix | Delete
}
[833] Fix | Delete
[834] Fix | Delete
protected function lib_isnumber($value) {
[835] Fix | Delete
return $this->toBool($value[0] == "number");
[836] Fix | Delete
}
[837] Fix | Delete
[838] Fix | Delete
protected function lib_isstring($value) {
[839] Fix | Delete
return $this->toBool($value[0] == "string");
[840] Fix | Delete
}
[841] Fix | Delete
[842] Fix | Delete
protected function lib_iscolor($value) {
[843] Fix | Delete
return $this->toBool($this->coerceColor($value));
[844] Fix | Delete
}
[845] Fix | Delete
[846] Fix | Delete
protected function lib_iskeyword($value) {
[847] Fix | Delete
return $this->toBool($value[0] == "keyword");
[848] Fix | Delete
}
[849] Fix | Delete
[850] Fix | Delete
protected function lib_ispixel($value) {
[851] Fix | Delete
return $this->toBool($value[0] == "number" && $value[2] == "px");
[852] Fix | Delete
}
[853] Fix | Delete
[854] Fix | Delete
protected function lib_ispercentage($value) {
[855] Fix | Delete
return $this->toBool($value[0] == "number" && $value[2] == "%");
[856] Fix | Delete
}
[857] Fix | Delete
[858] Fix | Delete
protected function lib_isem($value) {
[859] Fix | Delete
return $this->toBool($value[0] == "number" && $value[2] == "em");
[860] Fix | Delete
}
[861] Fix | Delete
[862] Fix | Delete
protected function lib_isrem($value) {
[863] Fix | Delete
return $this->toBool($value[0] == "number" && $value[2] == "rem");
[864] Fix | Delete
}
[865] Fix | Delete
[866] Fix | Delete
protected function lib_rgbahex($color) {
[867] Fix | Delete
$color = $this->coerceColor($color);
[868] Fix | Delete
if (is_null($color)) $this->throwError("color expected for rgbahex");
[869] Fix | Delete
[870] Fix | Delete
return sprintf("#%02x%02x%02x%02x", isset($color[4]) ? $color[4] * 255 : 255, $color[1], $color[2], $color[3]);
[871] Fix | Delete
}
[872] Fix | Delete
[873] Fix | Delete
protected function lib_argb($color) {
[874] Fix | Delete
return $this->lib_rgbahex($color);
[875] Fix | Delete
}
[876] Fix | Delete
[877] Fix | Delete
// utility func to unquote a string
[878] Fix | Delete
protected function lib_e($arg) {
[879] Fix | Delete
switch ($arg[0]) {
[880] Fix | Delete
case "list":
[881] Fix | Delete
$items = $arg[2];
[882] Fix | Delete
if (isset($items[0])) {
[883] Fix | Delete
return $this->lib_e($items[0]);
[884] Fix | Delete
}
[885] Fix | Delete
[886] Fix | Delete
return self::$defaultValue;
[887] Fix | Delete
case "string":
[888] Fix | Delete
$arg[1] = "";
[889] Fix | Delete
[890] Fix | Delete
return $arg;
[891] Fix | Delete
case "keyword":
[892] Fix | Delete
return $arg;
[893] Fix | Delete
default:
[894] Fix | Delete
return array(
[895] Fix | Delete
"keyword",
[896] Fix | Delete
$this->compileValue($arg)
[897] Fix | Delete
);
[898] Fix | Delete
}
[899] Fix | Delete
}
[900] Fix | Delete
[901] Fix | Delete
protected function lib__sprintf($args) {
[902] Fix | Delete
if ($args[0] != "list") return $args;
[903] Fix | Delete
$values = $args[2];
[904] Fix | Delete
$string = array_shift($values);
[905] Fix | Delete
$template = $this->compileValue($this->lib_e($string));
[906] Fix | Delete
[907] Fix | Delete
$i = 0;
[908] Fix | Delete
if (preg_match_all('/%[dsa]/', $template, $m)) {
[909] Fix | Delete
foreach ($m[0] as $match) {
[910] Fix | Delete
$val = isset($values[$i]) ? $this->reduce($values[$i]) : array(
[911] Fix | Delete
'keyword',
[912] Fix | Delete
''
[913] Fix | Delete
);
[914] Fix | Delete
[915] Fix | Delete
// lessjs compat, renders fully expanded color, not raw color
[916] Fix | Delete
if ($color = $this->coerceColor($val)) {
[917] Fix | Delete
$val = $color;
[918] Fix | Delete
}
[919] Fix | Delete
[920] Fix | Delete
$i++;
[921] Fix | Delete
$rep = $this->compileValue($this->lib_e($val));
[922] Fix | Delete
$template = preg_replace('/' . self::preg_quote($match) . '/', $rep, $template, 1);
[923] Fix | Delete
}
[924] Fix | Delete
}
[925] Fix | Delete
[926] Fix | Delete
$d = $string[0] == "string" ? $string[1] : '"';
[927] Fix | Delete
[928] Fix | Delete
return array(
[929] Fix | Delete
"string",
[930] Fix | Delete
$d,
[931] Fix | Delete
array($template)
[932] Fix | Delete
);
[933] Fix | Delete
}
[934] Fix | Delete
[935] Fix | Delete
protected function lib_floor($arg) {
[936] Fix | Delete
$value = $this->assertNumber($arg);
[937] Fix | Delete
[938] Fix | Delete
return array(
[939] Fix | Delete
"number",
[940] Fix | Delete
floor($value),
[941] Fix | Delete
$arg[2]
[942] Fix | Delete
);
[943] Fix | Delete
}
[944] Fix | Delete
[945] Fix | Delete
protected function lib_ceil($arg) {
[946] Fix | Delete
$value = $this->assertNumber($arg);
[947] Fix | Delete
[948] Fix | Delete
return array(
[949] Fix | Delete
"number",
[950] Fix | Delete
ceil($value),
[951] Fix | Delete
$arg[2]
[952] Fix | Delete
);
[953] Fix | Delete
}
[954] Fix | Delete
[955] Fix | Delete
protected function lib_round($arg) {
[956] Fix | Delete
$value = $this->assertNumber($arg);
[957] Fix | Delete
[958] Fix | Delete
return array(
[959] Fix | Delete
"number",
[960] Fix | Delete
round($value),
[961] Fix | Delete
$arg[2]
[962] Fix | Delete
);
[963] Fix | Delete
}
[964] Fix | Delete
[965] Fix | Delete
protected function lib_unit($arg) {
[966] Fix | Delete
if ($arg[0] == "list") {
[967] Fix | Delete
list($number, $newUnit) = $arg[2];
[968] Fix | Delete
[969] Fix | Delete
return array(
[970] Fix | Delete
"number",
[971] Fix | Delete
$this->assertNumber($number),
[972] Fix | Delete
$this->compileValue($this->lib_e($newUnit))
[973] Fix | Delete
);
[974] Fix | Delete
} else {
[975] Fix | Delete
return array(
[976] Fix | Delete
"number",
[977] Fix | Delete
$this->assertNumber($arg),
[978] Fix | Delete
""
[979] Fix | Delete
);
[980] Fix | Delete
}
[981] Fix | Delete
}
[982] Fix | Delete
[983] Fix | Delete
/**
[984] Fix | Delete
* Helper function to get arguments for color manipulation functions.
[985] Fix | Delete
* takes a list that contains a color like thing and a percentage
[986] Fix | Delete
*/
[987] Fix | Delete
protected function colorArgs($args) {
[988] Fix | Delete
if ($args[0] != 'list' || count($args[2]) < 2) {
[989] Fix | Delete
return array(
[990] Fix | Delete
array(
[991] Fix | Delete
'color',
[992] Fix | Delete
0,
[993] Fix | Delete
0,
[994] Fix | Delete
0
[995] Fix | Delete
),
[996] Fix | Delete
0
[997] Fix | Delete
);
[998] Fix | Delete
}
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function