public SplitResult Split(string content) { var result = new SplitResult { CharacterSet = CharacterSet.Unicode }; 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 (Char.IsHighSurrogate(character)) { if (walker.Bytes == 132) { AddPart(result, ref walker, content, i - 1); } walker.Bytes += 2; i++; } walker.Bytes += 2; walker.Length++; if (walker.Bytes == 134) { AddPart(result, ref walker, content, i); } } if (walker.Bytes > 0) { AddPart(result, ref walker, content); } if (result.Parts.Count == 2 && result.TotalBytes <= 140) { SplitPart part = new SplitPart { Content = result.Parts[0].Content + result.Parts[1].Content, Length = result.TotalLength, Bytes = result.TotalBytes, Characters = result.TotalBytes / 2 }; result.Parts.Clear(); result.Parts.Add(part); } CalculateRemainingInPart(result); return(result); }
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); }