2011-08-12 16 views
6

में कोड ब्लॉक में व्हाइटस्पेस को कैसे बल दें आरएसटी में, हम एक ब्लॉक ब्लॉक के बारे में कहने के लिए ब्लॉक के सामने कुछ सफेद जगहों का उपयोग करते हैं। चूंकि पाइथन कोड कोड को इंडेंट करने के लिए व्हाइटस्पेस का भी उपयोग करता है, इसलिए मैं अपने आरएसटी कोड ब्लॉक को उन सफेद जगहों को संरक्षित करना चाहता हूं यदि मैं पायथन कोड लिख रहा था। मैं उसे कैसे कर सकता हूँ?पुन: संरचित पाठ

मान लीजिए कि हम एक वर्ग करते हैं:

class Test(object): 

और हम एक विधि __init__ कहा जाता है इस वर्ग का एक सदस्य है कि लिखना चाहते हैं। यह विधि किसी अन्य कोड ब्लॉक से संबंधित है लेकिन हम कुछ दृश्य सुराग चाहते हैं ताकि पाठकों को पता चले कि यह दूसरा ब्लॉक पिछले एक की निरंतरता है। पल में, मैं # का उपयोग इस तरह एक कोड ब्लॉक के ऊर्ध्वाधर गाइड लाइन को चिह्नित करने के:

def __init__(self): 
     pass 
# 

# के बिना, def __init__(self)class Test(object) रूप में एक ही खरोज स्तर पर मुद्रित किया जाएगा। और अधिक सुरुचिपूर्ण तरीका होना चाहिए।

+0

क्या आप इंगित कर सकते हैं कि काम नहीं करता है? हो सकता है कि मैं बेवकूफ हूं, लेकिन मैंने इस तरह के http://code.google.com/p/pytyp/source/browse/pytyp.rst#685 के साथ rst docs लिखा है और कुछ विशेष करने की आवश्यकता नहीं है । –

+0

एंड्रयू, मैंने और स्पष्टीकरण जोड़ा। –

+0

लेकिन यह सच नहीं है। उदाहरण के लिए http://code.google.com/p/pytyp/source/browse/pytyp.rst#750 ठीक काम करता है (दस्तावेज़ http://acooke.org/pytyp.pdf पर है और वह वर्ग पी 7 पर है) । शायद मैं अभी भी गलतफहमी कर रहा हूँ। कोड कोड के अंत में कोड कोड के अंत को क्यों बुला रहे हैं? –

उत्तर

0

आह ... मैंने पहले इसमें भाग लिया है;)। # चाल आमतौर पर मैं उपयोग करता हूं, हां। यदि आप कल्पना को पढ़ते हैं तो ऐसा लगता है कि यह हमेशा अग्रणी इंडेंट को हटा देगा।

:: 

>  def foo(x): 
>   pass 
प्रमुख के साथ

">" कि प्रमुख अंतरिक्ष सुरक्षित करेगा: [1]

तुम भी एक वैकल्पिक सिंटैक्स का उपयोग कर सकते हैं।

[1]: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#indented-literal-blocks

संपादित

बस docutils कोड के माध्यम से खोदा (यह मुझे बहुत बहुत गुस्सा दिलाना किया गया) और पुष्टि कर सकते हैं कि यह हमेशा आम मांगपत्र नहीं हटेगा, कोई प्रश्न । इस व्यवहार को बदलने के लिए संशोधित करना आसान होगा लेकिन इससे परिणामी पुनर्गठित पाठ गैर-मानक होगा।

+2

अग्रणी ">" पाठ में भी संरक्षित है। न केवल प्रति पंक्ति के अतिरिक्त चरित्र की आवश्यकता होती है, बल्कि यह पाठकों को भी भ्रमित कर सकती है। –

+0

@Nam हाँ, क्षमा करें मुझे एक बेहतर तरीका पता नहीं है। आप अपना खुद का निर्देश बना सकते हैं जो झुकाव को रोकता है "#", लेकिन यह इसके लायक होने से अधिक काम हो सकता है। – Owen

+0

मैं फिर भी आपका जवाब स्वीकार करने जा रहा हूं;)। धन्यवाद। –

0

तुम भी Line Blocks जो इस तरह दिखेगा कोशिश कर सकते हैं:

|  def foo(x): 
|   pass 

हालांकि वे कोड उदाहरण के लिए विशिष्ट नहीं कर रहे हैं।

0

आप अपनी खुद की निर्देश परिभाषित करने की जरूरत है (यह सच है कि मानक .. code:: निर्देश रिक्त स्थान gobbles लेकिन आप अपने खुद के निर्देश है कि नहीं है कर सकते हैं):

import re 
from docutils.parsers.rst import directives 

INDENTATION_RE = re.compile("^ *") 

def measure_indentation(line): 
    return INDENTATION_RE.match(line).end() 

class MyCodeBlock(directives.body.CodeBlock): 
    EXPECTED_INDENTATION = 3 

    def run(self): 
     block_lines = self.block_text.splitlines() 
     block_header_len = self.content_offset - self.lineno + 1 
     block_indentation = measure_indentation(self.block_text) 
     code_indentation = block_indentation + MyCodeBlock.EXPECTED_INDENTATION 
     self.content = [ln[code_indentation:] for ln in block_lines[block_header_len:]] 
     return super(MyCodeBlock, self).run() 

directives.register_directive("my-code", MyCodeBlock) 

आप निश्चित रूप से ऊपर लिख सकता है मानक .. code:: निर्देश इसके साथ भी।

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