listeBis :: Eq a => a -> [a] -> [a] listeBis _ [] = [] listeBis e (x:xs) | e == x = [x] | otherwise = x : listeBis e xs
anfKlammer :: (Eq a, Show a) => a -> a -> [a] -> [a] anfKlammer _ _ [] = [] anfKlammer o s (x:xs) | notInList s xs = error("Uebungsblatt_06.anfKlammer: Klammerungsfehler: " ++ show (xs) ++ " enthält die schließende Klammer " ++ show s ++ " nicht.") | o == x = x : listeBis s xs | otherwise = error ("Uebungsblatt_06.anfKlammer: Klammerungsfehler: " ++ show (x:xs) ++ " beginnt nicht mit " ++ show o ++ ".")
trenneAnfKlammernAb :: String -> String -> Char -> [String] -> [[String]] trenneAnfKlammernAb _ _ _ [] = [[]] trenneAnfKlammernAb o s a (x:xs) | a == '1' = if x == o && inList s xs then let ak = anfKlammer o s (x:xs) in ak : [drop (length ak - 1) xs] else [x:xs] | a == '*' = if x == o && inList s xs then let ak = anfKlammer o s (x:xs) in ak : trenneAnfKlammernAb o s a (drop (length ak - 1) xs) else [x:xs] | a == '+' = if x == o && inList s xs then let ak = anfKlammer o s (x:xs) in ak : trenneAnfKlammernAb o s '*' (drop (length ak - 1) xs) else error ("Uebungsblatt_06.trenneAnfKlammernAb: Aktion " ++ show a ++ ": Klammerpaar " ++ show o ++ " - " ++ show s ++ " nicht in " ++ show (x:xs) ++ " enthalten.") | otherwise = error ("Uebungsblatt_06.trenneAnfKlammernAb: Aktion " ++ show a ++ " nicht definiert.")
hatBodyKlasse _ = True hatHeadKlasse _ = True
checkHTML :: String -> Bool checkHTML s = let w = words s i = klammerInhalt w in isHtmlKlammer w && hatHeadKlasse i && hatBodyKlasse i