@@ -33,7 +33,12 @@ protected ScriptureRefUsfmParserHandlerBase()
3333
3434 private static bool IsEmbedStyle ( string marker )
3535 {
36- return marker != null && ( EmbedStyles . Contains ( marker . Trim ( '*' ) ) || marker . StartsWith ( "z" ) ) ;
36+ return marker != null && EmbedStyles . Contains ( marker . Trim ( '*' ) ) ;
37+ }
38+
39+ private static bool IsPrivateUseMarker ( string marker )
40+ {
41+ return marker != null && marker . StartsWith ( "z" ) ;
3742 }
3843
3944 public override void EndUsfm ( UsfmParserState state )
@@ -63,9 +68,12 @@ string pubNumber
6368 {
6469 if ( state . VerseRef . Equals ( _curVerseRef ) && ! _duplicateVerse )
6570 {
66- EndVerseText ( state , CreateVerseRefs ( ) ) ;
67- // ignore duplicate verses
68- _duplicateVerse = true ;
71+ if ( state . VerseRef . VerseNum > 0 )
72+ {
73+ EndVerseText ( state , CreateVerseRefs ( ) ) ;
74+ // ignore duplicate verses
75+ _duplicateVerse = true ;
76+ }
6977 }
7078 else if ( VerseRef . AreOverlappingVersesRanges ( verse1 : number , verse2 : _curVerseRef . Verse ) )
7179 {
@@ -92,6 +100,10 @@ public override void StartPara(
92100 IReadOnlyList < UsfmAttribute > attributes
93101 )
94102 {
103+ // ignore private-use markers
104+ if ( IsPrivateUseMarker ( marker ) )
105+ return ;
106+
95107 if ( _curVerseRef . IsDefault )
96108 UpdateVerseRef ( state . VerseRef , marker ) ;
97109
@@ -104,6 +116,10 @@ IReadOnlyList<UsfmAttribute> attributes
104116
105117 public override void EndPara ( UsfmParserState state , string marker )
106118 {
119+ // ignore private-use markers
120+ if ( IsPrivateUseMarker ( marker ) )
121+ return ;
122+
107123 if ( CurrentTextType == ScriptureTextType . NonVerse )
108124 {
109125 EndParentElement ( ) ;
@@ -185,6 +201,10 @@ public override void StartChar(
185201 IReadOnlyList < UsfmAttribute > attributes
186202 )
187203 {
204+ // ignore private-use markers
205+ if ( IsPrivateUseMarker ( markerWithoutPlus ) )
206+ return ;
207+
188208 // if we hit a character marker in a verse paragraph and we aren't in a verse, then start a non-verse
189209 // segment
190210 CheckConvertVerseParaToNonVerse ( state ) ;
@@ -199,6 +219,10 @@ public override void EndChar(
199219 bool closed
200220 )
201221 {
222+ // ignore private-use markers
223+ if ( IsPrivateUseMarker ( marker ) )
224+ return ;
225+
202226 if ( IsEmbedStyle ( marker ) )
203227 EndEmbedText ( state ) ;
204228 }
@@ -332,6 +356,7 @@ private void CheckConvertVerseParaToNonVerse(UsfmParserState state)
332356 && paraTag . Marker != "tr"
333357 && state . IsVersePara
334358 && _curVerseRef . VerseNum == 0
359+ && ! IsPrivateUseMarker ( paraTag . Marker )
335360 )
336361 {
337362 StartParentElement ( paraTag . Marker ) ;
0 commit comments