summaryrefslogtreecommitdiff
path: root/docbook
diff options
context:
space:
mode:
authorGerald Combs <gerald@zing.org>2014-11-02 13:20:08 -0800
committerGerald Combs <gerald@wireshark.org>2014-11-09 05:12:09 +0000
commit04aad36c0e9179ceb36b9459d52aad0059b7d1f2 (patch)
tree6678632b4620b8f107c306c7d6541641bef01854 /docbook
parent502085662fd22deadd7d405a5bf13edbaff2516c (diff)
downloadwireshark-04aad36c0e9179ceb36b9459d52aad0059b7d1f2.tar.gz
Convert the Lua reference to AsciiDoc.
Move it to the Developer's Guide while we're here. Nudge the markup in epan/wslua where needed. Note that we should probably convert it to AsciiDoc (if we're going to keep it in the DG) or Doxygen. Change-Id: Ie175111043f98b7a37eeeb8d185a833d8e866f8b Reviewed-on: https://code.wireshark.org/review/5203 Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'docbook')
-rw-r--r--docbook/CMakeLists.txt5
-rw-r--r--docbook/GPL_appendix.asciidoc4
-rw-r--r--docbook/Makefile.am22
-rw-r--r--docbook/Makefile.common2
-rw-r--r--docbook/Makefile.nmake24
-rw-r--r--docbook/developer-guide-docinfo.xml7
-rw-r--r--docbook/developer-guide.asciidoc2
-rwxr-xr-xdocbook/make-wsluarm.pl218
-rw-r--r--docbook/user-guide.xml21
-rw-r--r--docbook/wsluarm.asciidoc689
-rw-r--r--docbook/wsluarm.xml713
-rw-r--r--docbook/wsug_src/WSUG_chapter_use.asciidoc2
12 files changed, 809 insertions, 900 deletions
diff --git a/docbook/CMakeLists.txt b/docbook/CMakeLists.txt
index 8af975a1db..9c4ee7ac11 100644
--- a/docbook/CMakeLists.txt
+++ b/docbook/CMakeLists.txt
@@ -50,7 +50,6 @@ set(WSUG_FILES
WSUG_chapter_work.xml
wsug_src/WSUG_meta_info.xml
WSUG_preface.xml
- wsluarm.xml
ws.css
)
@@ -66,6 +65,7 @@ set(WSDG_ASCIIDOC_FILES
wsug_src/WSUG_chapter_use.asciidoc
wsug_src/WSUG_chapter_work.asciidoc
wsug_src/WSUG_preface.asciidoc
+ wsluarm.asciidoc
)
set(WSUG_GRAPHICS
@@ -253,6 +253,7 @@ MACRO( ASCIIDOC2DOCBOOK _asciidocsource _conf_files )
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${A2X_EXECUTABLE}
--verbose
+ --attribute=build_dir=${CMAKE_CURRENT_BINARY_DIR}
--attribute=docinfo
--destination-dir=${CMAKE_CURRENT_BINARY_DIR}
--asciidoc-opts=${_conf_opts}
@@ -299,6 +300,7 @@ MACRO( ASCIIDOC2CHAPTER _asciidocsource _conf_files )
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${A2X_EXECUTABLE}
--verbose
+ --attribute=build_dir=${CMAKE_CURRENT_BINARY_DIR}
--destination-dir=${CMAKE_CURRENT_BINARY_DIR}
--asciidoc-opts=${_conf_opts}
--no-xmllint
@@ -366,7 +368,6 @@ ADD_CUSTOM_COMMAND(
add_custom_target(
user_guides ALL
DEPENDS
- wsluarm
wsug_html_chunked/index.html
wsug_html/index.html
user-guide-a4.pdf
diff --git a/docbook/GPL_appendix.asciidoc b/docbook/GPL_appendix.asciidoc
index bbdddf1a6a..61ab50e7aa 100644
--- a/docbook/GPL_appendix.asciidoc
+++ b/docbook/GPL_appendix.asciidoc
@@ -3,7 +3,7 @@
++++++++++++++++++++++++++++++++++++++
[[AppGPL]]
-=== This Document's License (GPL)
+== This Document's License (GPL)
As with the original license and documentation distributed
with Wireshark, this document is covered by the GNU General Public
@@ -354,4 +354,4 @@ proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
----- \ No newline at end of file
+----
diff --git a/docbook/Makefile.am b/docbook/Makefile.am
index 68d586ca34..cab1f9504f 100644
--- a/docbook/Makefile.am
+++ b/docbook/Makefile.am
@@ -96,10 +96,10 @@ endif
wsug: $(WSUG_TARGETS)
# validate the content
-wsug.validated: $(WSUG_SOURCE) wsluarm
+wsug.validated: $(WSUG_SOURCE)
if HAVE_XMLLINT
@ echo --- WSUG - VALIDATING XML ---
- $(XMLLINT) --path .:wsluarm_src:$(srcdir) --valid --noout $<
+ $(XMLLINT) --path .:$(srcdir) --valid --noout $<
touch $@
else
@ echo --- WSUG - SKIP VALIDATION ---
@@ -116,7 +116,6 @@ wsug_html/index.html: $(WSUG_SOURCE) wsluarm
cp $(srcdir)/wsug_graphics/toolbar/* wsug_html/wsug_graphics/toolbar
cp $(srcdir)/ws.css wsug_html
$(XSLTPROC) --stringparam base.dir wsug_html/ $(COMMON_XSLTPROC_ARGS) \
- --path .:wsluarm_src \
$(WSUG_XSLTPROC_ARGS) $(SINGLE_XSLTPROC_ARGS) $< > $@
-chmod -R og+rX wsug_html
@@ -131,7 +130,6 @@ wsug_html_chunked/index.html: $(WSUG_SOURCE) wsluarm
cp $(srcdir)/wsug_graphics/toolbar/* wsug_html_chunked/wsug_graphics/toolbar
cp $(srcdir)/ws.css wsug_html_chunked
$(XSLTPROC) --stringparam base.dir wsug_html_chunked/ $(COMMON_XSLTPROC_ARGS) \
- --path .:wsluarm_src \
$(WSUG_XSLTPROC_ARGS) $(CHUNKED_XSLTPROC_ARGS) $<
-chmod -R og+rX wsug_html_chunked
@@ -140,16 +138,14 @@ wsug_html_chunked/index.html: $(WSUG_SOURCE) wsluarm
user-guide-us.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl wsluarm
@ echo --- WSUG - PDF US PAPER ---
$(XSLTPROC) --stringparam paper.type letter \
- --path .:wsluarm_src:$(srcdir) \
- --nonet custom_layer_pdf.xsl $< > $@
+ --nonet custom_layer_pdf.xsl $< > $@
# create pdf file (through XSL-FO), portrait pages on A4 paper
# you will get lot's of errors, but that's ok
user-guide-a4.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl wsluarm
@ echo --- WSUG - PDF A4 PAPER ---
$(XSLTPROC) --stringparam paper.type A4 \
- --path .:wsluarm_src:$(srcdir) \
- --nonet custom_layer_pdf.xsl $< > $@
+ --nonet custom_layer_pdf.xsl $< > $@
wsluarm: make-wsluarm.pl $(WSLUA_MODULES)
mkdir -p wsluarm_src
@@ -182,14 +178,14 @@ developer-guide.xml: developer-guide.asciidoc $(WSDG_FILES)
wsdg.validated: $(WSDG_SOURCE)
if HAVE_XMLLINT
@ echo --- WSDG - VALIDATING XML ---
- $(XMLLINT) --path .:$(srcdir) --valid --noout $<
+ $(XMLLINT) --path .:wsluarm_src:$(srcdir) --valid --noout $<
touch $@
else
@ echo --- WSDG - SKIP VALIDATION ---
endif
# create html single page file
-wsdg_html: wsdg_html/index.html
+wsdg_html: wsdg_html/index.html wsluarm
wsdg_html/index.html: $(WSDG_SOURCE)
@ echo --- WSDG - HTML SINGLE PAGE ---
@@ -199,6 +195,7 @@ wsdg_html/index.html: $(WSDG_SOURCE)
cp $(srcdir)/wsdg_graphics/toolbar/* wsdg_html/wsdg_graphics/toolbar/
cp $(srcdir)/ws.css wsdg_html
$(XSLTPROC) --stringparam base.dir wsdg_html/ $(COMMON_XSLTPROC_ARGS) \
+ --path .:wsluarm_src \
$(WSDG_XSLTPROC_ARGS) $(SINGLE_XSLTPROC_ARGS) $< > $@
-chmod -R og+rX wsdg_html
@@ -213,6 +210,7 @@ wsdg_html_chunked/index.html: $(WSDG_SOURCE)
cp $(srcdir)/wsdg_graphics/toolbar/* wsdg_html_chunked/wsdg_graphics/toolbar/
cp $(srcdir)/ws.css wsdg_html_chunked
$(XSLTPROC) --stringparam base.dir wsdg_html_chunked/ $(COMMON_XSLTPROC_ARGS) \
+ --path .:wsluarm_src \
$(WSDG_XSLTPROC_ARGS) $(CHUNKED_XSLTPROC_ARGS) $<
-chmod -R og+rX wsdg_html_chunked
@@ -221,7 +219,7 @@ wsdg_html_chunked/index.html: $(WSDG_SOURCE)
developer-guide-us.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
@ echo --- WSDG - PDF US PAPER ---
$(XSLTPROC) --stringparam paper.type letter \
- --path .:$(srcdir) \
+ --path .:wsluarm_src:$(srcdir) \
--nonet custom_layer_pdf.xsl $< > $@
# create pdf file (through XSL-FO), portrait pages on A4 paper
@@ -229,7 +227,7 @@ developer-guide-us.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
developer-guide-a4.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
@ echo --- WSDG - PDF A4 PAPER ---
$(XSLTPROC) --stringparam paper.type A4 \
- --path .:$(srcdir) \
+ --path .:wsluarm_src:$(srcdir) \
--nonet custom_layer_pdf.xsl $< > $@
diff --git a/docbook/Makefile.common b/docbook/Makefile.common
index 557c4ef605..d92d512e9d 100644
--- a/docbook/Makefile.common
+++ b/docbook/Makefile.common
@@ -19,7 +19,6 @@ WSUG_FILES = \
wsug_src/WSUG_chapter_work.asciidoc \
wsug_src/WSUG_meta_info.xml \
wsug_src/WSUG_preface.asciidoc \
- wsluarm.xml \
ws.css
WSUG_GENERATED_SOURCE = \
@@ -184,6 +183,7 @@ WSDG_FILES = \
wsdg_src/WSDG_chapter_userinterface.asciidoc \
wsdg_src/WSDG_chapter_works.asciidoc \
wsdg_src/WSDG_preface.asciidoc \
+ wsluarm.asciidoc \
ws.css
WSDG_GENERATED_SOURCE = \
diff --git a/docbook/Makefile.nmake b/docbook/Makefile.nmake
index 752f061e66..e11d916a3c 100644
--- a/docbook/Makefile.nmake
+++ b/docbook/Makefile.nmake
@@ -92,7 +92,7 @@ git_version.xml: git_version_check
wsug_x: wsug_html_chunked wsug_html user-guide-a4.pdf user-guide-us.pdf user-guide.chm
# validate the content
-wsug.validated: $(WSUG_SOURCE) wsluarm
+wsug.validated: $(WSUG_SOURCE)
@ echo --- WSUG - VALIDATING XML ---
$(XMLLINT) --valid --noout user-guide.xml
touch $@
@@ -100,7 +100,7 @@ wsug.validated: $(WSUG_SOURCE) wsluarm
# create html single page file
wsug_html: wsug_html\index.html
-wsug_html\index.html: $(WSUG_SOURCE) wsluarm
+wsug_html\index.html: $(WSUG_SOURCE)
@ echo --- WSUG - HTML SINGLE PAGE ---
if not exist wsug_html\wsug_graphics\toolbar md wsug_html\wsug_graphics\toolbar
cp wsug_graphics/*.* wsug_html/wsug_graphics
@@ -113,7 +113,7 @@ wsug_html\index.html: $(WSUG_SOURCE) wsluarm
# create html chunked page files
wsug_html_chunked: wsug_html_chunked\index.html
-wsug_html_chunked\index.html: $(WSUG_SOURCE) wsluarm
+wsug_html_chunked\index.html: $(WSUG_SOURCE)
@ echo --- WSUG - HTML CHUNKED ---
if not exist wsug_html_chunked\wsug_graphics\toolbar md wsug_html_chunked\wsug_graphics\toolbar
cp wsug_graphics/*.* wsug_html_chunked/wsug_graphics
@@ -125,7 +125,7 @@ wsug_html_chunked\index.html: $(WSUG_SOURCE) wsluarm
# create pdf file (through XSL-FO), portrait pages on US letter paper (the default)
# you will get lot's of errors, but that's ok
-user-guide-us.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl wsluarm
+user-guide-us.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl
!ifdef FOP
@ echo --- WSUG - PDF US PAPER ---
$(XSLTPROC) --stringparam paper.type letter --nonet custom_layer_pdf.xsl user-guide.xml > $@
@@ -133,14 +133,14 @@ user-guide-us.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl wsluarm
# create pdf file (through XSL-FO), portrait pages on A4 paper
# you will get lot's of errors, but that's ok
-user-guide-a4.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl wsluarm
+user-guide-a4.fo: $(WSUG_SOURCE) custom_layer_pdf.xsl
!ifdef FOP
@ echo --- WSUG - PDF A4 PAPER ---
$(XSLTPROC) --stringparam paper.type A4 --nonet custom_layer_pdf.xsl user-guide.xml > $@
!endif
# create MS html help file (through html chunked pages)
-user-guide.chm: $(WSUG_SOURCE) wsluarm
+user-guide.chm: $(WSUG_SOURCE)
!ifdef HHC_EXE
@ echo --- WSUG - MICROSOFT HTML HELP ---
if not exist wsug_chm\wsug_graphics\toolbar md wsug_chm\wsug_graphics\toolbar
@@ -178,7 +178,7 @@ developer-guide.xml: developer-guide.asciidoc $(WSDG_FILES)
<<
# validate the content
-wsdg.validated: $(WSDG_SOURCE)
+wsdg.validated: $(WSDG_SOURCE) wsluarm
@ echo --- WSDG - VALIDATING XML ---
$(XMLLINT) --valid --noout developer-guide.xml
touch $@
@@ -186,7 +186,7 @@ wsdg.validated: $(WSDG_SOURCE)
# create html single page file
wsdg_html: wsdg_html\index.html
-wsdg_html\index.html: $(WSDG_SOURCE)
+wsdg_html\index.html: $(WSDG_SOURCE) wsluarm
@ echo --- WSDG - HTML SINGLE PAGE ---
if not exist wsdg_html\wsdg_graphics md wsdg_html\wsdg_graphics
if not exist wsdg_html\wsdg_graphics\toolbar md wsdg_html\wsdg_graphics\toolbar
@@ -200,7 +200,7 @@ wsdg_html\index.html: $(WSDG_SOURCE)
# create html chunked page files
wsdg_html_chunked: wsdg_html_chunked\index.html
-wsdg_html_chunked\index.html: $(WSDG_SOURCE)
+wsdg_html_chunked\index.html: $(WSDG_SOURCE) wsluarm
@ echo --- WSDG - HTML CHUNKED ---
if not exist wsdg_html_chunked\wsdg_graphics md wsdg_html_chunked\wsdg_graphics
if not exist wsdg_html_chunked\wsdg_graphics\toolbar md wsdg_html_chunked\wsdg_graphics\toolbar
@@ -213,7 +213,7 @@ wsdg_html_chunked\index.html: $(WSDG_SOURCE)
# create pdf file (through XSL-FO), portrait pages on US letter paper (the default)
# you will get lot's of errors, but that's ok
-developer-guide-us.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
+developer-guide-us.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl wsluarm
!ifdef FOP
@ echo --- WSDG - PDF US PAPER ---
$(XSLTPROC) --stringparam paper.type letter --nonet custom_layer_pdf.xsl developer-guide.xml > $@
@@ -221,14 +221,14 @@ developer-guide-us.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
# create pdf file (through XSL-FO), portrait pages on A4 paper
# you will get lot's of errors, but that's ok
-developer-guide-a4.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl
+developer-guide-a4.fo: $(WSDG_SOURCE) custom_layer_pdf.xsl wsluarm
!ifdef FOP
@ echo --- WSDG - PDF A4 PAPER ---
$(XSLTPROC) --stringparam paper.type A4 --nonet custom_layer_pdf.xsl developer-guide.xml > $@
!endif
# create MS html help file (through html chunked pages)
-developer-guide.chm: $(WSDG_SOURCE)
+developer-guide.chm: $(WSDG_SOURCE) wsluarm
!ifdef HHC_EXE
@ echo --- WSDG - MICROSOFT HTML HELP ---
if not exist wsdg_chm\wsdg_graphics md wsdg_chm\wsdg_graphics
diff --git a/docbook/developer-guide-docinfo.xml b/docbook/developer-guide-docinfo.xml
index b1f78ebeb9..893ce71fb0 100644
--- a/docbook/developer-guide-docinfo.xml
+++ b/docbook/developer-guide-docinfo.xml
@@ -21,6 +21,13 @@
<revhistory>
<revision>
+ <revnumber>1.0</revnumber>
+ <date>2 Nov 2014</date>
+ <authorinitials>gcc</authorinitials>
+ <revremark>Moved Lua reference from User's Guide to Developer's Guide.</revremark>
+</revision>
+
+<revision>
<revnumber>0.9</revnumber>
<date>9 Feb 2014</date>
<authorinitials>gcc</authorinitials>
diff --git a/docbook/developer-guide.asciidoc b/docbook/developer-guide.asciidoc
index eff257cd47..4f698d0134 100644
--- a/docbook/developer-guide.asciidoc
+++ b/docbook/developer-guide.asciidoc
@@ -45,6 +45,8 @@ include::wsdg_src/WSDG_chapter_capture.asciidoc[]
include::wsdg_src/WSDG_chapter_dissection.asciidoc[]
+include::wsluarm.asciidoc[]
+
include::wsdg_src/WSDG_chapter_userinterface.asciidoc[]
include::GPL_appendix.asciidoc[]
diff --git a/docbook/make-wsluarm.pl b/docbook/make-wsluarm.pl
index c6fa9cfec9..4bd121426b 100755
--- a/docbook/make-wsluarm.pl
+++ b/docbook/make-wsluarm.pl
@@ -49,6 +49,10 @@
# * a line starting with "@code" and ending with "@endcode" becomes an
# XML programlisting block, with no indenting/parsing within the block
# The above '@' commands are based on Doxygen commands
+#
+# Changed by Gerald Combs to generate AsciiDoc.
+# - We might want to convert the epan/wslua/*.c markup to AsciiDoc
+# - ...or we might want to generate Doxygen output instead.
use strict;
#use V2P;
@@ -66,27 +70,19 @@ sub gorolla {
# remove trailing newlines and spaces at end
$s =~ s/([\n]|\s)*$//s;
# escape HTML entities everywhere
- $s =~ s/&/&amp;/msg; # do this one first so we don't clobber later ones
- $s =~ s/\</&lt;/msg;
- $s =~ s/\>/&gt;/msg;
# bold and italics - but don't change a star followed by space (it's a list item)
- $s =~ s/(\*\*)([^*]+?)(\*\*)/<command>$2<\/command>/g; # bold=command??
- $s =~ s/(\*)([^\s][^*]*?)(\*)/<emphasis>$2<\/emphasis>/g; # italics
+ $s =~ s/(\*\*)([^*]+?)(\*\*)/`$2`/g; # bold=command??
# one backtick is quote/command
- $s =~ s/([^`]|^)(`)([^`]+?)(`)/$1<command>$3<\/command>/g; # quote=command??
- # two backticks are one
- $s =~ s/(``)([^`]+?)(``)/`$2`/g; # quote=command??
+ #$s =~ s/([^`]|^)(`)([^`]+?)(`)/$1<command>$3<\/command>/g; # quote=command??
+ # two backticks are one (...and don't appear anywhere?)
+ #$s =~ s/(``)([^`]+?)(``)/`$2`/g; # quote=command??
- # handle '[[url]]'
- $s =~ s/(\[\[)([^\]\|]+?)(\]\])/<ulink url="$2">$2<\/ulink>/g;
+ # Convert wiki-style '[[url]]'
+ $s =~ s/(\[\[)([^\]\|]+?)(\]\])/link:\$\$$2\$\$:[$2]/g;
# handle '[[url|pretty]]'
- $s =~ s/(\[\[)(([^\]\|]+?)\|\s*([^\]]+?))(\]\])/<ulink url="$3">$4<\/ulink>/g;
- # unescape gorolla'd ampersands in url
- while ($s =~ /<ulink url="[^"]*&amp;/) {
- $s =~ s/(<ulink url="[^"]*)(&amp;)/$1\&/;
- }
+ $s =~ s/(\[\[)(([^\]\|]+?)\|\s*([^\]]+?))(\]\])/link:\$\$$3\$\$:[$4]/g;
$s;
}
@@ -113,7 +109,6 @@ sub parse_desc_common {
# capitalize the first letter of the first line
$lines[0] = ucfirst($lines[0]);
# for each double newline, break into separate para's
- $r[++$#r] = "<para>\n";
for (my $idx=0; $idx <= $#lines; $idx++) {
$lines[$idx] =~ s/^(\s*)//; # remove leading whitespace
@@ -123,137 +118,95 @@ sub parse_desc_common {
# if we find @code then treat it as a blob
if ($lines[$idx] =~ /^\@code\b/) {
my $line = $lines[$idx];
- $line =~ s/\@code/<programlisting language="lua">/;
+ $line =~ s/\@code/[source,lua]\n----\n/;
# if this line didn't have ending token, keep eating paragraphs
while (!($line =~ /\@endcode\b/) && $idx <= $#lines) {
# also insert back the line separator we ate in earlier split()
$line .= $lines[++$idx] . "\n";
}
# fix ending token, and also remove trailing whitespace before it
- $line =~ s/[\s\n]*\@endcode/<\/programlisting>/;
+ $line =~ s/[\s\n]*\@endcode/\n----/;
$r[++$#r] = $line . "\n";
} elsif ($lines[$idx] =~ /^\s*$/) {
# line is either empty or just whitespace, and we're not in a @code block
# so it's the end of a previous paragraph, beginning of new one
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "\n\n";
} else {
- # we have a regular line, not in a @code block
- # XML-ify it
+ # We have a regular line, not in a @code block.
+ # Add it as-is.
my $line = $lines[$idx];
- # if line starts with "Note:" or "@note", make it an XML <note>
+ # If line starts with "Note:" or "@note", make it an admonition
if ($line =~ /^[nN]ote:|^\@note /) {
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<note>\n";
- $r[++$#r] = "\t<para>\n";
+ $r[++$#r] = "[NOTE]\n";
+ $r[++$#r] = "====\n";
$line =~ s/^([nN]ote:\s*|\@note\s*)//;
- $r[++$#r] = "\t\t" . $line . "\n";
+ $r[++$#r] = "" . $line . "\n";
# keep eating until we find a blank line or end
while (!($lines[++$idx] =~ /^\s*$/) && $idx <= $#lines) {
$lines[$idx] =~ s/^(\s*)//; # remove leading whitespace
- $r[++$#r] = "\t\t" . $lines[$idx]. "\n";
+ $r[++$#r] = "" . $lines[$idx]. "\n";
}
- $r[++$#r] = "\t</para>\n";
- $r[++$#r] = "</note>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "====\n\n";
- # if line starts with "Warning:"" or @warning", make it an XML <warning>
+ # If line starts with "Warning:"" or @warning", make it an admonition
} elsif ($line =~ /^[wW]arning:|^\@warning /) {
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<warning>\n";
- $r[++$#r] = "\t<para>\n";
+ $r[++$#r] = "[WARNING]\n";
+ $r[++$#r] = "====\n";
$line =~ s/^(wW]arning:\s*|\@warning\s*)//;
# keep eating until we find a blank line or end
- $r[++$#r] = "\t\t" . $line . "\n";
+ $r[++$#r] = "" . $line . "\n";
while (!($lines[++$idx] =~ /^\s*$/) && $idx <= $#lines) {
$lines[$idx] =~ s/^(\s*)//; # remove leading whitespace
- $r[++$#r] = "\t\t" . $lines[$idx] . "\n";
+ $r[++$#r] = "" . $lines[$idx] . "\n";
}
- $r[++$#r] = "\t</para>\n";
- $r[++$#r] = "</warning>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "====\n";
# if line starts with "@version" or "@since", make it a "Since:"
} elsif ($line =~ /^\@version |^\@since /) {
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<para>\n";
$line =~ s/^\@version\s+|^\@since\s+/Since: /;
- $r[++$#r] = "\t" . $line . "\n";
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "\n" . $line . "\n\n";
- # if line starts with single "*" and space, make it an XML <itemizedlist>
+ # if line starts with single "*" and space, leave it mostly intact.
} elsif ($line =~ /^\*\s/) {
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<itemizedlist>\n";
- $r[++$#r] = "\t<listitem>\n";
- $r[++$#r] = "\t\t<para>\n";
- $line =~ s/^\*\s*//; # remove the star and whitespace
- $r[++$#r] = "\t\t\t" . $line . "\n";
+ $r[++$#r] = "\n";
+ $r[++$#r] = "" . $line . "\n";
# keep eating until we find a blank line or end
while (!($lines[++$idx] =~ /^\s*$/) && $idx <= $#lines) {
$lines[$idx] =~ s/^(\s*)//; # count and remove leading whitespace
# if this is less indented than before, break out
last if length($1) < $indent;
- if ($lines[$idx] =~ /^\*\s/) {
- # another star, new list item
- $r[++$#r] = "\t\t</para>\n";
- $r[++$#r] = "\t</listitem>\n";
- $r[++$#r] = "\t<listitem>\n";
- $r[++$#r] = "\t\t<para>\n";
- $lines[$idx] =~ s/^\*\s*//; # remove star and whitespace
- }
- $r[++$#r] = "\t\t\t" . $lines[$idx] . "\n";
+ $r[++$#r] = "" . $lines[$idx] . "\n";
}
- $r[++$#r] = "\t\t</para>\n";
- $r[++$#r] = "\t</listitem>\n";
- $r[++$#r] = "</itemizedlist>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "\n\n";
- # if line starts with "1." and space, make it an XML <orderedlist>
+ # if line starts with "1." and space, leave it mostly intact.
} elsif ($line =~ /^1\.\s/) {
- $r[++$#r] = "</para>\n";
- $r[++$#r] = "<orderedlist>\n";
- $r[++$#r] = "\t<listitem>\n";
- $r[++$#r] = "\t\t<para>\n";
- $line =~ s/^1\.\s*//; # remove the 1. and whitespace
- $r[++$#r] = "\t\t\t" . $line . "\n";
+ $r[++$#r] = "\n";
+ $r[++$#r] = "" . $line . "\n";
# keep eating until we find a blank line or end
while (!($lines[++$idx] =~ /^\s*$/) && $idx <= $#lines) {
$lines[$idx] =~ s/^(\s*)//; # count and remove leading whitespace
# if this is less indented than before, break out
last if length($1) < $indent;
- if ($lines[$idx] =~ /^[0-9]+\.\s/) {
- # another number, new list item
- $r[++$#r] = "\t\t</para>\n";
- $r[++$#r] = "\t</listitem>\n";
- $r[++$#r] = "\t<listitem>\n";
- $r[++$#r] = "\t\t<para>\n";
- $lines[$idx] =~ s/^[0-9]+\.\s*//; # remove star and whitespace
- }
- $r[++$#r] = "\t\t\t" . $lines[$idx] . "\n";
+ $r[++$#r] = "" . $lines[$idx] . "\n";
}
- $r[++$#r] = "\t\t</para>\n";
- $r[++$#r] = "\t</listitem>\n";
- $r[++$#r] = "</orderedlist>\n";
- $r[++$#r] = "<para>\n";
+ $r[++$#r] = "\n\n";
# just a normal line, add it to array
} else {
- $r[++$#r] = "\t" . $line . "\n";
+ # Nested Lua arrays
+ $line =~ s/\[\[(.*)\]\]/\$\$$1\$\$/g;
+ $r[++$#r] = "" . $line . "\n";
}
}
}
- $r[++$#r] = "</para>\n";
+ $r[++$#r] = "\n\n";
- # now go through @r, and copy into @ret but skip empty
- # paragraphs (ie, <para> followed by </para>)
- # I could have used splice(), but I think this is easier (and faster?)
- # this isn't strictly necessary since the XML tool seems
- # to ignore empty paragraphs, but in case it ever changes...
+ # Now go through @r, and copy into @ret but skip empty lines.
+ # This isn't strictly necessary but makes the AsciiDoc output prettier.
for (my $idx=0; $idx <= $#r; $idx++) {
- if ($r[$idx] =~ /^<para>\n$/ && $r[$idx+1] =~ /^<\/para>\n$/) {
+ if ($r[$idx] =~ /^\s*$/ && $r[$idx+1] =~ /^\s*$/ && $r[$idx+2] =~ /^\s*$/) {
$idx++; # for-loop will increment $idx and skip the other one
} else {
$ret[++$#ret] = $r[$idx];
@@ -286,7 +239,7 @@ sub parse_module_desc {
my @lines = split(/\n/, $s);
my $line = shift @lines;
- $r[++$#r] = "<title>$line</title>\n";
+ $r[++$#r] = "=== $line\n\n";
return parse_desc_common(\@r, \@lines);
}
@@ -295,12 +248,12 @@ sub parse_module_desc {
sub parse_function_arg_desc {
my $s = gorolla(shift);
# break description into separate sections
- my @r = ( "<listitem>\n" ); # the array we return
+ my @r = ( "\n" ); # the array we return
my @lines = split(/\n/, $s);
@r = @{ parse_desc_common(\@r, \@lines) };
- $r[++$#r] = "</listitem>\n";
+ #$r[++$#r] = "</listitem>\n";
return \@r;
}
@@ -316,7 +269,7 @@ sub parse_attrib_desc {
$mode =~ s/RO/ Retrieve only./;
$mode =~ s/WO/ Assign only./;
$mode =~ s/RW|WR/ Retrieve or assign./;
- $r[++$#r] = "<para>Mode: $mode</para>\n";
+ $r[++$#r] = "Mode: $mode\n\n";
} else {
die "Attribute does not have a RO/WO/RW mode: '$s'\n";
}
@@ -336,10 +289,10 @@ sub print_desc {
if (!$indent) {
$indent = 2;
}
- my $tabs = "\t" x $indent;
+ #my $tabs = "\t" x $indent;
for my $line ( @{ $desc_ref } ) {
- printf D "%s%s", $tabs, $line;
+ printf D "%s", $line;
}
}
@@ -350,51 +303,44 @@ my %classes;
my $function;
my @functions;
-my $docbook_template = {
- module_header => "<section id='lua_module_%s'>\n",
+my $asciidoc_template = {
+ module_header => "[[lua_module_%s]]\n\n",
# module_desc => "\t<title>%s</title>\n",
- class_header => "\t<section id='lua_class_%s'>\n" .
- "\t\t<title>%s</title>\n",
+ class_header => "[[lua_class_%s]]\n\n" .
+ "==== %s\n\n",
#class_desc => "\t\t<para>%s</para>\n",
- class_attr_header => "\t\t<section id='lua_class_attrib_%s'>\n" .
- "\t\t\t<title>%s</title>\n",
+ class_attr_header => "[[lua_class_attrib_%s]]\n\n" .
+ "==== %s\n\n",
#class_attr_descr => "\t\t\t<para>%s%s</para>\n",
- class_attr_footer => "\t\t</section> <!-- class_attr_footer: %s -->\n",
- function_header => "\t\t<section id='lua_fn_%s'>\n" .
- "\t\t\t<title>%s</title>\n",
+ class_attr_footer => "// End %s\n\n",
+ function_header => "[[lua_fn_%s]]\n\n" .
+ "===== %s\n\n",
#function_descr => "\t\t\t<para>%s</para>\n",
- function_args_header => "\t\t\t<section>\n" .
- "\t\t\t\t<title>Arguments</title>\n" .
- "\t\t\t\t<variablelist>\n",
- function_arg_header => "\t\t\t\t\t<varlistentry>\n" .
- "\t\t\t\t\t\t<term>%s</term>\n",
+ function_args_header => "[float]\n" .
+ "===== Arguments\n\n",
+ function_arg_header => "%s::\n",
#function_arg_descr => "\t\t\t\t\t\t<listitem>\n" .
# "\t\t\t\t\t\t\t<para>%s</para>\n" .
# "\t\t\t\t\t\t</listitem>\n",
- function_arg_footer => "\t\t\t\t\t</varlistentry> <!-- function_arg_footer: %s -->\n",
- function_args_footer => "\t\t\t\t</variablelist>\n" .
- "\t\t\t</section> <!-- end of function_args -->\n",
+ function_arg_footer => "// function_arg_footer: %s\n\n",
+ function_args_footer => "// end of function_args\n\n",
function_argerror_header => "", #"\t\t\t\t\t<section><title>Errors</title>\n\t\t\t\t\t\t<itemizedlist>\n",
function_argerror => "", #"\t\t\t\t\t\t\t<listitem><para>%s</para></listitem>\n",
function_argerror_footer => "", #"\t\t\t\t\t\t</itemizedlist></section> <!-- function_argerror_footer: %s -->\n",
- function_returns_header => "\t\t\t<section>\n" .
- "\t\t\t\t<title>Returns</title>\n",
- function_returns => "\t\t\t\t<para>%s</para>\n",
- function_returns_footer => "\t\t\t</section> <!-- function_returns_footer: %s -->\n",
- function_errors_header => "\t\t\t<section>\n" .
- "\t\t\t\t<title>Errors</title>\n" .
- "\t\t\t\t<itemizedlist>\n",
- function_errors => "\t\t\t\t\t<listitem>\n" .
- "\t\t\t\t\t\t<para>%s</para>\n" .
- "\t\t\t\t\t</listitem>\n",
- function_errors_footer => "\t\t\t\t</itemizedlist>\n" .
- "\t\t\t</section> <!-- function_errors_footer: %s -->\n",
- function_footer => "\t\t</section> <!-- function_footer: %s -->\n",
- class_footer => "\t</section> <!-- class_footer: %s -->\n",
- global_functions_header => "\t<section id='global_functions_%s'>\n" .
- "\t\t<title>Global Functions</title>\n",
- global_functions_footer => "\t</section> <!-- Global function -->\n",
- module_footer => "</section> <!-- end of module -->\n",
+ function_returns_header => "[float]\n" .
+ "===== Returns\n\n",
+ function_returns => "%s\n\n",
+ function_returns_footer => "// function_returns_footer: %s\n",
+ function_errors_header => "[float]\n" .
+ "===== Errors\n\n",
+ function_errors => "* %s\n",
+ function_errors_footer => "// function_errors_footer: %s\n",
+ function_footer => "// function_footer: %s\n\n",
+ class_footer => "// class_footer: %s\n",
+ global_functions_header => "[[global_functions_%s]]\n\n" .
+ "==== Global Functions\n\n",
+ global_functions_footer => "// Global function\n",
+ module_footer => "// end of module\n",
};
# class_constructors_header => "\t\t<section id='lua_class_constructors_%s'>\n\t\t\t<title>%s Constructors</title>\n",
@@ -403,8 +349,8 @@ my $docbook_template = {
# class_methods_footer => "\t\t</section> <!-- class_methods_footer: %s -->\n",
-my $template_ref = $docbook_template;
-my $out_extension = "xml";
+my $template_ref = $asciidoc_template;
+my $out_extension = "asciidoc";
# It's said that only perl can parse perl... my editor isn't perl...
# if unencoded this causes my editor's autoindent to bail out so I encoded in octal
diff --git a/docbook/user-guide.xml b/docbook/user-guide.xml
index eb20e44265..12a9e96ee7 100644
--- a/docbook/user-guide.xml
+++ b/docbook/user-guide.xml
@@ -329,25 +329,6 @@ FILE SECTION
<!ENTITY AppHowItWorks SYSTEM "wsug_src/WSUG_app_howitworks.xml">
<!ENTITY AppTools SYSTEM "wsug_src/WSUG_app_tools.xml">
<!ENTITY AppGPL SYSTEM "GPL_appendix.xml">
-
-<!--
-WSLua Reference Manual
--->
- <!ENTITY WsLuaRm SYSTEM "wsluarm.xml">
- <!ENTITY WsLuaDumper SYSTEM "wsluarm_src/wslua_dumper.xml">
- <!ENTITY WsLuaField SYSTEM "wsluarm_src/wslua_field.xml">
- <!ENTITY WsLuaGui SYSTEM "wsluarm_src/wslua_gui.xml">
- <!ENTITY WsLuaListener SYSTEM "wsluarm_src/wslua_listener.xml">
- <!ENTITY WsLuaPinfo SYSTEM "wsluarm_src/wslua_pinfo.xml">
- <!ENTITY WsLuaProto SYSTEM "wsluarm_src/wslua_proto.xml">
- <!ENTITY WsLuaTree SYSTEM "wsluarm_src/wslua_tree.xml">
- <!ENTITY WsLuaTvb SYSTEM "wsluarm_src/wslua_tvb.xml">
- <!ENTITY WsLuaFile SYSTEM "wsluarm_src/wslua_file.xml">
- <!ENTITY WsLuaDir SYSTEM "wsluarm_src/wslua_dir.xml">
- <!ENTITY WsLuaUtility SYSTEM "wsluarm_src/wslua_util.xml">
- <!ENTITY WsLuaInt64 SYSTEM "wsluarm_src/wslua_int64.xml">
- <!ENTITY WsLuaStruct SYSTEM "wsluarm_src/wslua_struct.xml">
-
]>
<book>
@@ -366,8 +347,6 @@ WSLua Reference Manual
&ChapterTelephony;
&ChapterCustomize;
- &WsLuaRm;
-
&AppFiles;
&AppProtocols;
&AppMessages;
diff --git a/docbook/wsluarm.asciidoc b/docbook/wsluarm.asciidoc
new file mode 100644
index 0000000000..197723b1c6
--- /dev/null
+++ b/docbook/wsluarm.asciidoc
@@ -0,0 +1,689 @@
+[[wsluarm]]
+
+// Attributes
+:build_dir: .
+
+== Lua Support in Wireshark
+
+[[wsluarm_intro]]
+
+=== Introduction
+
+Wireshark has an embedded Lua interpreter. Lua is a powerful light-weight
+programming language designed for extending applications. Lua is designed and
+implemented by a team at PUC-Rio, the Pontifical Catholic University of Rio de
+Janeiro in Brazil. Lua was born and raised at Tecgraf, the Computer Graphics
+Technology Group of PUC-Rio, and is now housed at
+link:http://www.lua.org[Lua.org]. Both Tecgraf and Lua.org are laboratories of
+the Department of Computer Science.
+
+In Wireshark Lua can be used to write dissectors, taps, and capture file readers
+and writers.
+
+Wireshark's Lua interpreter starts by loading `init.lua` that is located in the
+global configuration directory of Wireshark. Lua is enabled by default. To
+disable Lua the line variable _$$disable_lua$$_ should be set to _true_ in
+`init.lua`.
+
+After loading _init.lua_ from the data directory if Lua is enabled Wireshark
+will try to load a file named `init.lua` in the user's directory.
+
+Wireshark will also load all files with `.lua` suffix from both the global and
+the personal plugins directory.
+
+The command line option _$$-X lua_script:$$++file.lua++_ can be used to load
+Lua scripts as well.
+
+The Lua code will be executed once after all the protocol dissectors have being
+initialized and before reading any file.
+
+[[wslua_dissector_example]]
+
+=== Example of Dissector written in Lua
+
+[source,lua]
+----
+local p_multi = Proto("multi","MultiProto");
+
+local vs_protos = {
+ [2] = "mtp2",
+ [3] = "mtp3",
+ [4] = "alcap",
+ [5] = "h248",
+ [6] = "ranap",
+ [7] = "rnsap",
+ [8] = "nbap"
+}
+
+local f_proto = ProtoField.uint8("multi.protocol","Protocol",base.DEC,vs_protos)
+local f_dir = ProtoField.uint8("multi.direction","Direction",base.DEC,{ [1] = "incoming", [0] = "outgoing"})
+local f_text = ProtoField.string("multi.text","Text")
+
+p_multi.fields = { f_proto, f_dir, f_text }
+
+local data_dis = Dissector.get("data")
+
+local protos = {
+ [2] = Dissector.get("mtp2"),
+ [3] = Dissector.get("mtp3"),
+ [4] = Dissector.get("alcap"),
+ [5] = Dissector.get("h248"),
+ [6] = Dissector.get("ranap"),
+ [7] = Dissector.get("rnsap"),
+ [8] = Dissector.get("nbap"),
+ [9] = Dissector.get("rrc"),
+ [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
+ [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
+}
+
+function p_multi.dissector(buf,pkt,root)
+
+ local t = root:add(p_multi,buf(0,2))
+ t:add(f_proto,buf(0,1))
+ t:add(f_dir,buf(1,1))
+
+ local proto_id = buf(0,1):uint()
+
+ local dissector = protos[proto_id]
+
+ if dissector ~= nil then
+ dissector:call(buf(2):tvb(),pkt,root)
+ elseif proto_id < 2 then
+ t:add(f_text,buf(2))
+ -- pkt.cols.info:set(buf(2,buf:len() - 3):string())
+ else
+ data_dis:call(buf(2):tvb(),pkt,root)
+ end
+
+end
+
+local wtap_encap_table = DissectorTable.get("wtap_encap")
+local udp_encap_table = DissectorTable.get("udp.port")
+
+wtap_encap_table:add(wtap.USER15,p_multi)
+wtap_encap_table:add(wtap.USER12,p_multi)
+udp_encap_table:add(7555,p_multi)
+----
+
+[[wslua_tap_example]]
+
+=== Example of Listener written in Lua
+
+[source,lua]
+----
+-- This program will register a menu that will open a window with a count of occurrences
+-- of every address in the capture
+
+local function menuable_tap()
+ -- Declare the window we will use
+ local tw = TextWindow.new("Address Counter")
+
+ -- This will contain a hash of counters of appearances of a certain address
+ local ips = {}
+
+ -- this is our tap
+ local tap = Listener.new();
+
+ function remove()
+ -- this way we remove the listener that otherwise will remain running indefinitely
+ tap:remove();
+ end
+
+ -- we tell the window to call the remove() function when closed
+ tw:set_atclose(remove)
+
+ -- this function will be called once for each packet
+ function tap.packet(pinfo,tvb)
+ local src = ips[tostring(pinfo.src)] or 0
+ local dst = ips[tostring(pinfo.dst)] or 0
+
+ ips[tostring(pinfo.src)] = src + 1
+ ips[tostring(pinfo.dst)] = dst + 1
+ end
+
+ -- this function will be called once every few seconds to update our window
+ function tap.draw(t)
+ tw:clear()
+ for ip,num in pairs(ips) do
+ tw:append(ip .. "\t" .. num .. "\n");
+ end
+ end
+
+ -- this function will be called whenever a reset is needed
+ -- e.g. when reloading the capture file
+ function tap.reset()
+ tw:clear()
+ ips = {}
+ end
+end
+
+-- using this function we register our function
+-- to be called when the user selects the Tools->Test->Packets menu
+register_menu("Test/Packets", menuable_tap, MENU_TOOLS_UNSORTED)
+----
+
+[[wsluarm_modules]]
+
+=== Wireshark's Lua API Reference Manual
+
+This Part of the User Guide describes the Wireshark specific functions in the embedded Lua.
+
+include::{build_dir}/wsluarm_src/wslua_dumper.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_field.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_gui.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_listener.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_pinfo.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_proto.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_tree.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_tvb.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_file.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_dir.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_utility.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_int64.asciidoc[]
+include::{build_dir}/wsluarm_src/wslua_struct.asciidoc[]
+
+// WsLuaDumper
+// WsLuaField
+// WsLuaGui
+// WsLuaListener
+// WsLuaPinfo
+// WsLuaProto
+// WsLuaTree
+// WsLuaTvb
+// WsLuaFile
+// WsLuaDir
+// WsLuaUtility
+// WsLuaInt64
+// WsLuaStruct
+
+[[lua_module_GRegex]]
+
+=== GLib Regular Expressions
+
+Lua has its own native 'pattern' syntax in the string library, but sometimes a
+real regex engine is more useful. Wireshark comes with GLib's Regex
+implementation, which itself is based on Perl Compatible Regular Expressions
+(PCRE). This engine is exposed into Wireshark's Lua engine through the
+well-known Lrexlib library, following the same syntax and semantics as the
+Lrexlib PCRE implementation, with a few differences as follows:
+
+* There is no support for using custom locale/chartables
+
+* 'dfa_exec()' doesn't take 'ovecsize' nor 'wscount' arguments
+
+* 'dfa_exec()' returns boolean true for partial match, without subcapture info
+
+* Named subgroups do not return name-keyed entries in the return table (i.e., in
+ match/tfind/exec)
+
+* The 'flags()' function still works, returning all flags, but two new functions
+ 'compile_flags()' and 'match_flags()' return just their respective flags,
+ since GLib has a different and smaller set of such flags, for regex compile
+ vs. match functions
+
+* Using some assertions and POSIX character classes against strings with
+ non-ASCII characters might match high-order characters, because glib always
+ sets PCRE_UCP even if G_REGEX_RAW is set. For example, '[:alpha;]' matches
+ certain non-ASCII bytes. The following assertions have this issue: '\b', '\B',
+ '\s', '\S', '\w', '\W'. The following character classes have this issue:
+ [:alpha:], [:alnum:], [:lower:], [:upper:], [:space:], [:word:], and
+ [:graph:].
+
+* The compile flag G_REGEX_RAW is always set/used, even if you didn't specify
+ it. This is because GLib runs PCRE in UTF-8 mode by default, whereas Lua
+ strings are not UTF-aware.
+
+
+Since: 1.11.3
+
+This page is based on the full documentation for Lrexlib at
+link:http://rrthomas.github.io/lrexlib/manual.html[http://rrthomas.github.io/lrexlib/manual.html]
+
+The GLib Regular expression syntax (which is essentially PCRE syntax) can be
+found at
+link:https://developer.gnome.org/glib/2.38/glib-regex-syntax.html[https://developer.gnome.org/glib/2.38/glib-regex-syntax.html]
+
+[[lua_class_GRegex]]
+
+==== GRegex
+
+GLib Regular Expressions based on PCRE.
+
+Since: 1.11.3
+
+[[lua_class_GRegex_notes]]
+
+===== Notes
+
+All functions that take a regular expression pattern as an argument will
+generate an error if that pattern is found invalid by the regex library.
+
+All functions that take a string-type regex argument accept a compiled regex
+too. In this case, the compile flags argument is ignored (should be either
+supplied as nils or omitted).
+
+The capture flag argument 'cf' may also be supplied as a string, whose
+characters stand for compilation flags. Combinations of the following characters
+(case sensitive) are supported:
+
+* '__i__' = G_REGEX_CASELESS - Letters in the pattern match both upper- and
+ lowercase letters. This option can be changed within a pattern by a ``(?i)''
+ option setting.
+
+* '__m__' = G_REGEX_MULTILINE - By default, GRegex treats the strings as
+ consisting of a single line of characters (even if it actually contains
+ newlines). The ``start of line'' metacharacter (``^'') matches only at the start
+ of the string, while the ``end of line'' metacharacter (``$'') matches only at
+ the end of the string, or before a terminating newline (unless
+ G_REGEX_DOLLAR_ENDONLY is set). When G_REGEX_MULTILINE is set, the ``start of
+ line'' and ``end of line'' constructs match immediately following or
+ immediately before any newline in the string, respectively, as well as at the
+ very start and end. This can be changed within a pattern by a ``(?m)'' option
+ setting.
+
+* '__s__' = G_REGEX_DOTALL - A dot metacharater (``.'') in the pattern matches
+ all characters, including newlines. Without it, newlines are excluded. This
+ option can be changed within a pattern by a ("?s") option setting.
+
+* '__x__' = G_REGEX_EXTENDED - Whitespace data characters in the pattern are
+ totally ignored except when escaped or inside a character class. Whitespace
+ does not include the VT character (code 11). In addition, characters between
+ an unescaped ``$$#$$'' outside a character class and the next newline character,
+ inclusive, are also ignored. This can be changed within a pattern by a
+ ``(?x)'' option setting.
+
+* '__U__' = G_REGEX_UNGREEDY - Inverts the ``greediness'' of the quantifiers so
+ that they are not greedy by default, but become greedy if followed by ``?''.
+ It can also be set by a ``(?U)'' option setting within the pattern.
+
+[[lua_fn_GRegex_new_pattern_]]
+
+===== GRegex.new(pattern)
+
+Compiles regular expression pattern into a regular expression object whose
+internal representation is corresponding to the library used. The returned
+result then can be used by the methods, e.g. match, exec, etc. Regular
+expression objects are automatically garbage collected.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+pattern:: A Perl-compatible regular expression pattern string
+
+[float]
+===== Returns
+
+The compiled regular expression (a userdata object)
+
+[float]
+===== Errors
+
+* A malformed pattern generates a Lua error
+
+[[lua_fn_GRegex_flags__table__]]
+
+===== GRegex.flags([table])
+
+Returns a table containing the numeric values of the constants defined by the
+regex library, with the keys being the (string) names of the constants. If the
+table argument is supplied then it is used as the output table, otherwise a new
+table is created. The constants contained in the returned table can then be used
+in most functions and methods where compilation flags or execution flags can be
+specified. They can also be used for comparing with return codes of some
+functions and methods for determining the reason of failure.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+table (optional):: A table for placing results into
+
+[float]
+===== Returns
+
+A table filled with the results.
+
+[[lua_fn_GRegex_compile_flags__table__]]
+
+
+===== GRegex.compile_flags([table])
+
+Returns a table containing the numeric values of the constants defined by the
+regex library for compile flags, with the keys being the (string) names of the
+constants. If the table argument is supplied then it is used as the output
+table, otherwise a new table is created.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+table (optional):: A table for placing results into
+
+[float]
+===== Returns
+
+A table filled with the results.
+
+[[lua_fn_GRegex_match_flags__table__]]
+
+===== GRegex.match_flags([table])
+
+Returns a table containing the numeric values of the constants defined by the
+regex library for match flags, with the keys being the (string) names of the
+constants. If the table argument is supplied then it is used as the output
+table, otherwise a new table is created.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+table (optional):: A table for placing results into
+
+[float]
+===== Returns
+
+A table filled with the results.
+
+[[lua_fn_GRegex_match_subject__pattern___init____cf____ef__]]
+
+===== GRegex.match(subject, pattern, [init], [cf], [ef])
+
+Searches for the first match of the regexp pattern in the string subject,
+starting from offset init, subject to flags cf and ef. The pattern is compiled
+each time this is called, unlike the class method 'match' function.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+pattern:: A Perl-compatible regular expression pattern string or GRegex object
+
+init (optional):: start offset in the subject (can be negative)
+
+cf (optional):: compilation flags (bitwise OR)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns all substring matches ("captures"), in the order they appear
+in the pattern. false is returned for sub-patterns that did not participate in
+the match. If the pattern specified no captures then the whole matched substring
+is returned. On failure, returns nil.
+
+[[lua_fn_GRegex_find_subject__pattern___init____cf____ef__]]
+
+===== GRegex.find(subject, pattern, [init], [cf], [ef])
+
+Searches for the first match of the regexp pattern in the string subject,
+starting from offset init, subject to flags ef. The pattern is compiled each
+time this is called, unlike the class method 'find' function.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+pattern:: A Perl-compatible regular expression pattern string or GRegex object
+
+init (optional):: start offset in the subject (can be negative)
+
+cf (optional):: compilation flags (bitwise OR)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns the start point of the match (a number), the end point of
+the match (a number), and all substring matches ("captures"), in the order they
+appear in the pattern. false is returned for sub-patterns that did not
+participate in the match. On failure, returns nil.
+
+[[lua_fn_GRegex_gmatch_subject__pattern___init____cf____ef__]]
+
+
+===== GRegex.gmatch(subject, pattern, [init], [cf], [ef])
+
+Returns an iterator for repeated matching of the pattern patt in the string
+subj, subject to flags cf and ef. The function is intended for use in the
+generic for Lua construct. The pattern can be a string or a GRegex object
+previously compiled with GRegex.new().
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+pattern:: A Perl-compatible regular expression pattern string or GRegex object
+
+init (optional):: start offset in the subject (can be negative)
+
+cf (optional):: compilation flags (bitwise OR)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+The iterator function is called by Lua. On every iteration (that is, on every
+match), it returns all captures in the order they appear in the pattern (or the
+entire match if the pattern specified no captures). The iteration will continue
+till the subject fails to match.
+
+[[lua_fn_GRegex_gsub_subject__pattern___repl____max____cf____ef__]]
+
+===== GRegex.gsub(subject, pattern, [repl], [max], [cf], [ef])
+
+Searches for all matches of the pattern in the string subject and replaces them
+according to the parameters repl and max. The pattern can be a string or a
+GRegex object previously compiled with GRegex.new().
+
+Since: 1.11.3
+
+For details see:
+link:http://rrthomas.github.io/lrexlib/manual.html#gsub[http://rrthomas.github.io/lrexlib/manual.html#gsub]
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+pattern:: A Perl-compatible regular expression pattern string or GRegex object
+
+repl (optional):: Substitution source string, function, table, false or nil
+
+max (optional):: Maximum number of matches to search for, or control function, or nil
+
+cf (optional):: Compilation flags (bitwise OR)
+
+ef (optional):: Match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns the subject string with the substitutions made, the number
+of matches found, and the number of substitutions made.
+
+[[lua_fn_GRegex_split_subject__sep___cf____ef__]]
+
+===== GRegex.split(subject, sep, [cf], [ef])
+
+Splits a subject string subj into parts (sections). The sep parameter is a
+regular expression pattern representing separators between the sections. The
+function is intended for use in the generic for Lua construct. The function
+returns an iterator for repeated matching of the pattern sep in the string subj,
+subject to flags cf and ef. The sep pattern can be a string or a GRegex object
+previously compiled with GRegex.new(). Unlike gmatch, there will always be at
+least one iteration pass, even if there are no matches in the subject.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+sep:: A Perl-compatible regular expression pattern string or GRegex object
+
+cf (optional):: compilation flags (bitwise OR)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+The iterator function is called by Lua. On every iteration, it returns a subject
+section (can be an empty string), followed by all captures in the order they
+appear in the sep pattern (or the entire match if the sep pattern specified no
+captures). If there is no match (this can occur only in the last iteration),
+then nothing is returned after the subject section. The iteration will continue
+till the end of the subject.
+
+[[lua_fn_GRegex_version__]]
+
+===== GRegex.version()
+
+Returns a returns a string containing the version of the used library.
+
+Since: 1.11.3
+
+[float]
+===== Returns
+
+The version string
+
+[[lua_fn_gregex_match_subject___init____ef__]]
+
+===== gregex:match(subject, [init], [ef])
+
+Searches for the first match of the regexp pattern in the string subject,
+starting from offset init, subject to flags ef.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+init (optional):: start offset in the subject (can be negative)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns all substring matches (``captures''), in the order they appear
+in the pattern. false is returned for sub-patterns that did not participate in
+the match. If the pattern specified no captures then the whole matched substring
+is returned. nil is returned if the pattern did not match.
+
+[[lua_fn_gregex_find_subject___init____ef__]]
+
+===== gregex:find(subject, [init], [ef])
+
+Searches for the first match of the regexp pattern in the string subject,
+starting from offset init, subject to flags ef.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+init (optional):: start offset in the subject (can be negative)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns the start point of the match (a number), the end point of
+the match (a number), and all substring matches ("captures"), in the order they
+appear in the pattern. false is returned for sub-patterns that did not
+participate in the match. On failure, returns nil.
+
+[[lua_fn_gregex_exec_subject___init____ef__]]
+
+===== gregex:exec(subject, [init], [ef])
+
+Searches for the first match of the compiled GRegex object in the string
+subject, starting from offset init, subject to the execution match flags ef.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+init (optional):: start offset in the subject (can be negative)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns the start point of the first match (a number), the end point
+of the first match (a number), and the offsets of substring matches (``captures''
+in Lua terminology) are returned as a third result, in a table. This table
+contains false in the positions where the corresponding sub-pattern did not
+participate in the match. On failure, returns nil. Example: If the whole match
+is at offsets 10,20 and substring matches are at offsets 12,14 and 16,19 then
+the function returns the following: 10, 20, { 12,14,16,19 }.
+
+[[lua_fn_gregex_dfa_exec_subject___init____ef__]]
+
+===== gregex:dfa_exec(subject, [init], [ef])
+
+Matches a compiled regular expression GRegex object against a given subject
+string subj, using a DFA matching algorithm.
+
+Since: 1.11.3
+
+[float]
+===== Arguments
+
+subject:: Subject string to search
+
+init (optional):: start offset in the subject (can be negative)
+
+ef (optional):: match execution flags (bitwise OR)
+
+[float]
+===== Returns
+
+On success, returns the start point of the matches found (a number), a table
+containing the end points of the matches found, the longer matches first, and
+the number of matches found as the third return value. On failure, returns nil.
+Example: If there are 3 matches found starting at offset 10 and ending at
+offsets 15, 20 and 25 then the function returns the following: 10, { 25,20,15 },
+3
+
+[[lua_fn_gregex___tostring__]]
+
+===== gregex:__tostring()
+
+Returns a string containing debug information about the GRegex object.
+
+Since: 1.11.3
+
+[float]
+===== Returns
+
+The debug string
diff --git a/docbook/wsluarm.xml b/docbook/wsluarm.xml
deleted file mode 100644
index 6e6c58b5f4..0000000000
--- a/docbook/wsluarm.xml
+++ /dev/null
@@ -1,713 +0,0 @@
-<chapter id="wsluarm">
- <title>Lua Support in Wireshark</title>
- <section id="wsluarm_intro">
- <title>Introduction</title>
- <para>
- Wireshark has an embedded Lua interpreter. Lua is a powerful light-weight
- programming language designed for extending applications. Lua is designed
- and implemented by a team at PUC-Rio, the Pontifical Catholic University
- of Rio de Janeiro in Brazil. Lua was born and raised at Tecgraf, the
- Computer Graphics Technology Group of PUC-Rio, and is now housed at
- <ulink url="http://www.lua.org">Lua.org</ulink>.
- Both Tecgraf and Lua.org are laboratories of the Department of Computer Science.
- </para>
- <para>
- In Wireshark Lua can be used to write dissectors, taps, and capture file readers and writers.
- </para>
- <para>
- Wireshark's Lua interpreter starts by loading <command>init.lua</command> that
- is located in the global configuration directory of Wireshark.
- Lua is enabled by default. To disable Lua the line variable <command>disable_lua</command>
- should be set to <command>true</command> in <command>init.lua</command>.
- </para>
- <para>
- After loading <command>init.lua</command> from the data directory if Lua is enabled
- Wireshark will try to load a file named <command>init.lua</command> in the user's
- directory.
- </para>
- <para>
- Wireshark will also load all files with <command>.lua</command> suffix from both the
- global and the personal plugins directory.
- </para>
- <para>
- The command line option <command>-X lua_script:&lt;file.lua&gt;</command> can be used to
- load Lua scripts as well.
- </para>
- <para>
- The Lua code will be executed once after all the protocol dissectors have being initialized
- and before reading any file.
- </para>
- </section>
- <section id="wslua_dissector_example">
- <title>Example of Dissector written in Lua</title>
-<programlisting>local p_multi = Proto("multi","MultiProto");
-
-local vs_protos = {
- [2] = "mtp2",
- [3] = "mtp3",
- [4] = "alcap",
- [5] = "h248",
- [6] = "ranap",
- [7] = "rnsap",
- [8] = "nbap"
-}
-
-local f_proto = ProtoField.uint8("multi.protocol","Protocol",base.DEC,vs_protos)
-local f_dir = ProtoField.uint8("multi.direction","Direction",base.DEC,{ [1] = "incoming", [0] = "outgoing"})
-local f_text = ProtoField.string("multi.text","Text")
-
-p_multi.fields = { f_proto, f_dir, f_text }
-
-local data_dis = Dissector.get("data")
-
-local protos = {
- [2] = Dissector.get("mtp2"),
- [3] = Dissector.get("mtp3"),
- [4] = Dissector.get("alcap"),
- [5] = Dissector.get("h248"),
- [6] = Dissector.get("ranap"),
- [7] = Dissector.get("rnsap"),
- [8] = Dissector.get("nbap"),
- [9] = Dissector.get("rrc"),
- [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
- [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
-}
-
-function p_multi.dissector(buf,pkt,root)
-
- local t = root:add(p_multi,buf(0,2))
- t:add(f_proto,buf(0,1))
- t:add(f_dir,buf(1,1))
-
- local proto_id = buf(0,1):uint()
-
- local dissector = protos[proto_id]
-
- if dissector ~= nil then
- dissector:call(buf(2):tvb(),pkt,root)
- elseif proto_id &lt; 2 then
- t:add(f_text,buf(2))
- -- pkt.cols.info:set(buf(2,buf:len() - 3):string())
- else
- data_dis:call(buf(2):tvb(),pkt,root)
- end
-
-end
-
-local wtap_encap_table = DissectorTable.get("wtap_encap")
-local udp_encap_table = DissectorTable.get("udp.port")
-
-wtap_encap_table:add(wtap.USER15,p_multi)
-wtap_encap_table:add(wtap.USER12,p_multi)
-udp_encap_table:add(7555,p_multi)</programlisting>
- </section>
- <section id="wslua_tap_example">
- <title>Example of Listener written in Lua</title>
- <programlisting>-- This program will register a menu that will open a window with a count of occurrences
--- of every address in the capture
-
-local function menuable_tap()
- -- Declare the window we will use
- local tw = TextWindow.new("Address Counter")
-
- -- This will contain a hash of counters of appearances of a certain address
- local ips = {}
-
- -- this is our tap
- local tap = Listener.new();
-
- function remove()
- -- this way we remove the listener that otherwise will remain running indefinitely
- tap:remove();
- end
-
- -- we tell the window to call the remove() function when closed
- tw:set_atclose(remove)
-
- -- this function will be called once for each packet
- function tap.packet(pinfo,tvb)
- local src = ips[tostring(pinfo.src)] or 0
- local dst = ips[tostring(pinfo.dst)] or 0
-
- ips[tostring(pinfo.src)] = src + 1
- ips[tostring(pinfo.dst)] = dst + 1
- end
-
- -- this function will be called once every few seconds to update our window
- function tap.draw(t)
- tw:clear()
- for ip,num in pairs(ips) do
- tw:append(ip .. "\t" .. num .. "\n");
- end
- end
-
- -- this function will be called whenever a reset is needed
- -- e.g. when reloading the capture file
- function tap.reset()
- tw:clear()
- ips = {}
- end
-end
-
--- using this function we register our function
--- to be called when the user selects the Tools->Test->Packets menu
-register_menu("Test/Packets", menuable_tap, MENU_TOOLS_UNSORTED)</programlisting>
- </section>
- <section id="wsluarm_modules">
- <title>Wireshark's Lua API Reference Manual</title>
- <para>
- This Part of the User Guide describes the Wireshark specific functions in the embedded Lua.
- </para>
- </section>
- &WsLuaDumper;
- &WsLuaField;
- &WsLuaGui;
- &WsLuaListener;
- &WsLuaPinfo;
- &WsLuaProto;
- &WsLuaTree;
- &WsLuaTvb;
- &WsLuaFile;
- &WsLuaDir;
- &WsLuaUtility;
- &WsLuaInt64;
- &WsLuaStruct;
-
- <section id='lua_module_GRegex'>
- <title> GLib Regular Expressions </title>
- <para>
- Lua has its own native 'pattern' syntax in the string library, but sometimes a real
- regex engine is more useful. Wireshark comes with GLib's Regex implementation, which
- itself is based on Perl Compatible Regular Expressions (PCRE). This engine is exposed
- into Wireshark's Lua engine through the well-known Lrexlib library, following the
- same syntax and semantics as the Lrexlib PCRE implementation, with a few differences as follows:
- <itemizedlist>
- <listitem>
- <para> There is no support for using custom locale/chartables </para>
- </listitem>
- <listitem>
- <para> dfa_exec() doesn't take 'ovecsize' nor 'wscount' arguments </para>
- </listitem>
- <listitem>
- <para> dfa_exec() returns boolean true for partial match, without subcapture info </para>
- </listitem>
- <listitem>
- <para> Named subgroups do not return name-keyed entries in the return
- table (i.e., in match/tfind/exec)
- </para>
- </listitem>
- <listitem>
- <para> The 'flags()' function still works, returning all flags, but two new
- functions 'compile_flags()' and 'match_flags()' return just their respective
- flags, since GLib has a different and smaller set of such flags, for
- regex compile vs. match functions
- </para>
- </listitem>
- <listitem>
- <para>
- Using some assertions and POSIX character classes against strings with non-ASCII characters
- might match high-order characters, because glib always sets PCRE_UCP
- even if G_REGEX_RAW is set. For example, '[:alpha;]' matches certain
- non-ASCII bytes. The following assertions have this issue: '\b', '\B', '\s', '\S', '\w', '\W'.
- The following character classes have this issue: [:alpha:], [:alnum:], [:lower:], [:upper:],
- [:space:], [:word:], and [:graph:].
- </para>
- </listitem>
- <listitem>
- <para>
- The compile flag G_REGEX_RAW is always set/used, even if you didn't specify it. This is because
- GLib runs PCRE in UTF-8 mode by default, whereas Lua strings are not UTF-aware.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- Since: 1.11.3
- </para>
- <para>
- This page is based on the full documentation for Lrexlib at
- <ulink url="http://rrthomas.github.io/lrexlib/manual.html">http://rrthomas.github.io/lrexlib/manual.html</ulink>
- </para>
- <para>
- The GLib Regular expression syntax (which is essentially PCRE syntax) can be found at
- <ulink url="https://developer.gnome.org/glib/2.38/glib-regex-syntax.html">https://developer.gnome.org/glib/2.38/glib-regex-syntax.html</ulink>
- </para>
- <section id='lua_class_GRegex'><title>GRegex</title>
- <para>
- GLib Regular Expressions based on PCRE.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section id='lua_class_GRegex_notes'><title>Notes</title>
- <para>
- All functions that take a regular expression pattern as an argument will
- generate an error if that pattern is found invalid by the regex library.
- </para>
- <para>
- All functions that take a string-type regex argument accept a compiled regex
- too. In this case, the compile flags argument is ignored (should be either supplied as nils or omitted).
- </para>
- <para>
- The capture flag argument 'cf' may also be supplied as a string, whose characters stand for compilation flags.
- Combinations of the following characters (case sensitive) are supported:
- <itemizedlist>
- <listitem>
- <para> '<command>i</command>' = G_REGEX_CASELESS - Letters in the pattern match both upper- and lowercase letters.
- This option can be changed within a pattern by a "(?i)" option setting. </para>
- </listitem>
- <listitem>
- <para> '<command>m</command>' = G_REGEX_MULTILINE - By default, GRegex treats the strings as consisting of a single
- line of characters (even if it actually contains newlines). The "start of line"
- metacharacter ("^") matches only at the start of the string, while the "end of line"
- metacharacter ("$") matches only at the end of the string, or before a terminating newline
- (unless G_REGEX_DOLLAR_ENDONLY is set). When G_REGEX_MULTILINE is set, the "start of line"
- and "end of line" constructs match immediately following or immediately before any newline
- in the string, respectively, as well as at the very start and end. This can be changed
- within a pattern by a "(?m)" option setting.</para>
- </listitem>
- <listitem>
- <para> '<command>s</command>' = G_REGEX_DOTALL - A dot metacharater (".") in the pattern matches all characters,
- including newlines. Without it, newlines are excluded. This option can be changed within
- a pattern by a ("?s") option setting. </para>
- </listitem>
- <listitem>
- <para> '<command>x</command>' = G_REGEX_EXTENDED - Whitespace data characters in the pattern are totally ignored
- except when escaped or inside a character class. Whitespace does not include the VT
- character (code 11). In addition, characters between an unescaped "#" outside a character
- class and the next newline character, inclusive, are also ignored. This can be changed
- within a pattern by a "(?x)" option setting. </para>
- </listitem>
- <listitem>
- <para> '<command>U</command>' = G_REGEX_UNGREEDY - Inverts the "greediness" of the quantifiers so that they are not
- greedy by default, but become greedy if followed by "?". It can also be set by a "(?U)"
- option setting within the pattern. </para>
- </listitem>
- </itemizedlist>
- </para>
- </section><!-- end of notes -->
- <section id='lua_fn_GRegex_new_pattern_'>
- <title>GRegex.new(pattern)</title>
- <para>Compiles regular expression pattern into a regular expression object whose
- internal representation is corresponding to the library used. The returned
- result then can be used by the methods, e.g. match, exec, etc. Regular
- expression objects are automatically garbage collected.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>pattern</term>
- <listitem><para> A Perl-compatible regular expression pattern string </para></listitem>
- </varlistentry> <!-- function_arg_footer: pattern -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para> The compiled regular expression (a userdata object) </para>
- </section> <!-- function_returns_footer: GRegex.new -->
- <section><title>Errors</title>
- <itemizedlist>
- <listitem><para>A malformed pattern generates a Lua error </para></listitem>
- </itemizedlist>
- </section> <!-- function_error_footer: GRegex.new -->
- </section> <!-- function_footer: GRegex.new -->
- <section id='lua_fn_GRegex_flags__table__'>
- <title>GRegex.flags([table])</title>
- <para>Returns a table containing the numeric values of the constants defined by
- the regex library, with the keys being the (string) names of the
- constants. If the table argument is supplied then it is used as the
- output table, otherwise a new table is created. The constants contained
- in the returned table can then be used in most functions and methods where
- compilation flags or execution flags can be specified. They can also be
- used for comparing with return codes of some functions and methods for
- determining the reason of failure.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>table (optional)</term>
- <listitem><para> A table for placing results into </para></listitem>
- </varlistentry> <!-- function_arg_footer: table (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>A table filled with the results.</para>
- </section> <!-- function_returns_footer: GRegex.flags -->
- </section> <!-- function_footer: GRegex.flags -->
- <section id='lua_fn_GRegex_compile_flags__table__'>
- <title>GRegex.compile_flags([table])</title>
- <para>Returns a table containing the numeric values of the constants defined by
- the regex library for compile flags, with the keys being the (string) names of the
- constants. If the table argument is supplied then it is used as the
- output table, otherwise a new table is created.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>table (optional)</term>
- <listitem><para> A table for placing results into </para></listitem>
- </varlistentry> <!-- function_arg_footer: table (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>A table filled with the results.</para>
- </section> <!-- function_returns_footer: GRegex.compile_flags -->
- </section> <!-- function_footer: GRegex.compile_flags -->
- <section id='lua_fn_GRegex_match_flags__table__'>
- <title>GRegex.match_flags([table])</title>
- <para>Returns a table containing the numeric values of the constants defined by
- the regex library for match flags, with the keys being the (string) names of the
- constants. If the table argument is supplied then it is used as the
- output table, otherwise a new table is created.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>table (optional)</term>
- <listitem><para> A table for placing results into </para></listitem>
- </varlistentry> <!-- function_arg_footer: table (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>A table filled with the results.</para>
- </section> <!-- function_returns_footer: GRegex.match_flags -->
- </section> <!-- function_footer: GRegex.match_flags -->
- <section id='lua_fn_GRegex_match_subject__pattern___init____cf____ef__'>
- <title>GRegex.match(subject, pattern, [init], [cf], [ef])</title>
- <para>Searches for the first match of the regexp pattern in the string subject, starting
- from offset init, subject to flags cf and ef. The pattern is compiled each time this is
- called, unlike the class method 'match' function.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>pattern</term>
- <listitem><para> A Perl-compatible regular expression pattern string or GRegex object </para></listitem>
- </varlistentry> <!-- function_arg_footer: pattern -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>cf (optional)</term>
- <listitem><para> compilation flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: cf (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns all substring matches ("captures"), in the order they appear in the pattern.
- false is returned for sub-patterns that did not participate in the match. If
- the pattern specified no captures then the whole matched substring is
- returned. On failure, returns nil.
- </para>
- </section> <!-- function_returns_footer: GRegex.match -->
- </section> <!-- function_footer: GRegex.match -->
- <section id='lua_fn_GRegex_find_subject__pattern___init____cf____ef__'>
- <title>GRegex.find(subject, pattern, [init], [cf], [ef])</title>
- <para>Searches for the first match of the regexp pattern in the string subject, starting
- from offset init, subject to flags ef. The pattern is compiled each time this is
- called, unlike the class method 'find' function.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>pattern</term>
- <listitem><para> A Perl-compatible regular expression pattern string or GRegex object </para></listitem>
- </varlistentry> <!-- function_arg_footer: pattern -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>cf (optional)</term>
- <listitem><para> compilation flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: cf (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns the start point of the match (a number), the
- end point of the match (a number), and all substring matches ("captures"), in
- the order they appear in the pattern. false is returned for sub-patterns that did
- not participate in the match. On failure, returns nil.
- </para>
- </section> <!-- function_returns_footer: GRegex.find -->
- </section> <!-- function_footer: GRegex.find -->
- <section id='lua_fn_GRegex_gmatch_subject__pattern___init____cf____ef__'>
- <title>GRegex.gmatch(subject, pattern, [init], [cf], [ef])</title>
- <para>Returns an iterator for repeated matching of the pattern patt in the string subj, subject
- to flags cf and ef. The function is intended for use in the generic for Lua construct.
- The pattern can be a string or a GRegex object previously compiled with GRegex.new().
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>pattern</term>
- <listitem><para> A Perl-compatible regular expression pattern string or GRegex object </para></listitem>
- </varlistentry> <!-- function_arg_footer: pattern -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>cf (optional)</term>
- <listitem><para> compilation flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: cf (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>The iterator function is called by Lua. On every iteration (that is, on every
- match), it returns all captures in the order they appear in the pattern (or
- the entire match if the pattern specified no captures). The iteration will
- continue till the subject fails to match.
- </para>
- </section> <!-- function_returns_footer: GRegex.gmatch -->
- </section> <!-- function_footer: GRegex.gmatch -->
- <section id='lua_fn_GRegex_gsub_subject__pattern___repl____max____cf____ef__'>
- <title>GRegex.gsub(subject, pattern, [repl], [max], [cf], [ef])</title>
- <para>Searches for all matches of the pattern in the string subject and replaces them according
- to the parameters repl and max.
- The pattern can be a string or a GRegex object previously compiled with GRegex.new().
- </para>
- <para>
- Since: 1.11.3
- </para>
- <para> For details see:
- <ulink url="http://rrthomas.github.io/lrexlib/manual.html#gsub">http://rrthomas.github.io/lrexlib/manual.html#gsub</ulink>
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>pattern</term>
- <listitem><para> A Perl-compatible regular expression pattern string or GRegex object </para></listitem>
- </varlistentry> <!-- function_arg_footer: pattern -->
- <varlistentry><term>repl (optional)</term>
- <listitem><para> Substitution source string, function, table, false or nil </para></listitem>
- </varlistentry> <!-- function_arg_footer: repl (optional) -->
- <varlistentry><term>max (optional)</term>
- <listitem><para> Maximum number of matches to search for, or control function, or nil </para></listitem>
- </varlistentry> <!-- function_arg_footer: max (optional) -->
- <varlistentry><term>cf (optional)</term>
- <listitem><para> Compilation flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: cf (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> Match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns the subject string with the substitutions made,
- the number of matches found, and the number of substitutions made.
- </para>
- </section> <!-- function_returns_footer: GRegex.gsub -->
- </section> <!-- function_footer: GRegex.gsub -->
- <section id='lua_fn_GRegex_split_subject__sep___cf____ef__'>
- <title>GRegex.split(subject, sep, [cf], [ef])</title>
- <para>Splits a subject string subj into parts (sections). The sep parameter
- is a regular expression pattern representing separators between the sections.
- The function is intended for use in the generic for Lua construct.
- The function returns an iterator for repeated matching of the pattern sep in
- the string subj, subject to flags cf and ef.
- The sep pattern can be a string or a GRegex object previously compiled with GRegex.new().
- Unlike gmatch, there will always be at least one iteration pass, even if there are no matches in the subject.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>sep</term>
- <listitem><para> A Perl-compatible regular expression pattern string or GRegex object </para></listitem>
- </varlistentry> <!-- function_arg_footer: sep -->
- <varlistentry><term>cf (optional)</term>
- <listitem><para> compilation flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: cf (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>The iterator function is called by Lua. On every iteration, it returns
- a subject section (can be an empty string), followed by all captures in the order they
- appear in the sep pattern (or the entire match if the sep pattern specified no captures).
- If there is no match (this can occur only in the last iteration), then nothing is
- returned after the subject section. The iteration will continue till the end of the subject.
- </para>
- </section> <!-- function_returns_footer: GRegex.split -->
- </section> <!-- function_footer: -->
- <section id='lua_fn_GRegex_version__'>
- <title>GRegex.version()</title>
- <para>Returns a returns a string containing the version of the used library.</para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Returns</title>
- <para>The version string</para>
- </section> <!-- function_returns_footer: GRegex.version -->
- </section> <!-- function_footer: GRegex.version -->
- <section id='lua_fn_gregex_match_subject___init____ef__'>
- <title>gregex:match(subject, [init], [ef])</title>
- <para>Searches for the first match of the regexp pattern in the string subject, starting
- from offset init, subject to flags ef.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns all substring matches ("captures"), in the order they appear in the pattern.
- false is returned for sub-patterns that did not participate in the match. If
- the pattern specified no captures then the whole matched substring is
- returned. nil is returned if the pattern did not match.
- </para>
- </section> <!-- function_returns_footer: gregex:match -->
- </section> <!-- function_footer: gregex:match -->
- <section id='lua_fn_gregex_find_subject___init____ef__'>
- <title>gregex:find(subject, [init], [ef])</title>
- <para>Searches for the first match of the regexp pattern in the string subject, starting
- from offset init, subject to flags ef.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns the start point of the match (a number), the
- end point of the match (a number), and all substring matches ("captures"), in
- the order they appear in the pattern. false is returned for sub-patterns that did
- not participate in the match. On failure, returns nil.
- </para>
- </section> <!-- function_returns_footer: gregex:find -->
- </section> <!-- function_footer: -->
- <section id='lua_fn_gregex_exec_subject___init____ef__'>
- <title>gregex:exec(subject, [init], [ef])</title>
- <para>Searches for the first match of the compiled GRegex object in the string subject, starting
- from offset init, subject to the execution match flags ef.
- </para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns the start point of the first match (a number), the
- end point of the first match (a number), and the offsets of substring matches ("captures"
- in Lua terminology) are returned as a third result, in a table. This table contains false
- in the positions where the corresponding sub-pattern did not participate in the match.
- On failure, returns nil.
- Example:
- If the whole match is at offsets 10,20 and substring matches are at offsets 12,14 and 16,19
- then the function returns the following: 10, 20, { 12,14,16,19 }.
- </para>
- </section> <!-- function_returns_footer: gregex:exec -->
- </section> <!-- function_footer: gregex:exec -->
- <section id='lua_fn_gregex_dfa_exec_subject___init____ef__'>
- <title>gregex:dfa_exec(subject, [init], [ef])</title>
- <para>Matches a compiled regular expression GRegex object against a given subject string subj, using a DFA matching algorithm.</para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Arguments</title>
- <variablelist>
- <varlistentry><term>subject</term>
- <listitem><para> Subject string to search </para></listitem>
- </varlistentry> <!-- function_arg_footer: subject -->
- <varlistentry><term>init (optional)</term>
- <listitem><para> start offset in the subject (can be negative) </para></listitem>
- </varlistentry> <!-- function_arg_footer: init (optional) -->
- <varlistentry><term>ef (optional)</term>
- <listitem><para> match execution flags (bitwise OR) </para></listitem>
- </varlistentry> <!-- function_arg_footer: ef (optional) -->
- </variablelist>
- </section>
- <section><title>Returns</title>
- <para>On success, returns the start point of the matches found (a number), a
- table containing the end points of the matches found, the longer matches first, and the
- number of matches found as the third return value.
- On failure, returns nil.
- Example:
- If there are 3 matches found starting at offset 10 and ending at offsets 15, 20 and 25
- then the function returns the following: 10, { 25,20,15 }, 3
- </para>
- </section> <!-- function_returns_footer: gregex:dfa_exec -->
- </section> <!-- function_footer: gregex:dfa_exec -->
- <section id='lua_fn_gregex___tostring__'>
- <title>gregex:__tostring()</title>
- <para>Returns a string containing debug information about the GRegex object.</para>
- <para>
- Since: 1.11.3
- </para>
- <section><title>Returns</title>
- <para>The debug string</para>
- </section> <!-- function_returns_footer: gregex:__tostring -->
- </section> <!-- function_footer: -->
- </section> <!-- class_footer: GRegex -->
- </section>
-
-
-</chapter>
diff --git a/docbook/wsug_src/WSUG_chapter_use.asciidoc b/docbook/wsug_src/WSUG_chapter_use.asciidoc
index 5faed769d3..d9a0cc50a1 100644
--- a/docbook/wsug_src/WSUG_chapter_use.asciidoc
+++ b/docbook/wsug_src/WSUG_chapter_use.asciidoc
@@ -512,7 +512,7 @@ image::wsug_graphics/ws-tools-menu.png[]
It is assumed that the rules will be applied to an outside interface.
-|menu:Lua[]|| These options allow you to work with the Lua interpreter optionally build into Wireshark, see <<wsluarm_intro>>.
+|menu:Lua[]|| These options allow you to work with the Lua interpreter optionally build into Wireshark. See the ``Lua Support in Wireshark'' in the Wireshark Developer's Guide.
|===============
[[ChUseInternalsMenuSection]]