Skip to content

Commit

Permalink
Bold and lists
Browse files Browse the repository at this point in the history
  • Loading branch information
eiriksm committed Sep 30, 2024
1 parent 8b950e8 commit 2a6b47b
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/Transformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,54 @@ class Transformer
public function transform(string $data) : string
{
$data = $this->processWeblinks($data);
$data = $this->processBulletedLists($data);
$data = $this->replaceTags($data, 'bold', 'strong');
$data = $this->processNumberedLists($data);
return $data;
}

public function processBulletedLists(string $data) : string
{
// The changes should be like this. An input would be
// <list listType="bulleted"><listItem>First bullet</listItem><listItem>Second bullet</listItem></list>.
// And then the output should become
// <ul><li>First bullet</li><li>Second bullet</li></ul>.
return $this->processListType($data, 'bulleted', 'ul');
}

public function processNumberedLists(string $data) : string
{
// The changes should be like this. An input would be
// <list listType="numbered"><listItem>First bullet</listItem><listItem>Second bullet</listItem></list>.
// And then the output should become
// <ol><li>First bullet</li><li>Second bullet</li></ol>.
return $this->processListType($data, 'numbered', 'ol');
}

protected function processListType(string $data, $list_type, $replacement_tag)
{
// First find the surrounding text of the list.
$regex = '<list listType="' . $list_type . '">([\S\s]*?)<\/list>';
$match = [];
preg_match_all('/' . $regex . '/', $data, $match);
if (empty($match[0])) {
return $data;
}
foreach ($match[0] as $key => $value) {
$inside = $this->replaceTags($match[1][$key], 'listItem', 'li');
$data = str_replace($value, '<' . $replacement_tag . '>' . $inside . '</' . $replacement_tag . '>', $data);
}
return $data;
}

public function replaceTags(string $data, $tag, $replacement_tag) : string
{
$data = str_replace('<' . $tag . '>', '<' . $replacement_tag . '>', $data);
$data = str_replace('</' . $tag . '>', '</' . $replacement_tag . '>', $data);
// Also self closing tags in a couple of variations.
$self_closing_replacement = '<' . $replacement_tag . ' />';
$data = str_replace('<' . $tag . ' />', $self_closing_replacement, $data);
$data = str_replace('<' . $tag . '/>', $self_closing_replacement, $data);
return $data;
}

Expand Down
8 changes: 8 additions & 0 deletions tests/assets/cases.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,13 @@
{
"input": "Vi viser til <webLink><href>https://www.example.com</href><linkName>gjeldende forskrift og tilhørende retningslinjer.</linkName></webLink>",
"expected": "Vi viser til <a rel=\"nofollow\" href=\"https://www.example.com\">gjeldende forskrift og tilhørende retningslinjer.</a>"
},
{
"input": "<p><bold>Kunnskap</bold></p><p>Etter fullført studium skal kandidaten</p><list listType=\"bulleted\"><listItem>ha bred kunnskap om relevante lover og forskrifter samt internasjonale avtaler</listItem><listItem>ha grunnleggende innsikt i økologi, naturregistrering og overvåkning</listItem><listItem>ha grunnleggende kunnskap om norsk flora og fauna</listItem><listItem>ha kunnskap om skjøtsel- og tilretteleggingstiltak </listItem></list><p><bold>Ferdigheter</bold></p><p>Etter fullført studium skal kandidaten</p><list listType=\"bulleted\"><listItem>kunne planlegge og gjennomføre ulike typer oppsynsvirksomhet</listItem><listItem>kunne anvende lovbestemmelser som regulerer oppsynsvirksomhet og forvaltning av naturområder og kulturminner</listItem><listItem>vise god innsikt i fagets yrkesetikk og evne til å reflektere over utøvelsen av arbeidsoppgaver knyttet til oppsynsarbeidet</listItem><listItem>være i stand til å vurdere sikker ferdsel, alene eller som leder av en gruppe, til ulike årstider og i ulike naturtyper</listItem><listItem>være i stand til å identifisere ulike typer kulturminner</listItem><listItem>kunne gi veiledning og informasjon om natur og kulturminner</listItem></list><p><bold>Generell kompetanse</bold></p><p>Etter fullført studium skal kandidaten</p><list listType=\"bulleted\"><listItem>ha innsikt i ulike oppsynstjenester knyttet til natur og kulturminner, herunder myndighet, rapportering og yrkesetikk</listItem><listItem>forstå relevante lovbestemmelser som gjør det mulig å gjennomføre kontrollfunksjoner i oppsynsarbeidet</listItem><listItem>forstå fagets etiske utfordringer</listItem></list>",
"expected": "<p><strong>Kunnskap</strong></p><p>Etter fullført studium skal kandidaten</p><ul><li>ha bred kunnskap om relevante lover og forskrifter samt internasjonale avtaler</li><li>ha grunnleggende innsikt i økologi, naturregistrering og overvåkning</li><li>ha grunnleggende kunnskap om norsk flora og fauna</li><li>ha kunnskap om skjøtsel- og tilretteleggingstiltak </li></ul><p><strong>Ferdigheter</strong></p><p>Etter fullført studium skal kandidaten</p><ul><li>kunne planlegge og gjennomføre ulike typer oppsynsvirksomhet</li><li>kunne anvende lovbestemmelser som regulerer oppsynsvirksomhet og forvaltning av naturområder og kulturminner</li><li>vise god innsikt i fagets yrkesetikk og evne til å reflektere over utøvelsen av arbeidsoppgaver knyttet til oppsynsarbeidet</li><li>være i stand til å vurdere sikker ferdsel, alene eller som leder av en gruppe, til ulike årstider og i ulike naturtyper</li><li>være i stand til å identifisere ulike typer kulturminner</li><li>kunne gi veiledning og informasjon om natur og kulturminner</li></ul><p><strong>Generell kompetanse</strong></p><p>Etter fullført studium skal kandidaten</p><ul><li>ha innsikt i ulike oppsynstjenester knyttet til natur og kulturminner, herunder myndighet, rapportering og yrkesetikk</li><li>forstå relevante lovbestemmelser som gjør det mulig å gjennomføre kontrollfunksjoner i oppsynsarbeidet</li><li>forstå fagets etiske utfordringer</li></ul>"
},
{
"input": "<list listType=\"numbered\"><listItem>Førerrett for klasse S i minst tre år</listItem><listItem>Godkjenning som trafikklærer eller pedagogisk utdanning som tilsvarer kravene til lærere i det offentlige skoleverk. </listItem></list><p>Søkere som ikke fyller kravet til punkt 2, men er tilknyttet kursarrangør som driver opplæring klasse S kan få innvilget opptak om de fremlegger dokumentasjon fra kursarrangør som viser at de har relevant opplæring og erfaring for å bli instruktør klasse S. Søker må i tillegg dokumentere generell studiekompetanse eller realkompetanse.</p>",
"expected": "<ol><li>Førerrett for klasse S i minst tre år</li><li>Godkjenning som trafikklærer eller pedagogisk utdanning som tilsvarer kravene til lærere i det offentlige skoleverk. </li></ol><p>Søkere som ikke fyller kravet til punkt 2, men er tilknyttet kursarrangør som driver opplæring klasse S kan få innvilget opptak om de fremlegger dokumentasjon fra kursarrangør som viser at de har relevant opplæring og erfaring for å bli instruktør klasse S. Søker må i tillegg dokumentere generell studiekompetanse eller realkompetanse.</p>"
}
]

0 comments on commit 2a6b47b

Please sign in to comment.