Browse Source

implement skipTags method

main 0.5.0
yggverse 8 months ago
parent
commit
75685f3737
  1. 19
      README.md
  2. 85
      src/Gemtext/Body.php

19
README.md

@ -96,6 +96,25 @@ var_dump( @@ -96,6 +96,25 @@ var_dump(
);
```
#### Body::skipTags
Strip gemini tags from Gemini document
```
var_dump(
$body->skipTags() // strip all tags
);
var_dump(
$body->skipTags(
[ // 1- and 2- level headers only
"##",
"###"
]
)
);
```
### Link
Inline links parser.

85
src/Gemtext/Body.php

@ -105,4 +105,89 @@ class Body @@ -105,4 +105,89 @@ class Body
return $matches;
}
public function skipTags(array $tags = []): string
{
$lines = [];
foreach ($this->_lines as $line)
{
$line = trim(
$line
);
if ($tags)
{
foreach ($tags as $tag)
{
if(!in_array($tag, ['#', '##', '###', '=>', '*', '```']))
{
continue;
}
switch (true)
{
case str_starts_with($line, '#'):
$line = preg_replace(
sprintf(
'/^%s([^#]+)/ui',
$tag
),
'$1',
$line
);
break;
case str_starts_with($line, '*'):
$line = preg_replace(
'/^\*(.*)/ui',
'$1',
$line
);
break;
default:
$line = preg_replace(
sprintf(
'/^%s(.*)/ui',
$tag
),
'$1',
$line
);
}
}
}
else
{
$line = preg_replace(
[
'/^#([^#]+)/ui',
'/^##([^#]+)/ui',
'/^###([^#]+)/ui',
'/^=>(.*)/ui',
'/^\*(.*)/ui',
'/^```(.*)/ui',
],
'$1',
$line
);
}
$lines[] = trim(
$line
);
}
return implode(
PHP_EOL,
$lines
);
}
}
Loading…
Cancel
Save