JSON-Validator und Formatierer

Der JavaScript Object Notation, kurz JSON, sind viele Entwickler sicherlich schon einmal über den Weg gelaufen. Bei der Arbeit mit JSON-Daten tritt ab und an der Fall auf das Daten für einen Test validiert oder sinnvoll formatiert werden sollen.

Der JSON Formatter & Validator von Curious Concept

Im Web existieren unterschiedlichste JSON-Validatoren und Formatierer, allerdings mit eher schwankender Qualität. Einer der Validatoren, welcher heraussticht ist der JSON Formatter & Validator von Curious Concept. Er kann JSON-Daten nach den unterschiedlichsten Standards (RFC 8259, RFC 7159, RFC 4627 und ECMA-404) validieren und anhand unterschiedlichster Templates formatieren. Zu finden ist der Validator unter jsonformatter.curiousconcept.com.

Code-Formatierung unter IntelliJ IDEA selektiv deaktivieren

IntelliJ IDEA bietet, wie wahrscheinlich jede brauchbare IDE, eine Funktionalität um den Quelltext automatisch zu formatieren. Manchmal kann es allerdings notwendig sein die Funktionalität für bestimmte Dateien oder Abschnitte zu deaktivieren. IntelliJ IDEA bietet dem Nutzer eine Möglichkeit dies zu tun. Dazu muss in den Einstellungen unter Code Style im Tab Formatter Control das entsprechende Feature aktiviert werden. Im Beispiel sieht das Ganze wie folgt aus:

// @formatter:off
try {
  // Do something wrong
} catch(Exception e) {
  // Gotta Catch 'Em All
}
// @formatter:on

Durch den einleitenden Kommentar @formatter:off wird die Code-Formatierung deaktiviert; am Ende des Blockes wird er mittels @formatter:on wieder aktiviert. Damit ist es mögliche Abschnitte und Dateien von der Code-Formatierung auszunehmen.

Direkte Formatierungen in LibreOffice entfernen

In LibreOffice, im speziellen im Writer-Modul können Dinge wie Absätze, Überschriften oder der Fließtext formatiert werden. Dabei muss zwischen der direkten Formatierung und der Formatierung über Formatvorlagen unterschieden werden. Bei der Formatierung über Formatvorlagen erhält z.B. eine Überschrift die Textgröße und Schriftart die in der Formatvorlage festgelegt wurde. Bei der direkten Formatierung hingegen wird ein Textabschnitt markiert und die Eigenschaften des Abschnittes werden direkt gesetzt.

Über das Format-Menü kann die direkte Formatierung entfernt werden

Wenn nun hauptsächlich mit Formatvorlagen gearbeitet wird, kann es manchmal notwendig sein, direkte Formatierungen zu entfernen. In früheren Versionen von LibreOffice wurde dazu der Text markiert und mit der rechten Maustaste das Kontextmenü aufgerufen und dort der Punkt zum Entfernen der direkten Formatierung ausgewählt. In den neuen Versionen findet sich diese Option leider nicht mehr im Kontextmenü. Stattdessen muss das Menü Format aufgerufen werden. Dort befindet sich der Menüpunkt Direkte Formatierung löschen, welcher die direkten Formatierungen der aktiven Markierung entfernt.

Seitenumbrüche beim EPUB-Export unter Ulysses

In bestimmten Fällen benötigt man in EPUB-Dokumenten einen Seitenumbruch. Mit der App Ulysses lässt sich ein solcher Umbruch allerdings nicht in der Standardkonfiguration realisieren. Stattdessen ist etwas Handarbeit vonnöten.

Die Style-Verwaltung von Ulysses unter Mac OS X

Die Style-Verwaltung von Ulysses unter Mac OS X

Im ersten Schritt muss ein neuer Stil angelegt angelegt. Dieser Stil wird anschließend bearbeitet und am Ende des Stiles folgender CSS-Schnipsel hinzugefügt:

hr {
	page-break-after: always;
	visibility: hidden;
}

Wird das Dokument nun mit diesem EPUB-Style exportiert, so wird jedesmal wenn im Quelltext ein:

----

genutzt wird, automatisch ein Seitenumbruch im EPUB erzeugt.

Quelltext im Visual Studio automatisch formatieren

Das Visual Studio formatiert den Quellcode automatisch nach den eingestellten Richtlinien. Wenn man nun aber die Richtlinien ändert, steht man vor dem Problem, das der Quelltext noch nach den alten Richtlinien formatiert ist.

Die Formatierungseinstellungen im Visual Studio

Die Formatierungseinstellungen im Visual Studio

Leider gibt es keine direkte Option im Visual Studio um den bestehenden Quelltext am Stück neu zu formatieren. Allerdings kommt man mit einem kleinen Makro (abgeleitet vom VS Formater Macro) an dieser Stelle weiter. Dazu wird im Visual Studio die Package Manager Console (zu finden unter Tools -> NuGet Package Manager -> Package Manager Console) geöffnet und dort folgendes eingegeben:

function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) -and -not $_.Name.EndsWith( ".Designer.cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } }
 
$dte.Solution.Projects | % { f($_.ProjectItems) }

Das Visual Studio öffnet nun alle *.cs Dateien in der geöffneten Solution und formatiert die Quelltexte neu. Dieser Vorgang ist dabei relativ langsam und führt bei größeren Projekten dazu das das Visual Studio einfriert. Auf Stack Overflow gibt es eine elegantere Lösung:

function FormatItems($projectItems) {
    $projectItems |
    % {
        # Write-Host "    Examining item: $($_.Name)";

        if ($_.Name -and $_.Name.ToLower().EndsWith(".cs") `
            -and (-not $_.Name.ToLower().Contains(".designer."))) {

            $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}');
            $win.Activate();

            $dte.ExecuteCommand('Edit.FormatDocument');

            if (!$_.Saved) {
                Write-Host "    Saving modified file: $($_.Name)";
                $dte.ExecuteCommand('File.SaveSelectedItems');
            }

            $dte.ExecuteCommand('Window.CloseDocumentWindow');
        }

        if ($_.ProjectItems -and ($_.ProjectItems.Count -gt 0)) {
            # Write-Host "    Opening sub-items of $($_.Name)";

            FormatItems($_.ProjectItems);
        }
    };
}

$dte.Solution.Projects | % {
    Write-Host "-- Project: $($_.Name)";

    FormatItems($_.ProjectItems)
}
;

Bei dieser Lösung wird jede Datei nach der Neuformatierung, gespeichert und wieder geschlossen. Leider wird auch diese Lösung von Datei zu Datei langsamer, so das sie für größere Projekte wiederrum unbrauchbar ist. Mit der Extension Format Document gibt es eine Lösung welche schnell genug ist, allerdings funktioniert diese nur unter Visual Studio 2010. Nach einigen Anpassungen habe ich eine Version gebaut, welche auch unter Visual Studio 2012 und 2013 läuft. Das Problem an dieser Variante ist, das Dateien in Ordnern nur berücksichtigt werden wenn der Ordner im Solution Explorer geöffnet ist. Alles in allem ist keine der vorgestellten Lösungen wirklich optimal, allerdings kann man viele Fälle mit den vorgestellten Lösungen lösen.