Skip to content

Commit

Permalink
FileConventions: fix WrapText function
Browse files Browse the repository at this point in the history
Ignore codeblocks while splitting the text into paragraphs
because there might be a codeblock with multiple paragraphs.

Fixes nblockchain#117
  • Loading branch information
parhamsaremi committed Aug 15, 2023
1 parent 1fa1684 commit f3486b8
Showing 1 changed file with 57 additions and 1 deletion.
58 changes: 57 additions & 1 deletion src/FileConventions/Library.fs
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,65 @@ let private WrapParagraph (text: string) (maxCharsPerLine: int) : string =

processWords String.Empty String.Empty words

let ExtractParagraphs(text: string) =
let lines = text.Split(Environment.NewLine) |> Seq.toList

This comment has been minimized.

Copy link
@knocte

knocte Aug 15, 2023

@parhamsaremi no need for parentheses

let codeBlockStartOrEndToken = "```"

let rec processLines
(remainingLines: List<string>)
(currentParagraph: List<string>)
(paragraphs: List<string>)
(insideCodeBlock: bool)
=
match remainingLines with
| [] ->
if not currentParagraph.IsEmpty then
String.Join(Environment.NewLine, List.rev currentParagraph)
:: paragraphs
else
paragraphs
| line :: rest ->
if String.IsNullOrWhiteSpace line then
if insideCodeBlock then
processLines
rest
(line :: currentParagraph)
paragraphs
insideCodeBlock
else if not currentParagraph.IsEmpty then
let newParagraph =
String.Join(
Environment.NewLine,
List.rev currentParagraph
)

processLines
rest
List.Empty
(newParagraph :: paragraphs)
insideCodeBlock
else
processLines rest List.Empty paragraphs insideCodeBlock
elif line.Trim().StartsWith codeBlockStartOrEndToken then
let newInsideCodeBlock = not insideCodeBlock

processLines
rest
(line :: currentParagraph)
paragraphs
newInsideCodeBlock
else
processLines
rest
(line :: currentParagraph)
paragraphs
insideCodeBlock

List.rev <| processLines lines List.Empty List.Empty false

let WrapText (text: string) (maxCharsPerLine: int) : string =
let wrappedParagraphs =
text.Split $"{Environment.NewLine}{Environment.NewLine}"
ExtractParagraphs text
|> Seq.map(fun paragraph -> WrapParagraph paragraph maxCharsPerLine)

String.Join(
Expand Down

0 comments on commit f3486b8

Please sign in to comment.