private static void OpenHeader(StringBuilder details, StringBuilder terse, int tabLevel, StatusRatingRange range = (StatusRatingRange)(-1), string?color = null) { if (terse != null) { terse.Append(new string(' ', tabLevel - 1)); if (range != (StatusRatingRange)(-1)) { string symbolPrefix = StatusRating.GetRangeSymbol(range) + " "; terse.Append(symbolPrefix); } } details.Append('<'); details.Append(RenderLevelString(tabLevel)); if (!string.IsNullOrEmpty(color)) { details.Append(" style=\"color:" + color + "\""); } details.Append('>'); }
/// <summary> /// Enters a status range section for the range indicated by the rating. /// Should be matched by a subsequent call to <see cref="LeaveStatusRange"/>. /// </summary> /// <param name="rating">The status rating.</param> public void EnterStatusRange(float rating) { StatusRatingRange range = StatusRating.FindRange(rating); string rangeName = StatusRating.GetRangeName(range); string rangeColor = StatusRating.GetRangeForegroundColor(range); if (_tabLevel > 1) { throw new InvalidOperationException("All targets and status ranges must be closed before entering a new status range!"); } _details.Append("<div class=\""); #pragma warning disable CA1308 // this is to convert the range name from the C# style casing (Pascal) to the HTML style casing (kebab) _details.Append(rangeName.ToLowerInvariant()); #pragma warning restore CA1308 _details.Append("-range\">"); OpenHeader(_details, _terse, _tabLevel, range, rangeColor); _currentSectionRatingRange = range; _terse.Append(rangeName.ToUpperInvariant()); _details.Append(StatusRating.GetRangeSymbol(range)); _details.Append(' '); _details.Append(rangeName); if (_notificationTime != null) { _terse.Append(" @"); _terse.Append(_notificationTime.Value.ToShortTimeString()); _details.Append(" at "); _details.Append(_notificationTime.Value.ToLongTimeString()); _notificationTime = null; } CloseHeader(_details, _terse, _tabLevel); EnterTabLevel(); }