@@ -95,10 +95,11 @@ private static string DoFix(Paragraph p, Paragraph prev, Encoding encoding, stri
9595 isPrevEndOfLine = true ;
9696 }
9797
98- if ( ( ! text . StartsWith ( "www." , StringComparison . Ordinal ) && ! text . StartsWith ( "http:" , StringComparison . Ordinal ) && ! text . StartsWith ( "https:" , StringComparison . Ordinal ) ) &&
99- ( char . IsLower ( firstLetter ) || Helper . IsTurkishLittleI ( firstLetter , encoding , language ) ) &&
100- ! char . IsDigit ( firstLetter ) &&
101- isPrevEndOfLine )
98+ var isUrl = text . StartsWith ( "www." , StringComparison . Ordinal ) || text . StartsWith ( "http:" , StringComparison . Ordinal ) || text . StartsWith ( "https:" , StringComparison . Ordinal ) ;
99+ // Dutch additionally acts on a leading apostrophe contraction ('s morgens), where
100+ // 'firstLetter' is an apostrophe rather than a lowercase letter.
101+ if ( ! isUrl && ! char . IsDigit ( firstLetter ) && isPrevEndOfLine &&
102+ ( char . IsLower ( firstLetter ) || Helper . IsTurkishLittleI ( firstLetter , encoding , language ) || DutchCasing . IsDutch ( language ) ) )
102103 {
103104 bool isMatchInKnowAbbreviations = language == "en" &&
104105 ( prevText . EndsWith ( " o.r." , StringComparison . Ordinal ) ||
@@ -107,7 +108,12 @@ private static string DoFix(Paragraph p, Paragraph prev, Encoding encoding, stri
107108
108109 if ( ! isMatchInKnowAbbreviations )
109110 {
110- if ( Helper . IsTurkishLittleI ( firstLetter , encoding , language ) )
111+ if ( DutchCasing . IsDutch ( language ) )
112+ {
113+ // Handles 's/'t/etc. contractions (capitalize the next word) and the IJ digraph.
114+ p . Text = pre + DutchCasing . FixSentenceStart ( text ) ;
115+ }
116+ else if ( Helper . IsTurkishLittleI ( firstLetter , encoding , language ) )
111117 {
112118 p . Text = pre + Helper . GetTurkishUppercaseLetter ( firstLetter , encoding ) + text . Substring ( 1 ) ;
113119 }
@@ -174,10 +180,11 @@ private static string DoFix(Paragraph p, Paragraph prev, Encoding encoding, stri
174180 char firstLetter = text [ 0 ] ;
175181 string prevText = HtmlUtil . RemoveHtmlTags ( arr [ 0 ] ) ;
176182 bool isPrevEndOfLine = Helper . IsPreviousTextEndOfParagraph ( prevText ) ;
177- if ( ( ! text . StartsWith ( "www." , StringComparison . Ordinal ) && ! text . StartsWith ( "http:" , StringComparison . Ordinal ) && ! text . StartsWith ( "https:" , StringComparison . Ordinal ) ) &&
178- ( char . IsLower ( firstLetter ) || Helper . IsTurkishLittleI ( firstLetter , encoding , language ) ) &&
183+ var isUrl = text . StartsWith ( "www." , StringComparison . Ordinal ) || text . StartsWith ( "http:" , StringComparison . Ordinal ) || text . StartsWith ( "https:" , StringComparison . Ordinal ) ;
184+ if ( ! isUrl &&
179185 ! prevText . EndsWith ( "..." , StringComparison . Ordinal ) &&
180- isPrevEndOfLine )
186+ isPrevEndOfLine &&
187+ ( char . IsLower ( firstLetter ) || Helper . IsTurkishLittleI ( firstLetter , encoding , language ) || DutchCasing . IsDutch ( language ) ) )
181188 {
182189 bool isMatchInKnowAbbreviations = language == "en" &&
183190 ( prevText . EndsWith ( " o.r." , StringComparison . Ordinal ) ||
@@ -186,7 +193,11 @@ private static string DoFix(Paragraph p, Paragraph prev, Encoding encoding, stri
186193
187194 if ( ! isMatchInKnowAbbreviations )
188195 {
189- if ( Helper . IsTurkishLittleI ( firstLetter , encoding , language ) )
196+ if ( DutchCasing . IsDutch ( language ) )
197+ {
198+ text = pre + DutchCasing . FixSentenceStart ( text ) ;
199+ }
200+ else if ( Helper . IsTurkishLittleI ( firstLetter , encoding , language ) )
190201 {
191202 text = pre + Helper . GetTurkishUppercaseLetter ( firstLetter , encoding ) + text . Substring ( 1 ) ;
192203 }
@@ -302,7 +313,12 @@ private static string DoFix(Paragraph p, Paragraph prev, Encoding encoding, stri
302313 }
303314 else if ( st . StrippedText . Length > 0 && st . StrippedText [ 0 ] != char . ToUpper ( st . StrippedText [ 0 ] ) && ! st . Pre . EndsWith ( '[' ) && ! st . Pre . Contains ( "..." ) )
304315 {
305- text = st . Pre + char . ToUpper ( st . StrippedText [ 0 ] ) + st . StrippedText . Substring ( 1 ) + st . Post ;
316+ // DutchCasing.CapitalizeFirstLetter applies the IJ digraph rule for "nl"; for
317+ // other languages it is equivalent to char.ToUpper on the first letter.
318+ var capitalized = DutchCasing . IsDutch ( language )
319+ ? DutchCasing . CapitalizeFirstLetter ( st . StrippedText )
320+ : char . ToUpper ( st . StrippedText [ 0 ] ) + st . StrippedText . Substring ( 1 ) ;
321+ text = st . Pre + capitalized + st . Post ;
306322 p . Text = p . Text . Remove ( indexOfNewLine + len ) . Insert ( indexOfNewLine + len , text ) ;
307323 }
308324 }
0 commit comments