Repository: hannah-sten/texify-idea
Issue: 'Move large section to new file' removes blank lines

<!-- **Note**: you can discard the template below if you are requesting support or proposing a new feature. -->

#### Type of JetBrains IDE (IntelliJ, PyCharm, etc.) and version
IntelliJ 2018.3.4

#### TeXiFy IDEA version
b0.6.3

#### What I did (steps to reproduce)
I wrote a long section and used the feature to move the long section to a new file

#### Expected behavior
To copy the whole section, with all blank lines to the new file

#### Actual behavior
The content is copied but all blank lines are removed. The blank lines are needed to specify paragraphs in LaTeX

<details><summary>Long Example</summary>
<p>

#### Original

```LaTeX
\\section{Verringern der \\acl{AS} Ausfälle}\\label{sec:verringern-der-as-ausfaelle}
\\input{umsetzung}
\\newpage

\\section{Monitoring der \\acl{AS}}\\label{sec:monitoring-der-as}
In diesem Kapitel wird beschrieben, welche Möglichkeiten zur Überwachung einer \\ac{AS} bestehen.

Das Monitoring der \\ac{AS} verursachte weniger Problem wie erwartet.
Da auf gewisse Grundkenntnisse von Kollegen zurückgegriffen werden konnte, konnte die grundlegende Komponente ohne
größere Schwierigkeiten umgesetzt werden.
Für das tatsächliche Monitoring bieten sich zwei Methoden an.
Zum einen eine Statusseite, auf welcher der aktuelle Status dargestellt wird.
Zum anderen eine Funktion, welche automatisiert regelmäßig aufgerufen wird um den Status zu prüfen und im Falle eines
Fehlers eine Fehlerbehandlung anzustoßen kann, zum Beispiel einen Mitarbeiter zu informieren.

\\begin{figure}[h]
    \\includegraphics[width=\\linewidth]{media/FunktionStatusUeberwachung.png}
    \\caption{Abfragewege der Statusüberwachung}\\label{fig:statusueberwachung}
\\end{figure}

In Abbildung~\\ref{fig:statusueberwachung} sind die zwei beschriebenen Möglichkeiten der Statusüberwachung dargestellt.
Die vier grünen Pfeile stellen den Informationsfluss für die Statusseite dar, die zwei orangenen für ein Beispiel
der automatischen Überwachung.

\\subsection{Statusseite}\\label{subsec:statusseite}
Eine Statusseite bietet sich an, wenn mehrere Personen die Information benötigen, wie es der \\ac{AS} derzeit geht.
Auf einer Statusseite können die Status mehrerer Komponenten übersichtlich aufgelistet werden, sodass ein schneller
Überblick über den Gesamtstatus möglich ist.

Dazu stellt ein Browser eine Anfrage an den Webserver des \\ac{WAS}, dargestellt durch den grünen mit 1 beschrifteten
Pfeil in Grafik~\\ref{fig:statusueberwachung}, woraufhin dieser ein Anfrage an den Applicationserver stellt.
Dieser beantwortet die Anfrage und sendet dem Webserver die gewünschte Information.
Der Webserver verarbeitet die Antwort und baut selber eine Antwort, welche über den mit 4 beschrifteten Pfeil an den
Browser gesendet wird.

\\subsection{Automatische Prüfung}\\label{subsec:automatische-pruefung}
Bei Systemen, welche nicht dauerhaft manuell überwacht werden, bietet sich diese Methode an.
Es wird automatisch geprüft, ob die \\ac{AS} den korrekten Status hat.
Dies kann zum Beispiel über zeitgesteuerte \\acp{EJB} erfolgen.
Diese prüfen den Status der \\ac{AS} und wenn ein fehlerhafter Status gemeldet wird, kann versucht werden, die \\ac{AS}
neuzustarten.
Dabei sollte man allerdings aufpassen, das dies nur erfolgt, wenn nicht ein Mechanismus wie in Kapitel~\\ref{sec:verringern-der-as-ausfaelle}
verwendet wird, da ein automatischer Neustart diesen Mechanismus obsolet machen würde.

Eine weitere Möglichkeit ist einen Mitarbeiter zu benachrichtigen, welcher das Problem beheben kann.
Auf diese Art wäre auch ein Zusammenspiel mit den Methoden aus Kapitel~\\ref{sec:verringern-der-as-ausfaelle} möglich.

Dazu fragt eine Anwendung im Applicationserver den Status der \\ac{AS} regelmäßig ab.
Dies ist durch den orangenen, mit der 1 beschrifteten, Pfeil in Abbildung~\\ref{fig:statusueberwachung} dargestellt.
Die Möglichkeit zum informieren eines Mitarbeiters wird hier am Beispiel einer zu versendenden Email dargestellt.

Mit dieser Lösung können die \\ac{AS} überwacht werden.
Durch den Ansatz als eigenes Modul ist es möglich diese über eine Paketverwaltung in mehreren Projekten einzubinden.
Zu beachten ist noch, das wenn mehrere Versionen des \\ac{WAS} verwendet werden es nötig ist für jede Version eine Version
zu packen, das die richtige Version der Abhängigkeit verwendet wird.
```

#### After moving

