Anton Tarasenko
2 years ago
1 changed files with 152 additions and 0 deletions
@ -0,0 +1,152 @@ |
|||||||
|
/** |
||||||
|
* Interface class for providing static methods for working with errors, |
||||||
|
* that can arise from parsing formatted strings. |
||||||
|
* Copyright 2022 Anton Tarasenko |
||||||
|
*------------------------------------------------------------------------------ |
||||||
|
* This file is part of Acedia. |
||||||
|
* |
||||||
|
* Acedia is free software: you can redistribute it and/or modify |
||||||
|
* it under the terms of the GNU General Public License as published by |
||||||
|
* the Free Software Foundation, version 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* Acedia is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||||
|
*/ |
||||||
|
class FormattingReportTool extends AcediaObject |
||||||
|
abstract; |
||||||
|
|
||||||
|
var private const int TCASES, TREPORT_HEADER, TUNMATCHED_SINGLE; |
||||||
|
var private const int TUNMATCHED_MULTIPLE, TEMPTY_TAG_SINGLE; |
||||||
|
var private const int TEMPTY_TAG_MULTIPLE, TBAD_COLOR, TBAD_GRADIENT_POINT; |
||||||
|
var private const int TBADSHORT_TAG; |
||||||
|
|
||||||
|
/** |
||||||
|
* Outputs report about formatting errors given by `errors` array. |
||||||
|
* Reports will be made only if at least one error exists. |
||||||
|
* |
||||||
|
* @param writer `ConsoleWriter` to output report into. |
||||||
|
* @param errors Formatting errors to report. |
||||||
|
*/ |
||||||
|
public final static function Report( |
||||||
|
ConsoleWriter writer, |
||||||
|
array<FormattingErrorsReport.FormattedStringError> errors) |
||||||
|
{ |
||||||
|
local int i; |
||||||
|
local ReportTool reportTool; |
||||||
|
reportTool = ReportTool(__().memory.Allocate(class'ReportTool')); |
||||||
|
reportTool.Initialize(T(default.TREPORT_HEADER)); |
||||||
|
for (i = 0; i < errors.length; i += 1) |
||||||
|
{ |
||||||
|
if (errors[i].type == FSE_UnmatchedClosingBrackets) |
||||||
|
{ |
||||||
|
ReportCount( |
||||||
|
errors[i], |
||||||
|
reportTool, |
||||||
|
default.TUNMATCHED_SINGLE, |
||||||
|
default.TUNMATCHED_MULTIPLE); |
||||||
|
} |
||||||
|
else if (errors[i].type == FSE_EmptyColorTag) |
||||||
|
{ |
||||||
|
ReportCount( |
||||||
|
errors[i], |
||||||
|
reportTool, |
||||||
|
default.TEMPTY_TAG_SINGLE, |
||||||
|
default.TEMPTY_TAG_MULTIPLE); |
||||||
|
} |
||||||
|
else if (errors[i].type == FSE_BadColor) { |
||||||
|
reportTool.Item(T(default.TBAD_COLOR)).Detail(errors[i].cause); |
||||||
|
} |
||||||
|
else if (errors[i].type == FSE_BadShortColorTag) { |
||||||
|
reportTool.Item(T(default.TBADSHORT_TAG)).Detail(errors[i].cause); |
||||||
|
} |
||||||
|
else if (errors[i].type == FSE_BadGradientPoint) |
||||||
|
{ |
||||||
|
reportTool |
||||||
|
.Item(T(default.TBAD_GRADIENT_POINT)) |
||||||
|
.Detail(errors[i].cause); |
||||||
|
} |
||||||
|
} |
||||||
|
reportTool.Report(writer); |
||||||
|
__().memory.Free(reportTool); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* `FormattedStringError` is a struct that can contain a `Text` object that |
||||||
|
* needs to be deallocated. This is convenience method that does that. |
||||||
|
* |
||||||
|
* @param errors Errors, whos `cause` filds must deallocated. |
||||||
|
*/ |
||||||
|
public final static function FreeErrors( |
||||||
|
array<FormattingErrorsReport.FormattedStringError> errors) |
||||||
|
{ |
||||||
|
local int i; |
||||||
|
for (i = 0; i < errors.length; i += 1) { |
||||||
|
__().memory.Free(errors[i].cause); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private final static function ReportCause( |
||||||
|
FormattingErrorsReport.FormattedStringError error, |
||||||
|
ReportTool reportTool, |
||||||
|
int sentence) |
||||||
|
{ |
||||||
|
local MutableText builder; |
||||||
|
if (error.cause == none) { |
||||||
|
return; |
||||||
|
} |
||||||
|
reportTool.Item(T(sentence)); |
||||||
|
builder = __().text.FromIntM(error.count).Append(T(default.TCASES)); |
||||||
|
reportTool.Detail(builder); |
||||||
|
__().memory.Free(builder); |
||||||
|
} |
||||||
|
|
||||||
|
// In the methods below, do not double check the error type in the following |
||||||
|
// errors or whether `reportTool != none` |
||||||
|
private final static function ReportCount( |
||||||
|
FormattingErrorsReport.FormattedStringError error, |
||||||
|
ReportTool reportTool, |
||||||
|
int singleSentence, |
||||||
|
int multipleSentence) |
||||||
|
{ |
||||||
|
local MutableText builder; |
||||||
|
if (error.count < 1) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (error.count == 1) |
||||||
|
{ |
||||||
|
reportTool.Item(T(singleSentence)); |
||||||
|
return; |
||||||
|
} |
||||||
|
reportTool.Item(T(multipleSentence)); |
||||||
|
builder = __().text.FromIntM(error.count).Append(T(default.TCASES)); |
||||||
|
reportTool.Detail(builder); |
||||||
|
__().memory.Free(builder); |
||||||
|
} |
||||||
|
|
||||||
|
defaultproperties |
||||||
|
{ |
||||||
|
TCASES = 0 |
||||||
|
stringConstants(0) = " cases" |
||||||
|
TREPORT_HEADER = 1 |
||||||
|
stringConstants(1) = "{$TextFailure Following formatting errors were found}:" |
||||||
|
TUNMATCHED_SINGLE = 2 |
||||||
|
stringConstants(2) = "unmatched closing curly bracket '&}'" |
||||||
|
TUNMATCHED_MULTIPLE = 3 |
||||||
|
stringConstants(3) = "several unmatched closing curly brackets '&}'" |
||||||
|
TEMPTY_TAG_SINGLE = 4 |
||||||
|
stringConstants(4) = "empty formatting tag" |
||||||
|
TEMPTY_TAG_MULTIPLE = 5 |
||||||
|
stringConstants(5) = "several empty formatting tag" |
||||||
|
TBAD_COLOR = 6 |
||||||
|
stringConstants(6) = "bad color" |
||||||
|
TBAD_GRADIENT_POINT = 7 |
||||||
|
stringConstants(7) = "bad gradient point" |
||||||
|
TBADSHORT_TAG = 8 |
||||||
|
stringConstants(8) = "bad short tag" |
||||||
|
} |
Loading…
Reference in new issue