2010-03-13 7 views
3

내장 맞춤법 검사기 Hunspell 및 맞춤법이 틀린 단어의 온라인 강조 표시로 WYSIWYG 편집기에서 작업하고 있습니다. html 처리기로 Webbrowser 컨트롤을 사용하고 있습니다. 웹 브라우저 컨트롤에서 html보다 맞춤법 검사가 쉬운 방법이지만,이 방법을 따르면 모든 HTML 서식이 손실됩니다. 그래서 질문은 : 본문 innertext의 철자를 검사 한 다음 이전 서식을 사용하여 본문 innerhtml로 변환 할 수있는 방법이 있습니까? (HtmlAgilityPack 또는 Majestic12 또는 SgmlReader 또는 ZetaHtmlTidy을 사용하지 않음).InnerText InnerHtml WebBrowser 컨트롤에서 C#으로 변환하는 방법?

미리 감사드립니다.

+0

코드 예제를 게시하고 해당 컨트롤을 사용할 때 결과가 어떻게 나타나면 서식을 잃어 버릴 수 있습니까? –

+0

hunspell 웹 사이트의 샘플 코드 스 니펫을 사용하고 있습니다. innertext에서 맞춤법이 틀린 단어를 강조 표시 할 수는 있지만 서식을 잃지 않고 innerhtml에서 할 수는 없습니다. 솔직하게 말하면, innerhtml을 분석하고 철자를 검사하는 것은 엉덩이에 고통 (태그에 싸여있는 단어를 골라 내고, 다른 태그에서 맞춤법이 틀린 단어를 감싸서 강조 표시합니다. 또한 한 단어는 여러 태그로 구분 될 수 있습니다). 그래서 html을 텍스트로 변환하는 쉬운 방법에 대해 묻습니다. –

답변

1

주어진 요소의 속성 인 innterText의 철자를 검사하는 것과 대조적으로 더 나은 방법은 자식 요소를 반복하고 각 자식의 innerText의 철자를 검사하는 것입니다.

이 접근법은 컨텍스트 기반 맞춤법 검사를 제한 할 수 있지만 마크 업을 그대로 유지해야합니다.

참고 : 각 하위 노드에 에 추가 자식이 포함될 수 있습니다.

0

innerText 속성의 철자를 검사하기로 선택했지만 변경된 단어를 바꿀 때 innerHTML 내에서 바꿉니다. 맞춤법이 틀린 단어의 모든 인스턴스를 변경할 때 이것은 다소 쉽습니다. 정규 표현식을 사용하여 innerHTML에서 일치하는 모든 단어의 색인을 수집하고 각 단어를 바꿉니다.

Regex wordEx = new Regex(@"[A-Za-z]", RegexOptions.Compiled); 
MatchCollection mcol = wordEx.Matches(webEditor.Document.Body.InnerHtml); 

foreach (Match m in mcol) 
{ 
    //Basic checking for whether this word is an HTML tag. This is not perfect. 
    if (m.Value == e.Word && webEditor.Document.Body.InnerHtml.Substring(m.Index -1, 1) != "<") 
    { 
    wordIndeces.Add(m.Index); 
    } 
} 

foreach (int curWordTextIndex in wordIndeces) 
{ 
    Word word = Word.GetWordFromPosition(webEditor.Document.Body.InnerHtml, curWordTextIndex); 
    string tmpText = webEditor.Document.Body.InnerHtml.Remove(word.Start, word.Length); 
    webEditor.Document.Body.InnerHtml = tmpText.Insert(word.Start, e.NewWord); 
} 

UpdateSpellingForm(e.TextIndex); 

단일 인스턴스를 바꿀 때 InnerText를 반복하여 방금 어떤 인스턴스를 바꿔야하는지 찾습니다. 그런 다음 올바른 인스턴스를 발견하고 바꿀 때까지 InnerHTML을 반복했습니다.