```LaTeX
In diesem Kapitel wird beschrieben, welche Möglichkeiten zur Überwachung einer \\ac{AS} bestehen.
Das Monitoring der \\ac{AS} verursachte weniger Problem wie erwartet.
Da auf gewisse Grundkenntnisse von Kollegen zurückgegriffen werden konnte, konnte die grundlegende Komponente ohne
größere Schwierigkeiten umgesetzt werden.
Für das tatsächliche Monitoring bieten sich zwei Methoden an.
Zum einen eine Statusseite, auf welcher der aktuelle Status dargestellt wird.
Zum anderen eine Funktion, welche automatisiert regelmäßig aufgerufen wird um den Status zu prüfen und im Falle eines
Fehlers eine Fehlerbehandlung anzustoßen kann, zum Beispiel einen Mitarbeiter zu informieren.
\\begin{figure}[h]
    \\includegraphics[width=\\linewidth]{media/FunktionStatusUeberwachung.png}
    \\caption{Abfragewege der Statusüberwachung}\\label{fig:statusueberwachung}
\\end{figure}
In Abbildung~\\ref{fig:statusueberwachung} sind die zwei beschriebenen Möglichkeiten der Statusüberwachung dargestellt.
Die vier grünen Pfeile stellen den Informationsfluss für die Statusseite dar, die zwei orangenen für ein Beispiel
der automatischen Überwachung.
\\subsection{Statusseite}\\label{subsec:statusseite}
Eine Statusseite bietet sich an, wenn mehrere Personen die Information benötigen, wie es der \\ac{AS} derzeit geht.
Auf einer Statusseite können die Status mehrerer Komponenten übersichtlich aufgelistet werden, sodass ein schneller
Überblick über den Gesamtstatus möglich ist.
Dazu stellt ein Browser eine Anfrage an den Webserver des \\ac{WAS}, dargestellt durch den grünen mit 1 beschrifteten
Pfeil in Grafik~\\ref{fig:statusueberwachung}, woraufhin dieser ein Anfrage an den Applicationserver stellt.
Dieser beantwortet die Anfrage und sendet dem Webserver die gewünschte Information.
Der Webserver verarbeitet die Antwort und baut selber eine Antwort, welche über den mit 4 beschrifteten Pfeil an den
Browser gesendet wird.
\\subsection{Automatische Prüfung}\\label{subsec:automatische-pruefung}
Bei Systemen, welche nicht dauerhaft manuell überwacht werden, bietet sich diese Methode an.
Es wird automatisch geprüft, ob die \\ac{AS} den korrekten Status hat.
Dies kann zum Beispiel über zeitgesteuerte \\acp{EJB} erfolgen.
Diese prüfen den Status der \\ac{AS} und wenn ein fehlerhafter Status gemeldet wird, kann versucht werden, die \\ac{AS}
neuzustarten.
Dabei sollte man allerdings aufpassen, das dies nur erfolgt, wenn nicht ein Mechanismus wie in Kapitel~\\ref{sec:verringern-der-as-ausfaelle}
verwendet wird, da ein automatischer Neustart diesen Mechanismus obsolet machen würde.
Eine weitere Möglichkeit ist einen Mitarbeiter zu benachrichtigen, welcher das Problem beheben kann.
Auf diese Art wäre auch ein Zusammenspiel mit den Methoden aus Kapitel~\\ref{sec:verringern-der-as-ausfaelle} möglich.
Dazu fragt eine Anwendung im Applicationserver den Status der \\ac{AS} regelmäßig ab.
Dies ist durch den orangenen, mit der 1 beschrifteten, Pfeil in Abbildung~\\ref{fig:statusueberwachung} dargestellt.
Die Möglichkeit zum informieren eines Mitarbeiters wird hier am Beispiel einer zu versendenden Email dargestellt.
Mit dieser Lösung können die \\ac{AS} überwacht werden.
Durch den Ansatz als eigenes Modul ist es möglich diese über eine Paketverwaltung in mehreren Projekten einzubinden.
Zu beachten ist noch, das wenn mehrere Versionen des \\ac{WAS} verwendet werden es nötig ist für jede Version eine Version
zu packen, das die richtige Version der Abhängigkeit verwendet wird.
\\newpage
```
</p>
</details>

Changed files:
src/nl/rubensten/texifyidea/util/Strings.kt

diff --git a/src/nl/rubensten/texifyidea/util/Strings.kt b/src/nl/rubensten/texifyidea/util/Strings.kt
index 28ce07b13..197e5f327 100644
--- a/src/nl/rubensten/texifyidea/util/Strings.kt
+++ b/src/nl/rubensten/texifyidea/util/Strings.kt
@@ -100,12 +100,19 @@ fun List<String>.removeIndents(): List<String> {
             .map { Pair(it.getIndent().length, it) }
             .minBy { it.first } ?: return this
 
+    var noContentYet = true
     for (originalLine in this) {
-        if (originalLine.isBlank()) {
+        if (noContentYet && originalLine.isBlank()) {
             continue
         }
 
-        list.add(originalLine.substring(maxIndent))
+        if (originalLine.isBlank()) {
+            list.add("")
+        }
+        else {
+            noContentYet = false
+            list.add(originalLine.substring(maxIndent))
+        }
     }
 
     return list
@@ -141,7 +148,7 @@ fun String.formatAsFileName(): String {
             .toLowerCase()
 
     // If there are no valid characters left, use a default name.
-    return if (formatted.isEmpty()) { "myfile" } else { formatted }
+    return if (formatted.isEmpty()) "myfile" else formatted
 }
 
 /**
@@ -156,4 +163,4 @@ fun String.formatAsLabel(): String {
 /**
  * Split the given string on whitespace.
  */
-fun String.splitWhitespace() = split(Regex("\\\\s+"))
\\ No newline at end of file
+fun String.splitWhitespace() = split(Regex("\\\\s+"))