private void CalculateRemainingInPart(SplitResult result) { var max = result.Parts.Count == 1 ? 140 : 134; result.RemainingInPart = (max - result.Parts.Last().Bytes) / 2; }
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); }