module FP.Console where import FP.Core hiding (reset) import FP.Pretty import FP.Free import System.IO.Unsafe leader :: String leader = "\ESC[" sgrCloser :: String sgrCloser = "m" reset :: String reset = "0" fgCode :: Color256 -> String fgCode = (++) "38;5;" . toString bgCode :: Color256 -> String bgCode = (++) "48;5;" . toString ulCode :: String ulCode = "4" bdCode :: String bdCode = "1" applyFormat :: Format -> String -> String applyFormat (Format fg bg ul bd) s = concat [ leader , concat $ intersperse ";" $ mconcat [ liftMaybeZero $ fgCode ^$ fg , liftMaybeZero $ bgCode ^$ bg , guard ul >> return ulCode , guard bd >> return bdCode ] , sgrCloser , s , leader , reset , sgrCloser ] formatOut :: POut -> String formatOut (MonoidFunctorElem o) = formatChunk o formatOut MFNull = "" formatOut (o1 :+++: o2) = formatOut o1 ++ formatOut o2 formatOut (MFApply (fmt, o)) = applyFormat fmt $ formatOut o pprintWith :: (Pretty a) => (Doc -> Doc) -> a -> IO () pprintWith f = print . formatOut . execDoc . f . pretty pprintWidth :: (Pretty a) => Int -> a -> IO () pprintWidth = pprintWith . localSetL maxColumnWidthL pprintRibbon :: (Pretty a) => Int -> a -> IO () pprintRibbon = pprintWith . localSetL maxRibbonWidthL pprint :: (Pretty a) => a -> IO () pprint = pprintWith id pprintDoc :: Doc -> IO () pprintDoc = pprint ptrace :: (Pretty a) => a -> b -> b ptrace a b = unsafePerformIO $ do pprint a return b -- HTML htmlColorFrom256 :: [(Int, String)] -- {{{ htmlColorFrom256 = [ (000, "#000000") , (001, "#800000") , (002, "#008000") , (003, "#808000") , (004, "#000080") , (005, "#800080") , (006, "#008080") , (007, "#c0c0c0") , (008, "#808080") , (009, "#ff0000") , (010, "#00ff00") , (011, "#ffff00") , (012, "#0000ff") , (013, "#ff00ff") , (014, "#00ffff") , (015, "#ffffff") , (016, "#000000") , (017, "#00005f") , (018, "#000087") , (019, "#0000af") , (020, "#0000d7") , (021, "#0000ff") , (022, "#005f00") , (023, "#005f5f") , (024, "#005f87") , (025, "#005faf") , (026, "#005fd7") , (027, "#005fff") , (028, "#008700") , (029, "#00875f") , (030, "#008787") , (031, "#0087af") , (032, "#0087d7") , (033, "#0087ff") , (034, "#00af00") , (035, "#00af5f") , (036, "#00af87") , (037, "#00afaf") , (038, "#00afd7") , (039, "#00afff") , (040, "#00d700") , (041, "#00d75f") , (042, "#00d787") , (043, "#00d7af") , (044, "#00d7d7") , (045, "#00d7ff") , (046, "#00ff00") , (047, "#00ff5f") , (048, "#00ff87") , (049, "#00ffaf") , (050, "#00ffd7") , (051, "#00ffff") , (052, "#5f0000") , (053, "#5f005f") , (054, "#5f0087") , (055, "#5f00af") , (056, "#5f00d7") , (057, "#5f00ff") , (058, "#5f5f00") , (059, "#5f5f5f") , (060, "#5f5f87") , (061, "#5f5faf") , (062, "#5f5fd7") , (063, "#5f5fff") , (064, "#5f8700") , (065, "#5f875f") , (066, "#5f8787") , (067, "#5f87af") , (068, "#5f87d7") , (069, "#5f87ff") , (070, "#5faf00") , (071, "#5faf5f") , (072, "#5faf87") , (073, "#5fafaf") , (074, "#5fafd7") , (075, "#5fafff") , (076, "#5fd700") , (077, "#5fd75f") , (078, "#5fd787") , (079, "#5fd7af") , (080, "#5fd7d7") , (081, "#5fd7ff") , (082, "#5fff00") , (083, "#5fff5f") , (084, "#5fff87") , (085, "#5fffaf") , (086, "#5fffd7") , (087, "#5fffff") , (088, "#870000") , (089, "#87005f") , (090, "#870087") , (091, "#8700af") , (092, "#8700d7") , (093, "#8700ff") , (094, "#875f00") , (095, "#875f5f") , (096, "#875f87") , (097, "#875faf") , (098, "#875fd7") , (099, "#875fff") , (100, "#878700") , (101, "#87875f") , (102, "#878787") , (103, "#8787af") , (104, "#8787d7") , (105, "#8787ff") , (106, "#87af00") , (107, "#87af5f") , (108, "#87af87") , (109, "#87afaf") , (110, "#87afd7") , (111, "#87afff") , (112, "#87d700") , (113, "#87d75f") , (114, "#87d787") , (115, "#87d7af") , (116, "#87d7d7") , (117, "#87d7ff") , (118, "#87ff00") , (119, "#87ff5f") , (120, "#87ff87") , (121, "#87ffaf") , (122, "#87ffd7") , (123, "#87ffff") , (124, "#af0000") , (125, "#af005f") , (126, "#af0087") , (127, "#af00af") , (128, "#af00d7") , (129, "#af00ff") , (130, "#af5f00") , (131, "#af5f5f") , (132, "#af5f87") , (133, "#af5faf") , (134, "#af5fd7") , (135, "#af5fff") , (136, "#af8700") , (137, "#af875f") , (138, "#af8787") , (139, "#af87af") , (140, "#af87d7") , (141, "#af87ff") , (142, "#afaf00") , (143, "#afaf5f") , (144, "#afaf87") , (145, "#afafaf") , (146, "#afafd7") , (147, "#afafff") , (148, "#afd700") , (149, "#afd75f") , (150, "#afd787") , (151, "#afd7af") , (152, "#afd7d7") , (153, "#afd7ff") , (154, "#afff00") , (155, "#afff5f") , (156, "#afff87") , (157, "#afffaf") , (158, "#afffd7") , (159, "#afffff") , (160, "#d70000") , (161, "#d7005f") , (162, "#d70087") , (163, "#d700af") , (164, "#d700d7") , (165, "#d700ff") , (166, "#d75f00") , (167, "#d75f5f") , (168, "#d75f87") , (169, "#d75faf") , (170, "#d75fd7") , (171, "#d75fff") , (172, "#d78700") , (173, "#d7875f") , (174, "#d78787") , (175, "#d787af") , (176, "#d787d7") , (177, "#d787ff") , (178, "#d7af00") , (179, "#d7af5f") , (180, "#d7af87") , (181, "#d7afaf") , (182, "#d7afd7") , (183, "#d7afff") , (184, "#d7d700") , (185, "#d7d75f") , (186, "#d7d787") , (187, "#d7d7af") , (188, "#d7d7d7") , (189, "#d7d7ff") , (190, "#d7ff00") , (191, "#d7ff5f") , (192, "#d7ff87") , (193, "#d7ffaf") , (194, "#d7ffd7") , (195, "#d7ffff") , (196, "#ff0000") , (197, "#ff005f") , (198, "#ff0087") , (199, "#ff00af") , (200, "#ff00d7") , (201, "#ff00ff") , (202, "#ff5f00") , (203, "#ff5f5f") , (204, "#ff5f87") , (205, "#ff5faf") , (206, "#ff5fd7") , (207, "#ff5fff") , (208, "#ff8700") , (209, "#ff875f") , (210, "#ff8787") , (211, "#ff87af") , (212, "#ff87d7") , (213, "#ff87ff") , (214, "#ffaf00") , (215, "#ffaf5f") , (216, "#ffaf87") , (217, "#ffafaf") , (218, "#ffafd7") , (219, "#ffafff") , (220, "#ffd700") , (221, "#ffd75f") , (222, "#ffd787") , (223, "#ffd7af") , (224, "#ffd7d7") , (225, "#ffd7ff") , (226, "#ffff00") , (227, "#ffff5f") , (228, "#ffff87") , (229, "#ffffaf") , (230, "#ffffd7") , (231, "#ffffff") , (232, "#080808") , (233, "#121212") , (234, "#1c1c1c") , (235, "#262626") , (236, "#303030") , (237, "#3a3a3a") , (238, "#444444") , (239, "#4e4e4e") , (240, "#585858") , (241, "#626262") , (242, "#6c6c6c") , (243, "#767676") , (244, "#808080") , (245, "#8a8a8a") , (246, "#949494") , (247, "#9e9e9e") , (248, "#a8a8a8") , (249, "#b2b2b2") , (250, "#bcbcbc") , (251, "#c6c6c6") , (252, "#d0d0d0") , (253, "#dadada") , (254, "#e4e4e4") , (255, "#eeeeee") ] -- }}} htmlFGCode :: Color256 -> String -> String htmlFGCode c s = "" ++ s ++ "" htmlBGCode :: Color256 -> String -> String htmlBGCode c s = "" ++ s ++ "" htmlULCode :: String -> String htmlULCode s = "" ++ s ++ "" htmlBDCode :: String -> String htmlBDCode s = "" ++ s ++ "" -- htmlFormat :: Format -> String -> String -- htmlFormat (Format fg bg ul bd) s = _ $ unEndo $ concat $ map Endo $ concat -- [ maybeElim id $ htmlFGCode ^$ fg -- , liftMaybeZero $ htmlBGCode ^$ bg -- , guard ul >> return htmlULCode -- , guard bd >> return htmlBDCode -- ]