示例#1
0
        private static void GetCharacter(string character, ref MorseCode morseCode, ref StringBuilder sb)
        {
            string morseSymbol = Characters.Symbols[character];

            for (int i = 0; i < morseSymbol.Length; i++)
            {
                if (i > 0)
                {
                    var r = new Range(sb.Length, sb.Length);
                    sb.Append(SPACE1);
                    r.End = sb.Length;
                    morseCode.ToneInCodesRange.Add(r);
                }
                if (morseSymbol[i] == '-')
                {
                    var r = new Range(sb.Length, sb.Length);
                    sb.Append('-');
                    r.End = sb.Length;
                    morseCode.ToneInCodesRange.Add(r);
                }
                else if (morseSymbol[i] == '.')
                {
                    var r = new Range(sb.Length, sb.Length);
                    sb.Append('.');
                    r.End = sb.Length;
                    morseCode.ToneInCodesRange.Add(r);
                }
            }
        }
示例#2
0
        public static MorseCode ConvertToMorseCode(string text)
        {
            text = text.ToLower();

            var words = text.Split(' ');

            var ret = new MorseCode
            {
                Text = text
            };

            var sb = new StringBuilder();

            for (var i = 0; i < words.Length; i++)
            {
                if (i > 0)
                {
                    var r = new Range(sb.Length, sb.Length);
                    sb.Append(SPACE5);
                    r.End = sb.Length;
                    ret.ToneInCodesRange.Add(r);
                    ret.CharInCodesRange.Add(r);
                }
                GetWord(words[i], ref ret, ref sb);
            }

            ret.Codes = sb.ToString();
            return(ret);
        }
示例#3
0
        private static void GetWord(string word, ref MorseCode morseCode, ref StringBuilder sb)
        {
            for (int i = 0; i < word.Length; i++)
            {
                if (i > 0)
                {
                    var r = new Range(sb.Length, sb.Length);
                    sb.Append(SPACE3);
                    r.End = sb.Length;
                    morseCode.ToneInCodesRange.Add(r);
                }
                if (word == "")
                {
                    var r = new Range(sb.Length, sb.Length);

                    sb.Append(SPACE5);

                    r.End = sb.Length;

                    morseCode.ToneInCodesRange.Add(r);
                    morseCode.CharInCodesRange.Add(r);
                }
                else if (word[i] == '<')
                {
                    // Prosign
                    int end = word.IndexOf('>', i);
                    if (end < 0)
                    {
                        throw new ArgumentException();
                    }
                    var r = new Range(sb.Length, sb.Length);
                    GetCharacter(word.Substring(i, end + 1 - i), ref morseCode, ref sb);
                    r.End = sb.Length;
                    morseCode.CharInCodesRange.Add(r);
                    i = end;
                }
                else
                {
                    var r = new Range(sb.Length, sb.Length);
                    GetCharacter(word[i].ToString(), ref morseCode, ref sb);
                    r.End = sb.Length;
                    if (word.Length > 1 && i != word.Length - 1) //不是最后一个字符
                    {
                        r.End += 3;
                    }
                    morseCode.CharInCodesRange.Add(r);
                }
            }
        }