2011-01-13 8 views
6

रूबी का उपयोग करके, मुझे टर्मिनल में कॉलम प्रारूप में स्ट्रिंग आउटपुट करना होगा। कुछ ऐसा:रूबी: पूर्वी एशियाई चौड़ाई (यूनिकोड)

| row 1  | a string here  | etc 
| row 2  | another string | etc 

मैं स्ट्रिंग # लूट और% s का उपयोग करके लैटिन यूटीएफ 8 अक्षरों के साथ यह ठीक कर सकता हूं।

लेकिन कोई समस्या उत्पन्न जब वर्ण, कोरियाई हैं चीनी, आदि कॉलम बस जब वहाँ अंग्रेजी की पंक्तियों कोरियाई युक्त पंक्तियों के साथ बीच-बीच में हैं एक जैसी नहीं होगी, आदि

मैं कैसे स्तंभ संरेखण यहाँ प्राप्त कर सकते ? क्या निश्चित-चौड़ाई वाले फ़ॉन्ट के बराबर एशियाई वर्णों को आउटपुट करने का कोई तरीका है? विम में प्रदर्शित और संपादित करने के लिए दस्तावेजों के बारे में कैसे?

+2

विम का उपयोग करके, आपके पास 'guifontwide' सेटिंग है जो आपको एशियाई पाठ के लिए डबल-चौड़ाई फ़ॉन्ट चुनने में सक्षम बनाती है। – Benoit

+1

शब्दों की आपकी पसंद बहुत खराब है। एशिया कई देशों, भाषाओं और लेखन प्रणालियों के साथ एक बहुत बड़ी जगह है। – koan

+0

@dan यह केवल कोरियाई/चीनी/... {एशियाई} भाषाओं या किसी भी चरित्र के साथ समस्या है जिसका 'लेन() 'बड़ा है (उदाहरण के लिए,'« ')। यदि ऐसा है, तो पाठ की वास्तविक लंबाई प्राप्त करने के लिए, 'len (str)' (vim-7.2, 'strwidth (str) 'के बजाय' len (split (str,' \ zs ')' का उपयोग करें vim- 7.3)। – ZyX

उत्तर

1
देर पार्टी के लिए

, लेकिन उम्मीद है कि अभी भी उपयोगी: रूबी में, आप एक स्ट्रिंग के पूर्व-एशियाई-चौड़ाई के लिए जाँच करने unicode-display_width gem उपयोग कर सकते हैं:

require 'unicode/display_width' 
"⚀".display_width #=> 1 
'一'.display_width #=> 2 
3

आपकी समस्या सीजेके (चीनी/जापानी/कोरियाई) full-width and wide characters (आरेखों के लिए भी नीचे स्क्रॉल) के साथ होती है; उन पात्रों में दो निश्चित चौड़ाई वाली कोशिकाओं पर कब्जा है। String#ljust और दोस्त इसे इस खाते में नहीं लेते हैं।

पायथन में unicodedata.east_asian_width है, जो आपको अपनी चौड़ाई-जागरूक समायोजन लिखने की अनुमति देगा, लेकिन यह रूबी में मौजूद प्रतीत नहीं होता है। सबसे अच्छा मैं यह पाया है कि यह ब्लॉग पोस्ट है: http://d.hatena.ne.jp/hush_puppy/20090227/1235740342 (machine translation)। यदि आप मूल के निचले हिस्से में आउटपुट देखते हैं, तो ऐसा लगता है कि आप क्या चाहते हैं, तो हो सकता है कि आप कुछ रूबी कोड का पुन: उपयोग कर सकें।

या यदि आप केवल पूर्ण-चौड़ाई वाले वर्णों को प्रिंट कर रहे हैं (यानी आप आधे चौड़ाई और पूर्ण-चौड़ाई को मिश्रित नहीं कर रहे हैं), तो आप आलसी हो सकते हैं और बस रिक्ति और सबकुछ सहित पूर्ण-चौड़ाई वाले रूपों का उपयोग कर सकते हैं। बॉक्स ड्राइंग यहां पर कुछ पात्रों आप कॉपी कर सकते हैं और पेस्ट है:

  • | (पूर्ण-चौड़ाई लंबवत बार)
  • (पूर्ण-चौड़ाई अंतरिक्ष)
  • - (पूर्ण-चौड़ाई पानी का छींटा, में अच्छी तरह से गाया नहीं प्राप्त करता है मेरी टर्मिनल फ़ॉन्ट)
  • ー (एक और पूर्ण-चौड़ाई पानी का छींटा)
+0

मैंने परीक्षण किया कि आपका 'स्ट्रिविथ' फ़ंक्शन इस पात्रों के साथ कैसे व्यवहार करता है और पाया कि 'स्ट्रिविथ ("|")' रिटर्न 2, 1 नहीं। 1, मुझे नहीं पता, हालांकि, रूबी में चौड़ाई की जांच कैसे करें। – ZyX

+0

अपनी पिछली टिप्पणी पढ़ते हुए, मुझे लगता है कि आप विम 7.3 के 'स्ट्रविड्थ' फ़ंक्शन का जिक्र कर रहे हैं? फिर स्पष्ट रूप से यह पूर्ण-चौड़ाई वाले वर्णों को ध्यान में नहीं लेता है (यदि आपने इंप्रेशन ^^ प्राप्त किया है तो मैंने कभी दावा करने की कोशिश नहीं की है)। मैंने जो वर्टिकल बार पोस्ट किया है वह निश्चित रूप से पूर्ण-चौड़ाई है, किसी भी मामले में। –

+0

@ जो लिस मैंने वास्तव में कहा कि यह पूर्ण चौड़ाई वाले वर्णों को ध्यान में रखता है (सामान्य बार या यूटीएफ -8 टेबल सीमा के साथ यह 1 लौटाएगा)। – ZyX

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