2010-02-21 6 views
5

सिल्वरलाइट में टेक्स्टव्रपिंग सुविधा का वर्णन here है। हालांकि, मैं उनके लाइन-ब्रेकिंग एल्गोरिदम के ब्योरे का पता लगाने की कोशिश कर रहा हूं।सिल्वरलाइट के टेक्स्टव्रपिंग में विभाजित वर्ण क्या हैं?

स्पष्ट रूप से एक स्थान पाठ को तोड़ने (या विभाजित) का कारण बनता है, जिससे पाठ को अगली पंक्ति में लपेटने के लिए प्रोत्साहित किया जाता है। और परीक्षण और त्रुटि के माध्यम से मैंने पाया कि इन पात्रों भी एक विभाजन का कारण:

  • \ t (टैब)
  • -
  • !
  • ?

लेकिन मुझे संदेह है कि यह पूरी सूची है। क्या किसी को विभाजित वर्णों (यूनिकोड समेत) की पूरी सूची मिली है? या क्या आपके पास यह समझने के लिए कोई चालाक सुझाव है कि मैंने अभी तक नहीं सोचा है? परीक्षण और त्रुटि धीमी हो सकती है।

उत्तर

2

मुझे लगता है कि स्पष्ट रूप से गैर-ब्रेकिंग वर्णों को छोड़कर अंतरिक्ष या विराम चिह्न के रूप में योग्यता प्राप्त करने वाले प्रत्येक चरित्र का अनुमान लगाया जाएगा।

हालांकि, लाइन ब्रेकिंग के लिए एक निर्दिष्ट एल्गोरिदम है: Unicode Standard Annex #14: Unicode Line Breaking Algorithm

4

TextWrapping = Wrap मानक यूनिकोड मानक अनुलग्नक # 14 के अनुरूप होने का प्रयास करेगा जो जोहान्स पहले से ही जुड़ा हुआ है।

हालांकि इस दृष्टिकोण का उपयोग करते हुए पाठ अभी भी चौड़ाई फिट नहीं है (बहुत सीमित चौड़ाई या लंबे शब्दों के कारण) तो यह दो पंक्तियों में शब्द को तोड़ देगा, यह हाइफनेट या कुछ भी चालाक नहीं करता है। जैसे ही एक पत्र रखने से चौड़ाई खत्म हो जाएगी और यदि उसे लाइन में कुछ नहीं मिल रहा है जो इसे मानक एल्गोरिदम का उपयोग करने देगा, तो यह अगली पंक्ति पर शब्द जारी रखेगा।

1

मैंने यह निर्धारित करने में मदद करने के लिए एक छोटा परीक्षण ऐप लिखा था कि इनमें से कौन सा पात्र विभाजन का कारण बनता है। यह अभी भी एक मैन्युअल प्रक्रिया है लेकिन कम से कम अब देखना आसान है। स्क्रिप्ट ASCII कोड 1 पर शुरू कर दिया और मैं ये एक विभाजन का कारण 3000

अप करने के लिए चले गए हैं चरित्र के बाद:

Private arrSplitAfter() As Char = {CChar(" "), CChar("-"), ChrW(9), CChar("!"), CChar("?"), CChar("%"), CChar(")"), CChar("/"), CChar("]"), CChar("|"), CChar("}"), ChrW(133), ChrW(162), ChrW(176), ChrW(1418), ChrW(1478), ChrW(1547), ChrW(1548), ChrW(1563), ChrW(1566), ChrW(1567), ChrW(1642), ChrW(1748), ChrW(2404), ChrW(2405)} 

और ये एक विभाजन से पहले चरित्र का कारण:

Private arrSplitBefore() As Char = {CChar("$"), CChar("("), CChar("+"), CChar("["), CChar("\"), CChar("{"), ChrW(163), ChrW(164), ChrW(165), ChrW(177), ChrW(180), ChrW(712), ChrW(716), ChrW(2546), ChrW(2547), ChrW(2801)} 

जाहिर है कि जाने के लिए बहुत सारे पात्र हैं। दुर्भाग्य से मैं एक हिचकी में भाग गया है। मैं कुछ सुपर कुशल हाइलाइटिंग कोड लिखने की कोशिश कर रहा था जो शब्द-लिपटे पाठ पर काम करेगा। जब तक कि मैं अपने हाइलाइटिंग मुद्दों के समाधान का पता नहीं लगाता, मैं निरंतर परेशान नहीं रहूंगा।

संबंधित मुद्दे