]> git.wincent.com - docvim.git/commitdiff
Handle overlength headings
authorGreg Hurrell <greg@hurrell.net>
Mon, 6 Jun 2016 14:36:52 +0000 (07:36 -0700)
committerGreg Hurrell <greg@hurrell.net>
Mon, 6 Jun 2016 14:36:52 +0000 (07:36 -0700)
#uglycode

lib/Docvim/Printer/Vim.hs
tests/fixtures/markdown/headings.golden
tests/fixtures/markdown/headings.vim
tests/fixtures/vim/headings.golden

index 94eee407bbb619d253e0abf298604c6c5bce5afc..c60dd1f1fe66b145dac95ed65e52e4f47b33925b 100644 (file)
@@ -46,12 +46,21 @@ vimHelp n = suppressTrailingWhitespace output ++ "\n"
                                   else acc
         suppressTrailingWhitespace str = rstrip $ intercalate "\n" (map rstrip (splitOn "\n" str))
 
--- Helper function that appends and updates `partialLine` context.
+-- | Helper function that appends and updates `partialLine` context,
+-- hard-wrapping if necessary to remain under `textwidth`.
 append :: String -> Env
-append string = do
+append string = append' string textwidth
+
+-- | Helper function that appends and updates `partialLine` context
+-- uncontitionally (no hard-wrapping).
+appendNoWrap :: String -> Env
+appendNoWrap string = append' string 1000000
+
+append' :: String -> Int -> Env
+append' string width = do
   context <- get
   -- TODO obviously tidy this up
-  let (ops, line) = if length (partialLine context) + length leading >= textwidth
+  let (ops, line) = if length (partialLine context) + length leading >= width
                     then ( [ Delete (length $ snd $ hardwrap $ partialLine context)
                            , Slurp " "
                            , Append (lineBreak context)
@@ -136,7 +145,7 @@ node n = case n of
   -- I could also just make people specify a target explicitly.
   HeadingAnnotation h        -> heading h
   Link l                     -> append $ "|" ++ l ++ "|"
-  LinkTargets l              -> linkTargets l
+  LinkTargets l              -> linkTargets l True
   List ls                    -> nodes ls >>= nl
   ListItem l                 -> listitem l
   MappingsAnnotation         -> heading "mappings"
@@ -217,8 +226,8 @@ fenced f = do
 heading :: String -> Env
 heading h = do
   metadata <- ask
-  heading' <- append $ map toUpper h ++ " "
-  link <- maybe (append "\n") (\x -> linkTargets [target x]) (pluginName metadata)
+  heading' <- appendNoWrap $ map toUpper h ++ " "
+  link <- maybe (append "\n") (\x -> linkTargets [target x] False) (pluginName metadata)
   trailing <- append "\n"
   return $ concat [heading', link, trailing]
   where
@@ -226,11 +235,15 @@ heading h = do
     sanitize x = if isSpace x then '-' else x
 
 -- TODO: be prepared to wrap these if there are a lot of them
-linkTargets :: [String] -> Env
-linkTargets ls = do
+-- TODO: fix code smell of passing in `wrap` bool here
+linkTargets :: [String] -> Bool -> Env
+linkTargets ls wrap = do
   context <- get
-  append $ rightAlign (partialLine context) (targets ++ "\n")
+  if wrap
+  then append $ aligned context
+  else appendNoWrap $ aligned context
   where
+    aligned context = rightAlign (partialLine context) (targets ++ "\n")
     targets = unwords (map linkify $ sort ls)
     linkify l = "*" ++ l ++ "*"
     rightAlign currentlyUsed ws = replicate (count currentlyUsed ws) ' ' ++ ws
index e11dc2151ff82ada7d47ae8beac3e865c1e23277..406b9f98f102b4eb29887576a460be5b853dd12f 100644 (file)
@@ -1,3 +1,9 @@
+# foo
+
 ## A heading
 
 ### A subheading
+
+## An overlength heading when I really should have chose something shorter
+
+Note that in order for that last one to be shown as a heading in Vim, we can't allow the usual hard-wrapping rules to apply.
index fc6d3578b0ba1d7916c10fa7408d11ba994ec418..43355a9b186312149fc4871115184c3894e07bc8 100644 (file)
@@ -1,5 +1,11 @@
 ""
+" @plugin foo We need this because otherwise we don't get link targets
+"
 " # A heading
 "
 " ## A subheading
 "
+" # An overlength heading when I really should have chose something shorter
+"
+" Note that in order for that last one to be shown as a heading in Vim, we can't
+" allow the usual hard-wrapping rules to apply.
index 63af92a22b64c829744dc89696b16d21ec75454f..2bb13e4818baef5b6974645d74f0ba5f3e43f696 100644 (file)
@@ -1,3 +1,11 @@
-A HEADING
+
+*foo.txt*    We need this because otherwise we don't get link targets      *foo*
+
+A HEADING                                                     *foo-a-heading*
 
 A subheading ~
+
+AN OVERLENGTH HEADING WHEN I REALLY SHOULD HAVE CHOSE SOMETHING SHORTER *foo-an-overlength-heading-when-i-really-should-have-chose-something-shorter*
+
+Note that in order for that last one to be shown as a heading in Vim, we
+can't allow the usual hard-wrapping rules to apply.