internal T AttachWhitespace <T>(T syntaxNode, Whitespace2Collection whitespace2Set, WhitespaceKindLookup whitespaceLookup, LanguagePart languagePart) where T : SyntaxNode { var ret = syntaxNode; var whitespaceList = whitespace2Set.Where(x => x.LanguagePart == languagePart); var missingWhitespace = whitespaceLookup.NotUsedInWhitespaceList(whitespaceList); whitespaceList = whitespaceList .Union(missingWhitespace .Select(x => new Whitespace2(languagePart, x))); foreach (var whitespace in whitespaceList) { ret = AttachWhitespaceItem(ret, whitespace, whitespaceLookup); } // Not sure the functional approah is best here ret = CheckToken <T>(ret, x => x.GetLastToken(), t => t.TrailingTrivia, s => SyntaxFactory.ParseTrailingTrivia(s), (t, trivia) => t.WithTrailingTrivia(trivia), whitespace2Set.ForceTrailing); ret = CheckToken <T>(ret, x => x.GetFirstToken(), t => t.LeadingTrivia, s => SyntaxFactory.ParseLeadingTrivia(s), (t, trivia) => t.WithLeadingTrivia(trivia), whitespace2Set.ForceLeading); return(ret); }
internal void StoreWhitespace(IDom newItem, SyntaxNode syntaxNode, LanguagePart languagePart, WhitespaceKindLookup whitespaceLookup) { if (syntaxNode == null) { return; } // For now, all expressions are held as strings, so we just care about first/last var nodeAsTypeSyntax = syntaxNode as TypeSyntax; if (nodeAsTypeSyntax != null) { StoreWhitespaceForType(newItem, nodeAsTypeSyntax, languagePart); return; } else { // For now, all expressions are held as strings, so we just care about first/last var nodeAsExpressionSyntax = syntaxNode as ExpressionSyntax; if (nodeAsExpressionSyntax != null) { StoreWhitespaceForExpression(newItem, nodeAsExpressionSyntax, languagePart); //return; } } var lookForIdentifier = whitespaceLookup.Lookup(LanguageElement.Identifier) != SyntaxKind.None; lookForIdentifier = StoreWhitespaceForChildren(newItem, syntaxNode, languagePart, whitespaceLookup, lookForIdentifier); if (lookForIdentifier) { StoreWhitespaceForIdentifierNode(newItem, syntaxNode, languagePart); } }
public Whitespace2 this[LanguagePart languagePart, LanguageElement languageElement] { get { return(list .Where(x => x.LanguageElement == languageElement && x.LanguagePart == languagePart) .FirstOrDefault()); } set { var old = this[languagePart, languageElement]; var pos = -1; if (old != null) { pos = list.IndexOf(old); } if (pos < 0) { list.Add(value); } else { list.RemoveAt(pos); list.Insert(pos, value); } } }
public Whitespace2(LanguagePart languagePart, LanguageElement languageElement, string leadingWS, string trailingWS, string trailingComment) { LanguagePart = languagePart; LanguageElement = languageElement; LeadingWhitespace = leadingWS; TrailingWhitespace = trailingWS; TrailingComment = trailingComment; }
private void SetWhitespaceForSemiColon(ForStatementSyntax syntax, int semiColonNumber, RDomForStatement newItem, LanguagePart languagePart) { var token = semiColonNumber == 1 ? syntax.FirstSemicolonToken : syntax.SecondSemicolonToken; var whitespace = new Whitespace2(languagePart, LanguageElement.EndOfLine, token.LeadingTrivia.ToString(), token.TrailingTrivia.ToString(), null); newItem.Whitespace2Set.Add(whitespace); }
private void StoreWhitespaceForIdentifierNode(IDom newItem, SyntaxNode syntaxNode, LanguagePart languagePart) { // assume if it was a token we already found it var idNode = syntaxNode.ChildNodes().OfType <NameSyntax>().FirstOrDefault(); if (idNode != null) { StoreWhitespaceForFirstAndLastToken(newItem, idNode, languagePart, LanguageElement.Identifier); } }
internal void StoreWhitespaceForToken(IDom newItem, SyntaxToken token, LanguagePart languagePart, LanguageElement languageElement) { if (languagePart == LanguagePart.None) { languagePart = LanguagePart.Current; } var newWS = new Whitespace2(languagePart, languageElement); newWS.LeadingWhitespace = GetLeadingWhitespaceForToken(token.LeadingTrivia); newWS.TrailingWhitespace = GetTrailingWhitespaceForToken(token.TrailingTrivia); // TODO: Add EOL comments here newItem.Whitespace2Set[languagePart, languageElement] = newWS; }
public void StoreWhitespaceForFirstAndLastToken(IDom newItem, SyntaxNode node, LanguagePart languagePart, LanguageElement languageElement) { if (languagePart == LanguagePart.None) { languagePart = LanguagePart.Current; } var newWS = new Whitespace2(languagePart, languageElement); var firstToken = node.GetFirstToken(); var lastToken = node.GetLastToken(); newWS.LeadingWhitespace = GetLeadingWhitespaceForToken(firstToken.LeadingTrivia); newWS.TrailingWhitespace = GetTrailingWhitespaceForToken(lastToken.TrailingTrivia); // TODO: Add EOL comments here newItem.Whitespace2Set[languagePart, languageElement] = newWS; }
private bool StoreWhitespaceForChildren(IDom newItem, SyntaxNode syntaxNode, LanguagePart languagePart, WhitespaceKindLookup whitespaceLookup, bool lookForIdentifier) { foreach (var token in syntaxNode.ChildTokens()) { var kind = token.CSharpKind(); var languageElement = whitespaceLookup.Lookup(kind); if (languageElement == LanguageElement.Identifier) { lookForIdentifier = false; } if (languageElement != LanguageElement.NotApplicable) { StoreWhitespaceForToken(newItem, token, languagePart, languageElement); } } return(lookForIdentifier); }
public Whitespace2(LanguagePart languagePart, LanguageElement languageElement) { LanguagePart = languagePart; LanguageElement = languageElement; }
public WordCard() { this.EnglishWord = null; this.RussianWord = null; this.typeL = LanguagePart.Прочие; }
public WordCard(String english, List <String> russian, LanguagePart typeL) { this.EnglishWord = english; this.RussianWord = russian; this.typeL = typeL; }
public void StoreWhitespaceForFirstAndLastToken(IDom newItem, SyntaxNode node, LanguagePart languagePart, LanguageElement languageElement) { triviaManager.StoreWhitespaceForFirstAndLastToken(newItem, node, languagePart, languageElement); }
public void StoreWhitespaceForToken(IDom newItem, SyntaxToken token, LanguagePart languagePart, LanguageElement languageElement) { triviaManager.StoreWhitespaceForToken(newItem, token, languagePart, languageElement); }
private void StoreWhitespaceForType(IDom newItem, TypeSyntax nodeAsTypeSyntax, LanguagePart languagePart) { StoreWhitespaceForFirstAndLastToken(newItem, nodeAsTypeSyntax, languagePart, LanguageElement.LastToken); }
public static T AttachWhitespace <T>(T syntaxNode, Whitespace2Collection whitespace2Set, WhitespaceKindLookup whitespaceLookup, LanguagePart languagePart) where T : SyntaxNode { return(triviaManager.AttachWhitespace(syntaxNode, whitespace2Set, whitespaceLookup, languagePart)); }
private void StoreWhitespaceForExpression(IDom newItem, ExpressionSyntax syntaxNode, LanguagePart languagePart) { StoreWhitespaceForFirstAndLastToken(newItem, syntaxNode, languagePart, LanguageElement.Expression); }
public void StoreWhitespace(IDom newItem, SyntaxNode syntaxNode, LanguagePart languagePart, WhitespaceKindLookup whitespaceLookup) { triviaManager.StoreWhitespace(newItem, syntaxNode, languagePart, whitespaceLookup); }
public Form2() { Random r = new Random(); this.Size = new Size(330, 330); this.Text = "Словарь"; InitializeComponent(); #region UI elements l1 = new Label() { Text = "Выберите режим теста: ", Location = new Point(10, 10), AutoSize = true, Size = new Size(150, 30) }; Controls.Add(l1); r1 = new RadioButton() { Text = "Перевод с русского на английский", Left = l1.Left, Top = l1.Top + 25, }; r1.AutoSize = true; r1.Checked = true; this.Controls.Add(r1); r2 = new RadioButton() { Text = "Перевод с английского на русский", Left = l1.Left, Top = r1.Top + 25, }; r2.AutoSize = true; this.Controls.Add(r2); r3 = new RadioButton() { Text = "Тестовый: случайные слова", Left = l1.Left, Top = r2.Top + 25, }; r3.AutoSize = true; this.Controls.Add(r3); r4 = new RadioButton() { Text = "Тестовый: слова, с наибольшим количеством ошибок", Left = l1.Left, Top = r3.Top + 25, }; r4.AutoSize = true; this.Controls.Add(r4); t1 = new TextBox() { Left = l1.Left, Top = l1.Bottom + 60, Size = new Size(100, 60) }; t1.Visible = false; Controls.Add(t1); bt1 = new Button() { Text = "Принять", Left = t1.Left + 120, Top = t1.Top, Size = new Size(60, 25) }; bt1.Visible = false; this.Controls.Add(bt1); bt1.Click += ButtonClick1; setInvisible(true); bt2 = new Button() { Text = "Начать", Left = t1.Left + 100, Top = t1.Top + 70, Size = new Size(60, 25) }; this.Controls.Add(bt2); bt2.Click += ButtonClick2; l2 = new Label() { Top = l1.Bottom + 100, Left = t1.Left, AutoSize = true, Size = new Size(150, 30) }; Controls.Add(l2); bt3 = new Button() { Text = "Завершить", Left = 220, Top = 250, Size = new Size(80, 25) }; bt3.Visible = false; this.Controls.Add(bt3); bt3.Click += ButtonClick3; bt4 = new Button() { Text = "Назад", Left = 220, Top = 250, Size = new Size(80, 25) }; bt4.Visible = false; this.Controls.Add(bt4); bt4.Click += ButtonClick4; #endregion void ButtonClick1(object sender, EventArgs e) { if (r1.Checked == true) { l1.Text = @" Введите руссое слово: "; if (rusTranslation(t1.Text) != null) { l2.Text = "Английский перевод: " + rusTranslation(t1.Text) + " (" + langType(rusTranslation(t1.Text)) + ")"; } else { l2.Text = "Слово не найдено"; } } else if (r2.Checked == true) { l1.Text = @" Введите английское слово: "; if (engTranslation(t1.Text) != null) { l2.Text = "Русский перевод: " + engTranslation(t1.Text) + " (" + langType(t1.Text) + ")"; } else { l2.Text = "Слово не найдено"; } } else { if (tmp.translationCheck(t1.Text)) { l2.Text = "Правильно!"; right++; } else { l2.Text = "Не правильно!"; wrong++; } if (r4.Checked == true) { if (words2.Count != 0) { s = words2.Dequeue(); } else { t1.Visible = false; bt1.Visible = false; s = ""; } } else { randomList(); int i = r.Next(0, words.Count - 1); s = (String)words[i]; } if ((this.Owner as Form1).dic.TryGetValue(s, out tmp)) { l1.Text = @"Английское слово: " + tmp.EnglishWord + @" (" + langType(tmp.EnglishWord) + @") Введите русский перевод: "; } else { l1.Text = "Слова закончились"; } } } void ButtonClick2(object sender, EventArgs e) { wrong = 0; right = 0; l2.Text = ""; if (r1.Checked == true) { l1.Text = @" Введите руссое слово: "; bt4.Visible = true; } else if (r2.Checked == true) { l1.Text = @" Введите английское слово: "; bt4.Visible = true; } else { if (r4.Checked == true) { mostErrorList(); s = words2.Dequeue(); } else { randomList(); int i = r.Next(0, words.Count - 1); s = (String)words[i]; } (this.Owner as Form1).dic.TryGetValue(s, out tmp); l1.Text = @"Английское слово: " + tmp.EnglishWord + @" (" + langType(tmp.EnglishWord) + @") Введите русский перевод: "; bt3.Visible = true; } setInvisible(false); t1.Visible = true; bt1.Visible = true; bt2.Visible = false; t1.Visible = true; } void ButtonClick3(object sender, EventArgs e) { setInvisible(true); bt1.Visible = false; bt2.Visible = true; t1.Visible = false; bt3.Visible = false; l1.Text = "Выберите режим:"; l2.Text = @" СТАТИСТИКА Число правильных ответов: " + right + @" Число ошибок: " + wrong; } void ButtonClick4(object sender, EventArgs e) { setInvisible(true); bt1.Visible = false; t1.Visible = false; bt2.Visible = true; l1.Text = "Выберите режим:"; l2.Text = ""; bt4.Visible = false; } #region functions void mostErrorList() { double erAvg = (from n2 in (this.Owner as Form1).dic.Values select n2.Error).Average(); foreach (WordCard s in (this.Owner as Form1).dic.Values) { if (s.Error >= erAvg) { words2.Enqueue(s.EnglishWord); } } } void randomList() { foreach (string s in (this.Owner as Form1).dic.Keys) { words.Add(s); } } String rusTranslation(String rus) { foreach (WordCard wc in (this.Owner as Form1).dic.Values) { bool flag = false; foreach (String s in wc.RussianWord) { if (s == rus) { flag = true; } } if (flag) { return(wc.EnglishWord); } } return(null); } String langType(String eng) { LanguagePart tmp = LanguagePart.Прочие; foreach (WordCard wc in (this.Owner as Form1).dic.Values) { if (wc.EnglishWord == eng) { tmp = wc.langPart; } } switch (tmp) { case LanguagePart.Глагол: return("Глагол"); break; case LanguagePart.Существительное: return("Существительное"); break; case LanguagePart.Прилагательное: return("Прилагательное"); break; case LanguagePart.Наречие: return("Наречие"); break; case LanguagePart.Прочие: return("Прочие"); break; } return(null); } String engTranslation(String eng) { foreach (string s in (this.Owner as Form1).dic.Keys) { if (eng == s) { if (!(this.Owner as Form1).dic.TryGetValue(s, out tmp)) { l2.Text = "Слово не найдено"; } else { String russian = ""; foreach (String pair in tmp.RussianWord) { russian = russian + pair + ", "; } return(russian); } } } return(null); } #endregion }