Commit 0f275314 authored by Petr Prikryl's avatar Petr Prikryl

Merge branch 'master' of https://github.com/doxygen/doxygen.git

Conflicts:
	doc/language.doc
parents e31402cb 1e373422
...@@ -79,7 +79,7 @@ docs: FORCE ...@@ -79,7 +79,7 @@ docs: FORCE
pdf: docs pdf: docs
cd latex ; $(MAKE) cd latex ; $(MAKE)
DISTFILES = Doxyfile libmd5 addon tmake doc examples bin lib objects \ DISTFILES = Doxyfile libmd5 addon tmake doc examples bin lib objects testing \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \ qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \ Makefile.win_make.in INSTALL LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION README.md packages winbuild jquery VERSION README.md packages winbuild jquery
......
...@@ -224,9 +224,13 @@ void MainWindow::updateConfigFileName(const QString &fileName) ...@@ -224,9 +224,13 @@ void MainWindow::updateConfigFileName(const QString &fileName)
void MainWindow::loadConfigFromFile(const QString & fileName) void MainWindow::loadConfigFromFile(const QString & fileName)
{ {
m_expert->loadConfig(fileName); // save full path info of original file
m_wizard->refresh(); QString absFileName = QFileInfo(fileName).absoluteFilePath();
// updates the current directory
updateConfigFileName(fileName); updateConfigFileName(fileName);
// open the specified configuration file
m_expert->loadConfig(absFileName);
m_wizard->refresh();
updateLaunchButtonState(); updateLaunchButtonState();
m_modified = false; m_modified = false;
updateTitle(); updateTitle();
......
...@@ -173,9 +173,9 @@ when the translator was updated. ...@@ -173,9 +173,9 @@ when the translator was updated.
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td bgcolor="#ffffff">Japanese</td> <td bgcolor="#ffffff">Japanese</td>
<td>Hiroki Iseri<br/>Ryunosuke Satoh<br/>Kenji Nagamatsu<br/>Iwasa Kazmi</td> <td>Suzumizaki-Kimikata<br/>Hiroki Iseri<br/>Ryunosuke Satoh<br/>Kenji Nagamatsu<br/>Iwasa Kazmi</td>
<td>goyoki at gmail dot com<br/>sun594 at hotmail dot com<br/>naga at joyful dot club dot ne dot jp<br/><span style="color: brown">[unreachable]</span></td> <td>szmml at h12u.com<br/>goyoki at gmail dot com<br/>sun594 at hotmail dot com<br/><span style="color: brown">[unreachable]</span><br/><span style="color: brown">[unreachable]</span></td>
<td bgcolor="#ffcccc">1.6.0</td> <td bgcolor="#ccffcc">up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td bgcolor="#ffffff">JapaneseEn</td> <td bgcolor="#ffffff">JapaneseEn</td>
...@@ -370,9 +370,10 @@ when the translator was updated. ...@@ -370,9 +370,10 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.8.2 \\ Italian & Alessandro Falappa & {\tt\tiny alessandro at falappa dot net} & 1.8.2 \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\ ~ & Ahmed Aldo Faisal & {\tt\tiny aaf23 at cam dot ac dot uk} & ~ \\
\hline \hline
Japanese & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & 1.6.0 \\ Japanese & Suzumizaki-Kimikata & {\tt\tiny szmml at h12u.com} & up-to-date \\
~ & Hiroki Iseri & {\tt\tiny goyoki at gmail dot com} & ~ \\
~ & Ryunosuke Satoh & {\tt\tiny sun594 at hotmail dot com} & ~ \\ ~ & Ryunosuke Satoh & {\tt\tiny sun594 at hotmail dot com} & ~ \\
~ & Kenji Nagamatsu & {\tt\tiny naga at joyful dot club dot ne dot jp} & ~ \\ ~ & Kenji Nagamatsu & {\tt\tiny [unreachable] naga at joyful dot club dot ne dot jp} & ~ \\
~ & Iwasa Kazmi & {\tt\tiny [unreachable] iwasa at cosmo-system dot jp} & ~ \\ ~ & Iwasa Kazmi & {\tt\tiny [unreachable] iwasa at cosmo-system dot jp} & ~ \\
\hline \hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\ JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
......
...@@ -85,9 +85,10 @@ Alessandro Falappa: alessandro at falappa dot net ...@@ -85,9 +85,10 @@ Alessandro Falappa: alessandro at falappa dot net
Ahmed Aldo Faisal: aaf23 at cam dot ac dot uk Ahmed Aldo Faisal: aaf23 at cam dot ac dot uk
TranslatorJapanese TranslatorJapanese
Suzumizaki-Kimikata: szmml at h12u.com
Hiroki Iseri: goyoki at gmail dot com Hiroki Iseri: goyoki at gmail dot com
Ryunosuke Satoh: sun594 at hotmail dot com Ryunosuke Satoh: sun594 at hotmail dot com
Kenji Nagamatsu: naga at joyful dot club dot ne dot jp Kenji Nagamatsu: [unreachable] naga at joyful dot club dot ne dot jp
Iwasa Kazmi: [unreachable] iwasa at cosmo-system dot jp Iwasa Kazmi: [unreachable] iwasa at cosmo-system dot jp
TranslatorKorean TranslatorKorean
......
...@@ -33,7 +33,7 @@ class BufStr ...@@ -33,7 +33,7 @@ class BufStr
BufStr(int size) BufStr(int size)
: m_size(size), m_writeOffset(0), m_spareRoom(10240), m_buf(0) : m_size(size), m_writeOffset(0), m_spareRoom(10240), m_buf(0)
{ {
m_buf = (char *)malloc(size); m_buf = (char *)calloc(size,1);
} }
~BufStr() ~BufStr()
{ {
...@@ -62,12 +62,17 @@ class BufStr ...@@ -62,12 +62,17 @@ class BufStr
} }
void resize( uint newlen ) void resize( uint newlen )
{ {
uint oldsize = m_size;
m_size=newlen; m_size=newlen;
if (m_writeOffset>=m_size) // offset out of range -> enlarge if (m_writeOffset>=m_size) // offset out of range -> enlarge
{ {
m_size=m_writeOffset+m_spareRoom; m_size=m_writeOffset+m_spareRoom;
} }
m_buf = (char *)realloc(m_buf,m_size); m_buf = (char *)realloc(m_buf,m_size);
if (m_size>oldsize)
{
memset(m_buf+oldsize,0,m_size-oldsize);
}
} }
int size() const int size() const
{ {
......
...@@ -398,7 +398,7 @@ static CallContext g_theCallContext; ...@@ -398,7 +398,7 @@ static CallContext g_theCallContext;
static void pushScope(const char *s) static void pushScope(const char *s)
{ {
g_classScopeLengthStack.push(new int(g_classScope.length())); g_classScopeLengthStack.push(new int(g_classScope.length()));
if (g_classScope.isEmpty()) if (g_classScope.isEmpty() || leftScopeMatch(s,g_classScope))
{ {
g_classScope = s; g_classScope = s;
} }
......
...@@ -355,6 +355,7 @@ INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLAN ...@@ -355,6 +355,7 @@ INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLAN
PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]" PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]] TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]]
FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]] FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]]
FUNCPART {FUNCCHAR}*("("{FUNCCHAR}*")"{FUNCCHAR}*)?
SCOPESEP "::"|"#"|"." SCOPESEP "::"|"#"|"."
TEMPLPART "<"{TEMPCHAR}*">" TEMPLPART "<"{TEMPCHAR}*">"
ANONNS "anonymous_namespace{"[^}]*"}" ANONNS "anonymous_namespace{"[^}]*"}"
...@@ -363,7 +364,7 @@ SCOPEKEYS ":"({ID}":")* ...@@ -363,7 +364,7 @@ SCOPEKEYS ":"({ID}":")*
SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}? SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}?
SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}? SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
SCOPEMASK {SCOPECPP}|{SCOPEOBJC} SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})? FUNCARG "("{FUNCPART}")"({BLANK}*("volatile"|"const"){BLANK})?
OPNEW {BLANK}+"new"({BLANK}*"[]")? OPNEW {BLANK}+"new"({BLANK}*"[]")?
OPDEL {BLANK}+"delete"({BLANK}*"[]")? OPDEL {BLANK}+"delete"({BLANK}*"[]")?
OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()" OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
...@@ -386,7 +387,7 @@ HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|" ...@@ -386,7 +387,7 @@ HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"
HTMLKEYW {HTMLKEYL}|{HTMLKEYU} HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}? REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}?
REFWORD3 ({ID}":")*{ID}":"? REFWORD3 ({ID}":")*{ID}":"?
REFWORD {LABELID}|{REFWORD2}|{REFWORD3} REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
%option noyywrap %option noyywrap
%option yylineno %option yylineno
......
...@@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1366,7 +1366,7 @@ static const char* prepassFixedForm(const char* contents)
int prevLineLength=0; int prevLineLength=0;
int prevLineAmpOrExclIndex=-1; int prevLineAmpOrExclIndex=-1;
bool emptyLabel=TRUE; bool emptyLabel=TRUE;
int newContentsSize = strlen(contents)+2; // \000 and one spare character (to avoid reallocation) int newContentsSize = strlen(contents)+3; // \000, \n (when necessary) and one spare character (to avoid reallocation)
char* newContents = (char*)malloc(newContentsSize); char* newContents = (char*)malloc(newContentsSize);
for(int i=0, j=0;;i++,j++) { for(int i=0, j=0;;i++,j++) {
...@@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1390,6 +1390,14 @@ static const char* prepassFixedForm(const char* contents)
break; break;
case '\000': case '\000':
newContents[j]='\000'; newContents[j]='\000';
newContentsSize = strlen(newContents);
if (newContents[newContentsSize - 1] != '\n')
{
// to be on the safe side
newContents = (char*)realloc(newContents, newContentsSize+2);
newContents[newContentsSize] = '\n';
newContents[newContentsSize + 1] = '\000';
}
return newContents; return newContents;
case 'C': case 'C':
case 'c': case 'c':
...@@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents) ...@@ -1425,6 +1433,15 @@ static const char* prepassFixedForm(const char* contents)
break; break;
} }
} }
newContentsSize = strlen(newContents);
if (newContents[newContentsSize - 1] != '\n')
{
// to be on the safe side
newContents = (char*)realloc(newContents, newContentsSize+2);
newContents[newContentsSize] = '\n';
newContents[newContentsSize + 1] = '\000';
}
return newContents; return newContents;
} }
...@@ -2228,6 +2245,7 @@ level--; ...@@ -2228,6 +2245,7 @@ level--;
static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
{ {
char *tmpBuf = NULL;
initParser(); initParser();
defaultProtection = Public; defaultProtection = Public;
...@@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) ...@@ -2258,6 +2276,14 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
//clock_t end=clock(); //clock_t end=clock();
//printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC); //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC);
} }
else if (inputString[strlen(fileBuf)-1] != '\n')
{
tmpBuf = (char *)malloc(strlen(fileBuf)+2);
strcpy(tmpBuf,fileBuf);
tmpBuf[strlen(fileBuf)]= '\n';
tmpBuf[strlen(fileBuf)+1]= '\000';
inputString = tmpBuf;
}
yyLineNr= 1 ; yyLineNr= 1 ;
yyFileName = fileName; yyFileName = fileName;
...@@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) ...@@ -2291,6 +2317,10 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
rt->program.resize(0); rt->program.resize(0);
delete current; current=0; delete current; current=0;
moduleProcedures.clear(); moduleProcedures.clear();
if (tmpBuf) {
free((char*)tmpBuf);
inputString=NULL;
}
if (isFixedForm) { if (isFixedForm) {
free((char*)inputString); free((char*)inputString);
inputString=NULL; inputString=NULL;
......
...@@ -860,8 +860,8 @@ B [ \t]* ...@@ -860,8 +860,8 @@ B [ \t]*
NEWLINE \n NEWLINE \n
DIGIT [0-9] DIGIT [0-9]
LETTER [A-Za-z] LETTER [A-Za-z\x80-\xFF]
NONEMPTY [A-Za-z0-9_] NONEMPTY [A-Za-z0-9_\x80-\xFF]
EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-] EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
NONEMPTYEXP [^ \t\n:] NONEMPTYEXP [^ \t\n:]
PARAMNONEMPTY [^ \t\n():] PARAMNONEMPTY [^ \t\n():]
......
...@@ -461,8 +461,8 @@ OCTNUMBER "0"[0-7]+[lL]? ...@@ -461,8 +461,8 @@ OCTNUMBER "0"[0-7]+[lL]?
NUMBER {DIGIT}+[lLjJ]? NUMBER {DIGIT}+[lLjJ]?
INTNUMBER {HEXNUMBER}|{OCTNUMBER}|{NUMBER} INTNUMBER {HEXNUMBER}|{OCTNUMBER}|{NUMBER}
FLOATNUMBER {DIGIT}+"."{DIGIT}+([eE][+\-]?{DIGIT}+)?[jJ]? FLOATNUMBER {DIGIT}+"."{DIGIT}+([eE][+\-]?{DIGIT}+)?[jJ]?
LETTER [A-Za-z] LETTER [A-Za-z\x80-\xFF]
NONEMPTY [A-Za-z0-9_] NONEMPTY [A-Za-z0-9_\x80-\xFF]
EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-] EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
NONEMPTYEXP [^ \t\n:] NONEMPTYEXP [^ \t\n:]
PARAMNONEMPTY [^ \t\n():] PARAMNONEMPTY [^ \t\n():]
......
...@@ -191,6 +191,7 @@ static QCString g_delimiter; ...@@ -191,6 +191,7 @@ static QCString g_delimiter;
static int g_column; static int g_column;
static int g_fencedSize=0; static int g_fencedSize=0;
static bool g_nestedComment=0;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -6155,23 +6156,27 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ...@@ -6155,23 +6156,27 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
docBlockName.at(1)='}'; docBlockName.at(1)='}';
} }
g_fencedSize=0; g_fencedSize=0;
g_nestedComment=FALSE;
BEGIN(DocCopyBlock); BEGIN(DocCopyBlock);
} }
<DocBlock>"<"{PRE}">" { <DocBlock>"<"{PRE}">" {
docBlock+=yytext; docBlock+=yytext;
docBlockName="<pre>"; docBlockName="<pre>";
g_fencedSize=0; g_fencedSize=0;
g_nestedComment=FALSE;
BEGIN(DocCopyBlock); BEGIN(DocCopyBlock);
} }
<DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!) <DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
docBlock+=yytext; docBlock+=yytext;
docBlockName=&yytext[1]; docBlockName=&yytext[1];
g_fencedSize=0; g_fencedSize=0;
g_nestedComment=FALSE;
BEGIN(DocCopyBlock); BEGIN(DocCopyBlock);
} }
<DocBlock>"~~~"[~]* { <DocBlock>"~~~"[~]* {
docBlock+=yytext; docBlock+=yytext;
g_fencedSize=yyleng; g_fencedSize=yyleng;
g_nestedComment=FALSE;
BEGIN(DocCopyBlock); BEGIN(DocCopyBlock);
} }
<DocBlock>{B}*"<code>" { <DocBlock>{B}*"<code>" {
...@@ -6179,6 +6184,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ...@@ -6179,6 +6184,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{ {
docBlock+=yytext; docBlock+=yytext;
docBlockName="<code>"; docBlockName="<code>";
g_nestedComment=FALSE;
BEGIN(DocCopyBlock); BEGIN(DocCopyBlock);
} }
else else
...@@ -6240,12 +6246,32 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ...@@ -6240,12 +6246,32 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
docBlock+=indent; docBlock+=indent;
} }
} }
<DocCopyBlock>^{B}*+"*"/{BN}* { // start of a comment line <DocCopyBlock>^{B}*"*"+/{BN}+"*"{BN}* { // start of a comment line with two *'s
if (docBlockName=="code") if (docBlockName=="code")
{ {
QCString indent; QCString indent;
indent.fill(' ',computeIndent(yytext,0)-1); indent.fill(' ',computeIndent(yytext,0));
docBlock+=indent+"*"; docBlock+=indent;
}
else
{
REJECT;
}
}
<DocCopyBlock>^{B}*"*"+/{BN}* { // start of a comment line with one *
if (docBlockName=="code")
{
QCString indent;
if (g_nestedComment) // keep * it is part of the code
{
indent.fill(' ',computeIndent(yytext,-1));
docBlock+=indent+"*";
}
else // remove * it is part of the comment block
{
indent.fill(' ',computeIndent(yytext,0));
docBlock+=indent;
}
} }
else else
{ {
...@@ -6263,6 +6289,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) ...@@ -6263,6 +6289,14 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
docBlock+=yytext; docBlock+=yytext;
} }
<DocCopyBlock>"/*"|"*/"|"//" { <DocCopyBlock>"/*"|"*/"|"//" {
if (yytext[1]=='*')
{
g_nestedComment=TRUE;
}
else if (yytext[0]=='*')
{
g_nestedComment=FALSE;
}
docBlock+=yytext; docBlock+=yytext;
} }
<DocCopyBlock>\n { // newline <DocCopyBlock>\n { // newline
......
This diff is collapsed.
...@@ -1872,7 +1872,8 @@ int findParameterList(const QString &name) ...@@ -1872,7 +1872,8 @@ int findParameterList(const QString &name)
} }
else else
{ {
return bracePos; int bp = bracePos>0 ? name.findRev('(',bracePos-1) : -1;
return bp==-1 ? bracePos : bp;
} }
} }
} while (pos!=-1); } while (pos!=-1);
......
...@@ -7,40 +7,34 @@ ...@@ -7,40 +7,34 @@
<para> <para>
<programlisting> <programlisting>
<codeline lineno="1"> <codeline lineno="1">
<highlight class="normal">*<sp/></highlight>
<highlight class="comment">#<sp/>comment<sp/>in<sp/>Python</highlight> <highlight class="comment">#<sp/>comment<sp/>in<sp/>Python</highlight>
<highlight class="normal"/> <highlight class="normal"/>
</codeline> </codeline>
<codeline lineno="2"> <codeline lineno="2">
<highlight class="normal">*<sp/></highlight> <highlight class="normal"/>
<highlight class="keyword">class<sp/></highlight> <highlight class="keyword">class<sp/></highlight>
<highlight class="normal">Python:</highlight> <highlight class="normal">Python:</highlight>
</codeline> </codeline>
<codeline lineno="3"> <codeline lineno="3">
<highlight class="normal">*<sp/><sp/><sp/></highlight> <highlight class="normal">
<sp/>
<sp/>
</highlight>
<highlight class="keywordflow">pass</highlight> <highlight class="keywordflow">pass</highlight>
<highlight class="normal"/>
</codeline>
<codeline lineno="4">
<highlight class="normal">*<sp/></highlight>
</codeline> </codeline>
</programlisting> </programlisting>
</para> </para>
<para> <para>
<programlisting> <programlisting>
<codeline> <codeline>
<highlight class="normal">*<sp/></highlight>
<highlight class="comment">//<sp/>comment<sp/>in<sp/>a<sp/>code<sp/>block</highlight> <highlight class="comment">//<sp/>comment<sp/>in<sp/>a<sp/>code<sp/>block</highlight>
<highlight class="normal"/> <highlight class="normal"/>
</codeline> </codeline>
<codeline> <codeline>
<highlight class="normal">*<sp/></highlight> <highlight class="normal"/>
<highlight class="keyword">class<sp/></highlight> <highlight class="keyword">class<sp/></highlight>
<highlight class="normal">Cpp<sp/>{};</highlight> <highlight class="normal">Cpp<sp/>{};</highlight>
</codeline> </codeline>
<codeline>
<highlight class="normal">*<sp/></highlight>
</codeline>
</programlisting> </programlisting>
</para> </para>
</detaileddescription> </detaileddescription>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment