2010-12-01 15 views
14

मैं xx आउटपुट में PHP कोड को पार्स करने के लिए डॉक्सिजन का उपयोग करने का प्रयास कर रहा हूं। डॉक्सीजन वर्ग सदस्य चर के विवरण का विश्लेषण नहीं करता है।डॉक्सीजन: PHP में वर्ग सदस्य चर का वर्णन कैसे करें?

<?php 
class A 
{ 
    /** 
     * Id on page. 
     * 
     * @var integer 
     */ 
    var $id = 1; 
} 
?> 

ध्यान दें कि टिप्पणी एक संक्षिप्त विवरण और चर प्रकार का है:

यहाँ मेरी नमूना php फ़ाइल है।

<?xml version='1.0' encoding='UTF-8' standalone='no'?> 
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.7.2"> 
    <compounddef id="class_a" kind="class" prot="public"> 
<compoundname>A</compoundname> 
    <sectiondef kind="public-attrib"> 
    <memberdef kind="variable" id="class_a_1ae97941710d863131c700f069b109991e" prot="public" static="no" mutable="no"> 
    <type></type> 
    <definition>$id</definition> 
    <argsstring></argsstring> 
    <name>$id</name> 
    <initializer> 1</initializer> 
    <briefdescription> 
    </briefdescription> 
    <detaileddescription> 
    </detaileddescription> 
    <inbodydescription> 
    </inbodydescription> 
    <location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="11" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="11" bodyend="-1"/> 
    </memberdef> 
    </sectiondef> 
<briefdescription> 
</briefdescription> 
<detaileddescription> 
</detaileddescription> 
<location file="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" line="5" bodyfile="C:/projects/version6-7/asprunner/PHP/source/classes/a.php" bodystart="4" bodyend="12"/> 
<listofallmembers> 
    <member refid="class_a_1ae97941710d863131c700f069b109991e" prot="public" virt="non-virtual"><scope>A</scope><name>$id</name></member> 
</listofallmembers> 
    </compounddef> 
</doxygen> 

न तो वर्णन या प्रकार पार्स गया: यहाँ एक्सएमएल मैं इस स्रोत से मिल गया है। मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

12

मैं चर घोषणा के साथ @var एनोटेशन इनलाइन से typehints डालें, और @var टिप्पणी निकालने के रूप में यह Doxygen में अलग अर्थ नहीं है के लिए एक इनपुट फिल्टर का उपयोग कर रहा हूँ। अधिक जानकारी के लिए, #626105 बग देखें।

चूंकि डॉक्सिजन सी-जैसे पार्सर का उपयोग करता है, जब इनपुट फ़िल्टर चलाया जाता है तो यह प्रकारों को पहचान सकता है।

<?php 
$source = file_get_contents($argv[1]); 

$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#'; 
$replac = '${2} */ ${3} ${1} ${4}'; 
$source = preg_replace($regexp, $replac, $source); 

echo $source; 

यह एक quick hack है, और शायद बग हो, यह सिर्फ मेरे कोड के लिए काम करता है:

Doxygen @var PHP

आप अपने Doxyfile में INPUT_FILTER विकल्प के साथ इनपुट फ़िल्टर सक्षम कर सकते हैं। उपरोक्त कोड को php_var_filter.php नाम से फ़ाइल में सहेजें और फ़िल्टर मान को "php php_var_filter.php" पर सेट करें।

+0

आपने अपना जीवन बचाया। धन्यवाद! –

+0

धन्यवाद गोरान !!! –

1

यह डॉक्सिजन में एक बग प्रतीत होता है। मुझे HTML में प्रलेखन के साथ एक ही समस्या है।

क्या वर्तमान में काम करता है:

class A 
{ 
    var $id = 1; /**< Id on page. */ 
} 

लेकिन इन टिप्पणियों क्षेत्र के प्रलेखन के रूप में NetBeans आईडीई द्वारा मान्यता प्राप्त नहीं कर रहे हैं।

1

हालांकि यह आपके प्रश्न का सीधा जवाब नहीं है: यदि आपको नौकरी के लिए सही टूल का उपयोग करने की स्वतंत्रता है, तो DocBlox पर एक नज़र डालें। यह HTML या किसी अन्य डिस्प्ले प्रारूप में आगे रूपांतरण के लिए एक एक्सएमएल-दस्तावेज़ भी उत्पन्न करता है और PHP के लिए बहुत अच्छा काम करता है। यह आपके सामान्य डॉकब्लॉक-उपयोग को तोड़ नहीं देगा।

उदाहरण आउटपुट के रूप में, Zend Framework API documentation देखें।

+1

लिंक के लिए धन्यवाद उपयोगी उपयोग compiled to executable php_var_filter.php doxygen filter script हो सकता है। लगता है कि मैं अब से :) – fresskoma

1

यदि आप @var को छोड़ देते हैं तो ब्लॉक सही ढंग से जुड़ा होगा। यह उस प्रकार को घोषित करने के लिए कहीं भी नहीं देता है, जो परेशान है, लेकिन कम से कम विवरण काम करेगा।

टेस्ट संस्करण: Doxygen 1.7.1

+0

DocBlox का उपयोग किया जाएगा इस पल में सबसे अच्छा समाधान हो गया लगता है - मैं Doxygen मेलिंग सूची, जो एक ही साथ उत्तर दिया पर लोगों से पूछा। धन्यवाद! –

2

मैं एक ही समस्या थी, तो मैं

/** 
* @var int $id 
*/ 
public $id; 

जो वैसे भी बेमानी होगा में जो

/** 
* @var int 
*/ 
public $id; 

के बुनियादी वाक्यविन्यास बदल जाता है एक साधारण इनपुट फ़िल्टर बना लिया है। इस तरह ग्रहण आईडीई डॉक्सिजन के समान डॉकब्लॉक का उपयोग कर सकता है।

आप यहाँ से इनपुट फिल्टर डाउनलोड कर सकते हैं:

https://bitbucket.org/tamasimrei/misc-tools/src/master/doxygen/filter.php

कैसे को इनपुट फ़िल्टर का उपयोग करने पर Doxygen Manual देखें।

टूल डॉकब्लॉक्स में बैकस्लाश से भी बच निकलता है, ताकि आप नामस्थानों का उपयोग कर सकें।

0

गोरान को अपने डॉक्सिजन फ़िल्टर के लिए बड़ा धन्यवाद! इसी विचार का विस्तार एक सा, एक फ़ंक्शन पैरामीटर उचित प्रलेखन के साथ-साथ बनाने के लिए:

शामिल Zend स्टूडियो शैली सरणी के- वस्तुओं @param Doxygen दस्तावेज में प्रकार:

// Change the following: 
// /** @param VarType[] $pParamName Description **/ 
// function name(array $pParamName) { 

// Into: 
// /** @param array $pParamName Description **/ 
// function name(VarType[] $pParamName) { 
$regexp = '#\@param\s+([^\s]+)\[\]\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\s]+)\s*\(([^)]*)array\s+\2([^)]*)\)(\s+){#s'; 
$replac = '@param array ${2} ${3}/ ${4} function ${5} (${6} ${1}[] ${2}${7})${8}{'; 
$lSource = preg_replace($regexp, $replac, $lSource); 

शामिल पूर्णांक/नाव/डबल/Doxygen दस्तावेज में स्ट्रिंग @param प्रकार:

// Change the following: 
// /** @param (int|float|double|string) $pParamName Description **/ 
// function name($pParamName) { 

// Into: 
// /** @param (int|float|double|string) $pParamName Description **/ 
// function name((int|float|double|string) $pParamName) { 
$regexp = '#\@param\s+(int|float|double|string)\s+(\$[^\s]+)\s+([^/]+)/\s+(public|protected|private)?\s+function\s+([^\(\s]+)\s*([^)]*)(\(|,)\s*\2([^)]*)\)(\s+){#s'; 

$replac = '@param ${1} ${2} ${3}/ ${4} function ${5}${6}${7}${1} ${2}${8})${9}{ '; //${6}${1} ${2}${7})${8}{'; 
$lSource = preg_replace($regexp, $replac, $lSource); 

ऊपर regexps दोनों भी स्वाभाविक रूप से काम करता है एक से अधिक तर्क लेने के साथ काम करते हैं। इसके अलावा बस एक त्वरित हैक, जो हमारे कोड के लिए काम करता है, उम्मीद है कि यह किसी और की मदद करेगा।

+0

यह ** वास्तव में ** कई तर्क कार्यों के साथ काम करते हैं और ** के लिए प्रत्येक ** पैरामीटर ** दोनों ** स्थानों में "संपादन", चाहे पीएचपी प्रकार संकेत मूल रूप से इसके लिए दिया गया था परवाह किए बिना सही बनाने करता है? –

0

स्थापित php के बिना Windows उपयोगकर्ताओं के लिए से answer

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