@@ -15,7 +15,12 @@ public void GetUsfm_Verse_CharStyle()
15
15
16
16
string target = UpdateUsfm ( rows ) ;
17
17
Assert . That ( target , Contains . Substring ( "\\ id MAT - Test\r \n " ) ) ;
18
- Assert . That ( target , Contains . Substring ( "\\ v 1 First verse of the first chapter.\r \n " ) ) ;
18
+ Assert . That (
19
+ target ,
20
+ Contains . Substring (
21
+ "\\ v 1 First verse of the first chapter. \\ f + \\ fr 1:1: \\ ft This is a footnote for v1.\\ f*\r \n \\ li1\r \n \\ v 2"
22
+ )
23
+ ) ;
19
24
}
20
25
21
26
[ Test ]
@@ -28,7 +33,7 @@ public void GetUsfm_IdText()
28
33
[ Test ]
29
34
public void GetUsfm_StripAllText ( )
30
35
{
31
- string target = UpdateUsfm ( behavior : UpdateUsfmBehavior . StripExisting ) ;
36
+ string target = UpdateUsfm ( textBehavior : UpdateUsfmTextBehavior . StripExisting ) ;
32
37
Assert . That ( target , Contains . Substring ( "\\ id MAT\r \n " ) ) ;
33
38
Assert . That ( target , Contains . Substring ( "\\ v 1\r \n " ) ) ;
34
39
Assert . That ( target , Contains . Substring ( "\\ s\r \n " ) ) ;
@@ -43,7 +48,7 @@ public void GetUsfm_PreferExisting()
43
48
( ScrRef ( "MAT 1:6" ) , "Text 6" ) ,
44
49
( ScrRef ( "MAT 1:7" ) , "Text 7" ) ,
45
50
} ;
46
- string target = UpdateUsfm ( rows , behavior : UpdateUsfmBehavior . PreferExisting ) ;
51
+ string target = UpdateUsfm ( rows , textBehavior : UpdateUsfmTextBehavior . PreferExisting ) ;
47
52
Assert . That ( target , Contains . Substring ( "\\ id MAT - Test\r \n " ) ) ;
48
53
Assert . That ( target , Contains . Substring ( "\\ v 6 Verse 6 content.\r \n " ) ) ;
49
54
Assert . That ( target , Contains . Substring ( "\\ v 7 Text 7\r \n " ) ) ;
@@ -57,26 +62,43 @@ public void GetUsfm_PreferRows()
57
62
( ScrRef ( "MAT 1:6" ) , "Text 6" ) ,
58
63
( ScrRef ( "MAT 1:7" ) , "Text 7" ) ,
59
64
} ;
60
- string target = UpdateUsfm ( rows , behavior : UpdateUsfmBehavior . PreferNew ) ;
65
+ string target = UpdateUsfm ( rows , textBehavior : UpdateUsfmTextBehavior . PreferNew ) ;
61
66
Assert . That ( target , Contains . Substring ( "\\ id MAT - Test\r \n " ) ) ;
62
67
Assert . That ( target , Contains . Substring ( "\\ v 6 Text 6\r \n " ) ) ;
63
68
Assert . That ( target , Contains . Substring ( "\\ v 7 Text 7\r \n " ) ) ;
64
69
}
65
70
66
71
[ Test ]
67
- public void GetUsfm_Verse_SkipNote ( )
72
+ public void GetUsfm_Verse_StripNote ( )
68
73
{
69
74
var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
70
75
{
71
76
( ScrRef ( "MAT 2:1" ) , "First verse of the second chapter." )
72
77
} ;
73
78
74
- string target = UpdateUsfm ( rows ) ;
79
+ string target = UpdateUsfm ( rows , embeddedBehavior : UpdateUsfmIntraVerseMarkerBehavior . Strip ) ;
75
80
Assert . That ( target , Contains . Substring ( "\\ v 1 First verse of the second chapter.\r \n " ) ) ;
76
81
}
77
82
78
83
[ Test ]
79
- public void GetUsfm_Verse_ReplaceNote ( )
84
+ public void GetUsfm_Verse_StripNotesWithUpdatedVerseText ( )
85
+ {
86
+ var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
87
+ {
88
+ ( ScrRef ( "MAT 1:1" ) , "First verse of the first chapter." )
89
+ } ;
90
+
91
+ string target = UpdateUsfm ( rows , embeddedBehavior : UpdateUsfmIntraVerseMarkerBehavior . Strip ) ;
92
+ Assert . That ( target , Contains . Substring ( "\\ id MAT - Test\r \n " ) ) ;
93
+ Assert . That (
94
+ target ,
95
+ Contains . Substring ( "\\ ip An introduction to Matthew with an empty comment\\ fe + \\ ft \\ fe*" )
96
+ ) ;
97
+ Assert . That ( target , Contains . Substring ( "\\ v 1 First verse of the first chapter.\r \n \\ li1\r \n \\ v 2" ) ) ;
98
+ }
99
+
100
+ [ Test ]
101
+ public void GetUsfm_Verse_ReplaceNoteKeepReference ( )
80
102
{
81
103
var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
82
104
{
@@ -87,7 +109,45 @@ public void GetUsfm_Verse_ReplaceNote()
87
109
string target = UpdateUsfm ( rows ) ;
88
110
Assert . That (
89
111
target ,
90
- Contains . Substring ( "\\ v 1 First verse of the second chapter. \\ f + \\ ft This is a new footnote.\\ f*\r \n " )
112
+ Contains . Substring (
113
+ "\\ v 1 First verse of the second chapter. \\ f + \\ fr 2:1: \\ ft This is a new footnote. \\ f*\r \n "
114
+ )
115
+ ) ;
116
+ }
117
+
118
+ [ Test ]
119
+ public void GetUsfm_Verse_PreserveFiguresAndReferences ( )
120
+ {
121
+ var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
122
+ {
123
+ // fig
124
+ ( ScrRef ( "MAT 1:5" ) , "Fifth verse of the first chapter." ) ,
125
+ ( ScrRef ( "MAT 1:5/1:fig" ) , "figure text not updated" ) ,
126
+ // r
127
+ ( ScrRef ( "MAT 2:0/1:r" ) , "parallel reference not updated" ) ,
128
+ // rq
129
+ ( ScrRef ( "MAT 2:5/1:rq" ) , "quote reference not updated" ) ,
130
+ // xo
131
+ ( ScrRef ( "MAT 2:6/3:xo" ) , "Cross reference not update" ) ,
132
+ // xt
133
+ ( ScrRef ( "MAT 2:6/4:xt" ) , "cross reference - target reference not updated" ) ,
134
+ // xta
135
+ ( ScrRef ( "MAT 2:6/5:xta" ) , "cross reference annotation updated" ) ,
136
+ } ;
137
+
138
+ string target = UpdateUsfm ( rows ) ;
139
+ Assert . That (
140
+ target ,
141
+ Contains . Substring (
142
+ "\\ v 5 Fifth verse of the first chapter.\r \n \\ li2 \\ fig Figure 1|src=\" image1.png\" size=\" col\" ref=\" 1:5\" \\ fig*\r \n \\ v 6"
143
+ )
144
+ ) ;
145
+ Assert . That ( target , Contains . Substring ( "\\ r (Mark 1:2-3; Luke 4:5-6)\r \n " ) ) ;
146
+ Assert . That (
147
+ target ,
148
+ Contains . Substring (
149
+ "\\ v 6 Bad verse. \\ x - \\ xo 2:3-4 \\ xt Cool Book 3:24 \\ xta The annotation \\ x* and more content.\r \n "
150
+ )
91
151
) ;
92
152
}
93
153
@@ -100,7 +160,12 @@ public void GetUsfm_Verse_RowVerseSegment()
100
160
} ;
101
161
102
162
string target = UpdateUsfm ( rows ) ;
103
- Assert . That ( target , Contains . Substring ( "\\ v 1 First verse of the second chapter.\r \n " ) ) ;
163
+ Assert . That (
164
+ target ,
165
+ Contains . Substring (
166
+ "\\ v 1 First verse of the second chapter. \\ f + \\ fr 2:1: \\ ft This is a \\ bd footnote.\\ bd*\\ f*\r \n "
167
+ )
168
+ ) ;
104
169
}
105
170
106
171
[ Test ]
@@ -124,7 +189,12 @@ public void GetUsfm_Verse_MultipleParas()
124
189
} ;
125
190
126
191
string target = UpdateUsfm ( rows ) ;
127
- Assert . That ( target , Contains . Substring ( "\\ v 2 Second verse of the first chapter.\r \n \\ li2\r \n " ) ) ;
192
+ Assert . That (
193
+ target ,
194
+ Contains . Substring (
195
+ "\\ v 2 Second verse of the first chapter.\r \n \\ li2 \\ f + \\ fr 1:2: \\ ft This is a footnote for v2.\\ f*"
196
+ )
197
+ ) ;
128
198
}
129
199
130
200
[ Test ]
@@ -200,7 +270,7 @@ public void GetUsfm_MergeVerseSegments()
200
270
} ;
201
271
202
272
string target = UpdateUsfm ( rows ) ;
203
- Assert . That ( target , Contains . Substring ( "\\ v 2-3 Verse 2. Verse 2a. Verse 2b.\r \n " ) ) ;
273
+ Assert . That ( target , Contains . Substring ( "\\ v 2-3 Verse 2. Verse 2a. Verse 2b. \\ fm ∆ \\ fm* \r \n " ) ) ;
204
274
}
205
275
206
276
[ Test ]
@@ -212,7 +282,7 @@ public void GetUsfm_Verse_OptBreak()
212
282
( ScrRef ( "MAT 2:3" ) , "Third verse of the second chapter." )
213
283
} ;
214
284
215
- string target = UpdateUsfm ( rows ) ;
285
+ string target = UpdateUsfm ( rows , embeddedBehavior : UpdateUsfmIntraVerseMarkerBehavior . Strip ) ;
216
286
Assert . That (
217
287
target ,
218
288
Contains . Substring ( "\\ v 2-3 Second verse of the second chapter. Third verse of the second chapter.\r \n " )
@@ -278,7 +348,12 @@ public void GetUsfm_NonVerse_Relaxed()
278
348
279
349
string target = UpdateUsfm ( rows ) ;
280
350
Assert . That ( target , Contains . Substring ( "\\ s The first chapter.\r \n " ) ) ;
281
- Assert . That ( target , Contains . Substring ( "\\ v 1 First verse of the first chapter.\r \n " ) ) ;
351
+ Assert . That (
352
+ target ,
353
+ Contains . Substring (
354
+ "\\ v 1 First verse of the first chapter. \\ f + \\ fr 1:1: \\ ft This is a footnote for v1.\\ f*\r \n "
355
+ )
356
+ ) ;
282
357
Assert . That (
283
358
target ,
284
359
Contains . Substring ( "\\ tr \\ tc1 The first cell of the table. \\ tc2 The second cell of the table.\r \n " )
@@ -294,7 +369,7 @@ public void GetUsfm_NonVerse_Sidebar()
294
369
{
295
370
var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
296
371
{
297
- ( ScrRef ( "MAT 2:3/1 :esb/1:ms" ) , "The first paragraph of the sidebar." )
372
+ ( ScrRef ( "MAT 2:3/2 :esb/1:ms" ) , "The first paragraph of the sidebar." )
298
373
} ;
299
374
300
375
string target = UpdateUsfm ( rows ) ;
@@ -326,7 +401,7 @@ public void GetUsfm_NonVerse_OptBreak()
326
401
{
327
402
var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
328
403
{
329
- ( ScrRef ( "MAT 2:3/1 :esb/2:p" ) , "The second paragraph of the sidebar." )
404
+ ( ScrRef ( "MAT 2:3/2 :esb/2:p" ) , "The second paragraph of the sidebar." )
330
405
} ;
331
406
332
407
string target = UpdateUsfm ( rows ) ;
@@ -345,6 +420,18 @@ public void GetUsfm_NonVerse_Milestone()
345
420
Assert . That ( target , Contains . Substring ( "\\ s A new section header. \\ ts-s\\ *\r \n " ) ) ;
346
421
}
347
422
423
+ [ Test ]
424
+ public void GetUsfm_NonVerse_KeepNote ( )
425
+ {
426
+ var rows = new List < ( IReadOnlyList < ScriptureRef > , string ) >
427
+ {
428
+ ( ScrRef ( "MAT 1:0/3:ip" ) , "The introductory paragraph." )
429
+ } ;
430
+
431
+ string target = UpdateUsfm ( rows , embeddedBehavior : UpdateUsfmIntraVerseMarkerBehavior . Preserve ) ;
432
+ Assert . That ( target , Contains . Substring ( "\\ ip The introductory paragraph. \\ fe + \\ ft \\ fe*\r \n " ) ) ;
433
+ }
434
+
348
435
[ Test ]
349
436
public void GetUsfm_NonVerse_SkipNote ( )
350
437
{
@@ -353,7 +440,7 @@ public void GetUsfm_NonVerse_SkipNote()
353
440
( ScrRef ( "MAT 1:0/3:ip" ) , "The introductory paragraph." )
354
441
} ;
355
442
356
- string target = UpdateUsfm ( rows ) ;
443
+ string target = UpdateUsfm ( rows , embeddedBehavior : UpdateUsfmIntraVerseMarkerBehavior . Strip ) ;
357
444
Assert . That ( target , Contains . Substring ( "\\ ip The introductory paragraph.\r \n " ) ) ;
358
445
}
359
446
@@ -369,7 +456,7 @@ public void GetUsfm_NonVerse_ReplaceNote()
369
456
string target = UpdateUsfm ( rows ) ;
370
457
Assert . That (
371
458
target ,
372
- Contains . Substring ( "\\ ip The introductory paragraph. \\ fe + \\ ft This is a new endnote.\\ fe*\r \n " )
459
+ Contains . Substring ( "\\ ip The introductory paragraph. \\ fe + \\ ft This is a new endnote. \\ fe*\r \n " )
373
460
) ;
374
461
}
375
462
@@ -426,7 +513,7 @@ public void GetUsfm_Verse_PretranslationsBeforeText()
426
513
} ;
427
514
428
515
string target = UpdateUsfm ( rows ) ;
429
- Assert . That ( target , Contains . Substring ( "\\ ip The introductory paragraph.\r \n " ) ) ;
516
+ Assert . That ( target , Contains . Substring ( "\\ ip The introductory paragraph. \\ fe + \\ ft \\ fe* \r \n " ) ) ;
430
517
}
431
518
432
519
private static ScriptureRef [ ] ScrRef ( params string [ ] refs )
@@ -438,18 +525,20 @@ private static string UpdateUsfm(
438
525
IReadOnlyList < ( IReadOnlyList < ScriptureRef > , string ) > ? rows = null ,
439
526
string ? source = null ,
440
527
string ? idText = null ,
441
- UpdateUsfmBehavior behavior = UpdateUsfmBehavior . PreferNew
528
+ UpdateUsfmTextBehavior textBehavior = UpdateUsfmTextBehavior . PreferNew ,
529
+ UpdateUsfmIntraVerseMarkerBehavior embeddedBehavior = UpdateUsfmIntraVerseMarkerBehavior . Preserve ,
530
+ UpdateUsfmIntraVerseMarkerBehavior styleBehavior = UpdateUsfmIntraVerseMarkerBehavior . Strip
442
531
)
443
532
{
444
533
if ( source is null )
445
534
{
446
535
var updater = new FileParatextProjectTextUpdater ( CorporaTestHelpers . UsfmTestProjectPath ) ;
447
- return updater . UpdateUsfm ( "MAT" , rows , idText , behavior ) ;
536
+ return updater . UpdateUsfm ( "MAT" , rows , idText , textBehavior , embeddedBehavior , styleBehavior ) ;
448
537
}
449
538
else
450
539
{
451
540
source = source . Trim ( ) . ReplaceLineEndings ( "\r \n " ) + "\r \n " ;
452
- var updater = new UpdateUsfmParserHandler ( rows , idText , behavior ) ;
541
+ var updater = new UpdateUsfmParserHandler ( rows , idText , textBehavior , embeddedBehavior , styleBehavior ) ;
453
542
UsfmParser . Parse ( source , updater ) ;
454
543
return updater . GetUsfm ( ) ;
455
544
}
0 commit comments