From 2259f60909febafaf4f8bfae4de90d37eb2723e9 Mon Sep 17 00:00:00 2001 From: g2384 Date: Mon, 19 Oct 2020 19:29:57 +0100 Subject: [PATCH] beautify web settings area; add alignComments setting --- VHDLFormatter.js | 13 ++++--- VHDLFormatter.ts | 14 ++++--- index.html | 67 +++++++++++++++++++-------------- main.js | 41 ++++++++++++++++---- main.ts | 45 +++++++++++++++++----- style.css | 10 ++--- tests/VHDLFormatter.test.ts | 21 ++++++++++- tests/VHDLFormatterUnitTests.ts | 10 ----- 8 files changed, 148 insertions(+), 73 deletions(-) diff --git a/VHDLFormatter.js b/VHDLFormatter.js index cfb4a65..6c84b87 100644 --- a/VHDLFormatter.js +++ b/VHDLFormatter.js @@ -248,11 +248,12 @@ function SetNewLinesAfterSymbols(text, newLineSettings) { } exports.SetNewLinesAfterSymbols = SetNewLinesAfterSymbols; class signAlignSettings { - constructor(isRegional, isAll, mode, keyWords) { + constructor(isRegional, isAll, mode, keyWords, alignComments = false) { this.isRegional = isRegional; this.isAll = isAll; this.mode = mode; this.keyWords = keyWords; + this.alignComments = alignComments; } } exports.signAlignSettings = signAlignSettings; @@ -337,7 +338,7 @@ function beautify(input, settings) { beautify3(arr, result, settings, 0, 0); var alignSettings = settings.SignAlignSettings; if (alignSettings != null && alignSettings.isAll) { - AlignSigns(result, 0, result.length - 1, alignSettings.mode); + AlignSigns(result, 0, result.length - 1, alignSettings.mode, alignSettings.alignComments); } arr = FormattedLineToString(result, settings.Indentation); input = arr.join("\r\n"); @@ -481,19 +482,21 @@ function beautifyPortGenericBlock(inputs, result, settings, startIndex, parentEn && alignSettings.keyWords != null && alignSettings.keyWords.indexOf(mode) >= 0) { blockBodyStartIndex++; - AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode); + AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode, alignSettings.alignComments); } } return [i, parentEndIndex]; } exports.beautifyPortGenericBlock = beautifyPortGenericBlock; -function AlignSigns(result, startIndex, endIndex, mode) { +function AlignSigns(result, startIndex, endIndex, mode, alignComments = false) { AlignSign_(result, startIndex, endIndex, ":", mode); AlignSign_(result, startIndex, endIndex, ":=", mode); AlignSign_(result, startIndex, endIndex, "<=", mode); AlignSign_(result, startIndex, endIndex, "=>", mode); AlignSign_(result, startIndex, endIndex, "direction", mode); - AlignSign_(result, startIndex, endIndex, "@@comments", mode); + if (alignComments) { + AlignSign_(result, startIndex, endIndex, "@@comments", mode); + } } exports.AlignSigns = AlignSigns; function indexOfGroup(regex, input, group) { diff --git a/VHDLFormatter.ts b/VHDLFormatter.ts index ff3e211..1017839 100644 --- a/VHDLFormatter.ts +++ b/VHDLFormatter.ts @@ -285,11 +285,13 @@ export class signAlignSettings { isAll: boolean; mode: string; keyWords: Array; - constructor(isRegional: boolean, isAll: boolean, mode: string, keyWords: Array) { + alignComments: boolean; + constructor(isRegional: boolean, isAll: boolean, mode: string, keyWords: Array, alignComments: boolean = false) { this.isRegional = isRegional; this.isAll = isAll; this.mode = mode; this.keyWords = keyWords; + this.alignComments = alignComments; } } @@ -391,7 +393,7 @@ export function beautify(input: string, settings: BeautifierSettings) { beautify3(arr, result, settings, 0, 0); var alignSettings = settings.SignAlignSettings; if (alignSettings != null && alignSettings.isAll) { - AlignSigns(result, 0, result.length - 1, alignSettings.mode); + AlignSigns(result, 0, result.length - 1, alignSettings.mode, alignSettings.alignComments); } arr = FormattedLineToString(result, settings.Indentation); @@ -543,19 +545,21 @@ export function beautifyPortGenericBlock(inputs: Array, result: (Formatt && alignSettings.keyWords != null && alignSettings.keyWords.indexOf(mode) >= 0) { blockBodyStartIndex++; - AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode); + AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode, alignSettings.alignComments); } } return [i, parentEndIndex]; } -export function AlignSigns(result: (FormattedLine | FormattedLine[])[], startIndex: number, endIndex: number, mode: string) { +export function AlignSigns(result: (FormattedLine | FormattedLine[])[], startIndex: number, endIndex: number, mode: string, alignComments: boolean = false) { AlignSign_(result, startIndex, endIndex, ":", mode); AlignSign_(result, startIndex, endIndex, ":=", mode); AlignSign_(result, startIndex, endIndex, "<=", mode); AlignSign_(result, startIndex, endIndex, "=>", mode); AlignSign_(result, startIndex, endIndex, "direction", mode); - AlignSign_(result, startIndex, endIndex, "@@comments", mode); + if (alignComments) { + AlignSign_(result, startIndex, endIndex, "@@comments", mode); + } } function indexOfGroup(regex: RegExp, input: string, group: number) { diff --git a/index.html b/index.html index 8b71992..17f3eeb 100644 --- a/index.html +++ b/index.html @@ -105,7 +105,7 @@
-
+
New line after
THEN @@ -170,35 +170,44 @@
-
- Align signs in -
- - +
+ Sign Alignment +
+ Align signs in +
+ + +
+
+ +
+
+ + +
+
+ + +
-
- -
-
- - +
+ +
-
- - + + | Mode: + + + +
+
+ + +
-
-
- - -
-
- Mode: - - -
+
@@ -343,6 +352,7 @@ } document.getElementById("sign_align_all").checked = alignSettings.isAll; document.getElementById("sign_align_mode_div").elements.namedItem("sign_align_modecase").value = alignSettings.mode; + document.getElementById("align_comments").checked = alignSettings.alignComments; } var newLineSettings = beautifierSettings.NewLineSettings; var newLineAfter = newLineSettings.newLineAfter; @@ -431,6 +441,7 @@ var sign_align_procedure = document.getElementById("sign_align_procedure").checked; var sign_align_generic = document.getElementById("sign_align_generic").checked; var sign_align_all = document.getElementById("sign_align_all").checked; + var align_comments = document.getElementById("align_comments").checked; var sign_align_mode = document.getElementById("sign_align_mode_div").elements.namedItem("sign_align_modecase").value; var new_line_after_port = document.getElementById("new_line_after_port").elements.namedItem("new_line_after_portcase").value; var new_line_after_then = document.getElementById("new_line_after_then").elements.namedItem("new_line_after_thencase").value; @@ -480,7 +491,7 @@ signAlignKeywords.push("PROCEDURE"); } sign_align = signAlignKeywords.length > 0; - let alignSettings = new signAlignSettings(sign_align, sign_align_all, sign_align_mode, signAlignKeywords) + let alignSettings = new signAlignSettings(sign_align, sign_align_all, sign_align_mode, signAlignKeywords, align_comments) beautifierSettings = new BeautifierSettings(remove_comments, remove_report, check_alias, alignSettings, diff --git a/main.js b/main.js index 9d3cdfa..ffcd1af 100644 --- a/main.js +++ b/main.js @@ -18,9 +18,20 @@ function noFormat() { "cust_eol", "sign_align_mode", "keyword", - "typename" + "typename", + "align_comments", + "add_extraEOL" ]; var isDisabled = getHTMLInputElement("no_format").checked; + changeStateOfElements(elements, isDisabled); + let radioButtons = document.getElementsByTagName("input"); + for (let i = 0; i < radioButtons.length; i++) { + if (radioButtons[i].type == "radio") { + radioButtons[i].disabled = isDisabled; + } + } +} +function changeStateOfElements(elements, isDisabled) { elements.forEach(element => { var htmlElement = getHTMLInputElement(element + "_div"); try { @@ -34,12 +45,6 @@ function noFormat() { htmlElement.className = htmlElement.className.replace(/\bdisabled\b/g, ""); } }); - let radioButtons = document.getElementsByTagName("input"); - for (let i = 0; i < radioButtons.length; i++) { - if (radioButtons[i].type == "radio") { - radioButtons[i].disabled = isDisabled; - } - } } function getHTMLInputElement(id) { return document.getElementById(id); @@ -63,7 +68,7 @@ function MixLetters(input) { return arr.join(""); } function wordWrap() { - var d = document.getElementById("result"); + let d = getHTMLInputElement("result"); if (d.className == "") { d.className = "wordwrap"; } @@ -71,4 +76,24 @@ function wordWrap() { d.className = ""; } } +function alignAllSigns(alignAll) { + if (alignAll) { + getHTMLInputElement("sign_align_port").checked = false; + getHTMLInputElement("sign_align_generic").checked = false; + getHTMLInputElement("sign_align_procedure").checked = false; + getHTMLInputElement("sign_align_function").checked = false; + getHTMLInputElement("sign_align_mode_div").disabled = false; + } + else { + getHTMLInputElement("sign_align_all").checked = false; + } + let isDisabled = !alignAll; + changeStateOfElements(["sign_align_mode"], isDisabled); + let radioButtons = document.querySelectorAll("#sign_align_mode_div input[type=radio]"); + for (let i = 0; i < radioButtons.length; i++) { + if (radioButtons[i].type == "radio") { + radioButtons[i].disabled = isDisabled; + } + } +} //# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/main.ts b/main.ts index 6a4f808..f0056f8 100644 --- a/main.ts +++ b/main.ts @@ -18,15 +18,27 @@ function noFormat() { "cust_eol", "sign_align_mode", "keyword", - "typename" + "typename", + "align_comments", + "add_extraEOL" ]; var isDisabled = getHTMLInputElement("no_format").checked; + changeStateOfElements(elements, isDisabled); + let radioButtons = >document.getElementsByTagName("input"); + for (let i = 0; i < radioButtons.length; i++) { + if ((radioButtons[i]).type == "radio") { + (radioButtons[i]).disabled = isDisabled; + } + } +} + +function changeStateOfElements(elements: string[], isDisabled: boolean) { elements.forEach(element => { var htmlElement = getHTMLInputElement(element + "_div"); try { getHTMLInputElement(element).disabled = isDisabled; } - catch{ } + catch { } if (isDisabled) { htmlElement.className += " disabled"; } @@ -34,12 +46,6 @@ function noFormat() { htmlElement.className = htmlElement.className.replace(/\bdisabled\b/g, ""); } }); - let radioButtons = >document.getElementsByTagName("input"); - for (let i = 0; i < radioButtons.length; i++) { - if ((radioButtons[i]).type == "radio") { - (radioButtons[i]).disabled = isDisabled; - } - } } function getHTMLInputElement(id: string): HTMLInputElement { @@ -66,10 +72,31 @@ function MixLetters(input: string) { } function wordWrap() { - var d = document.getElementById("result"); + let d = getHTMLInputElement("result"); if (d.className == "") { d.className = "wordwrap"; } else { d.className = ""; } +} + +function alignAllSigns(alignAll: boolean) { + if (alignAll) { + getHTMLInputElement("sign_align_port").checked = false; + getHTMLInputElement("sign_align_generic").checked = false; + getHTMLInputElement("sign_align_procedure").checked = false; + getHTMLInputElement("sign_align_function").checked = false; + getHTMLInputElement("sign_align_mode_div").disabled = false; + } + else { + getHTMLInputElement("sign_align_all").checked = false; + } + let isDisabled = !alignAll; + changeStateOfElements(["sign_align_mode"], isDisabled); + let radioButtons = document.querySelectorAll("#sign_align_mode_div input[type=radio]"); + for (let i = 0; i < radioButtons.length; i++) { + if ((radioButtons[i]).type == "radio") { + (radioButtons[i]).disabled = isDisabled; + } + } } \ No newline at end of file diff --git a/style.css b/style.css index 7009059..7b0a817 100644 --- a/style.css +++ b/style.css @@ -120,16 +120,16 @@ li { fieldset { width: fit-content; - border: 1px solid #9a9a9a; + border: 1px solid #ccc; margin: 25px 0 5px 0; - padding-left: 0; + padding: 5px; } legend { padding: 2px 5px; - background-color: #e0e0e0; + background-color: #ccc; border-radius: 2px; - margin: -27px 0 0 -1px; + margin: -27px 0 0 -6px; position: absolute; } @@ -182,9 +182,7 @@ form { } form span { - width: 170px; display: inline-block; - text-align: right; } a { diff --git a/tests/VHDLFormatter.test.ts b/tests/VHDLFormatter.test.ts index 81d8d2f..b3eac61 100644 --- a/tests/VHDLFormatter.test.ts +++ b/tests/VHDLFormatter.test.ts @@ -84,7 +84,7 @@ describe('VHDLFormatter', function () { let result = beautify(input, settings); expect(result).toBe(expected); }); - + it('align signs in all places', function () { let setting = getDefaultBeautifierSettings(new NewLineSettings()); setting.SignAlignSettings = new signAlignSettings(false, true, "", []); @@ -95,13 +95,30 @@ describe('VHDLFormatter', function () { let result = beautify(input, setting); expect(result).toBe(expected); }); - + it('semicolon blocks are aligned', function () { let settings = GetDefaultSettings(); let input = 'OUT <= In0 AFTER 2ns WHEN "00",\r\n In1 AFTER 2ns WHEN "01",\r\n In2 AFTER 2ns WHEN "10",\r\n In3 AFTER 2ns WHEN "11";'; let result = beautify(input, settings); expect(result).toBe(input); }); + + it('align comments', function () { + let settings = GetDefaultSettings(); + settings.SignAlignSettings = new signAlignSettings(false, true, "", [], true); + let input = 'test := loooong; -- test\r\ntest := short; -- test'; + let expected = 'test := loooong; -- test\r\ntest := short; -- test'; + let result = beautify(input, settings); + expect(result).toBe(expected); + }); + + it('do not align comments', function () { + let settings = GetDefaultSettings(); + settings.SignAlignSettings = new signAlignSettings(false, true, "", [], false); + let input = 'test := loooong; -- test\r\ntest := short; -- test'; + let result = beautify(input, settings); + expect(result).toBe(input); + }); }); function GetDefaultSettings(indentation: string = " "): BeautifierSettings { diff --git a/tests/VHDLFormatterUnitTests.ts b/tests/VHDLFormatterUnitTests.ts index 276e144..4c0cf48 100644 --- a/tests/VHDLFormatterUnitTests.ts +++ b/tests/VHDLFormatterUnitTests.ts @@ -902,7 +902,6 @@ function IntegrationTest() { IntegrationTest72(); IntegrationTest73(); IntegrationTest74(); - IntegrationTest75(); IntegrationTest76(); IntegrationTest77(); IntegrationTest78(); @@ -1324,15 +1323,6 @@ function IntegrationTest74() { assertAndCountTest("end of line 2", expected, actual); } -function IntegrationTest75() { - let settings = GetDefaultSettings(); - settings.SignAlignSettings = new signAlignSettings(false, true, "", []); - let input = 'test := loooong; -- test\r\ntest := short; -- test'; - let expected = 'test := loooong; -- test\r\ntest := short; -- test'; - let actual = beautify(input, settings); - assertAndCountTest("align comments", expected, actual); -} - function IntegrationTest76() { let settings = GetDefaultSettings(); settings.SignAlignSettings = new signAlignSettings(false, true, "", []);