Esempio n. 1
0
        private void CalculateRemainingInPart(SplitResult result)
        {
            var max = result.Parts.Count == 1 ? 140 : 134;

            result.RemainingInPart = (max - result.Parts.Last().Bytes) / 2;
        }
Esempio n. 2
0
        public SplitResult Split(string content)
        {
            var result = new SplitResult
            {
                CharacterSet = CharacterSet.Gsm
            };

            if (string.IsNullOrEmpty(content))
            {
                result.Parts.Add(new SplitPart()
                {
                    Content = string.Empty
                });
                return(result);
            }

            var walker = GetEmptyWalker();

            for (int i = 0; i < content.Length; i++)
            {
                char character = content[i];
                if (!_validator.ValidateCharacter(character))
                {
                    if (Char.IsHighSurrogate(character))
                    {
                        i++;
                    }
                    character = '\u0020';
                }
                else if (_validator.ValidateExtendedCharacter(character))
                {
                    if (walker.Bytes == 152)
                    {
                        AddPart(result, ref walker);
                    }
                    walker.Bytes++;
                }

                walker.Bytes++;
                walker.Length++;
                walker.Content += character;
                if (walker.Bytes == 153)
                {
                    AddPart(result, ref walker);
                }
            }

            if (walker.Bytes > 0)
            {
                AddPart(result, ref walker);
            }

            if (result.Parts.Count == 2 && result.TotalBytes <= 160)
            {
                SplitPart part = new SplitPart
                {
                    Bytes      = result.TotalBytes,
                    Length     = result.TotalLength,
                    Content    = result.Parts[0].Content + result.Parts[1].Content,
                    Characters = result.TotalBytes
                };
                result.Parts.Clear();
                result.Parts.Add(part);
            }
            CalculateRemainingInPart(result);
            return(result);
        }