コード例 #1
0
        public void Apply(Paratext.ScrVers versification)
        {
            if (!AllScriptureBlocksMatch)
            {
                throw new InvalidOperationException("Cannot apply reference blocks unless all Scripture blocks have corresponding reference blocks.");
            }

            var bogusRefBlock = GetInvalidReferenceBlockAtAnyLevel(CorrelatedBlocks);

            if (bogusRefBlock != null)
            {
                throw new InvalidReferenceTextException(bogusRefBlock);
            }

            if (m_numberOfBlocksAddedBySplitting > 0)
            {
                m_vernacularBook.ReplaceBlocks(m_iStartBlock, CorrelatedBlocks.Count - m_numberOfBlocksAddedBySplitting,
                                               CorrelatedBlocks.Select(b => b.Clone()));
            }
            int bookNum    = BCVRef.BookToNumber(m_vernacularBook.BookId);
            var origBlocks = m_vernacularBook.GetScriptBlocks();

            for (int i = 0; i < CorrelatedBlocks.Count; i++)
            {
                if (!CorrelatedBlocks[i].MatchesReferenceText)                 // e.g., section head
                {
                    continue;
                }
                var vernBlock = origBlocks[m_iStartBlock + i];

                var refBlock = CorrelatedBlocks[i].ReferenceBlocks.Single();
                vernBlock.SetMatchedReferenceBlock(refBlock);
                vernBlock.SetCharacterAndDeliveryInfo(CorrelatedBlocks[i], bookNum, versification);

                if (CorrelatedBlocks[i].UserConfirmed)
                {
                    if (vernBlock.CharacterIsUnclear())
                    {
                        throw new InvalidOperationException("Character cannot be confirmed as ambigous or unknown.");
                    }
                    vernBlock.UserConfirmed = true;
                }

                //if (vernBlock.CharacterId != refBlock.CharacterId)
                //{
                //	vernBlock.CharacterId = refBlock.CharacterId;
                //	if (refBlock.CharacterIdOverrideForScript != null)
                //		vernBlock.CharacterIdOverrideForScript = refBlock.CharacterIdOverrideForScript;
                //}
            }
            m_numberOfBlocksAddedBySplitting = 0;
        }
コード例 #2
0
        public void Apply(ScrVers versification)
        {
            if (!AllScriptureBlocksMatch)
            {
                throw new InvalidOperationException("Cannot apply reference blocks unless all Scripture blocks have corresponding reference blocks.");
            }

            //var bogusRefBlock = GetInvalidReferenceBlockAtAnyLevel(CorrelatedBlocks);
            //if (bogusRefBlock != null)
            //	throw new InvalidReferenceTextException(bogusRefBlock);

            if (m_numberOfBlocksAddedBySplitting > 0)
            {
                m_vernacularBook.ReplaceBlocks(m_iStartBlock, CorrelatedBlocks.Count - m_numberOfBlocksAddedBySplitting,
                                               CorrelatedBlocks.Select(b => b.Clone()).ToList());
            }
            int bookNum    = BCVRef.BookToNumber(m_vernacularBook.BookId);
            var origBlocks = m_vernacularBook.GetScriptBlocks();

            for (int i = 0; i < CorrelatedBlocks.Count; i++)
            {
                var vernBlock = origBlocks[m_iStartBlock + i];

                var refBlock = CorrelatedBlocks[i].ReferenceBlocks.Single();
                vernBlock.SetMatchedReferenceBlock(refBlock);
                vernBlock.SetCharacterAndDeliveryInfo(CorrelatedBlocks[i], bookNum, versification);

                if (CorrelatedBlocks[i].UserConfirmed)
                {
                    if (vernBlock.CharacterIsUnclear())
                    {
                        throw new InvalidOperationException("Character cannot be confirmed as ambigous or unknown.");
                    }
                    vernBlock.UserConfirmed = true;
                }
            }
            if (m_numberOfBlocksAddedBySplitting == 0)
            {
                var lastBlockInMatchup = CorrelatedBlocks.Last();
                foreach (var block in origBlocks.Skip(m_iStartBlock + OriginalBlockCount).TakeWhile(b => b.IsContinuationOfPreviousBlockQuote))
                {
                    block.CharacterId = lastBlockInMatchup.CharacterId;
                    block.CharacterIdOverrideForScript = lastBlockInMatchup.CharacterIdOverrideForScript;
                }
            }
            else
            {
                m_numberOfBlocksAddedBySplitting = 0;
            }
        }
コード例 #3
0
        public void Apply(ScrVers versification = null)
        {
            if (!AllScriptureBlocksMatch)
            {
                throw new InvalidOperationException("Cannot apply reference blocks unless all Scripture blocks have corresponding reference blocks.");
            }

            if (versification != null)
            {
                if (m_versification != null && m_versification != versification)
                {
                    throw new ArgumentException("Apply called with unexpected versification!", nameof(versification));
                }
                m_versification = versification;
            }

            if (m_numberOfBlocksAddedBySplitting > 0)
            {
                m_vernacularBook.ReplaceBlocks(m_iStartBlock, OriginalBlockCount, CorrelatedBlocks.Select(b => b.Clone()).ToList());
            }
            int bookNum    = BCVRef.BookToNumber(BookId);
            var origBlocks = m_vernacularBook.GetScriptBlocks();

            for (int i = 0; i < CorrelatedBlocks.Count; i++)
            {
                var vernBlock = origBlocks[m_iStartBlock + i];

                var refBlock = CorrelatedBlocks[i].ReferenceBlocks.Single();
                vernBlock.SetMatchedReferenceBlock(refBlock);
                var basedOnBlock = CorrelatedBlocks[i].CharacterIsUnclear ? refBlock : CorrelatedBlocks[i];
                vernBlock.SetCharacterAndDeliveryInfo(basedOnBlock, bookNum, m_versification);
                if (vernBlock.CharacterIsStandard)
                {
                    vernBlock.MultiBlockQuote = MultiBlockQuote.None;
                }

                if (vernBlock.CharacterIsUnclear)
                {
                    throw new InvalidOperationException("Vernacular block matched to reference block must have a CharacterId that is not ambiguous or unknown.");
                }

                if (CorrelatedBlocks[i].UserConfirmed)
                {
                    vernBlock.UserConfirmed = true;
                }
                vernBlock.SplitId = CorrelatedBlocks[i].SplitId;
            }
            // No need to update following continuation blocks here if m_numberOfBlocksAddedBySplitting > 0 because the call to
            // ReplaceBlocks (above) already did it.
            if (m_numberOfBlocksAddedBySplitting == 0)
            {
                m_vernacularBook.UpdateFollowingContinuationBlocks(m_iStartBlock + OriginalBlockCount - 1);
            }
            else
            {
                m_numberOfBlocksAddedBySplitting = 0;
            }

            Debug.Assert(origBlocks.Skip(m_iStartBlock).Take(CorrelatedBlocks.Count)
                         .All(b => !b.CharacterIsStandard || b.MultiBlockQuote == MultiBlockQuote.None),
                         "Applying block matchup resulted in an illegal multi-block quote chain.");
        }