diff --git a/noticeList.txt b/noticeList.txt index 03a79a02..9aa0fa4c 100644 --- a/noticeList.txt +++ b/noticeList.txt @@ -1,5 +1,5 @@ -Last updated 2021-10-29 07:30:39.509173 by makeNoticeList.py -Got 627 notices: +Last updated 2021-11-01 13:39:34.399155 by makeNoticeList.py +Got 635 notices: standardisedNoticeList.push( 1, `Reduced numbers of similar and hidden messages because of large list ($standardisedNoticeList.length.toLocaleString())`, location: " during notice processing" from notice-processing-functions.js line 505 previousObject.hiddenNotices.push( thisNotice.priority, maximumHiddenNoticesMessage from notice-processing-functions.js line 629 previousObject.hiddenNotices.push( thisNotice.priority, maximumHiddenNoticesMessage from notice-processing-functions.js line 645 @@ -11,30 +11,31 @@ Got 627 notices: checkFileResultObject.noticeList.unshift( 995, "File extension is not recognized, so treated as plain text.", filename: filepath, location: ourCFLocation from checkFileContents.js line 122 thisRepoCode === 'SN' || thisRepoCode === 'SQ' ? 196 : 996, "Unable to load book package file", username: adjustedUsername, repoCode: thisRepoCode, repoName, filename, location: repoLocation, extra: thisRepoCode ; from checkBookPackage.js line 454 checkRepoResult.noticeList.push( 997, "Repository doesn’t exist", username, repoCode, repoName, location: givenLocation, extra: repoCode from checkRepo.js line 319 - expectedMarker === 'mt1' ? 921 : 519, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 688 - languageCode === 'en' || languageCode === 'fr' ? 490 : 190, "Expected header field to contain a mixed-case string", fieldName: `\\$marker`, excerpt: rest, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,393 - marker === 's5' ? 111 : 809, `$marker === 's5' ? 'Deprecated' : 'Unexpected' '\\$marker' marker at start of line`, C, V, lineNumber, characterIndex: 1, location: lineLocation from usfm-text-check.js line 1,431 - line[0] === ' ' || line[0] === '"' ? 180 : 880, C, V, "Expected line to start with backslash", lineNumber: n, characterIndex: 0, excerpt: line[0], location: ourLocation from usfm-text-check.js line 1,571 - C === '1' ? 657 : 457, C, V, "Paragraph marker expected before first verse", lineNumber: n, characterIndex: 1, details: `'\\$marker' after '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,665 - (punctCharBeingChecked === '—' || punctCharBeingChecked === '/') && fieldType.startsWith('markdown') ? 72 : 192, `Unexpected space after $punctCharBeingChecked character`, excerpt, location: ourLocation ; from field-text-check.js line 351 - thisPriority, `Mismatched $leftChar$rightChar characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from field-text-check.js line 494 - thisPriority, thisMessage, excerpt: regexMatchObject[0], location: ourLocation from field-text-check.js line 509 + expectedMarker === 'mt1' ? 921 : 519, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 690 + languageCode === 'en' || languageCode === 'fr' ? 490 : 190, "Expected header field to contain a mixed-case string", fieldName: `\\$marker`, excerpt: rest, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,395 + marker === 's5' ? 111 : 809, `$marker === 's5' ? 'Deprecated' : 'Unexpected' '\\$marker' marker at start of line`, C, V, lineNumber, characterIndex: 1, location: lineLocation from usfm-text-check.js line 1,433 + line[0] === ' ' || line[0] === '"' ? 180 : 880, C, V, "Expected line to start with backslash", lineNumber: n, characterIndex: 0, excerpt: line[0], location: ourLocation from usfm-text-check.js line 1,573 + C === '1' ? 657 : 457, C, V, "Paragraph marker expected before first verse", lineNumber: n, characterIndex: 1, details: `'\\$marker' after '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,667 + (punctCharBeingChecked === '—' || punctCharBeingChecked === '/') && fieldType.startsWith('markdown') ? 72 : 192, `Unexpected space after $punctCharBeingChecked$optionalName character`, excerpt, location: ourLocation ; from field-text-check.js line 357 + thisPriority, `Mismatched $leftChar$rightChar characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from field-text-check.js line 502 + thisPriority, thisMessage, excerpt: regexMatchObject[0], location: ourLocation from field-text-check.js line 517 foundQuoteSegment.indexOf(' ') !== -1 || fullVerseText.search(` $foundQuoteSegment`) === -1 ? 909 : 389, "Seems original language quote might not start at the beginning of a word", details, characterIndex: 0, excerpt, location from orig-quote-check.js line 348 foundQuoteSegment.indexOf(' ') !== -1 || fullVerseText.search(followingRegex) === -1 ? 908 : 388, "Seems original language quote might not finish at the end of a word", details, characterIndex: foundQuoteSegment.length, excerpt, location from orig-quote-check.js line 368 languageCode === 'en' ? 237 : 37, "File contains straight double-quote(s)", characterIndex, excerpt, location: ourLocation from plain-text-check.js line 190 leftChar === '“' ? 162 : 462, `Mismatched $leftChar$rightChar characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from plain-text-check.js line 277 repoCode === 'SQ' ? 919 : 119, "Missing Quote field", details: `should Occurrence be zero instead of $occurrence`, fieldName: 'Quote', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 424 intV2 < lastintV ? from questions-tsv7-table-check.js line 237 - optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 739 - optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 805 - optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 955 - B1 === 'Song of Solomon' ? from notes-links-check.js line 1,013 - optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 1,077 - optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 1,142 - B1 === 'Song of Solomon' ? from notes-links-check.js line 1,196 - B1 === 'Song of Solomon' ? from notes-links-check.js line 1,254 - isUW ? 782 : 182, `Error loading link`, details: "please double-check link—there may be no problem", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,453 - isUW ? 781 : 181, "Linked web page seems empty", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,459 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 738 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 806 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 862 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 1,012 + B1 === 'Song of Solomon' ? from notes-links-check.js line 1,070 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 1,134 + optionalB1 === 'Song of Solomon' ? from notes-links-check.js line 1,199 + B1 === 'Song of Solomon' ? from notes-links-check.js line 1,253 + B1 === 'Song of Solomon' ? from notes-links-check.js line 1,311 + isUW ? 782 : 182, `Error loading link`, details: "please double-check link—there may be no problem", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,510 + isUW ? 781 : 181, "Linked web page seems empty", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,516 999, "checkRepo function FAILED", repoName, excerpt: checkRepoError, location: repoName from RepoCheck.js line 144 997, "Repository doesn’t exist", username, repoCode, repoName, location: manifestLocation, extra: repoCode from checkBookPackage.js line 200 997, "Repository doesn’t exist", username, repoCode, repoName, location: markdownLocation, extra: repoCode from checkBookPackage.js line 265 @@ -46,7 +47,7 @@ Got 627 notices: 996, "Unable to load file", details, bookID, location: generalLocation, extra: repoCode from checkBookPackage.js line 678 996, "Unable to load file", username, bookID, C, V, filename: thisPath, location: `$generalLocation $thisPath `, extra: repoCode ; from checkBookPackage.js line 703 996, "Unable to load file", username, bookID: ourBookID, filename: thisFilename, location: `$givenLocation $thisFilepath`, extra: repoName ; from checkRepo.js line 321 - 994, "USFM file must start with a valid \\id line", lineNumber: 1, location: ourLocation from usfm-text-check.js line 1,530 + 994, "USFM file must start with a valid \\id line", lineNumber: 1, location: ourLocation from usfm-text-check.js line 1,532 993, "Unresolved GIT conflict", characterIndex, excerpt, location: ourLocation from field-text-check.js line 132 993, "Unresolved GIT conflict", characterIndex, excerpt, location: ourLocation from plain-text-check.js line 152 992, "Unresolved GIT conflict", characterIndex, excerpt, location: ourLocation from field-text-check.js line 137 @@ -59,7 +60,7 @@ Got 627 notices: 988, "Bad TSV header", details: `expected '$EXPECTED_TWL_HEADING_LINE'`, excerpt: lines[0], lineNumber: 1, location: ourLocation from twl-tsv6-table-check.js line 130 988, "Bad TSV header", details: `expected '$EXPECTED_NOTES_HEADING_LINE'`, excerpt: lines[0], lineNumber: 1, location: ourLocation from notes-tsv7-table-check.js line 131 988, "Bad TSV header", details: `expected '$EXPECTED_QUESTIONS_HEADING_LINE'`, excerpt: lines[0], lineNumber: 1, location: ourLocation from questions-tsv7-table-check.js line 130 - 987, C, V, "Expected \\id line to start with book identifier", lineNumber: n, characterIndex: 4, excerpt, location: ourLocation from usfm-text-check.js line 1,649 + 987, C, V, "Expected \\id line to start with book identifier", lineNumber: n, characterIndex: 4, excerpt, location: ourLocation from usfm-text-check.js line 1,651 986, "Repository doesn’t seem to exist", username, location: givenLocation, extra: repoName from checkRepo.js line 202 985, `Field does not match schema $errorObject.keyword`, details: errorObject.message, fieldName: errorObject.dataPath, location: ourLocation from manifest-text-check.js line 728 984, `Found wrong number of TSV fields (expected $NUM_EXPECTED_TWL_TSV_FIELDS)`, details: `found $fields.length field$fields.length === 1 ? '' : 's'`, rowID, location: ourRowLocation from twl-tsv6-row-check.js line 453 @@ -85,7 +86,7 @@ Got 627 notices: 975, "Wrong verse number", details: `expected '$givenV'`, rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from questions-tsv7-row-check.js line 336 975, "Wrong verse number", details: `expected '$givenV' to be inside range`, rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from questions-tsv7-row-check.js line 359 975, "Wrong verse number", details: `expected '$givenV'`, rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from notes-tsv7-row-check.js line 357 - 973, `Mismatched $opener$closer fields`, details: `(opening=$lCount.toLocaleString(), closing=$rCount.toLocaleString())`, excerpt: rest, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,402 + 973, `Mismatched $opener$closer fields`, details: `(opening=$lCount.toLocaleString(), closing=$rCount.toLocaleString())`, excerpt: rest, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,404 971, "Unexpected line break in single-line field", fieldName: 'GLQuote', rowID, characterIndex: characterIndex, excerpt, location: ourRowLocation from twl-tsv6-row-check.js line 362 971, "Unexpected line break in single-line field", fieldName: 'GLQuote', rowID, characterIndex: characterIndex, excerpt, location: ourRowLocation from twl-tsv6-row-check.js line 374 971, "Unexpected line break in single-line field", fieldName: 'GLQuote', rowID, characterIndex: characterIndex, excerpt, location: ourRowLocation from twl-tsv6-row-check.js line 389 @@ -102,8 +103,8 @@ Got 627 notices: 971, "Unexpected line break in single-line field", fieldName: 'GLQuote', rowID, characterIndex: characterIndex, excerpt, location: ourRowLocation from notes-tsv7-row-check.js line 457 956, "Got empty manifest file", repoName, filename: STANDARD_MANIFEST_FILENAME, location: manifestLocation, extra: `$repoCode MANIFEST` from checkBookPackage.js line 226 956, "Got empty markdown file", repoName, filename, location: markdownLocation, extra: repoCode from checkBookPackage.js line 301 - 950, "tC cannot yet process '*' language code", characterIndex, excerpt, location: ourLocation from notes-links-check.js line 369 - 950, "tC cannot yet process '*' language code", characterIndex, excerpt, location: ourLocation from notes-links-check.js line 581 + 950, "tC cannot yet process '*' language code", characterIndex, excerpt, location: ourLocation from notes-links-check.js line 367 + 950, "tC cannot yet process '*' language code", characterIndex, excerpt, location: ourLocation from notes-links-check.js line 580 947, "Missing manifest.yaml", location: ourLocation, extra: `$repoName MANIFEST` from checkRepo.js line 350 946, "Missing LICENSE.md", location: ourLocation, extra: `$repoName LICENSE` from checkRepo.js line 348 944, `USFM3 Grammar Check ($strictnessString mode) doesn’t pass`, filename, location: ourLocation from BCS-usfm-grammar-check.js line 233 @@ -143,106 +144,106 @@ Got 627 notices: 916, "Unable to find original language quote in verse text", details: noBreakSpaceText ? noBreakSpaceText : `verse text ◗$fullVerseTextString◖`, excerpt, location: warnLocationString from orig-quote-check.js line 558 914, "Unable to find original language quote portion in the right place in the verse text", details: `verse text ◗$verseText◖`, excerpt, location: ourLocation from orig-quote-check.js line 692 914, "Unable to find original language quote portion in the right place in the verse text", details: `verse text ◗$verseText◖`, excerpt, location: ourLocation from orig-quote-check.js line 758 - 912, 'Missing | character in \\w line', lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 833 - 911, 'Missing | character in \\w field', details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 891 - 911, 'Missing | character in \\+w field', details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 912 + 912, 'Missing | character in \\w line', lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 835 + 911, 'Missing | character in \\w field', details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 893 + 911, 'Missing | character in \\+w field', details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 914 909, "Seems original language quote might not start at the beginning of a word", details: `It seems to follow '$possibleOffendingChar' in verse text ◗$fullVerseTextString◖`, characterIndex: 0, excerpt, location: warnLocationString from orig-quote-check.js line 552 908, "Seems original language quote might not finish at the end of a word", details: `It seems to precede '$possibleOffendingChar' in verse text ◗$fullVerseTextString◖`, characterIndex: 0, excerpt, location: warnLocationString from orig-quote-check.js line 555 - 905, "Unexpected Hebrew cantillation mark in lemma field", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, excerpt: attributeValue, location: lineLocation from usfm-text-check.js line 1,083 + 905, "Unexpected Hebrew cantillation mark in lemma field", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, excerpt: attributeValue, location: lineLocation from usfm-text-check.js line 1,085 904, "Unexpected Hebrew cantillation mark in original language field", details: `found $match.length '$match'`, C, V, excerpt: fieldText, location: ourLocation from orig-quote-check.js line 587 - 903, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ourLocation from usfm-text-check.js line 1,503 + 903, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ourLocation from usfm-text-check.js line 1,505 902, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ` (not '$bookID')$generalLocation` ); return checkBookPackageResult; from checkBookPackage.js line 332 901, "Unexpected reference field", details: "expected C:V", fieldName: 'Reference', rowID, excerpt: reference, location: ourRowLocation from questions-tsv7-row-check.js line 293 900, "Bad parameter: should be given a valid book abbreviation", excerpt: bookIDList, location: ` (not '$bookIDList')` from checkBookPackages.js line 79 - 899, C, V, "Have USFM text not in a paragraph", lineNumber: n, characterIndex: 1, details: `'\\$lastMarker' before '\\$marker'`, location: ourLocation from usfm-text-check.js line 1,667 + 899, C, V, "Have USFM text not in a paragraph", lineNumber: n, characterIndex: 1, details: `'\\$lastMarker' before '\\$marker'`, location: ourLocation from usfm-text-check.js line 1,669 898, "Unexpected typographical double-quote character", characterIndex, excerpt, location: ourLocation from yaml-text-check.js line 137 895, "Field contains zero-width space(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 119 889, "Unable to find linked TA article", details: `linked from TN $fieldName`, excerpt: fieldText, location: `$ourLocation $filepath` from ta-reference-check.js line 115 889, "Unable to find/load linked TA article", details: `linked from TN $fieldName`, excerpt: fieldText, location: `$ourLocation $filepath` from ta-reference-check.js line 125 888, "Error loading linked TA article", details: `linked from TN $fieldName`, excerpt: fieldText, location: `$ourLocation $filepath: $trcGCerror` from ta-reference-check.js line 130 887, "Linked TA article seems empty", details: `linked from TN $fieldName`, excerpt: fieldText, location: `$ourLocation $filepath` from ta-reference-check.js line 127 - 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 387 - 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 401 - 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 460 - 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 474 - 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 523 - 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 537 - 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 599 - 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 614 - 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath` from notes-links-check.js line 1,398 - 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 396 - 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 469 - 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 532 - 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 609 - 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 1,393 - 884, `TA article seems empty`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 403 - 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 476 - 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 539 - 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 616 - 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath` from notes-links-check.js line 1,400 - 883, "Unable to find linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 311 - 883, "Unable to find/load linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 323 - 883, "Unable to find linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 671 - 883, "Unable to find/load linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 684 - 882, `Error loading TW article`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 320 - 882, `Error loading TW article`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath: $trcGCerror`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 681 - 881, `TW article seems empty`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 326 - 881, `TW article seems empty`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 687 + 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 385 + 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 399 + 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 459 + 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 473 + 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 522 + 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 536 + 886, "Unable to find linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 598 + 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 613 + 886, "Unable to find/load linked TA article", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath` from notes-links-check.js line 1,455 + 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 394 + 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 468 + 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 531 + 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 608 + 885, `Error loading TA article`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 1,450 + 884, `TA article seems empty`, details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 401 + 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 475 + 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 538 + 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 615 + 884, "Linked TA article seems empty", details: `$taRepoUsername $taRepoName $taRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath` from notes-links-check.js line 1,457 + 883, "Unable to find linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 309 + 883, "Unable to find/load linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 321 + 883, "Unable to find linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 670 + 883, "Unable to find/load linked TW article", details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 683 + 882, `Error loading TW article`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: `$ourLocation $filepath: $trcGCerror` from notes-links-check.js line 318 + 882, `Error loading TW article`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath: $trcGCerror`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 680 + 881, `TW article seems empty`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 324 + 881, `TW article seems empty`, details: `$twRepoUsername $twRepoName $twRepoBranch $filepath`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 686 879, `Badly formatted Resource Container link`, excerpt: fieldText, location: `$ourLocation $filepath` from ta-reference-check.js line 101 878, `Lexicon entry seems empty`, details: `$username $repoName $repoBranch $lexiconPathname`, excerpt: fieldText, location: ourLocation from strongs-field-check.js line 272 - 875, "Unexpected USFM field", details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 958 - 873, `Mismatched $opener$closer fields`, details: `(opening=$lCount.toLocaleString(), closing=$rCount.toLocaleString())`, location: fileLocation from usfm-text-check.js line 677 + 875, "Unexpected USFM field", details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 960 + 873, `Mismatched $opener$closer fields`, details: `(opening=$lCount.toLocaleString(), closing=$rCount.toLocaleString())`, location: fileLocation from usfm-text-check.js line 679 869, "Chapter number out of range", C: chapterNumberString, excerpt: `$bookID $chapterNumberString`, location: CVlocation from usfm-text-check.js line 509 868, "Verse number out of range", C: chapterNumberString, V: verseNumberString, excerpt: `$bookID $chapterNumberString:$verseNumberString`, location: CVlocation from usfm-text-check.js line 548 867, C: chapterNumberString, V: `$v`, "Verse appears to be missing", location: CVlocation from usfm-text-check.js line 562 866, C: chapterNumberString, V: `$v`, "Verse seems to have no text", location: CVlocation from usfm-text-check.js line 567 - 865, "Unexpected Hebrew character before shin/sin dot", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 731 - 864, "Unexpected Hebrew dagesh after vowel", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 737 - 863, "Unexpected Hebrew character before dagesh or mappiq", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 743 - 862, "Unexpected Hebrew cantillation mark before dagesh", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 749 - 861, "Unexpected Hebrew vowel after cantillation mark", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 762 - 860, "Unexpected Hebrew final consonant not at word end", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 772 + 865, "Unexpected Hebrew character before shin/sin dot", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 733 + 864, "Unexpected Hebrew dagesh after vowel", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 739 + 863, "Unexpected Hebrew character before dagesh or mappiq", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 745 + 862, "Unexpected Hebrew cantillation mark before dagesh", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 751 + 861, "Unexpected Hebrew vowel after cantillation mark", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 764 + 860, "Unexpected Hebrew final consonant not at word end", details: `found $regexMatchObject.length '$regexMatchObject'`, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 774 859, `Unexpected unclosed paired punctuation at beginning of quote`, details: `Found '$fieldText[0]' at start, but no matching '$expected_closing_char'`, characterIndex: 0, excerpt, location: ourLocation from orig-quote-check.js line 614 858, `Unexpected unopened paired punctuation at end of quote`, details: `Found '$fieldText.slice(-1)' at end, but no matching '$expected_opening_char'`, characterIndex: fieldText.length - 1, excerpt, location: ourLocation from orig-quote-check.js line 621 - 857, "Unexpected first original \\w attribute", details: "expected 'lemma'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,061 - 856, "Unexpected second original \\w attribute", details: "expected 'strong'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,064 - 855, "Unexpected third original \\w attribute", details: "expected 'x-morph'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,067 - 854, "Unexpected fourth original \\w attribute", details: "expected 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,070 - 854, "Unexpected fifth original \\w attribute", details: "expected second 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,073 - 854, "Unexpected sixth original \\w attribute", details: "expected third 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,076 - 853, "Unexpected extra original \\w attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,078 - 852, "Unexpected original \\w x-morph language prefix", details: "Expected 'He,' 'Ar,' or 'Gr,'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,088 + 857, "Unexpected first original \\w attribute", details: "expected 'lemma'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,063 + 856, "Unexpected second original \\w attribute", details: "expected 'strong'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,066 + 855, "Unexpected third original \\w attribute", details: "expected 'x-morph'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,069 + 854, "Unexpected fourth original \\w attribute", details: "expected 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,072 + 854, "Unexpected fifth original \\w attribute", details: "expected second 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,075 + 854, "Unexpected sixth original \\w attribute", details: "expected third 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,078 + 853, "Unexpected extra original \\w attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,080 + 852, "Unexpected original \\w x-morph language prefix", details: "Expected 'He,' 'Ar,' or 'Gr,'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,090 851, bookID === 'OBS' ? "Unable to load original OBS story text" : "Unable to load original language verse text", location: ourLocation from orig-quote-check.js line 661 850, "Unable to find lexicon entry", details:lexiconRepoCode, username, excerpt: fetchLinkDescription, location: ourLocation from strongs-field-check.js line 250 850, "Unable to find/load lexicon entry", details, username, excerpt: fetchLinkDescription, location: ourLocation from strongs-field-check.js line 268 - 849, `Unexpected '$badCharCombination' character combination`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 382 - 848, "Unexpected first translation \\w attribute", details: "expected 'x-occurrence'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,094 - 847, "Unexpected second translation \\w attribute", details: "expected 'x-occurrences'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,097 - 846, "Unexpected extra translation \\w attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,099 - 845, `Mismatched [[ ]] link characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,564 - 844, `Mismatched [[rc:// ]] link characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,568 - 843, `Mismatched [ ]( ) link characters`, details: `left=$leftCount.toLocaleString(), middle=$middleCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,575 + 849, `Unexpected '$badCharCombination' character combination`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 388 + 848, "Unexpected first translation \\w attribute", details: "expected 'x-occurrence'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,096 + 847, "Unexpected second translation \\w attribute", details: "expected 'x-occurrences'", lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,099 + 846, "Unexpected extra translation \\w attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,101 + 845, `Mismatched [[ ]] link characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,621 + 844, `Mismatched [[rc:// ]] link characters`, details: `left=$leftCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,625 + 843, `Mismatched [ ]( ) link characters`, details: `left=$leftCount.toLocaleString(), middle=$middleCount.toLocaleString(), right=$rightCount.toLocaleString()`, location: ourLocation from notes-links-check.js line 1,632 842, "No text in Strongs field", location: ourLocation from strongs-field-check.js line 185 841, "Strongs field must start with 'H'", location: ourLocation from strongs-field-check.js line 196 841, "Strongs field must start with 'G'", location: ourLocation from strongs-field-check.js line 205 - 839, "Unexpected first \\k-s attribute", details: "expected 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject2[0], location: lineLocation from usfm-text-check.js line 1,348 - 838, "Unexpected extra \\k-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject2[0], location: lineLocation from usfm-text-check.js line 1,350 - 837, "Seems too few original \\w attributes", details: `expected 3-4 attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,106 - 836, "Seems too few translation \\w attributes", details: `expected two attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,108 - 835, "Seems too few original \\k-s attributes", details: `expected one attribute but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,353 - 834, "Seems too few translation \\zaln-s attributes", details: `expected six attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,270 - 833, "Unexpected extra \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,267 + 839, "Unexpected first \\k-s attribute", details: "expected 'x-tw'", lineNumber, C, V, excerpt: regexMatchObject2[0], location: lineLocation from usfm-text-check.js line 1,350 + 838, "Unexpected extra \\k-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject2[0], location: lineLocation from usfm-text-check.js line 1,352 + 837, "Seems too few original \\w attributes", details: `expected 3-4 attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,108 + 836, "Seems too few translation \\w attributes", details: `expected two attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,110 + 835, "Seems too few original \\k-s attributes", details: `expected one attribute but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,355 + 834, "Seems too few translation \\zaln-s attributes", details: `expected six attributes but only found $attributeCounter`, lineNumber, C, V, excerpt: regexMatchObject1[0], location: lineLocation from usfm-text-check.js line 1,272 + 833, "Unexpected extra \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,269 832, `Seems filename is missing from the manifest project list`, excerpt: repoFilepath, location: ourLocation from manifest-text-check.js line 792 831, C, V, `Duplicate '$rowID' ID`, fieldName: 'ID', rowID, lineNumber: n + 1, location: ourLocation from tn-tsv9-table-check.js line 247 831, C, V, `Duplicate '$rowID' ID`, fieldName: 'ID', rowID, lineNumber: n + 1, location: ourLocation from twl-tsv6-table-check.js line 251 831, C, V, `Duplicate '$rowID' ID`, fieldName: 'ID', rowID, lineNumber: n + 1, location: ourLocation from notes-tsv7-table-check.js line 252 831, C, V, `Duplicate '$rowID' ID`, fieldName: 'ID', rowID, lineNumber: n + 1, location: ourLocation from questions-tsv7-table-check.js line 256 - 830, "Unexpected first \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,250 - 829, "Unexpected second \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,253 - 828, "Unexpected third \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,256 - 827, "Unexpected fourth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,259 - 826, "Unexpected fifth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,262 - 825, "Unexpected sixth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,265 + 830, "Unexpected first \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,252 + 829, "Unexpected second \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,255 + 828, "Unexpected third \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,258 + 827, "Unexpected fourth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,261 + 826, "Unexpected fifth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,264 + 825, "Unexpected sixth \\zaln-s attribute", details, lineNumber, C, V, excerpt: regexMatchObject[0], location: lineLocation from usfm-text-check.js line 1,267 824, `Invalid zero chapter number`, excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from twl-tsv6-row-check.js line 288 824, `Invalid zero chapter number`, excerpt: C, rowID, fieldName: 'Chapter', location: ourRowLocation from tn-tsv9-row-check.js line 334 824, `Invalid zero chapter number`, excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from questions-tsv7-row-check.js line 303 @@ -252,8 +253,8 @@ Got 627 notices: 823, `Invalid large chapter number`, excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from questions-tsv7-row-check.js line 308 823, `Invalid large chapter number`, excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from notes-tsv7-row-check.js line 331 822, "Unable to check chapter number", excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from twl-tsv6-row-check.js line 306 - 822, "Expected field to contain an integer", characterIndex: 3, excerpt: `\\c $rest`, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,385 - 822, "Expected field to contain an integer", characterIndex: 3, excerpt: `\\v $rest`, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,389 + 822, "Expected field to contain an integer", characterIndex: 3, excerpt: `\\c $rest`, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,387 + 822, "Expected field to contain an integer", characterIndex: 3, excerpt: `\\v $rest`, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 1,391 822, "Unable to check chapter number", excerpt: C, rowID, fieldName: 'Chapter', location: ourRowLocation from tn-tsv9-row-check.js line 349 822, "Unable to check chapter number", excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from questions-tsv7-row-check.js line 322 822, "Unable to check chapter number", excerpt: C, rowID, fieldName: 'Reference', location: ourRowLocation from notes-tsv7-row-check.js line 344 @@ -297,13 +298,13 @@ Got 627 notices: 808, "Bad verse range", details: "Too many hyphens", rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from questions-tsv7-row-check.js line 354 808, "Bad verse range", details: "Second digits should be greater", rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from questions-tsv7-row-check.js line 361 808, "Bad verse range", details: "Should be digits", rowID, fieldName: 'Reference', excerpt: V, location: ourRowLocation from questions-tsv7-row-check.js line 372 - 806, "Aligned x-lemma doesn’t match original", details: `$originalLanguageRepoCode had '$vwolLemma'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,315 - 805, "Aligned x-strong number doesn’t match original", details: `$originalLanguageRepoCode had '$vwolStrongs'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,310 - 804, "Aligned x-morph doesn’t match original", details: `$originalLanguageRepoCode had '$vwolMorph'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,320 - 803, "Word can’t be found in original text", details: `found NO occurrences of '$oWord' instead of $oOccurrence from $verseWordList.join(', ')`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,304 - 802, "AAA Aligned x-occurrence for original word is too high", details: `only found $oWordCount occurrences of '$oWord' instead of $oOccurrence`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,294 - 802, "Aligned x-occurrence for original word is too high", details: `only found $gotCount occurrence$gotCount === 1 ? '' : 's' of '$oWord' instead of $oOccurrence from $verseWordList.join(', ')`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,306 - 801, "Aligned x-occurrence for original word is higher than Occurrences", details: `$oOccurrence > $oOccurrences`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,290 + 806, "Aligned x-lemma doesn’t match original", details: `$originalLanguageRepoCode had '$vwolLemma'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,317 + 805, "Aligned x-strong number doesn’t match original", details: `$originalLanguageRepoCode had '$vwolStrongs'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,312 + 804, "Aligned x-morph doesn’t match original", details: `$originalLanguageRepoCode had '$vwolMorph'`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,322 + 803, "Word can’t be found in original text", details: `found NO occurrences of '$oWord' instead of $oOccurrence from $verseWordList.join(', ')`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,306 + 802, "AAA Aligned x-occurrence for original word is too high", details: `only found $oWordCount occurrences of '$oWord' instead of $oOccurrence`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,296 + 802, "Aligned x-occurrence for original word is too high", details: `only found $gotCount occurrence$gotCount === 1 ? '' : 's' of '$oWord' instead of $oOccurrence from $verseWordList.join(', ')`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,308 + 801, "Aligned x-occurrence for original word is higher than Occurrences", details: `$oOccurrence > $oOccurrences`, lineNumber, C, V, excerpt: zalnContents, location: lineLocation from usfm-text-check.js line 1,292 799, "Missing TWLink field", fieldName: 'TWLink', rowID, location: ourRowLocation from twl-tsv6-row-check.js line 441 798, "Field doesn’t contain expected TW link", details: `should start with 'rc://*/tw/dict/bible/'`, fieldName: 'TWLink', rowID, excerpt, location: ourRowLocation from twl-tsv6-row-check.js line 425 797, "Field doesn’t contain proper TW link", details: `should be 'kt', 'names', or 'other'`, fieldName: 'TWLink', rowID, characterIndex, excerpt, location: ourRowLocation from twl-tsv6-row-check.js line 432 @@ -328,32 +329,32 @@ Got 627 notices: 787, "Link to TA should also be in Note", fieldName: 'SupportReference', excerpt: supportReference, rowID, location: ourRowLocation from notes-tsv7-row-check.js line 428 786, "Shouldn’t have multiple TA links in OccurrenceNote", details, rowID, fieldName: 'OccurrenceNote', excerpt, location: ourRowLocation from tn-tsv9-row-check.js line 508 786, "Shouldn’t have multiple TA links in Note", details, rowID, fieldName: 'OccurrenceNote', excerpt, location: ourRowLocation from notes-tsv7-row-check.js line 507 - 785, "Unexpected trailing whitespace in link field", excerpt, characterIndex: fieldText.length - 1, location: ourLocation from notes-links-check.js line 225 - 784, "Unexpected leading whitespace in link field", excerpt, characterIndex: 0, location: ourLocation from notes-links-check.js line 221 - 783, "Unable to find/load unfoldingWord link", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,512 - 781, "Linked unfoldingWord article seems empty", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,515 + 785, "Unexpected trailing whitespace in link field", excerpt, characterIndex: fieldText.length - 1, location: ourLocation from notes-links-check.js line 226 + 784, "Unexpected leading whitespace in link field", excerpt, characterIndex: 0, location: ourLocation from notes-links-check.js line 222 + 783, "Unable to find/load unfoldingWord link", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,569 + 781, "Linked unfoldingWord article seems empty", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,572 778, "Row ID should be exactly 4 characters", details: `not $rowID.length`, rowID, fieldName: 'ID', excerpt: rowID, location: ourRowLocation from twl-tsv6-row-check.js line 343 778, "Row ID should be exactly 4 characters", details: `not $rowID.length`, rowID, fieldName: 'ID', excerpt: rowID, location: ourRowLocation from tn-tsv9-row-check.js line 385 778, "Row ID should be exactly 4 characters", details: `not $rowID.length`, rowID, fieldName: 'ID', excerpt: rowID, location: ourRowLocation from questions-tsv7-row-check.js line 383 778, "Row ID should be exactly 4 characters", details: `not $rowID.length`, rowID, fieldName: 'ID', excerpt: rowID, location: ourRowLocation from notes-tsv7-row-check.js line 381 777, `Bad punctuation nesting: $char closing character doesn’t match`, details, lineNumber: n, characterIndex, excerpt, location: ourLocation from plain-text-check.js line 236 - 776, 'Unexpected " straight quote character', details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 946 - 775, "Unexpected ' straight quote character", details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 951 + 776, 'Unexpected " straight quote character', details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 948 + 775, "Unexpected ' straight quote character", details, lineNumber, C, V, excerpt, location: lineLocation from usfm-text-check.js line 953 774, `Unexpected $char closing character (no matching opener)`, lineNumber: n, characterIndex, excerpt, location: ourLocation from plain-text-check.js line 243 773, `Unexpected trailing zero-width joiner (u200D) character`, characterIndex: 0, excerpt, location: ourLocation from field-text-check.js line 177 772, `Unexpected trailing word-joiner (u2060) character`, characterIndex: 0, excerpt, location: ourLocation from field-text-check.js line 173 771, `Unexpected leading zero-width joiner (u200D) character`, characterIndex: 0, excerpt, location: ourLocation from field-text-check.js line 159 770, `Unexpected leading word-joiner (u2060) character`, characterIndex: 0, excerpt, location: ourLocation from field-text-check.js line 155 - 769, C, V, "Verse bridge numbers not in ascending order", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : '' ($firstV → $secondV)`, location: ourLocation from usfm-text-check.js line 1,624 + 769, C, V, "Verse bridge numbers not in ascending order", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : '' ($firstV → $secondV)`, location: ourLocation from usfm-text-check.js line 1,626 768, `At end of text with unclosed $char opening character`, details, lineNumber: n, characterIndex: x, excerpt, location: ourLocation from plain-text-check.js line 261 - 766, C, V, "Bridged verse numbers didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : '' ($lastV → $firstV)`, location: ourLocation from usfm-text-check.js line 1,626 - 765, "Unexpected link", characterIndex, excerpt, location: ourLocation from field-text-check.js line 536 - 764, C, V, "Chapter number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : '' ($lastC ? lastC : '0' → $C)`, location: ourLocation from usfm-text-check.js line 1,597 - 763, C, V, "Verse number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : '' ($lastV ? lastV : '0' → $V)`, location: ourLocation from usfm-text-check.js line 1,610 + 766, C, V, "Bridged verse numbers didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : '' ($lastV → $firstV)`, location: ourLocation from usfm-text-check.js line 1,628 + 765, "Unexpected link", characterIndex, excerpt, location: ourLocation from field-text-check.js line 544 + 764, C, V, "Chapter number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : '' ($lastC ? lastC : '0' → $C)`, location: ourLocation from usfm-text-check.js line 1,599 + 763, C, V, "Verse number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : '' ($lastV ? lastV : '0' → $V)`, location: ourLocation from usfm-text-check.js line 1,612 762, "Unable to convert verse bridge numbers to integers", C: chapterNumberString, V: verseNumberString, characterIndex: 3, excerpt: verseNumberString, location: `$CVlocation with $usfmVIerror` from usfm-text-check.js line 536 - 762, C, V, "Unable to convert verse bridge numbers to integers", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,620 - 761, C, V, "Verse number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$restRest.slice(0, excerptHalfLength)$restRest.length > excerptHalfLength ? '…' : '' ($lastV ? lastV : '0' → $V)`, location: ourLocation from usfm-text-check.js line 1,642 - 752, "Verse numbers of markdown TN link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,328 + 762, C, V, "Unable to convert verse bridge numbers to integers", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, Math.max(9, excerptLength))$rest.length > excerptLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,622 + 761, C, V, "Verse number didn’t increment correctly", lineNumber: n, characterIndex: 3, excerpt: `$restRest.slice(0, excerptHalfLength)$restRest.length > excerptHalfLength ? '…' : '' ($lastV ? lastV : '0' → $V)`, location: ourLocation from usfm-text-check.js line 1,644 + 752, "Verse numbers of markdown TN link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,385 751, "Invalid zero occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, excerpt: occurrence, location: ourRowLocation from twl-tsv6-row-check.js line 393 751, "Invalid zero occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, excerpt: occurrence, location: ourRowLocation from tn-tsv9-row-check.js line 448 751, "Invalid zero occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, excerpt: occurrence, location: ourRowLocation from questions-tsv7-row-check.js line 433 @@ -362,38 +363,39 @@ Got 627 notices: 750, "Missing occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, location: ourRowLocation from tn-tsv9-row-check.js line 438 750, "Missing occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 420 750, "Missing occurrence field when we have an original quote", fieldName: 'Occurrence', rowID, location: ourRowLocation from notes-tsv7-row-check.js line 448 - 749, "Markdown image link seems faulty", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 239 - 749, "Markdown image link seems faulty", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 260 - 748, "Error fetching markdown image link", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 248 - 748, "Error fetching markdown image link", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 269 + 749, "Markdown image link seems faulty", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 240 + 749, "Markdown image link seems faulty", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 261 + 748, "Error fetching markdown image link", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 249 + 748, "Error fetching markdown image link", excerpt: fetchLink, location: ourLocation from notes-links-check.js line 270 747, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ` (not '$bookID')$ourLocation` from tn-tsv9-table-check.js line 123 747, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ` (not '$bookID')$ourLocation` from twl-tsv6-table-check.js line 114 747, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ` (not '$bookID')$ourLocation` from notes-tsv7-table-check.js line 115 747, "Bad function call: should be given a valid book abbreviation", excerpt: bookID, location: ` (not '$bookID')$ourLocation` from questions-tsv7-table-check.js line 114 745, C, V, `Wrong '$B' book identifier (expected '$bookID')`, rowID, lineNumber: n + 1, location: ourLocation from tn-tsv9-table-check.js line 193 744, C, V, "Missing book identifier", rowID, lineNumber: n + 1, location: ourLocation from tn-tsv9-table-check.js line 196 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 750 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $givenCint`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 823 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 965 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,023 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,088 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,206 - 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,264 - 743, "Chapter numbers of markdown TN link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,322 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 756 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 829 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $V2`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 869 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $V2`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 911 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 971 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,029 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,094 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,153 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,212 - 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,270 - 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 916 - 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,035 - 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,100 - 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,159 + 743, "Chapter numbers of markdown TN link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 749 + 743, "Chapter numbers of markdown TN link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 817 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $givenCint`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 880 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,022 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,080 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,145 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,263 + 743, "Chapter numbers of markdown Bible link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,321 + 743, "Chapter numbers of markdown TN link don’t match", details: `$C1 vs $linkChapterInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,379 + 742, "Verse numbers of markdown TN link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 755 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 886 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $V2`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 926 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $V2`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 968 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,028 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,086 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,151 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1a vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,210 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,269 + 742, "Verse numbers of markdown Bible link don’t match", details: `$V1 vs $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,327 + 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 973 + 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,092 + 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,157 + 741, "Verse numbers of markdown Bible link range out of order", details: `$V1a to $V1b`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,216 740, "Unrecognized tag", details: `found '$thisTag' but expected 'keyterm' or 'name'`, excerpt: tags, fieldName: 'Tags', rowID, location: ourRowLocation from twl-tsv6-row-check.js line 367 740, "Unrecognized tag", details: thisTag, excerpt: tags, fieldName: 'Tags', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 407 740, "Unrecognized tag", details: thisTag, excerpt: tags, fieldName: 'Tags', rowID, location: ourRowLocation from notes-tsv7-row-check.js line 405 @@ -438,53 +440,57 @@ Got 627 notices: 732, C, V, "Verse range in wrong order", details: `detected $intV1 before $intV2`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from twl-tsv6-table-check.js line 231 732, C, V, "Verse range in wrong order", details: `detected $intV1 before $intV2`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from notes-tsv7-table-check.js line 232 732, C, V, "Verse range in wrong order", details: `detected $intV1 before $intV2`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from questions-tsv7-table-check.js line 231 - 731, `OBS link has internal mismatch`, details: `$storyNumberA:$frameNumberA should equal $storyNumberB/$frameNumberA`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,368 - 730, `OBS link has out-of-range values`, details: `$NUM_OBS_STORIES stories, max of $MAX_OBS_FRAMES frames`, excerpt: `$storyNumberA/$frameNumberA`, location: ourLocation from notes-links-check.js line 1,371 - 724, C, V, "Unable to convert chapter number to integer", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,593 - 723, C, V, "Unable to convert verse number to integer", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,606 - 720, C, V, "Unable to convert internal verse number to integer", lineNumber: n, characterIndex: 3, excerpt: `$restRest.slice(0, excerptHalfLength)$restRest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,638 - 719, "USFM file is recommended to have \\ide line", lineNumber: ideIndex + 1, location: ourLocation from usfm-text-check.js line 1,534 - 716, `Misplaced $rightChar character`, excerpt: regexMatchObject[0], location: ourLocation from field-text-check.js line 517 - 711, "Expected compulsory content", C, V, lineNumber, characterIndex: marker.length, location: ` after \\$marker marker$lineLocation` from usfm-text-check.js line 1,428 - 703, C, V, "Unexpected CarriageReturn character", lineNumber: n, characterIndex, excerpt, location: ourLocation from usfm-text-check.js line 1,557 + 731, `OBS link has internal mismatch`, details: `$storyNumberA:$frameNumberA should equal $storyNumberB/$frameNumberA`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,425 + 730, `OBS link has out-of-range values`, details: `$NUM_OBS_STORIES stories, max of $MAX_OBS_FRAMES frames`, excerpt: `$storyNumberA/$frameNumberA`, location: ourLocation from notes-links-check.js line 1,428 + 729, "Expected verse one for whole chapter link", details: `not verse $linkVerseInt`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 822 + 724, C, V, "Unable to convert chapter number to integer", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,595 + 723, C, V, "Unable to convert verse number to integer", lineNumber: n, characterIndex: 3, excerpt: `$rest.slice(0, excerptHalfLength)$rest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,608 + 720, C, V, "Unable to convert internal verse number to integer", lineNumber: n, characterIndex: 3, excerpt: `$restRest.slice(0, excerptHalfLength)$restRest.length > excerptHalfLength ? '…' : ''`, location: ourLocation from usfm-text-check.js line 1,640 + 719, "USFM file is recommended to have \\ide line", lineNumber: ideIndex + 1, location: ourLocation from usfm-text-check.js line 1,536 + 716, `Misplaced $rightChar character`, excerpt: regexMatchObject[0], location: ourLocation from field-text-check.js line 525 + 711, "Expected compulsory content", C, V, lineNumber, characterIndex: marker.length, location: ` after \\$marker marker$lineLocation` from usfm-text-check.js line 1,430 + 703, C, V, "Unexpected CarriageReturn character", lineNumber: n, characterIndex, excerpt, location: ourLocation from usfm-text-check.js line 1,559 674, "Field contains HTML
field(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found—should be '\\n' instead`, fieldName: 'Question', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 453 674, "Field contains HTML
field(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found—should be '\\n' instead`, fieldName: 'Response', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 483 674, "Field contains HTML
field(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found—should be '\\n' instead`, fieldName: 'Note', rowID, location: ourRowLocation from notes-tsv7-row-check.js line 481 - 669, "Unexpected language code in link", details: `resource language code is '$languageCode'`, excerpt: Lg, location: ourLocation from notes-links-check.js line 728 - 656, "Bad chapter number in markdown TN link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,347 - 655, "Bad story number in markdown OBS help link", details: `$linkBookCode $linkChapterInt vs $numStories chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 764 - 655, "Bad chapter number in markdown Bible help link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 781 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $givenCint vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 848 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 888 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 932 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 990 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,054 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,119 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,231 - 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,289 - 654, "Bad verse number in markdown TN link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,349 - 653, "Bad frame number in markdown OBS help link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numFramesThisStory verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 766 - 653, "Bad verse number in markdown Bible help link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 783 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $givenCint:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 850 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 890 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 934 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 992 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,056 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,121 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $givenC:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,175 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,233 - 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,291 - 649, "Unusual [[ ]] link(s)—not a recognized TA or TW link", details: `need to carefully check $leftoverLinksList2.length === 1 ? '"' + leftoverLinksList2[0] + '"' : JSON.stringify(leftoverLinksList2)`, location: ourLocation from notes-links-check.js line 1,556 - 648, "Unusual [ ]( ) link(s)—not a recognized Bible, OBS, or TA, TN, or TW link", details: `need to carefully check $leftoverLinksList1.length === 1 ? '"' + leftoverLinksList1[0] + '"' : JSON.stringify(leftoverLinksList1)`, location: ourLocation from notes-links-check.js line 1,547 + 669, "Unexpected language code in link", details: `resource language code is '$languageCode'`, excerpt: Lg, location: ourLocation from notes-links-check.js line 727 + 669, "Unexpected language code in link", details: `resource language code is '$languageCode'`, excerpt: Lg, location: ourLocation from notes-links-check.js line 795 + 656, "Bad chapter number in markdown TN link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,404 + 655, "Bad story number in markdown OBS help link", details: `$linkBookCode $linkChapterInt vs $numStories chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 763 + 655, "Bad chapter number in markdown TN help link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 780 + 655, "Bad story number in markdown OBS help link", details: `$linkBookCode $linkChapterInt vs $numStories chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 827 + 655, "Bad chapter number in markdown TN help link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 839 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $givenCint vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 905 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 945 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 989 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,047 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,111 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,176 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,288 + 655, "Bad chapter number in markdown Bible link", details: `$linkBookCode $linkChapterInt vs $numChaptersThisBook chapters`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,346 + 654, "Bad verse number in markdown TN link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,406 + 653, "Bad frame number in markdown OBS help link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numFramesThisStory verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 765 + 653, "Bad verse number in markdown TN help link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 782 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $givenCint:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 907 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 947 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 991 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,049 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,113 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,178 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $givenC:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,232 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,290 + 653, "Bad verse number in markdown Bible link", details: `$linkBookCode $linkChapterInt:$linkVerseInt vs $numVersesThisChapter verses`, excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,348 + 649, "Unusual [[ ]] link(s)—not a recognized TA or TW link", details: `need to carefully check $doublePartLeftoverLinksList.length === 1 ? '"' + doublePartLeftoverLinksList[0] + '"' : JSON.stringify(doublePartLeftoverLinksList)`, location: ourLocation from notes-links-check.js line 1,613 + 648, "Unusual [ ]( ) link(s)—not a recognized Bible, OBS, or TA, TN, or TW link", details: `need to carefully check $singlePartLeftoverLinksList.length === 1 ? '"' + singlePartLeftoverLinksList[0] + '"' : JSON.stringify(singlePartLeftoverLinksList)`, location: ourLocation from notes-links-check.js line 1,604 644, "USFM3 Grammar Check (relaxed mode) doesn’t pass either", location: fileLocation from usfm-text-check.js line 345 638, "Only found whitespace", location: ourLocation from field-text-check.js line 124 638, "Only found whitespace", location: ourLocation from plain-text-check.js line 144 630, `Expected lexicon lemma on first line`, except: lines[0], location: ourLocation from lexicon-file-contents-check.js line 143 620, `Expected lexicon lemma on first line`, except: lines[0], location: ourLocation from lexicon-file-contents-check.js line 149 - 619, "USFM \\ide field is recommended to be set to 'UTF-8'", lineNumber: ideIndex + 1, characterIndex: 5, excerpt: lines[ideIndex], location: ourLocation from usfm-text-check.js line 1,536 - 603, "USFM marker doesn’t end with space", C, V, lineNumber, characterIndex, excerpt, location: ourLocation from usfm-text-check.js line 1,517 - 601, "Unable to load file", details: `error=$gcUHBerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from usfm-text-check.js line 1,158 - 601, "Unable to load file", details: `error=$gcUGNTerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from usfm-text-check.js line 1,166 + 619, "USFM \\ide field is recommended to be set to 'UTF-8'", lineNumber: ideIndex + 1, characterIndex: 5, excerpt: lines[ideIndex], location: ourLocation from usfm-text-check.js line 1,538 + 603, "USFM marker doesn’t end with space", C, V, lineNumber, characterIndex, excerpt, location: ourLocation from usfm-text-check.js line 1,519 + 601, "Unable to load file", details: `error=$gcUHBerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from usfm-text-check.js line 1,160 + 601, "Unable to load file", details: `error=$gcUGNTerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from usfm-text-check.js line 1,168 601, "Unable to load file", details: `error=$gcUHBerror`, username, OBSPathname, location: ourLocation, extra: OBSRepoName from orig-quote-check.js line 143 601, "Unable to load file", details: `error=$gcUHBerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from orig-quote-check.js line 177 601, "Unable to load file", details: `error=$gcUGNTerror`, username, filename, location: ourLocation, extra: originalLanguageRepoName from orig-quote-check.js line 185 @@ -493,7 +499,7 @@ Got 627 notices: 582, "Unexpected carriageReturn character", characterIndex, excerpt, location: ourLocation from field-text-check.js line 246 581, "Unexpected non-break space (u00A0) character", characterIndex, excerpt, location: ourLocation from field-text-check.js line 254 580, "Unexpected narrow non-break space (u202F) character", excerpt, location: ourLocation ; from field-text-check.js line 260 - 555, "Possible missing chapter number in markdown Bible link", excerpt: totalLink, location: ourLocation from notes-links-check.js line 817 + 555, "Possible missing chapter number in markdown Bible link", excerpt: totalLink, location: ourLocation from notes-links-check.js line 874 552, C, V, "Invalid zero verse number", details: `for chapter $C`, rowID, lineNumber: n + 1, excerpt: V, location: ourLocation from tn-tsv9-table-check.js line 227 552, C, V, "Invalid zero verse number", details: `for chapter $C`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from twl-tsv6-table-check.js line 216 552, C, V, "Invalid zero verse number", details: `for chapter $C`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from notes-tsv7-table-check.js line 217 @@ -504,19 +510,19 @@ Got 627 notices: 551, C, V, `Invalid zero chapter number`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from questions-tsv7-table-check.js line 194 539, "File starts with empty line", characterIndex, excerpt, location: ourLocation from plain-text-check.js line 166 538, "File ends without newline character", characterIndex, excerpt, location: ourLocation from plain-text-check.js line 171 - 518, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 696 - 517, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 692 - 450, "Resource container link should have '*' language code", details: `not '$foundLanguageCode'`, characterIndex, excerpt, location: ourLocation from notes-links-check.js line 364 - 450, "Resource container link should have '*' language code", details: `not '$foundLanguageCode'`, characterIndex, excerpt, location: ourLocation from notes-links-check.js line 576 - 444, "Shouldn’t have consecutive word fields without a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 787 - 443, "Shouldn’t have a footnote after a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 796 - 442, "Shouldn’t have a cross-reference after a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 803 + 518, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 698 + 517, "Missing expected USFM line", excerpt: `missing \\$expectedMarker`, location: fileLocation from usfm-text-check.js line 694 + 450, "Resource container link should have '*' language code", details: `not '$foundLanguageCode'`, characterIndex, excerpt, location: ourLocation from notes-links-check.js line 362 + 450, "Resource container link should have '*' language code", details: `not '$foundLanguageCode'`, characterIndex, excerpt, location: ourLocation from notes-links-check.js line 575 + 444, "Shouldn’t have consecutive word fields without a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 789 + 443, "Shouldn’t have a footnote after a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 798 + 442, "Shouldn’t have a cross-reference after a space", details: badCount > 1 ? details + `$badCount occurrences found in line` : details, lineNumber, C, V, characterIndex, excerpt, location: lineLocation from usfm-text-check.js line 805 441, `Unknown linkType parameter`, excerpt: linkType from field-link-check.js line 164 439, "Error fetching link", location: ` $uri` from field-link-check.js line 51 438, `Blank field / missing link (expected $linkOptions.expectedCount link$linkOptions.expectedCount === 1 ? "" : "s")`, location: ourLocation from field-link-check.js line 136 - 401, `Unexpected content after \\$marker marker`, C, V, lineNumber, characterIndex: marker.length, excerpt: rest, location: lineLocation from usfm-text-check.js line 1,426 + 401, `Unexpected content after \\$marker marker`, C, V, lineNumber, characterIndex: marker.length, excerpt: rest, location: lineLocation from usfm-text-check.js line 1,428 400, "USFMGrammar failed to run", details: `for $bookID got $e`, location: fileLocation from usfm-text-check.js line 313 - 399, C, V, "Useless paragraph marker", lineNumber: n, characterIndex: 1, details: `'\\$lastMarker' before '\\$marker'`, location: ourLocation from usfm-text-check.js line 1,662 + 399, C, V, "Useless paragraph marker", lineNumber: n, characterIndex: 1, details: `'\\$lastMarker' before '\\$marker'`, location: ourLocation from usfm-text-check.js line 1,664 378, `Possible mismatched '$thisField' markdown formatting pairs`, details: `$count.toLocaleString() total occurrence$count === 1 ? '' : 's'`, characterIndex, excerpt, location: ourLocation from markdown-text-check.js line 404 374, "Field contains zero-width space(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found`, fieldName: 'TWLink', rowID, location: ourRowLocation from twl-tsv6-row-check.js line 418 374, "Field contains zero-width space(s)", details: `$charCount occurrence$charCount === 1 ? '' : 's' found`, fieldName: 'SupportReference', rowID, location: ourRowLocation from tn-tsv9-row-check.js line 422 @@ -533,11 +539,11 @@ Got 627 notices: 373, "Field is only whitespace", fieldName: 'Response', rowID, location: ourRowLocation from questions-tsv7-row-check.js line 490 373, "Field is only whitespace", fieldName: 'SupportReference', rowID, location: ourRowLocation from notes-tsv7-row-check.js line 411 373, "Field is only whitespace", fieldName: 'Note', rowID, location: ourRowLocation from notes-tsv7-row-check.js line 488 - 348, "Markdown image link has no title text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 258 + 348, "Markdown image link has no title text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 259 330, `Expected lexicon entry status on third line`, except: lines[2], location: ourLocation from lexicon-file-contents-check.js line 145 - 329, `Unexpected bad character combination`, details, characterIndex, excerpt, location: ourLocation from field-text-check.js line 440 - 312, 'Possible unclosed footnote', details, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 857 - 301, `Unexpected whitespace after \\$marker marker`, C, V, lineNumber, characterIndex: marker.length, excerpt: rest, location: lineLocation from usfm-text-check.js line 1,424 + 329, `Unexpected bad character combination`, details, characterIndex, excerpt, location: ourLocation from field-text-check.js line 448 + 312, 'Possible unclosed footnote', details, lineNumber, C, V, location: lineLocation from usfm-text-check.js line 859 + 301, `Unexpected whitespace after \\$marker marker`, C, V, lineNumber, characterIndex: marker.length, excerpt: rest, location: lineLocation from usfm-text-check.js line 1,426 287, `Not enough links (expected $linkOptions.expectedCount link$linkOptions.expectedCount === 1 ? "" : "s")`, location: ` (only found $regexResultsArray.length)$ourLocation` from field-link-check.js line 178 282, "Nesting of header levels seems confused", details: `recent indent levels=$JSON.stringify(indentLevels) but now $numLeadingSpaces`, lineNumber: n, characterIndex: 0, location: ourLocation ; from markdown-text-check.js line 356 274, "Missing OccurrenceNote field", fieldName: 'OccurrenceNote', rowID, location: ourRowLocation from tn-tsv9-row-check.js line 515 @@ -550,13 +556,13 @@ Got 627 notices: 250, "Multiple blank lines are not expected in markdown", lineNumber: n, location: ourLocation ; from markdown-text-check.js line 373 238, C, V, "Can't handle verse list yet", rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from questions-tsv7-table-check.js line 245 224, "Multiple unexpected double spaces", details: `$doubleCount occurrences—only first is displayed`, excerpt, location: ourLocation ; from field-text-check.js line 232 - 218, "Using deprecated USFM marker", excerpt: `\\$deprecatedMarker`, location: fileLocation from usfm-text-check.js line 699 + 218, "Using deprecated USFM marker", excerpt: `\\$deprecatedMarker`, location: fileLocation from usfm-text-check.js line 701 201, "File contains both Arabic and other commas", location: ourLocation from plain-text-check.js line 195 - 199, "Markdown image link has no alternative text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 237 - 199, "Markdown image link has no alternative text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 256 - 195, `Unexpected $punctCharBeingChecked character at start of line`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 331 - 193, `Unexpected $punctChar character at end of line`, excerpt, location: ourLocation ; from field-text-check.js line 369 - 191 /* can be lowered to 71 */, `Unexpected $punctCharBeingChecked character after space`, excerpt, location: ourLocation ; from field-text-check.js line 316 + 199, "Markdown image link has no alternative text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 238 + 199, "Markdown image link has no alternative text", excerpt: totalLink, location: ourLocation from notes-links-check.js line 257 + 195, `Unexpected $punctCharBeingChecked character at start of line`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 334 + 193, `Unexpected $punctChar character at end of line`, excerpt, location: ourLocation ; from field-text-check.js line 375 + 191 /* can be lowered to 71 */, `Unexpected $punctCharBeingChecked$optionalName character after space`, excerpt, location: ourLocation ; from field-text-check.js line 319 179, "Unexpected space before ellipse character", characterIndex, excerpt, location: ourLocation from field-text-check.js line 269 178, "Unexpected space after ellipse character", characterIndex, excerpt, location: ourLocation from field-text-check.js line 274 177, `Unexpected doubled $punctChar characters`, excerpt, location: ourLocation ; from field-text-check.js line 293 @@ -581,17 +587,18 @@ Got 627 notices: 159, "Should use proper ellipse character (not periods)", characterIndex, excerpt, location: ourLocation from orig-quote-check.js line 606 158, `Unexpected space(s) beside divider $discontiguousDivider`, characterIndex, excerpt, location: ourLocation from orig-quote-check.js line 631 156, "Unexpected space(s) beside ellipse characters", characterIndex, excerpt, location: ourLocation from orig-quote-check.js line 645 - 152, "Should http link be https", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,524 + 152, "Should http link be https", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,581 148, "'checking' key is missing", location: ourLocation from manifest-text-check.js line 683 - 144, "Unknown Bible book name in TN link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,313 - 143, "Unknown Bible book name in TN RC link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 741 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 807 - 143, "Unknown Bible book name in relative Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 957 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,015 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,079 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,144 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,198 - 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,256 + 144, "Unknown Bible book name in TN link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,370 + 143, "Unknown Bible book name in TN RC link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 740 + 143, "Unknown Bible book name in TN RC link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 808 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 864 + 143, "Unknown Bible book name in relative Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,014 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,072 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,136 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: optionalB1, location: ourLocation from notes-links-check.js line 1,201 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,255 + 143, "Unknown Bible book name in Bible link", details: totalLink, excerpt: B1, location: ourLocation from notes-links-check.js line 1,313 138, "File ends with additional blank line(s)", characterIndex, excerpt, location: ourLocation from plain-text-check.js line 176 133, C, V, "Possible receding verse number", details: `'$V' after '$lastV for chapter $C`, rowID, lineNumber: n + 1, excerpt: reference, location: ourLocation from questions-tsv7-table-check.js line 239 124, "Unexpected double spaces", excerpt, location: ourLocation ; from field-text-check.js line 230 @@ -605,24 +612,25 @@ Got 627 notices: 95, "Unexpected trailing space(s)", excerpt, location: ourLocation ; from field-text-check.js line 198 94, "Unexpected trailing space(s) before break", characterIndex, excerpt, location: ourLocation from field-text-check.js line 205 93, "Unexpected trailing space(s) before line break", characterIndex, excerpt, location: ourLocation from field-text-check.js line 209 - 92, `Unexpected leading zero`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 457 - 87, C, V, "Expected \\toc2 line to follow \\toc1", lineNumber: n, characterIndex: 1, details: `not '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,655 - 87, C, V, "Expected \\toc3 line to follow \\toc2", lineNumber: n, characterIndex: 1, details: `not '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,657 - 82, `Error loading unfoldingWord link`, details: "please double-check link—there may be no problem", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,496 + 92, `Unexpected leading zero`, characterIndex, excerpt, location: ourLocation from field-text-check.js line 465 + 87, C, V, "Expected \\toc2 line to follow \\toc1", lineNumber: n, characterIndex: 1, details: `not '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,657 + 87, C, V, "Expected \\toc3 line to follow \\toc2", lineNumber: n, characterIndex: 1, details: `not '\\$lastMarker'`, location: ourLocation from usfm-text-check.js line 1,659 + 82, `Error loading unfoldingWord link`, details: "please double-check link—there may be no problem", excerpt: totalLink, location: ourLocation from notes-links-check.js line 1,553 70, "Possible unusual TW Strong's line", details: "expected line to start with '* Strong’s: '", excerpt: line.slice(0, excerptLength - 1), location: ourLocation from markdown-file-contents-check.js line 240 67, C: chapterNumberString, V: `$v`, "Verse appears to be left out", location: CVlocation from usfm-text-check.js line 560 64, "Unexpected leading space(s) after break", characterIndex, excerpt, location: ourLocation from field-text-check.js line 164 63, "Unexpected leading space(s) after line break", characterIndex, excerpt, location: ourLocation from field-text-check.js line 168 50, "Is this quote/occurrence correct???", details: `occurrence=$occurrence`, excerpt: fieldText, location: ourLocation from orig-quote-check.js line 673 - 43, "Unexpected Bible book name in TN RC link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 740 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 806 - 43, "Unexpected Bible book name in relative Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 956 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,014 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 1,078 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 1,143 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,197 - 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,255 - 25, "Note: skipped running BCS USFMGrammar checker for large book", details: `$numChapters chapters ($kB.toLocaleString() KB)`, location: ourLocation from usfm-text-check.js line 1,722 + 43, "Unexpected Bible book name in TN RC link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 739 + 43, "Unexpected Bible book name in TN RC link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 807 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 863 + 43, "Unexpected Bible book name in relative Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 1,013 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,071 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 1,135 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: optionalB1, location: ourLocation : from notes-links-check.js line 1,200 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,254 + 43, "Unexpected Bible book name in Bible link", details: `expected 'Song of Songs' in $totalLink`, excerpt: B1, location: ourLocation : from notes-links-check.js line 1,312 + 25, "Note: skipped running BCS USFMGrammar checker for large book", details: `$numChapters chapters ($kB.toLocaleString() KB)`, location: ourLocation from usfm-text-check.js line 1,724 20, "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", location: ourLocation from tn-tsv9-table-check.js line 276 20, "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", location: ourLocation from twl-tsv6-table-check.js line 280 20, "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", location: ourLocation from notes-tsv7-table-check.js line 281 diff --git a/package.json b/package.json index db9c095a..02368656 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "uw-content-validation", "description": "Functions for Checking Door43.org Scriptural Content/Resources.", - "version": "3.3.0_alpha16", + "version": "3.3.0", "private": false, "homepage": "https://unfoldingword.github.io/uw-content-validation/", "repository": { diff --git a/src/__tests__/__snapshots__/book-package-check.test.js.snap b/src/__tests__/__snapshots__/book-package-check.test.js.snap index 12573f6c..6d7c90c1 100644 --- a/src/__tests__/__snapshots__/book-package-check.test.js.snap +++ b/src/__tests__/__snapshots__/book-package-check.test.js.snap @@ -4537,20 +4537,6 @@ Object { "repoName": "en_tq", "username": "unfoldingWord", }, - Object { - "C": "3", - "V": "9", - "bookID": "RUT", - "details": "left=0, right=1", - "extra": "TQ1", - "filename": "rut/03/09.md", - "location": " in unfoldingWord (master)", - "message": "Mismatched “” characters", - "priority": 162, - "repoCode": "TQ1", - "repoName": "en_tq", - "username": "unfoldingWord", - }, Object { "C": "4", "V": "5", diff --git a/src/__tests__/__snapshots__/wrapper.test.js.snap b/src/__tests__/__snapshots__/wrapper.test.js.snap index 41e6c267..084e79e7 100644 --- a/src/__tests__/__snapshots__/wrapper.test.js.snap +++ b/src/__tests__/__snapshots__/wrapper.test.js.snap @@ -7,7 +7,7 @@ Object { "noticeList": Array [ Object { "bookID": "TIT", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, @@ -34,7 +34,7 @@ Object { "characterIndex": 29, "excerpt": "…us chapter 01", "fieldName": "Note", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 3, "location": "", "message": "Unexpected leading zero", @@ -44,7 +44,7 @@ Object { }, Object { "bookID": "TIT", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, @@ -66,7 +66,7 @@ Object { "noticeList": Array [ Object { "bookID": "TIT", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, @@ -161,7 +161,7 @@ Object { "characterIndex": 60, "excerpt": "…e: [[rc://*/ta/man/t…", "fieldName": "Note", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 3, "location": "", "message": "tC cannot yet process '*' language code", @@ -171,7 +171,7 @@ Object { }, Object { "bookID": "TIT", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, @@ -197,7 +197,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 2, "location": "", "message": "Missing Quote field", @@ -211,7 +211,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 3, "location": "", "message": "Missing Quote field", @@ -225,7 +225,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 4, "location": "", "message": "Missing Quote field", @@ -239,7 +239,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 5, "location": "", "message": "Missing Quote field", @@ -253,7 +253,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 6, "location": "", "message": "Missing Quote field", @@ -267,7 +267,7 @@ Object { "bookID": "TIT", "details": "should Occurrence be zero instead of ", "fieldName": "Quote", - "filename": "", + "filename": "testFile.tsv", "lineNumber": 7, "location": "", "message": "Missing Quote field", @@ -277,7 +277,7 @@ Object { }, Object { "bookID": "TIT", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, @@ -311,7 +311,7 @@ Object { "noticeList": Array [ Object { "bookID": "1JN", - "filename": "", + "filename": "testFile.tsv", "location": "", "message": "Note that 'disableAllLinkFetchingFlag' was set so link targets were not checked", "priority": 20, diff --git a/src/__tests__/wrapper.test.js b/src/__tests__/wrapper.test.js index 93cf9216..1512344d 100644 --- a/src/__tests__/wrapper.test.js +++ b/src/__tests__/wrapper.test.js @@ -53,11 +53,12 @@ describe('checkTN_TSV7Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = 'TIT'; + const filename = 'testFile.tsv'; const tableText = `Reference\tID\tTags\tSupportReference\tQuote\tOccurrence\tNote 1:3\tb22h\t\t\tκαιροῖς ἰδίοις\t1\t“at the proper time” 1:3\txy18\t\trc://*/ta/man/translate/figs-exclusive\tἡμῶν\t1\tThis includes Paul, Titus, and all Christians. (See: [[rc://*/ta/man/translate/figs-exclusive]]) `; - const rawResults = await checkTN_TSV7Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkTN_TSV7Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { @@ -135,6 +136,7 @@ describe('checkSN_TSV7Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = 'TIT'; + const filename = 'testFile.tsv'; const tableText = `Reference\tID\tTags\tSupportReference\tQuote\tOccurrence\tNote front:intro\tm2jl\t\t\t\t\t# Introduction to Titus\\n\\nThis is the introduction to the book of Titus 1:intro\tc7me\t\t\t\t\t# Introduction to Titus chapter 01\\n\\nPaul begins his letter by reminding Titus who Paul is to God, and who Titus is to Paul. He then instructs Titus about the kind of man that Titus must appoint as elders. These elders are necessary for the health of the new believers because there were so many people in Crete who are teaching things that were not true about God, and turning people away from God. @@ -142,7 +144,7 @@ front:intro\tm2jl\t\t\t\t\t# Introduction to Titus\\n\\nThis is the introduction 1:1\txyz8\t\t\tδοῦλος\t1\tPeople who speak some modern languages think that slave is different from servant, because slaves suffer in ways that servants do not. However, the Greek word **servant** means both slave and servant. It means anyone who must obey his master. This is why Paul said he was a slave or servant of God, because he wanted to obey God in every way. 1:1\tabc8\t\t\tἐκλεκτῶν Θεοῦ\t1\tThese people were the Christians. God chose them to know him. They did this by believing in Christ. This is why they were different from all other people. Paul became a servant and apostle of God so that they would trust in Christ and know God increasingly well. `; - const rawResults = await checkSN_TSV7Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkSN_TSV7Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { @@ -166,6 +168,7 @@ describe('checkTQ_TSV7Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = 'TIT'; + const filename = 'testFile.tsv'; const tableText = `Reference\tID\tTags\tQuote\tOccurrence\tQuestion\tResponse 1:2\tkowp\t\t\t\tWho were the “eyewitnesses” that Luke mentions?\tThe “eyewitnesses” were the ones who were with the apostles from the beginning of Jesus’ ministry. 1:2\tgjx5\t\t\t\tWhat did some of the eyewitnesses do after they saw what Jesus did?\tThey wrote down an account or story of what Jesus did. @@ -174,7 +177,7 @@ describe('checkTQ_TSV7Table() - ', () => { 1:7\tlyss\t\t\t\tWhy did Zechariah and Elizabeth have no children?\tThey did not have children because Elizabeth was unable to bear a child. Now she and Zechariah were very old. 1:8\tndy2\t\t\t\tWhat work was Zechariah doing before God?\tZechariah was serving as a priest. `; - const rawResults = await checkTQ_TSV7Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkTQ_TSV7Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { @@ -198,13 +201,14 @@ describe('checkSQ_TSV7Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = 'TIT'; + const filename = 'testFile.tsv'; const tableText = `Reference\tID\tTags\tQuote\tOccurrence\tQuestion\tResponse front:intro\tgtn1\t\t\t\t# Titus Study Questions\\n\\nThe Apostle Paul left Titus in Crete and gave him the responsibility to teach the new believers there, and to appoint elders in the local churches. Titus was a godly man, but he was not have as much experience as Paul did in guiding the formation of the new churches. In this letter, therefore, Paul counsels Titus concerning:\\n\\n* How Titus should fulfil his task\\n* The kind of men he should appoint as elders\\n* The type of threats that existed that could damage the new believers\\n* How believers should act in their daily lifes\\n* What is the hope that the believers look forward to\\n* How believers should interact with secular authorities and those who do not believe in Jesus\\n* The precise message that we should believe and teach\\n* How to deal with division within the church\\n\\nYou can discover Paul’s teaching concerning each of these things by carefully reading each chapter of the letter. Ask yourself questions about what you read, and pray to God that he will open your eyes to see clearly.\t 1:1\tx3em\t\tδοῦλος Θεοῦ, ἀπόστολος δὲ Ἰησοῦ Χριστοῦ\t1\tHow did Paul describe himself to Titus?\t 1:1\tv5b9\t\tδοῦλος & ἀπόστολος\t1\tWhy do you think Paul described himself as a **servant** before he described himself as an **apostle**?\t 1:1\tsg88\t\tδοῦλος Θεοῦ\t1\tIn what ways was Paul **a servant of God**?\t `; - const rawResults = await checkSQ_TSV7Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkSQ_TSV7Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { @@ -228,6 +232,7 @@ describe('checkTWL_TSV6Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = '1JN'; + const filename = 'testFile.tsv'; const tableText = `Reference\tID\tTags\tOrigWords\tOccurrence\tTWLink 1:1\te6vb\t\tχεῖρες\t1\trc://*/tw/dict/bible/other/hand 1:1\tndps\tkeyterm\tζωῆς\t1\trc://*/tw/dict/bible/kt/life @@ -235,7 +240,7 @@ describe('checkTWL_TSV6Table() - ', () => { 1:2\tbtym\tkeyterm\tμαρτυροῦμεν\t1\trc://*/tw/dict/bible/kt/testimony 1:2\tch2n\t\tἀπαγγέλλομεν\t1\trc://*/tw/dict/bible/other/declare `; - const rawResults = await checkTWL_TSV6Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkTWL_TSV6Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { @@ -346,6 +351,7 @@ describe('checkDeprecatedTN_TSV9Table() - ', () => { const username = 'unfoldingWord'; const languageCode = 'en'; const bookID = 'TIT'; + const filename = 'testFile.tsv'; const tableText = `Book\tChapter\tVerse\tID\tSupportReference\tOrigQuote\tOccurrence\tGLQuote\tOccurrenceNote TIT\tfront\tintro\tm2jl\t\t\t0\t\t# Introduction to Titus


## Part 1: General Introduction

### Outline of the book of Titus

1. Paul instructs Titus to appoint godly leaders. (1:1-16)
2. Paul instructs Titus to train people to live godly lives. (2:1-3:11)
3. Paul ends by sharing some of his plans and sending greetings to various believers. (3:12-15)

### Who wrote the book of Titus?

Paul wrote the book of Titus. Paul was from the city of Tarsus. He had been known as Saul in his early life. Before becoming a Christian, Paul was a Pharisee. He persecuted Christians. After he became a Christian, he traveled several times throughout the Roman Empire telling people about Jesus.

### What is the book of Titus about?

Paul wrote this letter to Titus, his fellow worker, who was leading the churches on the island of Crete. Paul instructed him about selecting church leaders. Paul also described how the believers should behave towards each other. He also encouraged them all to live in a way that pleases God.

### How should the title of this book be translated?

Translators may choose to call this book by its traditional title, “Titus.” Or they may choose a clearer title, such as “Paul’s Letter to Titus” or “A Letter to Titus.” (See: [[rc://en/ta/man/translate/translate-names]])

## Part 2: Important Religious and Cultural Concepts

### In what roles can people serve within the church?

There are some teachings in the book of Titus about whether a woman or divorced man can serve in positions of leadership within the church. Scholars disagree about the meaning of these teachings. Further study on these issues may be necessary before translating this book.

## Part 3: Important Translation Issues

### Singular and plural **you**

In this book, the word **I** refers to Paul. Also, the word **you** is almost always singular and refers to Titus. The exception to this is 3:15. (See: [[rc://en/ta/man/translate/figs-exclusive]] and [[rc://en/ta/man/translate/figs-you]])

### What is the meaning of **God our Savior**?

This is a common phrase in this letter. Paul meant to make the readers think about how God forgave them in Christ for sinning against him, and by forgiving them he saved them from being punished when he judges all people. A similar phrase in this letter is **our great God and Savior Jesus Christ**. TIT\t1\tintro\tc7me\t\t\t0\t\t# Titus 1 General Notes

## Structure and formatting

Paul formally introduces this letter in verses 1-4. Writers often began letters in this way in the ancient Near East.

In verses 6-9, Paul lists several qualities that a man must have if he is to be an elder in the church. (See: rc://en/ta/man/translate/figs-abstractnouns) Paul gives a similar list in 1 Timothy 3.

## Special concepts in this chapter

### Elders

The church has used different titles for church leaders. Some titles include overseer, elder, pastor, and bishop.

## Other possible translation difficulties in this chapter

### Should, may, must

The ULT uses different words that indicate requirements or obligations. These verbs have different levels of force associated with them. The subtle differences may be difficult to translate. The UST translates these verbs in a more general way. @@ -357,7 +363,7 @@ TIT\t1\t2\txyz9\t\tἐπ’ ἐλπίδι ζωῆς αἰωνίου\t1\twith the TIT\t1\t2\tr2gj\t\tπρὸ χρόνων αἰωνίων\t1\tbefore all the ages of time\t“before time began” TIT\t1\t3\tb22h\t\tκαιροῖς ἰδίοις\t1\tat the right time\t“at the proper time” `; - const rawResults = await checkDeprecatedTN_TSV9Table(username, languageCode, bookID, tableText, optionalCheckingOptions); + const rawResults = await checkDeprecatedTN_TSV9Table(username, languageCode, bookID, filename, tableText, optionalCheckingOptions); // console.log(`Test took ${rawResults.elapsedSeconds} seconds`); expect(rawResults.noticeList.length).toBeGreaterThan(0); const filteredResults = { diff --git a/src/core/disabled-notices.js b/src/core/disabled-notices.js index 365acabb..aa71290b 100644 --- a/src/core/disabled-notices.js +++ b/src/core/disabled-notices.js @@ -39,19 +39,28 @@ const disabledNotices = [ { repoCode: 'LT', priority: 95, }, // "Unexpected trailing space(s)" tC3 outputs trailing spaces all over the place { repoCode: 'ST', priority: 95, }, // "Unexpected trailing space(s)" tC3 outputs trailing spaces all over the place + { repoCode: 'TN', excerpt: 'brackets [ ] ', message: "Unexpected space after [ character", }, // 192 (x2) + { repoCode: 'TA', priority: 104, }, // "Unexpected trailing line break" UTA uses trailing
for (1) (2) (3) style numbered lists - { repoCode: 'TA', message: "Unexpected – character after space", }, // 191 -- temp en-dashes - { repoCode: 'TA', message: "Unexpected space after – character", }, // 192 -- temp en-dashes + // { repoCode: 'TA', message: "Unexpected – (en-dash) character after space", }, // 191 -- temp en-dashes + // { repoCode: 'TA', message: "Unexpected space after – (en-dash) character", }, // 192 -- temp en-dashes { repoCode: 'TA', priority: 172, }, // "Header levels should only increment by one" not required for TA { repoCode: 'TA', filename: 'translate/translate-alphabet/01.md', message: "At end of text with unclosed ‘ opening character", }, // 768 { repoCode: 'TA', filename: 'translate/translate-alphabet/01.md', message: "Mismatched ‘’ characters", }, // 462 + { repoCode: 'TA', filename: 'translate/translate-alphabet/01.md', message: "Unexpected space after ‘ character", }, // 192 + { repoCode: 'TA', filename: 'translate/translate-alphabet/01.md', message: "Unexpected space after ^ character", }, // 192 + { repoCode: 'TA', filename: 'translate/translate-alphabet/01.md', message: "Unexpected ^ character after space", }, // 191 + { repoCode: 'TA', filename: 'translate/translate-textvariants/01.md', message: "Unexpected space after [ character", }, // 192 { repoCode: 'TA', filename: 'translate/translate-formatsignals/01.md', message: "Unexpected space after ( character", }, // 192 - { repoCode: 'TN', excerpt: 'brackets [ ] ', message: "Unexpected space after [ character", }, // 192 (x2) + { repoCode: 'TA', filename: 'translate/figs-litany/01.md', message: "Unexpected non-break space (u00A0) character", }, // 581 + + { repoCode: 'TA', filename: 'checking/intro-checking/01.md', excerpt: "Tuggy P.,", }, // 329 Unexpected bad character combination + { repoCode: 'TA', filename: 'translate/translate-retell/01.md', excerpt: "Tuggy P.,", }, // 329 Unexpected bad character combination // This file explains how to use markdown headings { repoCode: 'TA', filename: 'translate/file-formats/01.md', message: "Unexpected # character at start of line", }, // 195 @@ -62,14 +71,24 @@ const disabledNotices = [ { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected space after ‘ character", lineNumber: 16, }, // 192 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected space after « character", }, // 192 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected space after ‹ character", }, // 192 - { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected space after — character", }, // 192 + { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected space after — (em-dash) character", }, // 192 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected . character after space", lineNumber: 16, }, // 191 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected ” character after space", }, // 191 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected ’ character after space", }, // 191 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected » character after space", }, // 191 { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected › character after space", }, // 191 - { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected — character after space", }, // 191 + { repoCode: 'TA', filename: 'translate/figs-quotemarks/01.md', message: "Unexpected — (em-dash) character after space", }, // 191 + + { repoCode: 'TA', filename: 'translate/writing-quotations/01.md', excerpt: " (“ ”).", }, // 192 & 191 + { repoCode: 'TA', filename: 'translate/writing-quotations/01.md', message: "Unexpected » character after space", }, // 191 + { repoCode: 'TA', filename: 'translate/writing-quotations/01.md', message: "Unexpected space after « character", }, // 192 + + { repoCode: 'TA', filename: 'checking/self-assessment/01.md', excerpt: "no | yes", }, // 192 & 191 + + { repoCode: 'TA', filename: 'translate/translate-formatsignals', excerpt: " “( )” ", }, // 192 & 191 + + { repoCode: 'TA', filename: 'translate/source-version/01.md', message: " .1 ", }, // 191 -- Unexpected . character after space { repoCode: 'TA', filename: 'translate/figs-metaphor/01.md', message: "Possible misplaced ( character", }, // 17 ]; diff --git a/src/core/field-text-check.js b/src/core/field-text-check.js index b1e1912c..c215c24d 100644 --- a/src/core/field-text-check.js +++ b/src/core/field-text-check.js @@ -313,7 +313,10 @@ export function checkTextField(username, languageCode, repoCode, fieldType, fiel if (punctCharBeingChecked !== '-' || '1234567890'.indexOf(nextChar) === -1) { // Allow negative numbers, e.g., -1 const excerpt = (characterIndex > excerptHalfLength ? '…' : '') + fieldText.substring(characterIndex - excerptHalfLength, characterIndex + excerptHalfLengthPlus) + (characterIndex + excerptHalfLengthPlus < fieldText.length ? '…' : ''); // Lower priority for em-dash in markdown and for forward slash (used to list alternatives, e.g., "yes / no") - const notice = { priority: 191 /* can be lowered to 71 */, message: `Unexpected ${punctCharBeingChecked} character after space`, excerpt, location: ourLocation }; + let optionalName = ''; + if (punctCharBeingChecked === '–') optionalName = ' (en-dash)'; + else if (punctCharBeingChecked === '—') optionalName = ' (em-dash)'; + const notice = { priority: 191 /* can be lowered to 71 */, message: `Unexpected ${punctCharBeingChecked}${optionalName} character after space`, excerpt, location: ourLocation }; if (((punctCharBeingChecked === '—' || punctCharBeingChecked === '/') && fieldType.startsWith('markdown')) || (punctCharBeingChecked === '’' && !['en', 'hbo', 'el-x-koine'].includes(languageCode))) // Some other languages allow words to start with apostrophes notice.priority = 71; // Lower the priority from 191 @@ -348,7 +351,10 @@ export function checkTextField(username, languageCode, repoCode, fieldType, fiel const excerpt = (characterIndex > excerptHalfLength ? '…' : '') + fieldText.substring(characterIndex - excerptHalfLength, characterIndex + excerptHalfLengthPlus) + (characterIndex + excerptHalfLengthPlus < fieldText.length ? '…' : ''); // Lower priority for em-dash in markdown and for forward slash (used to list alternatives, e.g., "yes / no") // debugLog(`Got space after ${punctCharBeingChecked} in ${fieldType} around ${excerpt}: priority ${punctCharBeingChecked === '—' && fieldType.startsWith('markdown') ? 72 : 192}`); - const notice = { priority: (punctCharBeingChecked === '—' || punctCharBeingChecked === '/') && fieldType.startsWith('markdown') ? 72 : 192, message: `Unexpected space after ${punctCharBeingChecked} character`, excerpt, location: ourLocation }; + let optionalName = ''; + if (punctCharBeingChecked === '–') optionalName = ' (en-dash)'; + else if (punctCharBeingChecked === '—') optionalName = ' (em-dash)'; + const notice = { priority: (punctCharBeingChecked === '—' || punctCharBeingChecked === '/') && fieldType.startsWith('markdown') ? 72 : 192, message: `Unexpected space after ${punctCharBeingChecked}${optionalName} character`, excerpt, location: ourLocation }; if ((fieldType !== 'raw' && fieldType !== 'text') || fieldName.slice(0, 6) !== 'from \\') notice.characterIndex = characterIndex; // characterIndex means nothing for processed USFM addNoticePartial(notice); diff --git a/src/core/notes-links-check.js b/src/core/notes-links-check.js index 4997e051..2bda6f3a 100644 --- a/src/core/notes-links-check.js +++ b/src/core/notes-links-check.js @@ -29,7 +29,7 @@ const TW_INTERNAL_REGEX = new RegExp('\\[([-,\\w ()]+?)\\]\\(\\.{2}/([a-z]{2,5}) // NOTE: Bible link format is archaic, presumably from pre-USFM days! // TODO: Do we need to normalise Bible links, i.e., make sure that the link itself // (we don’t care about the displayed text) doesn’t specify superfluous levels/information -// TODO: We need a decision on hyphen vs en-dash in verse references +// TODO: We need a decision on hyphen vs en-dash in verse references -- we currently allow either which isn't good in the long term! // TODO: Test to see if "[2:23](../02/03.md)" is found by more than one regex below const BIBLE_REGEX_OTHER_BOOK_ABSOLUTE = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3}):(\\d{1,3})\\]\\(([123a-z]{3})/(\\d{1,3})/(\\d{1,3})\\.md\\)', 'g'); // [Revelation 3:11](rev/03/11.md) // TODO: Is this option with ../../ really valid? Where/Why does it occur? @@ -42,7 +42,8 @@ const THIS_VERSE_TO_THIS_CHAPTER_BIBLE_REGEX = new RegExp('\\[(?:verse )?(\\d{1, const THIS_VERSE_RANGE_TO_THIS_CHAPTER_BIBLE_REGEX = new RegExp('\\[(?:verses )?(\\d{1,3})[–-](\\d{1,3})\\]\\(\\.{2}/(\\d{1,3})/(\\d{1,3})\\.md\\)', 'g');// [2–7](../09/2.md) or [verses 2–7](../09/2.md) NOTE en-dash const BCV_V_TO_THIS_CHAPTER_BIBLE_REGEX = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3}):(\\d{1,3})[–-](\\d{1,3})\\]\\(\\./(\\d{1,3})\\.md\\)', 'g'); // [Genesis 26:12-14](./12.md) NOTE en-dash -const BIBLE_FULL_HELP_REGEX = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3}):(\\d{1,3})(?:-\\d{1,3})?\\]\\(rc://([^ /]+?)/tn/help/([123a-z]{3})/(\\d{1,3})/(\\d{1,3})\\)', 'g'); // [Song of Solomon 29:23-24](rc://en/tn/help/sng/29/23) +const TN_FULL_HELP_CV_REGEX = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3}):(\\d{1,3})(?:[–-]\\d{1,3})?\\]\\(rc://([^ /]+?)/tn/help/([123a-z]{3})/(\\d{1,3})/(\\d{1,3})\\)', 'g'); // [Song of Solomon 29:23-24](rc://en/tn/help/sng/29/23) +const TN_FULL_HELP_C_REGEX = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3})\\]\\(rc://([^ /]+?)/tn/help/([123a-z]{3})/(\\d{1,3})/(\\d{1,3})\\)', 'g'); // [Song of Solomon 29:23-24](rc://en/tn/help/sng/29/23) const TN_REGEX = new RegExp('\\[((?:1 |2 |3 )?)((?:[\\w ]+? )?)(\\d{1,3}):(\\d{1,3})\\]\\((\\.{2})/(\\d{1,3})/(\\d{1,3})/([a-z][a-z0-9][a-z0-9][a-z0-9])\\)', 'g'); @@ -272,20 +273,17 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, } // Find total regular (non-image) links - const linksList1 = fieldText.match(GENERAL_MARKDOWN_LINK1_REGEX) || []; // [[something]] - // if (linksList1.length) debugLog(`linksList1 (${linksList1.length}) = ${JSON.stringify(linksList1)}`); - const linksList2 = fieldText.match(GENERAL_MARKDOWN_LINK2_REGEX) || []; // [display](link) - // if (linksList2.length) debugLog(`linksList2 (${linksList2.length}) = ${JSON.stringify(linksList2)}`); - // const totalLinks1 = linksList1.length; - // const totalLinks2 = linksList2.length; - // eslint-disable-next-line no-unused-vars - let taLinkCount1 = 0, taLinkCount2 = 0, twLinkCount1 = 0, twLinkCount2 = 0, TNLinkCount1 = 0, thisChapterBibleLinkCount1 = 0, thisVerseBibleLinkCount1 = 0, thisBookBibleLinkCount1 = 0, otherBookBibleLinkCount1 = 0, OBSLinkCount = 0, generalLinkCount1 = 0; + const singlePartLinksList = fieldText.match(GENERAL_MARKDOWN_LINK1_REGEX) || []; // [[something]] + // if (singlePartLinksList.length) debugLog(`singlePartLinksList (${singlePartLinksList.length}) = ${JSON.stringify(singlePartLinksList)}`); + const doublePartLinksList = fieldText.match(GENERAL_MARKDOWN_LINK2_REGEX) || []; // [display](link) + // if (doublePartLinksList.length) debugLog(`doublePartLinksList (${doublePartLinksList.length}) = ${JSON.stringify(doublePartLinksList)}`); + // let taLinkCount1 = 0, taLinkCount2 = 0, twLinkCount1 = 0, twLinkCount2 = 0, TNLinkCount1 = 0, thisChapterBibleLinkCount1 = 0, thisVerseBibleLinkCount1 = 0, thisBookBibleLinkCount1 = 0, otherBookBibleLinkCount1 = 0, OBSLinkCount = 0, generalLinkCount1 = 0; const processedLinkList = []; // Check for internal TW links like [Asher](../names/asher.md) while ((regexMatchObject = TW_INTERNAL_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TW_INTERNAL_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - twLinkCount1 += 1; + // twLinkCount1 += 1; logicAssert(regexMatchObject.length === 4, `TW_INTERNAL_REGEX expected 4 fields (not ${regexMatchObject.length})`); logicAssert(repoCode === 'TW', `Shouldn't this only be for TW repos, not for ${repoCode}?`); // eslint-disable-next-line no-unused-vars @@ -352,7 +350,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for TA links like [How to Translate Names](rc://en/ta/man/translate/translate-names) while ((regexMatchObject = TA_FULL_DISPLAY_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TA_FULL_DISPLAY_LINK_REGEX resultArray=${JSON.stringify(regexMatchObject)}`); - taLinkCount1 += 1; + // taLinkCount1 += 1; logicAssert(regexMatchObject.length === 5, `TA_FULL_DISPLAY_LINK_REGEX expected 5 fields (not ${regexMatchObject.length})`) // eslint-disable-next-line no-unused-vars let [totalLink, _displayName, foundLanguageCode, part, article] = regexMatchObject; @@ -431,7 +429,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for relative TA links like [Borrow Words](../translate-transliterate/01.md) while ((regexMatchObject = TA_RELATIVE1_DISPLAY_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TA_RELATIVE1_DISPLAY_LINK_REGEX resultArray=${JSON.stringify(regexMatchObject)}`); - taLinkCount1 += 1; + // taLinkCount1 += 1; logicAssert(regexMatchObject.length === 3, `TA_RELATIVE1_DISPLAY_LINK_REGEX expected 3 fields (not ${regexMatchObject.length})`) // eslint-disable-next-line no-unused-vars let [totalLink, _displayName, article] = regexMatchObject; @@ -500,7 +498,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for relative TA links like [Borrow Words](../../translate/translate-transliterate/01.md) while ((regexMatchObject = TA_RELATIVE2_DISPLAY_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TA_RELATIVE2_DISPLAY_LINK_REGEX resultArray=${JSON.stringify(regexMatchObject)}`); - taLinkCount1 += 1; + // taLinkCount1 += 1; logicAssert(regexMatchObject.length === 4, `TA_RELATIVE2_DISPLAY_LINK_REGEX expected 4 fields (not ${regexMatchObject.length})`) // eslint-disable-next-line no-unused-vars let [totalLink, _displayName, TAsection, article] = regexMatchObject; @@ -566,7 +564,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // if (fieldText.indexOf('brother') !== -1) debugLog("checkNotesLinksToOutside: Search for TA links") while ((regexMatchObject = TA_DOUBLE_BRACKETED_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TA_DOUBLE_BRACKETED_LINK_REGEX resultArray=${JSON.stringify(regexMatchObject)}`); - taLinkCount2 += 1; + // taLinkCount2 += 1; logicAssert(regexMatchObject.length === 4, `TA_DOUBLE_BRACKETED_LINK_REGEX expected 4 fields (not ${regexMatchObject.length})`) let [totalLink, foundLanguageCode, part, article] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -647,7 +645,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // if (fieldText.indexOf('brother') !== -1) debugLog(`checkNotesLinksToOutside: ${bookID} ${givenC}:${givenV} Search for TW links with ${ourTWRegex}`) while ((regexMatchObject = ourTWRegex.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside ${languageCode} ${repoCode} ${fieldName} ${givenC}:${givenV} found TW resultArray=${JSON.stringify(regexMatchObject)}`); - twLinkCount2 += 1; + // twLinkCount2 += 1; logicAssert(regexMatchObject.length === 4, `TW_REGEX expected 4 fields (not ${regexMatchObject.length})`) let [totalLink, foundLanguageCode, category, article] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -715,12 +713,12 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // else debugLog("checkNotesLinksToOutside: disableAllLinkFetchingFlag is set to TRUE!"); } - // debugLog("checkNotesLinksToOutside: Search for Bible links") - // Check for other book Bible links like [Genesis 29:23](rc://en/tn/help/gen/29/23) - while ((regexMatchObject = BIBLE_FULL_HELP_REGEX.exec(fieldText))) { - // debugLog(` checkNotesLinksToOutside BIBLE_FULL_HELP_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - otherBookBibleLinkCount1 += 1; - logicAssert(regexMatchObject.length === 9, `BIBLE_FULL_HELP_REGEX expected 9 fields (not ${regexMatchObject.length})`); + // debugLog("checkNotesLinksToOutside: Search for TN links") + // Check for other book Bible links like [Genesis 29:23](rc://en/tn/help/gen/29/23) or [Leviticus 11:44–45](rc://en/tn/help/lev/11/44) + while ((regexMatchObject = TN_FULL_HELP_CV_REGEX.exec(fieldText))) { + // debugLog(` checkNotesLinksToOutside TN_FULL_HELP_CV_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); + // otherBookBibleLinkCount1 += 1; // TODO: What should this really be? + logicAssert(regexMatchObject.length === 9, `TN_FULL_HELP_CV_REGEX expected 9 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, optionalB1, C1, V1, Lg, B2, C2, V2] = regexMatchObject; // debugLog(`Lg='${Lg}' B2='${B2}' C2='${C2}' V2='${V2}'`); processedLinkList.push(totalLink); // Save the full link @@ -748,13 +746,13 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, const linkChapterInt = ourParseInt(C2), linkVerseInt = ourParseInt(V2); try { if (ourParseInt(C1) !== linkChapterInt) - addNoticePartial({ priority: 743, message: "Chapter numbers of markdown Bible link don’t match", details: `${C1} vs ${linkChapterInt}`, excerpt: totalLink, location: ourLocation }); + addNoticePartial({ priority: 743, message: "Chapter numbers of markdown TN link don’t match", details: `${C1} vs ${linkChapterInt}`, excerpt: totalLink, location: ourLocation }); } catch (ccError) { console.error(`TN Link CheckA couldn’t compare chapter numbers for ${bookID} ${givenC}:${givenV} ${fieldName} with ${C1} from '${fieldText}': ${ccError}`); } try { if (ourParseInt(V1) !== linkVerseInt) - addNoticePartial({ priority: 742, message: "Verse numbers of markdown Bible link don’t match", details: `${V1} vs ${linkVerseInt}`, excerpt: totalLink, location: ourLocation }); + addNoticePartial({ priority: 742, message: "Verse numbers of markdown TN link don’t match", details: `${V1} vs ${linkVerseInt}`, excerpt: totalLink, location: ourLocation }); } catch (vvError) { console.error(`TN Link CheckA couldn’t compare verse numbers for ${bookID} ${givenC}:${givenV} ${fieldName} with ${C1}:${V1} from '${fieldText}': ${vvError}`); } @@ -768,7 +766,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, } else if (linkBookCode.length) { // then we know which Bible book this link is to // So we can check for valid C:V numbers let numChaptersThisBook, numVersesThisChapter; - logicAssert(linkBookCode.toLowerCase() !== 'obs', `BIBLE_FULL_HELP_REGEX linkBookCode shouldn’t be '${linkBookCode}' in notes-links-check`); + logicAssert(linkBookCode.toLowerCase() !== 'obs', `TN_FULL_HELP_CV_REGEX linkBookCode shouldn’t be '${linkBookCode}' in notes-links-check`); try { numChaptersThisBook = books.chaptersInBook(linkBookCode); } catch (tlcNCerror) { @@ -779,17 +777,75 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, numVersesThisChapter = books.versesInChapter(linkBookCode, linkChapterInt); } catch (tlcNVerror) { } if (!linkChapterInt || linkChapterInt < 1 || linkChapterInt > numChaptersThisBook) - addNoticePartial({ priority: 655, message: "Bad chapter number in markdown Bible help link", details: `${linkBookCode} ${linkChapterInt} vs ${numChaptersThisBook} chapters`, excerpt: totalLink, location: ourLocation }); + addNoticePartial({ priority: 655, message: "Bad chapter number in markdown TN help link", details: `${linkBookCode} ${linkChapterInt} vs ${numChaptersThisBook} chapters`, excerpt: totalLink, location: ourLocation }); else if (!linkVerseInt || linkVerseInt < 0 || linkVerseInt > numVersesThisChapter) - addNoticePartial({ priority: 653, message: "Bad verse number in markdown Bible help link", details: `${linkBookCode} ${linkChapterInt}:${linkVerseInt} vs ${numVersesThisChapter} verses`, excerpt: totalLink, location: ourLocation }); + addNoticePartial({ priority: 653, message: "Bad verse number in markdown TN help link", details: `${linkBookCode} ${linkChapterInt}:${linkVerseInt} vs ${numVersesThisChapter} verses`, excerpt: totalLink, location: ourLocation }); + } else + debugLog(`Seems TN_FULL_HELP_CV_REGEX '${totalLink}' didn’t have a link book code!`); + } + while ((regexMatchObject = TN_FULL_HELP_C_REGEX.exec(fieldText))) { + // debugLog(` checkNotesLinksToOutside TN_FULL_HELP_C_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); + // otherBookBibleLinkCount1 += 1; // TODO: What should this really be? + logicAssert(regexMatchObject.length === 8, `TN_FULL_HELP_C_REGEX expected 8 fields (not ${regexMatchObject.length})`); + let [totalLink, optionalN1, optionalB1, C1, Lg, B2, C2, V2] = regexMatchObject; + // debugLog(`Lg='${Lg}' B2='${B2}' C2='${C2}' V2='${V2}'`); + processedLinkList.push(totalLink); // Save the full link + + if (Lg !== '*' && Lg !== languageCode) + addNoticePartial({ priority: 669, message: "Unexpected language code in link", details: `resource language code is '${languageCode}'`, excerpt: Lg, location: ourLocation }); + + if (optionalN1) { + logicAssert(optionalB1, `Should have book name as well as number '${optionalN1}' in '${totalLink}'`); + } + if (optionalB1) { + optionalB1 = `${optionalN1}${optionalB1}`.trim(); // e.g., 1 Timothy + if (defaultLanguageCode === 'en') { // should be able to check the book name + const checkResult = books.isGoodEnglishBookName(optionalB1); + // debugLog(optionalB1, "isGoodEnglishBookName checkResult", checkResult); + if (checkResult === undefined || checkResult === false) + addNoticePartial(optionalB1 === 'Song of Solomon' ? + { priority: 43, message: "Unexpected Bible book name in TN RC link", details: `expected 'Song of Songs' in ${totalLink}`, excerpt: optionalB1, location: ourLocation } : + { priority: 143, message: "Unknown Bible book name in TN RC link", details: totalLink, excerpt: optionalB1, location: ourLocation }); + } + } + + let linkBookCode = B2 === '..' ? bookID : B2; + + const linkChapterInt = ourParseInt(C2), linkVerseInt = ourParseInt(V2); + try { + if (ourParseInt(C1) !== linkChapterInt) + addNoticePartial({ priority: 743, message: "Chapter numbers of markdown TN link don’t match", details: `${C1} vs ${linkChapterInt}`, excerpt: totalLink, location: ourLocation }); + } catch (ccError) { + console.error(`TN Link CheckA couldn’t compare chapter numbers for ${bookID} ${givenC}:${givenV} ${fieldName} with ${C1} from '${fieldText}': ${ccError}`); + } + if (linkVerseInt !== 1) + addNoticePartial({ priority: 729, message: "Expected verse one for whole chapter link", details: `not verse ${linkVerseInt}`, excerpt: totalLink, location: ourLocation }); + + if (linkBookCode === 'obs') { + const numStories = 50; + if (!linkChapterInt || linkChapterInt < 1 || linkChapterInt > numStories) + addNoticePartial({ priority: 655, message: "Bad story number in markdown OBS help link", details: `${linkBookCode} ${linkChapterInt} vs ${numStories} chapters`, excerpt: totalLink, location: ourLocation }); + } else if (linkBookCode.length) { // then we know which Bible book this link is to + // So we can check for valid C:V numbers + let numChaptersThisBook; + logicAssert(linkBookCode.toLowerCase() !== 'obs', `TN_FULL_HELP_C_REGEX linkBookCode shouldn’t be '${linkBookCode}' in notes-links-check`); + try { + numChaptersThisBook = books.chaptersInBook(linkBookCode); + } catch (tlcNCerror) { + debugLog(`checkNotesLinksToOutside1 with linkBookCode '${linkBookCode}' got error: ${tlcNCerror}`); + numChaptersThisBook = 0; + } + if (!linkChapterInt || linkChapterInt < 1 || linkChapterInt > numChaptersThisBook) + addNoticePartial({ priority: 655, message: "Bad chapter number in markdown TN help link", details: `${linkBookCode} ${linkChapterInt} vs ${numChaptersThisBook} chapters`, excerpt: totalLink, location: ourLocation }); } else - debugLog(`Seems BIBLE_FULL_HELP_REGEX '${totalLink}' didn’t have a link book code!`); + debugLog(`Seems TN_FULL_HELP_C_REGEX '${totalLink}' didn’t have a link book code!`); } + // debugLog("checkNotesLinksToOutside: Search for Bible links") // Check for this-chapter Bible links like [Revelation 3:11](./11.md) while ((regexMatchObject = BIBLE_REGEX_THIS_CHAPTER_RELATIVE.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BIBLE_REGEX_THIS_CHAPTER_RELATIVE regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisChapterBibleLinkCount1 += 1; + // thisChapterBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 6, `BIBLE_REGEX_THIS_CHAPTER_RELATIVE expected 6 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, optionalB1, C1, V1, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -855,7 +911,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for this-verse Bible links like [11](../03/11.md) while ((regexMatchObject = THIS_VERSE_TO_THIS_CHAPTER_BIBLE_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside THIS_VERSE_TO_THIS_CHAPTER_BIBLE_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisVerseBibleLinkCount1 += 1; + // thisVerseBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 4, `THIS_VERSE_TO_THIS_CHAPTER_BIBLE_REGEX expected 4 fields (not ${regexMatchObject.length})`); let [totalLink, V1, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -895,7 +951,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for this-verse Bible links like [11](../03/11.md) while ((regexMatchObject = THIS_VERSE_RANGE_TO_THIS_CHAPTER_BIBLE_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside THIS_VERSE_RANGE_TO_THIS_CHAPTER_BIBLE_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisVerseBibleLinkCount1 += 1; + // thisVerseBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 5, `THIS_VERSE_RANGE_TO_THIS_CHAPTER_BIBLE_REGEX expected 5 fields (not ${regexMatchObject.length})`); let [totalLink, V1a, V1b, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -939,7 +995,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for this-book Bible links like [Revelation 3:11](../03/11.md) while ((regexMatchObject = BIBLE_REGEX_THIS_BOOK_RELATIVE.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BIBLE_REGEX_THIS_BOOK_RELATIVE regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisBookBibleLinkCount1 += 1; + // thisBookBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 7, `BIBLE_REGEX_THIS_BOOK_RELATIVE expected 7 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, optionalB1, C1, V1, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -997,7 +1053,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for other-book Bible links like [Revelation 3:11-12](../rev/03/11.md) while ((regexMatchObject = BCV_V_TO_OTHER_BOOK_BIBLE_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BCV_V_TO_OTHER_BOOK_BIBLE_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisBookBibleLinkCount1 += 1; + // thisBookBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 9, `BCV_V_TO_OTHER_BOOK_BIBLE_REGEX expected 9 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, B1, C1, V1a, V1b, B2, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -1061,7 +1117,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for this-book Bible links like [Revelation 3:11-12](../03/11.md) while ((regexMatchObject = BCV_V_TO_THIS_BOOK_BIBLE_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BCV_V_TO_THIS_BOOK_BIBLE_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisBookBibleLinkCount1 += 1; + // thisBookBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 9, `BCV_V_TO_THIS_BOOK_BIBLE_REGEX expected 9 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, optionalB1, C1, V1a, V1b, B2, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -1126,7 +1182,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for this-book Bible links like [Revelation 3:11-12](../03/11.md) while ((regexMatchObject = BCV_V_TO_THIS_CHAPTER_BIBLE_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BCV_V_TO_THIS_CHAPTER_BIBLE_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - thisChapterBibleLinkCount1 += 1; + // thisChapterBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 7, `BCV_V_TO_THIS_CHAPTER_BIBLE_REGEX expected 7 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, optionalB1, C1, V1a, V1b, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -1180,7 +1236,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for other book Bible links like [Revelation 3:11](rev/03/11.md) while ((regexMatchObject = BIBLE_REGEX_OTHER_BOOK_ABSOLUTE.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BIBLE_REGEX_OTHER_BOOK_ABSOLUTE regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - otherBookBibleLinkCount1 += 1; + // otherBookBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 8, `BIBLE_REGEX_OTHER_BOOK_ABSOLUTE expected 8 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, B1, C1, V1, B2, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -1238,7 +1294,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for other book Bible links like [Revelation 3:11](../../rev/03/11.md) while ((regexMatchObject = BIBLE_REGEX_OTHER_BOOK_RELATIVE.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside BIBLE_REGEX_OTHER_BOOK_RELATIVE regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - otherBookBibleLinkCount1 += 1; + // otherBookBibleLinkCount1 += 1; logicAssert(regexMatchObject.length === 8, `BIBLE_REGEX_OTHER_BOOK_RELATIVE expected 8 fields (not ${regexMatchObject.length})`); let [totalLink, optionalN1, B1, C1, V1, B2, C2, V2] = regexMatchObject; processedLinkList.push(totalLink); // Save the full link @@ -1296,7 +1352,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for TN links like [Titus 3:11](../03/11/zd2d) while ((regexMatchObject = TN_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside TN_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - TNLinkCount1 += 1; + // TNLinkCount1 += 1; logicAssert(regexMatchObject.length === 9, `TN_REGEX expected 9 fields (not ${regexMatchObject.length})`); // eslint-disable-next-line no-unused-vars let [totalLink, optionalN1, optionalB1, C1, V1, B2, C2, V2, _noteID2] = regexMatchObject; @@ -1357,7 +1413,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // Check for OBS links like [03:04](03/04) while ((regexMatchObject = OBS_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside OBS_LINK_REGEX resultArray=${JSON.stringify(regexMatchObject)}`); - OBSLinkCount += 1; + // OBSLinkCount += 1; logicAssert(regexMatchObject.length === 5, `OBS_LINK_REGEX expected 5 fields (not ${regexMatchObject.length})`) // eslint-disable-next-line no-unused-vars let [totalLink, storyNumberA, frameNumberA, storyNumberB, frameNumberB] = regexMatchObject; @@ -1423,7 +1479,7 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, // if (fieldText.indexOf('http') !== -1) debugLog(`Checking for http links in '${fieldName}' '${fieldText}'`); while ((regexMatchObject = SIMPLE_DISPLAY_LINK_REGEX.exec(fieldText))) { // debugLog(` checkNotesLinksToOutside SIMPLE_DISPLAY_LINK_REGEX regexMatchObject(${regexMatchObject.length})=${JSON.stringify(regexMatchObject)}`); - generalLinkCount1 += 1; + // generalLinkCount1 += 1; logicAssert(regexMatchObject.length === 3, `SIMPLE_DISPLAY_LINK_REGEX expected 3 fields (not ${regexMatchObject.length})`); // eslint-disable-next-line no-unused-vars let [totalLink, displayText, uri] = regexMatchObject; @@ -1527,34 +1583,34 @@ export async function checkNotesLinksToOutside(username, languageCode, repoCode, } // Check for additional links that we can’t explain - // if (processedLinkList.length || linksList1.length || linksList2.length) { + // if (processedLinkList.length || singlePartLinksList.length || doublePartLinksList.length) { // debugLog(`processedLinkList (${processedLinkList.length}) = ${JSON.stringify(processedLinkList)}`); - // if (linksList1.length) { + // if (singlePartLinksList.length) { // debugLog(` ${thisChapterBibleLinkCount1? 'thisChapterBibleLinkCount1='+thisChapterBibleLinkCount1:''} ${thisVerseBibleLinkCount1?'thisVerseBibleLinkCount1='+thisVerseBibleLinkCount1:''} ${thisBookBibleLinkCount1?'thisBookBibleLinkCount1='+thisBookBibleLinkCount1:''} ${otherBookBibleLinkCount1?'otherBookBibleLinkCount1='+otherBookBibleLinkCount1:''} ${TNLinkCount1?'TNLinkCount1='+TNLinkCount1:''} ${twLinkCount1?'twLinkCount1='+twLinkCount1:''} ${taLinkCount1?'taLinkCount1='+taLinkCount1:''} ${generalLinkCount1?'generalLinkCount1='+generalLinkCount1:''}`); - // debugLog(` linksList1 (${linksList1.length}) = ${JSON.stringify(linksList1)}`); + // debugLog(` singlePartLinksList (${singlePartLinksList.length}) = ${JSON.stringify(singlePartLinksList)}`); // } - // if (linksList2.length) { + // if (doublePartLinksList.length) { // debugLog(` ${twLinkCount2?'twLinkCount2='+twLinkCount2:''} ${taLinkCount2?'taLinkCount2='+taLinkCount2:''}`); - // debugLog(` linksList2 (${linksList2.length}) = ${JSON.stringify(linksList2)}`); + // debugLog(` doublePartLinksList (${doublePartLinksList.length}) = ${JSON.stringify(doublePartLinksList)}`); // } // } // NOTE: This additional check using counts would fail if a link was found by more than one RegEx // const linkCount1 = thisChapterBibleLinkCount1 + thisVerseBibleLinkCount1 + thisBookBibleLinkCount1 + otherBookBibleLinkCount1 + TNLinkCount1 + twLinkCount1 + taLinkCount1 + generalLinkCount1; // if (totalLinks1 > linkCount1) { - const leftoverLinksList1 = linksList1.filter(x => !processedLinkList.includes(x)); // Delete links that we processed above - if (leftoverLinksList1.length) - // if (leftoverLinksList1.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' processedLinkList (${processedLinkList.length}) = ${JSON.stringify(processedLinkList)}\n linksList1(${linksList1.length})=${JSON.stringify(linksList1)}\nleftoverLinksList1(${leftoverLinksList1.length})=${JSON.stringify(leftoverLinksList1)}`); - // if (leftoverLinksList1.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' leftoverLinksList1 (${leftoverLinksList1.length}) = ${JSON.stringify(leftoverLinksList1)}`); - addNoticePartial({ priority: 648, message: "Unusual [ ]( ) link(s)—not a recognized Bible, OBS, or TA, TN, or TW link", details: `need to carefully check ${leftoverLinksList1.length === 1 ? '"' + leftoverLinksList1[0] + '"' : JSON.stringify(leftoverLinksList1)}`, location: ourLocation }); + const singlePartLeftoverLinksList = singlePartLinksList.filter(x => !processedLinkList.includes(x)); // Delete links that we processed above + if (singlePartLeftoverLinksList.length) + // if (singlePartLeftoverLinksList.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' processedLinkList (${processedLinkList.length}) = ${JSON.stringify(processedLinkList)}\n singlePartLinksList(${singlePartLinksList.length})=${JSON.stringify(singlePartLinksList)}\nsinglePartLeftoverLinksList(${singlePartLeftoverLinksList.length})=${JSON.stringify(singlePartLeftoverLinksList)}`); + // if (singlePartLeftoverLinksList.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' singlePartLeftoverLinksList (${singlePartLeftoverLinksList.length}) = ${JSON.stringify(singlePartLeftoverLinksList)}`); + addNoticePartial({ priority: 648, message: "Unusual [ ]( ) link(s)—not a recognized Bible, OBS, or TA, TN, or TW link", details: `need to carefully check ${singlePartLeftoverLinksList.length === 1 ? '"' + singlePartLeftoverLinksList[0] + '"' : JSON.stringify(singlePartLeftoverLinksList)}`, location: ourLocation }); // } // const linkCount2 = twLinkCount2 + taLinkCount2; // These are double-bracketed links, e.g., [[something]] // debugLog(`twLinkCount2 ${twLinkCount2} + taLinkCount2 ${taLinkCount2} = linkCount2 ${linkCount2}`); // if (totalLinks2 > linkCount2) { - const leftoverLinksList2 = linksList2.filter(x => !processedLinkList.includes(x)); // Delete links that we processed above - if (leftoverLinksList2.length) - // if (leftoverLinksList2.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' processedLinkList (${processedLinkList.length}) = ${JSON.stringify(processedLinkList)}\n linksList2(${linksList2.length})=${JSON.stringify(linksList2)}\nleftoverLinksList2(${leftoverLinksList2.length})=${JSON.stringify(leftoverLinksList2)}`); - // if (leftoverLinksList2.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' leftoverLinksList2 (${leftoverLinksList2.length}) = ${JSON.stringify(leftoverLinksList2)}`); - addNoticePartial({ priority: 649, message: "Unusual [[ ]] link(s)—not a recognized TA or TW link", details: `need to carefully check ${leftoverLinksList2.length === 1 ? '"' + leftoverLinksList2[0] + '"' : JSON.stringify(leftoverLinksList2)}`, location: ourLocation }); + const doublePartLeftoverLinksList = doublePartLinksList.filter(x => !processedLinkList.includes(x)); // Delete links that we processed above + if (doublePartLeftoverLinksList.length) + // if (doublePartLeftoverLinksList.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' processedLinkList (${processedLinkList.length}) = ${JSON.stringify(processedLinkList)}\n doublePartLinksList(${doublePartLinksList.length})=${JSON.stringify(doublePartLinksList)}\ndoublePartLeftoverLinksList(${doublePartLeftoverLinksList.length})=${JSON.stringify(doublePartLeftoverLinksList)}`); + // if (doublePartLeftoverLinksList.length) debugLog(`'${languageCode}', ${repoCode}, '${bookID}', '${fieldName}' doublePartLeftoverLinksList (${doublePartLeftoverLinksList.length}) = ${JSON.stringify(doublePartLeftoverLinksList)}`); + addNoticePartial({ priority: 649, message: "Unusual [[ ]] link(s)—not a recognized TA or TW link", details: `need to carefully check ${doublePartLeftoverLinksList.length === 1 ? '"' + doublePartLeftoverLinksList[0] + '"' : JSON.stringify(doublePartLeftoverLinksList)}`, location: ourLocation }); // } // Check for badly formed links (not processed by the above code) diff --git a/src/core/wrapper.js b/src/core/wrapper.js index 1f5b0c16..b32b73b6 100644 --- a/src/core/wrapper.js +++ b/src/core/wrapper.js @@ -16,43 +16,43 @@ import { removeDisabledNotices } from './disabled-notices'; // NOTE: We don't need to know the org name or the repo name here // because if we check linked articles, the function to do this will be provided in checkingOptions -export async function checkTN_TSV7Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await checkNotesTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-TN' : 'TN', bookID, '', tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); +export async function checkTN_TSV7Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await checkNotesTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-TN' : 'TN', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } return checkResults; } -export async function checkSN_TSV7Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await checkNotesTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-SN' : 'SN', bookID, '', tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); +export async function checkSN_TSV7Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await checkNotesTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-SN' : 'SN', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } return checkResults; } -export async function checkTQ_TSV7Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await checkQuestionsTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-TQ' : 'TQ', bookID, '', tableText, '', checkingOptions) +export async function checkTQ_TSV7Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await checkQuestionsTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-TQ' : 'TQ', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }) if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } return checkResults; } -export async function checkSQ_TSV7Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await checkQuestionsTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-SQ' : 'SQ', bookID, '', tableText, '', checkingOptions) +export async function checkSQ_TSV7Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await checkQuestionsTSV7Table(username, languageCode, bookID === 'OBS' ? 'OBS-SQ' : 'SQ', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }) if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } return checkResults; } -export async function checkTWL_TSV6Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await internalCheckTWL_TSV6Table(username, languageCode, bookID === 'OBS' ? 'OBS-TWL' : 'TWL', bookID, '', tableText, '', checkingOptions) +export async function checkTWL_TSV6Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await internalCheckTWL_TSV6Table(username, languageCode, bookID === 'OBS' ? 'OBS-TWL' : 'TWL', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }) if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } @@ -61,7 +61,7 @@ export async function checkTWL_TSV6Table(username, languageCode, bookID, tableTe export async function checkTA_markdownArticle(username, languageCode, articleFilepathInRepo, articleFileContent, checkingOptions) { // Note: the givenLocation parameter is left blank - let checkResults = await checkMarkdownFileContents(username, languageCode, 'TA', articleFilepathInRepo, articleFileContent, '', checkingOptions); + let checkResults = await checkMarkdownFileContents(username, languageCode, 'TA', articleFilepathInRepo, articleFileContent, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } @@ -70,7 +70,7 @@ export async function checkTA_markdownArticle(username, languageCode, articleFil export async function checkTW_markdownArticle(username, languageCode, articleFilepathInRepo, articleFileContent, checkingOptions) { // Note: the givenLocation parameter is left blank - let checkResults = await checkMarkdownFileContents(username, languageCode, 'TW', articleFilepathInRepo, articleFileContent, '', checkingOptions); + let checkResults = await checkMarkdownFileContents(username, languageCode, 'TW', articleFilepathInRepo, articleFileContent, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } @@ -78,9 +78,9 @@ export async function checkTW_markdownArticle(username, languageCode, articleFil } // This format is scheduled to be deprecated -export async function checkDeprecatedTN_TSV9Table(username, languageCode, bookID, tableText, checkingOptions) { - // Note: the filename and givenLocation parameters are left blank - let checkResults = await internalCheckTN_TSV9Table(username, languageCode, 'TN', bookID, '', tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); +export async function checkDeprecatedTN_TSV9Table(username, languageCode, bookID, filename, tableText, checkingOptions) { + // Note: the givenLocation parameter is left blank + let checkResults = await internalCheckTN_TSV9Table(username, languageCode, 'TN', bookID, filename, tableText, '', { ...checkingOptions, suppressNoticeDisablingFlag: false }); if (!checkingOptions?.suppressNoticeDisablingFlag) { checkResults.noticeList = removeDisabledNotices(checkResults.noticeList); } diff --git a/src/demos/book-packages-check/README.md b/src/demos/book-packages-check/README.md index 86acdb71..80e66ffc 100644 --- a/src/demos/book-packages-check/README.md +++ b/src/demos/book-packages-check/README.md @@ -32,10 +32,10 @@ import BookPackagesCheck from './BookPackagesCheck'; languageCode='en' // Enter a string containing UPPERCASE USFM book identifiers separated only by commas // and can also include OBS (for Open Bible Stories) - bookIDs='RUT,EZR,NEH,EST,OBA,JON, LUK,EPH,1TI,2TI,TIT,JAS,1PE,1JN,2JN,3JN, OBS' + bookIDs='RUT,EZR,NEH,EST,OBA,JON, LUK,EPH,1TI,2TI,TIT,JAS,2PE,1JN,2JN,3JN, OBS' // The above English book packages should all be finished or well along the way // bookIDs='RUT,EZR,NEH,EST,OBA,JON' // Uncomment if you're interested in OT only - // bookIDs='LUK,EPH,1TI,2TI,TIT,JAS,1PE,1JN,2JN,3JN, OBS' // Uncomment if you're interested in NT and OBS only + // bookIDs='LUK,EPH,1TI,2TI,TIT,JAS,2PE,1JN,2JN,3JN, OBS' // Uncomment if you're interested in NT and OBS only // We can choose the forthcoming new TSV formats or the existing formats // dataSet='OLD' // 'OLD' (Markdown TQ1, TSV TN, etc.), 'NEW' (TSV TQ, TN2, etc.), 'DEFAULT', or 'BOTH'