@@ -472,38 +472,36 @@ public void GeneratePoemsOfYearByDayRadarChartDataFile(Root data, int year)
472472 /// and categorizes them by seasons or a general context.
473473 /// This method processes the given poems from the Root object and distinguishes regular,
474474 /// variable, and undefined metrics. It outputs:
475- /// - A pie chart file "poems-verse-length-pie.js" when a general context is used (seasonId is null).
475+ /// - A pie chart file "poems-verse-length-pie.js" when a general context is used (seasonId is null, forSonnet is falsy).
476+ /// - A bar chart file "metrique_variable-bar.js" when a general context is used (seasonId is null, forSonnet is falsy).
476477 /// - A bar chart file "poems-verse-length-bar.js" when a specific season is selected.
477- /// - A bar chart file "metrique_variable-bar .js" when a general context is used (seasonId is null) .
478+ /// - A pie chart file "sonnet-verse-length-pie .js" when forSonnet is true .
478479 /// </summary>
479480 /// <param name="data">The root object containing seasons and poems data.</param>
480481 /// <param name="seasonId">An optional season identifier to filter poems by season. If null, all seasons are included.</param>
481- public void GeneratePoemMetricBarAndPieChartDataFile ( Root data , int ? seasonId )
482+ /// <param name="forSonnet">A flag indicating that only poems of type sonnet are taken into account.</param>
483+ public void GeneratePoemMetricBarAndPieChartDataFile ( Root data , int ? seasonId , bool ? forSonnet = false )
482484 {
483- var isGeneral = seasonId is null ;
485+ var isGeneral = seasonId is null && forSonnet != true ;
484486 var rootDir = Path . Combine ( Directory . GetCurrentDirectory ( ) ,
485487 configuration [ Constants . CHART_DATA_FILES_ROOT_DIR ] ! ) ;
486- var fileName = isGeneral ? "poems-verse-length-pie.js" : "poems-verse-length-bar .js" ;
487- var subDir = isGeneral ? "general" : $ "season-{ seasonId } ";
488- var chartId = isGeneral ? "poemVerseLengthPie" : $ "season{ seasonId } VerseLengthBar";
488+ var fileName = seasonId is not null ? "poems-verse-length-bar.js" : forSonnet == true ? "sonnet-verse-length- pie.js" : "poems-verse-length-pie .js" ;
489+ var subDir = seasonId is not null ? $ "season-{ seasonId } " : forSonnet == true ? "taxonomy" : "general ";
490+ var chartId = seasonId is not null ? $ "season{ seasonId } VerseLengthBar" : forSonnet == true ? "sonnetVerseLengthPie" : "poemVerseLengthPie ";
489491 using var streamWriter = new StreamWriter ( Path . Combine ( rootDir , subDir , fileName ) ) ;
490492 var chartDataFileHelper = new ChartDataFileHelper ( streamWriter ,
491- isGeneral ? ChartType . Pie : ChartType . Bar , 1 ) ;
493+ seasonId is not null ? ChartType . Bar : ChartType . Pie , 1 ) ;
492494 chartDataFileHelper . WriteBeforeData ( ) ;
493495 var regularMetricData = new Dictionary < int , int > ( ) ;
494496 var variableMetricData = new Dictionary < string , int > ( ) ;
495- var nbUndefinedVerseLength = 0 ;
496497 var poems = seasonId is not null
497498 ? data . Seasons . First ( x => x . Id == seasonId ) . Poems
499+ : forSonnet == true ? data . Seasons . SelectMany ( x => x . Poems ) . Where ( x => x . PoemType == "sonnet" )
498500 : data . Seasons . SelectMany ( x => x . Poems ) ;
499501
500502 foreach ( var poem in poems )
501503 {
502- if ( string . IsNullOrEmpty ( poem . VerseLength ) )
503- {
504- nbUndefinedVerseLength ++ ;
505- }
506- else if ( poem . HasVariableMetric )
504+ if ( poem . HasVariableMetric )
507505 {
508506 if ( isGeneral )
509507 {
@@ -563,14 +561,10 @@ public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId)
563561 variableMetricChartData . Add ( new ( verseLength , variableMetricData [ verseLength ] , "rgba(72, 149, 239, 1)" ) ) ;
564562 }
565563
566- var undefinedVerseLengthChartData = new ColoredDataLine
567- ( "Pas de données pour l\\ 'instant" , nbUndefinedVerseLength , "rgb(211, 211, 211)"
568- ) ;
569-
570- // General pie chart or Season's bar chart
564+ // General/for sonnet pie chart vs Season's bar chart
571565 var dataLines = new List < DataLine > ( ) ;
572566
573- if ( isGeneral )
567+ if ( seasonId is null || forSonnet == true )
574568 {
575569 var metrics = configuration . GetSection ( Constants . METRIC_SETTINGS ) . Get < MetricSettings > ( ) ! . Metrics ;
576570 var coloredDataLines = new List < ColoredDataLine > ( ) ;
@@ -591,9 +585,7 @@ public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId)
591585 {
592586 dataLines . AddRange ( regularMetricChartData ) ;
593587 dataLines . AddRange ( variableMetricChartData ) ;
594- if ( nbUndefinedVerseLength > 0 )
595- dataLines . Add ( undefinedVerseLengthChartData ) ;
596-
588+
597589 chartDataFileHelper . WriteData ( dataLines , true ) ;
598590
599591 chartDataFileHelper . WriteAfterData ( chartId , [ "Poèmes" ] ,
@@ -1635,7 +1627,6 @@ private void GenerateTopMostCategoriesListing(IEnumerable<Poem> poems, string fi
16351627 streamWriter . Close ( ) ;
16361628 }
16371629
1638-
16391630 /// <summary>
16401631 /// Retrieves the top most represented months from the provided dictionary of month-day data.
16411632 /// The method aggregates the data by month, ranks the months by their total occurrences,
0 commit comments