packages feed

markdown2svg-0.0.1.7: src/SepWords.hs

module SepWords (
	splitWords,
	sepWords
) where

import Data.Char

splitWords :: Int -> String -> (String, String)
splitWords = flip splitWords_ 0

splitWords_ :: Int -> Int -> String -> (String, String)
splitWords_ _ _ "" = ("", "")
splitWords_ n k (c : c'@('。') : cs)
	| k > n = ([c, c'], cs)
	| otherwise = let (l, ls) = splitWords_ n (k + 4) cs in (c : c' : l, ls)
splitWords_ n k (c : cs)
	| isSpace c && k > n = ("", cs)
	| not (isAscii c) && k > n = ([c], cs)
	| not $ isAscii c = let (l, ls) = splitWords_ n (k + 2) cs in (c : l, ls)
	| otherwise = let (l, ls) = splitWords_ n (k + 1) cs in (c : l, ls)

sepWords :: Int -> String -> [String]
sepWords = flip sepWords_ 0

sepWords_ :: Int -> Int -> String -> [String]
sepWords_ _ _ "" = [""]
sepWords_ n k (c : c'@('。') : cs)
	| k > n = [c, c'] : sepWords_ n 0 cs
	| otherwise = let l : ls = sepWords_ n (k + 4) cs in (c : c' : l) : ls
sepWords_ n k (c : cs)
	| isSpace c && k > n = "" : sepWords_ n 0 cs
	| not (isAscii c) && k > n = [c] : sepWords_ n 0 cs
	| not $ isAscii c = let l : ls = sepWords_ n (k + 2) cs in (c : l) : ls
	| otherwise = let l : ls = sepWords_ n (k + 1) cs in (c : l) : ls