From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Markus Heiser <markus.heiser@darmarit.de>
Cc: Jani Nikula <jani.nikula@intel.com>,
Jonathan Corbet <corbet@lwn.net>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
hverkuil@xs4all.nl, daniel.vetter@ffwll.ch, airlied@gmail.com,
grant.likely@secretlab.ca, rdunlap@infradead.org,
keithp@keithp.com
Subject: Re: [PATCH] doc: flat-table directive
Date: Wed, 6 Jul 2016 19:58:35 -0300 [thread overview]
Message-ID: <20160706195835.1fdc7e31@recife.lan> (raw)
In-Reply-To: <AB1BFD5C-6FAB-494C-874E-9CC35911C252@darmarit.de>
Em Fri, 1 Jul 2016 16:07:47 +0200
Markus Heiser <markus.heiser@darmarit.de> escreveu:
> Am 01.07.2016 um 15:09 schrieb Jani Nikula <jani.nikula@intel.com>:
>
> > On Fri, 01 Jul 2016, Markus Heiser <markus.heiser@darmarit.de> wrote:
> >> In Sphinx, the code-block directive is a literal block, no refs or markup
> >> will be interpreted. This is different to what you know from DocBook.
> >> I will look for a solution, that matches your requirement.
> >
> > Parsed literal block solves the problem, but brings other problems like
> > requiring escaping for a lot of stuff. And you lose syntax
> > highlighting. It would be great to have a middle ground, like a
> > "semi-parsed code block" where the references are parsed but nothing
> > else.
> >
> > http://docutils.sourceforge.net/docs/ref/rst/directives.html#parsed-literal-block
OK, using parsed literal indeed seems to be a solution. The script below
should be doing what's needed to auto-generate the *.h.rst files.
It should be replicating the logic that is done at the media Makefile,
on a cleaner way. It also allows ignoring some symbols. We do that when
we deprecate APIs: they're kept at the header files, but their
descriptions are removed/replaced at the media book.
This is not yet the final version. I need to do some adjustments, as
only the ioctl refs match the ones on media, but it shouldn't be hard to
fix.
Thanks,
Mauro
#!/usr/bin/perl
use strict;
# change to 1 to generate some debug prints
my $debug = 1;
if (scalar @ARGV < 2 || scalar @ARGV > 3) {
die "Usage:\n\t$0 <file in> <file out> [<exceptions file>]\n";
}
my ($file_in, $file_out, $file_exceptions) = @ARGV;
my $data;
my @ioctls;
my @defines;
my @typedefs;
my @enums;
my @enum_symbols;
my @structs;
#
# read the file and get identifiers
#
my $is_enum = 0;
open IN, $file_in or die "Can't open $file_in";
while (<IN>) {
$data .= $_;
if ($is_enum && m/^\s*([^\s\}]+)\s*[\,=]?/) {
my $s = $1;
push @enum_symbols, $1;
$is_enum = 0 if ($is_enum && m/\}/);
next;
}
$is_enum = 0 if ($is_enum && m/\}/);
if (m/^\s*#\s*define\s+([A-Z]\S+)\s+_IO/) {
push @ioctls, $1;
next;
}
if (m/^\s*#\s*define\s+([A-Z]\S+)\s+/) {
push @defines, $1;
next
}
if (m/^\s*typedef\s+.*\s+(\w\S+);/) {
push @typedefs, $1;
next;
}
if (m/^\s*enum\s+(\S+)\s+\{/ || m/^\s*enum\s+(\S+)$/) {
my $v = $1;
push @enums, $v unless grep{$_ eq $v} @enums;
$is_enum = $1;
next;
}
if (m/^\s*struct\s+(\S+)\s+\{/ || m/^\s*struct\s+(\S+)$/) {
my $v = $1;
push @structs, $v unless grep{$_ eq $v} @structs;
next;
}
}
close IN;
#
# Handle multi-line typedefs
#
my @matches = $data =~ m/typedef\s+struct\s+\S+\s*\{[^\}]+\}\s*(\S+)\s*\;/g;
foreach my $m (@matches) {
push @typedefs, $m unless grep{$_ eq $m} @typedefs;
next;
}
#
# Handle exceptions, if any
#
if ($file_exceptions) {
open IN, $file_exceptions or die "Can't read $file_exceptions";
while (<IN>) {
next if (m/^\s*$/ || m/^\s*#/);
if (m/^ignore\s+ioctl\s+(\S+)/) {
@ioctls = grep { $_ != $1 } @ioctls;
next;
}
if (m/^ignore\s+define\s+(\S+)/) {
@defines = grep { $_ != $1 } @defines;
next;
}
if (m/^ignore\s+typedef\s+(\S+)/) {
@typedefs = grep { $_ != $1 } @typedefs;
next;
}
if (m/^ignore\s+enum\s+(\S+)/) {
@enums = grep { $_ != $1 } @enums;
next;
}
if (m/^ignore\s+struct\s+(\S+)/) {
@structs = grep { $_ != $1 } @structs;
next;
}
die "Can't parse $file_exceptions";
}
}
print "ioctls: @ioctls\n" if ($debug && @ioctls);
print "defines: @defines\n" if ($debug && @defines);
print "typedefs: @typedefs\n" if ($debug && @typedefs);
print "enums: @enums\n" if ($debug && @enums);
print "structs: @structs\n" if ($debug && @structs);
#
# Add escape codes for special characters
#
$data =~ s,([\_\`\*\<\>\&\\\\:\/]),\\$1,g;
#
# Align block
#
$data = " " . $data;
$data =~ s/\n/\n /g;
$data =~ s/\n\s+$/\n/g;
#
# Add references
#
foreach my $r (@ioctls, @defines, @enum_symbols) {
my $n = $r;
$n =~ tr/A-Z/a-z/;
my $s = ":ref:`$r <$n>`";
$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
print "$r -> $s\n" if ($debug);
$data =~ s/([\s])($r)([\s])/$1$s$3/g;
}
foreach my $r (@enums) {
my $n = $r;
$n =~ tr/A-Z_/a-z-/;
my $s = ":ref:`enum $r <$n>`";
$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
print "$r -> $s\n" if ($debug);
$data =~ s/enum\s+($r)([\s])/$s$2/g;
}
foreach my $r (@structs) {
my $n = $r;
$n =~ tr/A-Z_/a-z-/;
my $s = ":ref:`struct $r <$n>`";
$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
print "$r -> $s\n" if ($debug);
$data =~ s/struct\s+($r)([\s])/$s$2/g;
}
## FIXME
foreach my $r (@typedefs) {
my $n = $r;
$n =~ tr/A-Z_/a-z-/;
my $s = ":ref:`$r <$n>`";
$r =~ s,([\_\`\*\<\>\&\\\\:\/]),\\\\$1,g;
print "$r -> $s\n" if ($debug);
$data =~ s/(typedef\s+^\n+\s+)($r)(\s*;)/$1$s$3/g;
$data =~ s/(typedef\s+struct\s+\S+\s*\{[^\}]+\}\s*)($r)(\s*;)/$1$s$3/g;
}
#
# Generate output file
#
my $title = $file_in;
$title =~ s,.*/,,;
open OUT, "> $file_out" or die "Can't open $file_out";
print OUT ".. -*- coding: utf-8; mode: rst -*-\n\n";
print OUT "$title\n";
print OUT "=" x length($title);
print OUT "\n\n.. parsed-literal::\n\n";
print OUT $data;
close OUT;
next prev parent reply other threads:[~2016-07-06 22:58 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-30 12:00 [PATCH] doc: flat-table directive Markus Heiser
2016-06-30 12:00 ` [PATCH] doc-rst: flat-table directive - initial implementation Markus Heiser
2016-06-30 19:05 ` [PATCH] doc: flat-table directive Jonathan Corbet
2016-06-30 19:31 ` Mauro Carvalho Chehab
2016-06-30 19:44 ` Mauro Carvalho Chehab
2016-07-01 8:44 ` Markus Heiser
2016-07-01 9:38 ` Mauro Carvalho Chehab
2016-07-01 10:44 ` Jani Nikula
2016-07-01 11:12 ` Markus Heiser
2016-07-01 11:56 ` Jani Nikula
2016-07-01 12:03 ` [docs-next PATCH] Documentation: add cleanmediadocs to the documentation targets Jani Nikula
2016-07-01 12:24 ` [docs-next PATCH] Documentation/sphinx: skip build if user requested specific DOCBOOKS Jani Nikula
2016-07-01 12:31 ` Markus Heiser
2016-07-01 13:15 ` Mauro Carvalho Chehab
2016-07-01 13:31 ` Jani Nikula
2016-07-01 15:09 ` Mauro Carvalho Chehab
2016-07-01 12:04 ` [PATCH] doc: flat-table directive Markus Heiser
2016-07-01 12:26 ` Jani Nikula
2016-07-01 13:06 ` Mauro Carvalho Chehab
2016-07-01 12:52 ` Mauro Carvalho Chehab
2016-07-01 12:58 ` Jonathan Corbet
2016-07-01 14:45 ` Markus Heiser
2016-07-01 17:24 ` Jani Nikula
2016-07-01 18:17 ` Mauro Carvalho Chehab
2016-07-01 18:47 ` Jani Nikula
2016-07-01 12:18 ` Markus Heiser
2016-07-01 12:59 ` Mauro Carvalho Chehab
2016-07-01 13:09 ` Jani Nikula
2016-07-01 14:07 ` Markus Heiser
2016-07-01 15:00 ` Mauro Carvalho Chehab
2016-07-01 15:01 ` Mauro Carvalho Chehab
2016-07-06 22:58 ` Mauro Carvalho Chehab [this message]
2016-07-01 12:08 ` Jani Nikula
2016-07-01 6:35 ` Markus Heiser
2016-07-01 18:25 ` Captions numbering support Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160706195835.1fdc7e31@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=daniel.vetter@ffwll.ch \
--cc=grant.likely@secretlab.ca \
--cc=hverkuil@xs4all.nl \
--cc=jani.nikula@intel.com \
--cc=keithp@keithp.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=markus.heiser@darmarit.de \
--cc=rdunlap@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.