├── tool ├── rfc2629xslt.zip ├── xml2rfc-win.png ├── contrib │ ├── rob.austein │ │ ├── concat.pl │ │ └── fast-sync.sh │ ├── fred.baker │ │ └── new-draft.xml │ ├── alex.rousskov │ │ └── xml2rfcpp.pl │ └── pekka.savola │ │ ├── template.xml │ │ ├── template0.xml │ │ └── template1b.xml ├── sample.xml ├── LICENSE ├── test.xml ├── test.txt ├── rfc2629-other.ent ├── sample.txt ├── rfc2629.dtd ├── rfc2629.rnc ├── sample.html ├── rfc2629-xhtml.ent ├── rfc2629.xsd └── README.xml ├── README ├── Makefile ├── fix.pl ├── 9p2000.u.xml └── 9p2000.L.xml /tool/rfc2629xslt.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericvh/9p-rfc/HEAD/tool/rfc2629xslt.zip -------------------------------------------------------------------------------- /tool/xml2rfc-win.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ericvh/9p-rfc/HEAD/tool/xml2rfc-win.png -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This is for development of standards-track RFCs for 9P. At the present 2 | 3 RFC drafts are planned: 3 | 4 | 9P1 - documenting classic 9P (TODO) 5 | 9P2000 - current 9P2000 standard 6 | 9P2000.u - unix extensions to 9P2000 7 | 9P2010 - proposed 9P2010 standard with extensions 8 | 9 | People interested in helping write these suckers should look at 10 | RFC2223 (Instructions to RFC Authors) and RFC2360 (Best Current Practices). 11 | -------------------------------------------------------------------------------- /tool/contrib/rob.austein/concat.pl: -------------------------------------------------------------------------------- 1 | # $Id: concat.pl,v 1.3 2004/06/27 18:07:11 sra Exp $ 2 | 3 | # Process all the directives to produce a 4 | # single XML file, to make things easier for the RFC Editor. 5 | 6 | sub concat { 7 | my $fn = shift; 8 | local *FH; 9 | open(FH, $fn) or die("Couldn't open \"$fn\": $!"); 10 | while () { 11 | if (my ($h,$q,$f,$t) = /\A(.*[^ \t])?[ \t]*<\?rfc[ \t]+include=(.)(.+)\2[ \t]*\?>[ \t]*([^ \t].*)?\z/s) { 12 | print($h); 13 | concat($f . '.xml'); 14 | print($t); 15 | } else { 16 | print; 17 | } 18 | } 19 | close(FH) or warn("Couldn't close \"$fn\": $!"); 20 | } 21 | 22 | concat(shift(@ARGV)) 23 | while (@ARGV); 24 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: rfc9p2000.txt rfc9p2000.u.txt rfc9p2000.L.txt 2 | web: rfc9p2000.html rfc9p2000.u.html rfc9p2000.L.html 3 | print: rfc9p2000.pdf rfc9p2000.u.pdf rfc9p2000.L.pdf 4 | 5 | rfc9p2000.txt: 9p2000.xml 6 | tool/xml2rfc.tcl 9p2000.xml rfc9p2000.txt 7 | 8 | rfc9p2000.u.txt: 9p2000.u.xml 9 | tool/xml2rfc.tcl 9p2000.u.xml rfc9p2000.u.txt 10 | 11 | rfc9p2000.L.txt: 9p2000.L.xml 12 | tool/xml2rfc.tcl 9p2000.L.xml rfc9p2000.L.txt 13 | 14 | rfc9p2000.html: 9p2000.xml 15 | tool/xml2rfc.tcl 9p2000.xml rfc9p2000.html 16 | 17 | rfc9p2000.u.html: 9p2000.u.xml 18 | tool/xml2rfc.tcl 9p2000.u.xml rfc9p2000.u.html 19 | 20 | rfc9p2000.L.html: 9p2000.L.xml 21 | tool/xml2rfc.tcl 9p2000.L.xml rfc9p2000.L.html 22 | 23 | rfc9p2000.nr: 9p2000.xml 24 | tool/xml2rfc.tcl 9p2000.xml rfc9p2000.nr 25 | 26 | rfc9p2000.L.nr: 9p2000.L.xml 27 | tool/xml2rfc.tcl 9p2000.L.xml rfc9p2000.L.nr 28 | 29 | rfc9p2000.u.nr: 9p2000.u.xml 30 | tool/xml2rfc.tcl 9p2000.u.xml rfc9p2000.u.nr 31 | 32 | rfc9p2000.pdf: rfc9p2000.nr 33 | groff -Tps rfc9p2000.nr > rfc9p2000.ps 34 | ps2pdf rfc9p2000.ps 35 | 36 | rfc9p2000.u.pdf: rfc9p2000.u.nr 37 | groff -Tps rfc9p2000.u.nr > rfc9p2000.u.ps 38 | ps2pdf rfc9p2000.u.ps 39 | 40 | rfc9p2000.L.pdf: rfc9p2000.L.nr 41 | groff -Tps rfc9p2000.L.nr > rfc9p2000.L.ps 42 | ps2pdf rfc9p2000.L.ps 43 | 44 | clean: 45 | rm -f *.txt *.html *.nr *.ps *.pdf 46 | -------------------------------------------------------------------------------- /tool/sample.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | ]> 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | An Example 22 | 23 | 24 | 25 | 26 | An example. 27 | 28 | 29 | 30 |
31 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 32 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 33 | and "OPTIONAL" in this document are to be interpreted as 34 | described in . 35 |
36 | 37 |
38 | None. 39 |
40 |
41 | 42 | 43 | &rfc2119; 44 | 45 | 46 |
47 | -------------------------------------------------------------------------------- /tool/LICENSE: -------------------------------------------------------------------------------- 1 | (c) 2003 Marshall T. Rose 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions 6 | are met: 7 | 1. Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 2. Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | 3. Neither the name of the author nor the names of the contributors 13 | may be used to endorse or promote products derived from this software 14 | without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUHTORS OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 | SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /tool/contrib/rob.austein/fast-sync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh - 2 | # Fast synchronization of xml2rfc bibliographic database. 3 | # 4 | # Rob Austein 5 | # 6 | # This is the approved "easy" way: 7 | # 8 | #wget -q -P rfc -r -l 1 -A .xml -nd -N 9 | http://xml.resource.org/public/rfc/bibxml/ 10 | #wget -q -P draft -r -l 1 -A .xml -nd -N 11 | http://xml.resource.org/public/rfc/bibxml3/ 12 | # 13 | # ...but it's incredibly painful to watch, because it spends an insane 14 | # amount of time and bandwidth sucking down stuff which it then 15 | # immediately discards. So here's a script that tries to be a little 16 | # smarter about what it does. The implementation below is icky, one 17 | # could no doubt do better with some relatively trivial Perl code, but 18 | # this will do as a proof of concept. 19 | # 20 | # The idea here is to suck down just the basic HTML index, extract the 21 | # URLs of the files we actually want from that, then suck down those 22 | # files. We use wget options which should (in theory) prevent us from 23 | # actually sucking down anything of which we have an up-to-date copy. 24 | # The definition of "interesting files" is all in the sed filter, 25 | # which is looking for filenames of the form reference.*.xml. The sed 26 | # code knows far too much about what a generic Apache directory 27 | # listing looks like after it's been run through "lynx -dump"; if that 28 | # bothers you, feel free to fix it and send me the code. 29 | 30 | fetch_dir() { 31 | prefix="$1" 32 | url="$2" 33 | wget -q -nd -N -P "$prefix" "$url" 34 | echo "" | 35 | cat - "$prefix/index.html" | 36 | lynx -force_html -dump /dev/stdin | 37 | sed -n '/^References/,${; /reference\..*\.xml$/s/^ *[0-9]*\. *//p; }' | 38 | wget -q -nd -N -P "$prefix" -i - 39 | } 40 | 41 | cd $HOME/ietf/xml 42 | fetch_dir rfc http://xml.resource.org/public/rfc/bibxml/ 43 | fetch_dir draft http://xml.resource.org/public/rfc/bibxml3/ 44 | -------------------------------------------------------------------------------- /tool/test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | xml2rfc v1.33 20 | 21 | 22 | Dover Beach Consulting, Inc. 23 | 24 |
25 | 26 | POB 255268 27 | Sacramento CA 95865-5268 28 | US 29 | 30 | 31 | +1 916 483 8878 32 | mrose@dbc.mtview.ca.us 33 |
34 |
35 | 36 | 37 | AT&T Labs - Research 38 |
39 | 40 | 1 River Oaks Place 41 | San Jose 42 | CA 43 | 95134-1918 44 | US 45 | 46 | +1 408 493-8505 47 | fenner@research.att.com 48 |
49 |
50 | 51 | 52 | 53 |
54 | 55 | 56 | Montréal 57 | QC 58 | Canada 59 | 60 | charles.levert@gmail.com 61 |
62 |
63 | 64 | 65 |
66 | 67 | 68 |
69 | This is a paragraph before 70 |
71 | For example, the header field: 72 | Subject: This is a test 73 | Is a nice header field. 74 |
75 | This is another paragraph 76 |
77 |
78 |
79 | -------------------------------------------------------------------------------- /fix.pl: -------------------------------------------------------------------------------- 1 | #! /usr/bin/perl 2 | 3 | # fix.pl 17-Nov-93 Craig Milo Rogers at USC/ISI 4 | # 5 | # The style guide for RFCs calls for pages to be delimited by the 6 | # sequence . 7 | # Unfortunately, NROFF is reluctant to produce output that conforms to 8 | # this convention. This script fixes RFC-style documents by searching 9 | # for the token "FORMFEED[Page", replacing "FORMFEED" with spaces, 10 | # appending a formfeed line, and deleting white space up to the next 11 | # non-white space character. 12 | # 13 | # There is one difference between this script's output and that of 14 | # the "fix.sh" and "pg" programs it replaces: this script includes a 15 | # newline after the formfeed after the last page in a file, whereas the 16 | # earlier programs left a bare formfeed as the last character in the 17 | # file. To obtain bare formfeeds, uncomment the second substitution 18 | # command below. To strip the final formfeed, uncomment the third 19 | # substitution command below. 20 | # 21 | # This script is intended to run as a filter, as in: 22 | # 23 | # nroff -ms input-file | fix.pl > output-file 24 | # 25 | # When porting this script, please observe the following points: 26 | # 27 | # 1) ISI keeps perl in "/local/bin/perl"; your system may keep it 28 | 29 | # elsewhere. 30 | # 2) On systems with a CRLF end-of-line convention, the "\n"s below 31 | # may have to be replaced with "\r\n"s. 32 | 33 | $* = 1; # Enable multiline patterns. 34 | undef $/; # Read whole files in a single 35 | # gulp. 36 | 37 | while (<>) { # Read the entire input file. 38 | s/FORMFEED(\[Page\s+\d+\])\s+/ \1\n\f\n/g; 39 | # Rewrite the end-of-pages. 40 | # s/\f\n$/\f/; # Want bare formfeed at end? 41 | # s/\f\n$//; # Want no formfeed at end? 42 | print; # Print the resultant file. 43 | } 44 | -------------------------------------------------------------------------------- /tool/test.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The README file M. Rose 5 | Dover Beach Consulting, Inc. 6 | B. Fenner 7 | AT&T Labs - Research 8 | C. Levert 9 | February 28, 2008 10 | 11 | 12 | xml2rfc v1.33 13 | 14 | 15 | Table of Contents 16 | 17 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 18 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 3 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Rose, et al. [Page 1] 56 | 57 | README xml2rfc v1.33 February 2008 58 | 59 | 60 | 1. Introduction 61 | 62 | This is a paragraph before 63 | 64 | For example, the header field: 65 | Subject: This is a test 66 | Is a nice header field. 67 | 68 | This is another paragraph 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | Rose, et al. [Page 2] 112 | 113 | README xml2rfc v1.33 February 2008 114 | 115 | 116 | Authors' Addresses 117 | 118 | Marshall T. Rose 119 | Dover Beach Consulting, Inc. 120 | POB 255268 121 | Sacramento, CA 95865-5268 122 | US 123 | 124 | Phone: +1 916 483 8878 125 | Email: mrose@dbc.mtview.ca.us 126 | 127 | 128 | Bill Fenner 129 | AT&T Labs - Research 130 | 1 River Oaks Place 131 | San Jose, CA 95134-1918 132 | US 133 | 134 | Phone: +1 408 493-8505 135 | Email: fenner@research.att.com 136 | 137 | 138 | Charles Levert 139 | Montreal, QC 140 | Canada 141 | 142 | Email: charles.levert@gmail.com 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | Rose, et al. [Page 3] 168 | 169 | -------------------------------------------------------------------------------- /tool/contrib/fred.baker/new-draft.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Full Title 12 | 13 | Cisco Systems 14 |
15 | 16 | 1121 Via Del Rey 17 | Santa Barbara 18 | 93117 19 | California 20 | USA 21 | 22 | +1-408-526-4257 23 | +1-413-473-2403 24 | fred@cisco.com 25 |
26 |
27 | 28 | Routing Area 29 | Interdomain Routing Working Group 30 | 31 | 32 | 33 | 43 |
44 | 45 | 55 | 60 |
61 | 62 |
63 | 64 |
65 |
66 | 67 |
68 |
69 |
70 | This document makes no request of IANA. 71 | Note to RFC Editor: this section may be removed on publication as an RFC. 72 |
73 |
74 | 75 |
76 |
77 | 78 |
79 |
80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
88 | -------------------------------------------------------------------------------- /tool/rfc2629-other.ent: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /tool/contrib/alex.rousskov/xml2rfcpp.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | use strict; 3 | 4 | # 5 | # About: 6 | # This script intends to do the following, 7 | # in the specified order: 8 | # - read standard input 9 | # - find various xml2rfc-include statements 10 | # - substitute those statements with included files 11 | # - find declarations of XML internal entities 12 | # - delete those declarations 13 | # - substitute declared internal entity names with their definitions 14 | # - trim space in artwork element that has trimspace=yes 15 | # - write the result to standard output. 16 | # The only recognized XML internal entity declaration 17 | # pattern is: 18 | # XML_LIBRARY environment variable is used as a path for includes. 19 | # 20 | # Bugs: 21 | # This script is not XML-aware. 22 | # Self-referencing entities or include statements 23 | # result in an infinite loop. 24 | # 25 | # Legal: 26 | # This script has been placed in public domain by 27 | # the good folks at The Measurement Factory. 28 | # 29 | # $Id: xmlpp.pl,v 1.8 2004/05/05 08:12:06 rousskov Exp $ 30 | 31 | # read everything in 32 | my $xml = ''; 33 | while () { 34 | $xml .= $_; 35 | } 36 | 37 | # handle includes 38 | $xml =~ s/<\?rfc\s+include=['"]([^'"]+)['"]\s*\?>/&loadFile($1)/esg; 39 | 40 | # find entity declarations 41 | my %Entities = (); 42 | while ($xml =~ s///s) { 43 | my $name = $1; 44 | my $value = $2; 45 | if (exists $Entities{$name}) { 46 | die("entity $name redefined from ". 47 | "'$Entities{$name}' to '$name' near '$&', stopped"); 48 | } else { 49 | $Entities{$name} = $value; 50 | } 51 | } 52 | 53 | # substitute entities recursively 54 | my $stable; 55 | do { 56 | $stable = 1; 57 | while (my ($name, $value) = each %Entities) { 58 | $stable = 0 if $xml =~ s/\&$name\;/$value/g; 59 | } 60 | } until $stable; 61 | 62 | 63 | # check that all entries are resolved 64 | 65 | my $xml_nocd = $xml; 66 | $xml_nocd =~ s|\Q\E||sg; # remove CDATA 67 | my %reported = map { $_ => 0 } qw(lt amp quot apos rfc); 68 | my @remaining = ($xml_nocd =~ /\&([\w-]+)/g); 69 | my $errCount = 0; 70 | foreach my $e (@remaining) { 71 | next if exists $reported{$e}; 72 | warn(sprintf("error: unresolved or malformed XML entity '%s'\n", $e)); 73 | $reported{$e} = 1; 74 | $errCount++; 75 | } 76 | die(sprintf("error: %d unresolved or malformed XML entity(ies)\n", $errCount)) 77 | if $errCount > 0; 78 | 79 | # handle trimspace 80 | $xml =~ s|(.*?)|&trimSpace($1,$2)|esg; 81 | 82 | print $xml; 83 | 84 | exit 0; 85 | 86 | 87 | 88 | sub loadFile { 89 | my $name = $_[0]; 90 | 91 | my $dirs = $ENV{'XML_LIBRARY'}; 92 | $dirs = '.' unless defined $dirs; 93 | foreach my $dir (split (/:+/, $dirs)) { 94 | my $fname = "$dir/$name"; 95 | next unless -e $fname; 96 | 97 | my $content = ''; 98 | open(IF, "<$fname") or die("cannot read included file: $fname, stopped"); 99 | while () { 100 | $content .= $_; 101 | } 102 | close(IF); 103 | return $content; 104 | } 105 | 106 | if (defined $ENV{'XML_LIBRARY'}) { 107 | warn("search path derived from the XML_LIBRARY environment variable;\n"); 108 | } else { 109 | warn("XML_LIBRARY environment variable is not set;\n"); 110 | } 111 | die("cannot find included '$name' in '$dirs' path, stopped"); 112 | } 113 | 114 | sub trimSpace { 115 | my ($trim, $artwork) = @_; 116 | 117 | my @lines = split(/\n/s, $artwork); 118 | my $indent = ($trim eq 'indent') ? ' ' : ''; 119 | 120 | if (($trim eq 'yes' || $trim eq 'indent') && @lines) { 121 | $lines[0] =~ s/^\s+//g; 122 | $lines[$#lines] =~ s/\s+$//g; 123 | 124 | if (@lines > 2) { 125 | my ($tabs) = ($lines[1] =~ /^(\t*)/); 126 | if (length($tabs) > 0) { 127 | foreach my $line (@lines) { 128 | $line =~ s/^$tabs|\s+$/$indent/; 129 | } 130 | } 131 | } 132 | 133 | shift @lines unless length($lines[0]); 134 | pop @lines unless length($lines[$#lines]); 135 | } 136 | 137 | return '' . join("\n", @lines) . ''; 138 | } 139 | 140 | -------------------------------------------------------------------------------- /tool/contrib/pekka.savola/template.xml: -------------------------------------------------------------------------------- 1 | la 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | An XML2RFC Template 15 | 16 | 17 | 18 | 19 | 20 | CSC - Scientific Computing Ltd. 21 |
22 | 26 | 27 | 28 | Espoo 29 | 33 | Finland 34 | 35 | psavola@funet.fi 36 | 41 |
42 |
43 | 44 | 45 | 46 | Operations & Management 47 | 48 | 49 | Internet Engineering Task Force 50 | 51 | 52 | This is an abstract abstract. Remember, don't add references here. 53 | 54 |
55 | 56 | 57 | 58 | 59 | SEE RFC2629(bis) FOR MORE INFORMATION: 60 | http://xml.resource.org/public/rfc/html/rfc2629.html and "bis": 61 | http://xml.resource.org/authoring/draft-mrose-writing-rfcs.html. Also see 62 | http://xml.resource.org/authoring/README.html for for 'rfc' option 63 | strings. 64 | Please also remember to check out 65 | http://www.ietf.org/ID-Checklist.html for issues to note when writing 66 | drafts. 67 | Remember, you don't need to have any other tools than a 'notepad' 68 | or your favourite editor to write xml2rfc drafts. You can use the web 69 | interface at http://xml.resource.org for processing. The benefit of using 70 | xml editors is mostly catching those missing tags which the processor will 71 | warn you about, but you don't need to worry about the editors when getting 72 | started. 73 | This template is not meant to be a conclusive list of everything, 74 | but summarize the often-needed basic features to get one started. 75 | 76 | 77 | 78 | 79 |
80 | Now you can have a bit more lengthier text here. 81 | Let's refer to a couple of documents: and L2TP. For text generation, these look equivalent, 84 | but the latter looks a bit neater in the HTML representation. 85 | You might also add a note about the usage of RFC2119 keywords here.. 86 | You can cross-reference the sections in a stable manner; . 88 |
89 | 90 | 91 | 92 |
93 | There are multiple list styles: 'symbols', 'letters', 'numbers', 94 | 'hanging', 'format', etc. 95 | 96 | First bullet 97 | Second bullet 98 | 99 | One can draw fancy diagrams as well; remember to ensure that they 100 | don't exceed 72 chars/line. 101 | 102 | 103 |
104 | 105 | 110 | 111 |
112 | Note that including a CDATA you don't need to escape most special characters 113 | you might otherwise have to. 114 |
115 | There can be a lot of subsections. By default 3 levels of 116 | nesting show in ToC but that can be adjusted. 117 |
118 |
119 | 120 | 121 | 122 | 123 | 124 | 125 |
126 | The most common form of xml2rfc parsing erros are those where a 127 | closing tag has been expected to be present before a new kind of tag is 128 | specified. In the example below, Introduction section's last paragraph was 129 | missing the closing t-element. The rest of the error messages can be rather 130 | easily understood as well by reading it carefully and examining the context. 131 | The reason is typically a missing tag somewhere. 132 |
133 | 134 | 140 | 141 |
142 | 143 | =======8<======== 144 | ]]> 145 | 146 |
147 |
148 | 149 | 150 | 151 |
152 | Remember, it's important to acknowledge people who have 153 | contributed to the work. 154 |
155 | 156 | 157 | 158 |
159 | This memo includes no request to IANA. 160 | (It's good to have an explicit note because otherwise IANA wastes 161 | cycles trying to figure out if something is needed..) 162 |
163 | 164 | 165 | 166 |
167 | Remember to consider security from the start.. 168 |
169 |
170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 |
184 | You can add appendices just as regular sections, the only 185 | difference is that they go under "back" element.. 186 |
187 |
188 | 189 |
190 | -------------------------------------------------------------------------------- /tool/contrib/pekka.savola/template0.xml: -------------------------------------------------------------------------------- 1 | la 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | An XML2RFC Template 15 | 16 | 17 | 18 | 19 | 20 | CSC - Scientific Computing Ltd. 21 |
22 | 26 | 27 | 28 | Espoo 29 | 33 | Finland 34 | 35 | psavola@funet.fi 36 | 41 |
42 |
43 | 44 | 45 | 46 | Operations & Management 47 | 48 | 49 | Internet Engineering Task Force 50 | 51 | 52 | This is an abstract abstract. Remember, don't add references here. 53 | 54 |
55 | 56 | 57 | 58 | 59 | SEE RFC2629(bis) FOR MORE INFORMATION: 60 | http://xml.resource.org/public/rfc/html/rfc2629.html and "bis": 61 | http://xml.resource.org/authoring/draft-mrose-writing-rfcs.html. Also see 62 | http://xml.resource.org/authoring/README.html for for 'rfc' option 63 | strings. 64 | Please also remember to check out 65 | http://www.ietf.org/ID-Checklist.html for issues to note when writing 66 | drafts. 67 | Remember, you don't need to have any other tools than a 'notepad' 68 | or your favourite editor to write xml2rfc drafts. You can use the web 69 | interface at http://xml.resource.org for processing. The benefit of using 70 | xml editors is mostly catching those missing tags which the processor will 71 | warn you about, but you don't need to worry about the editors when getting 72 | started. 73 | This template is not meant to be a conclusive list of everything, 74 | but summarize the often-needed basic features to get one started. 75 | 76 | 77 | 78 | 79 |
80 | Now you can have a bit more lengthier text here. 81 | Let's refer to a couple of documents: and L2TP. For text generation, these look equivalent, 84 | but the latter looks a bit neater in the HTML representation. 85 | You might also add a note about the usage of RFC2119 keywords here.. 86 | You can cross-reference the sections in a stable manner; . 88 |
89 | 90 | 91 | 92 |
93 | There are multiple list styles: 'symbols', 'letters', 'numbers', 94 | 'hanging', 'format', etc. 95 | 96 | First bullet 97 | Second bullet 98 | 99 | One can draw fancy diagrams as well; remember to ensure that they 100 | don't exceed 72 chars/line. 101 | 102 | 103 |
104 | 105 | 110 | 111 |
112 | Note that including a CDATA you don't need to escape most special characters 113 | you might otherwise have to. 114 |
115 | There can be a lot of subsections. By default 3 levels of 116 | nesting show in ToC but that can be adjusted. 117 |
118 |
119 | 120 | 121 | 122 | 123 | 124 | 125 |
126 | The most common form of xml2rfc parsing erros are those where a 127 | closing tag has been expected to be present before a new kind of tag is 128 | specified. In the example below, Introduction section's last paragraph was 129 | missing the closing t-element. The rest of the error messages can be rather 130 | easily understood as well by reading it carefully and examining the context. 131 | The reason is typically a missing tag somewhere. 132 |
133 | 134 | 140 | 141 |
142 | 143 | =======8<======== 144 | ]]> 145 | 146 |
147 |
148 | 149 | 150 | 151 |
152 | Remember, it's important to acknowledge people who have 153 | contributed to the work. 154 |
155 | 156 | 157 | 158 |
159 | This memo includes no request to IANA. 160 | (It's good to have an explicit note because otherwise IANA wastes 161 | cycles trying to figure out if something is needed..) 162 |
163 | 164 | 165 | 166 |
167 | Remember to consider security from the start.. 168 |
169 |
170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 |
184 | You can add appendices just as regular sections, the only 185 | difference is that they go under "back" element.. 186 |
187 |
188 | 189 |
190 | -------------------------------------------------------------------------------- /tool/sample.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Network Working Group A. Mous 5 | Internet-Draft February 28, 2008 6 | Intended status: Standards Track 7 | Expires: August 31, 2008 8 | 9 | 10 | An Example 11 | sample.txt 12 | 13 | Status of this Memo 14 | 15 | By submitting this Internet-Draft, each author represents that any 16 | applicable patent or other IPR claims of which he or she is aware 17 | have been or will be disclosed, and any of which he or she becomes 18 | aware will be disclosed, in accordance with Section 6 of BCP 79. 19 | 20 | Internet-Drafts are working documents of the Internet Engineering 21 | Task Force (IETF), its areas, and its working groups. Note that 22 | other groups may also distribute working documents as Internet- 23 | Drafts. 24 | 25 | Internet-Drafts are draft documents valid for a maximum of six months 26 | and may be updated, replaced, or obsoleted by other documents at any 27 | time. It is inappropriate to use Internet-Drafts as reference 28 | material or to cite them other than as "work in progress." 29 | 30 | The list of current Internet-Drafts can be accessed at 31 | http://www.ietf.org/ietf/1id-abstracts.txt. 32 | 33 | The list of Internet-Draft Shadow Directories can be accessed at 34 | http://www.ietf.org/shadow.html. 35 | 36 | This Internet-Draft will expire on August 31, 2008. 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Mous Expires August 31, 2008 [Page 1] 56 | 57 | Internet-Draft An Example February 2008 58 | 59 | 60 | Abstract 61 | 62 | An example. 63 | 64 | 65 | Table of Contents 66 | 67 | 1. Requirements notation . . . . . . . . . . . . . . . . . . . . . 3 68 | 2. Security Considerations . . . . . . . . . . . . . . . . . . . . 4 69 | 3. Normative References . . . . . . . . . . . . . . . . . . . . . 5 70 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 6 71 | Intellectual Property and Copyright Statements . . . . . . . . . . 7 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | Mous Expires August 31, 2008 [Page 2] 112 | 113 | Internet-Draft An Example February 2008 114 | 115 | 116 | 1. Requirements notation 117 | 118 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 119 | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 120 | document are to be interpreted as described in [RFC2119]. 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | Mous Expires August 31, 2008 [Page 3] 168 | 169 | Internet-Draft An Example February 2008 170 | 171 | 172 | 2. Security Considerations 173 | 174 | None. 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | Mous Expires August 31, 2008 [Page 4] 224 | 225 | Internet-Draft An Example February 2008 226 | 227 | 228 | 3. Normative References 229 | 230 | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 231 | Requirement Levels", BCP 14, RFC 2119, March 1997. 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | Mous Expires August 31, 2008 [Page 5] 280 | 281 | Internet-Draft An Example February 2008 282 | 283 | 284 | Author's Address 285 | 286 | Anon Y. Mous 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | Mous Expires August 31, 2008 [Page 6] 336 | 337 | Internet-Draft An Example February 2008 338 | 339 | 340 | Full Copyright Statement 341 | 342 | Copyright (C) The IETF Trust (2008). 343 | 344 | This document is subject to the rights, licenses and restrictions 345 | contained in BCP 78, and except as set forth therein, the authors 346 | retain all their rights. 347 | 348 | This document and the information contained herein are provided on an 349 | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 350 | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND 351 | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS 352 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF 353 | THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 354 | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 355 | 356 | 357 | Intellectual Property 358 | 359 | The IETF takes no position regarding the validity or scope of any 360 | Intellectual Property Rights or other rights that might be claimed to 361 | pertain to the implementation or use of the technology described in 362 | this document or the extent to which any license under such rights 363 | might or might not be available; nor does it represent that it has 364 | made any independent effort to identify any such rights. Information 365 | on the procedures with respect to rights in RFC documents can be 366 | found in BCP 78 and BCP 79. 367 | 368 | Copies of IPR disclosures made to the IETF Secretariat and any 369 | assurances of licenses to be made available, or the result of an 370 | attempt made to obtain a general license or permission for the use of 371 | such proprietary rights by implementers or users of this 372 | specification can be obtained from the IETF on-line IPR repository at 373 | http://www.ietf.org/ipr. 374 | 375 | The IETF invites any interested party to bring to its attention any 376 | copyrights, patents or patent applications, or other proprietary 377 | rights that may cover technology that may be required to implement 378 | this standard. Please address the information to the IETF at 379 | ietf-ipr@ietf.org. 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | Mous Expires August 31, 2008 [Page 7] 392 | 393 | -------------------------------------------------------------------------------- /tool/rfc2629.dtd: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 17 | 18 | 19 | 34 | 35 | 36 | 39 | 40 | 41 | 44 | %rfc2629-xhtml; 45 | 46 | 49 | %rfc2629-other; 50 | 51 | 52 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 92 | 93 | 94 | 100 | 101 | 117 | 118 | 119 | 122 | 123 | 124 | 126 | 127 | 128 | 129 | 131 | 132 | 133 | 138 | 139 | 141 | 143 | 144 | 145 | 146 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 175 | 176 | 177 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 191 | 192 | 200 | 201 | 202 | 203 | 206 | 207 | 209 | 210 | 214 | 215 | 216 | 221 | 222 | 223 | 225 | 226 | 227 | 231 | 232 | 233 | 236 | 237 | 238 | 241 | 242 | 243 | 245 | 246 | 247 | 256 | 257 | 258 | 259 | 268 | 269 | 270 | 271 | 272 | 278 | 279 | 282 | 283 | 284 | 285 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 296 | 297 | 300 | 301 | 304 | 305 | 309 | 310 | -------------------------------------------------------------------------------- /tool/rfc2629.rnc: -------------------------------------------------------------------------------- 1 | # revised DTD for the RFC document series, draft of 2008-02-01 2 | 3 | # Contents 4 | # 5 | # DTD data types 6 | # 7 | # The top-level 8 | # 9 | # Front matter 10 | # 11 | # The Body 12 | # 13 | # Back matter 14 | 15 | # DTD data types: 16 | # 17 | # entity description 18 | # ====== =============================================== 19 | # NUMBER [0-9]+ 20 | # NUMBERS a comma-separated list of NUMBER 21 | # 22 | # DAY the day of the month, e.g., "1" 23 | # MONTH the month of the year, e.g., "January" 24 | # YEAR a four-digit year, e.g., "1999" 25 | # 26 | # URI e.g., "http://invisible.net/" 27 | # 28 | # ATEXT/CTEXT printable ASCII text (no line-terminators) 29 | # 30 | # TEXT character data 31 | 32 | namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" 33 | 34 | NUMBER = string 35 | NUMBERS = string 36 | DAY = string 37 | MONTH = string 38 | YEAR = string 39 | URI = string 40 | ATEXT = string 41 | CTEXT = text 42 | TEXT = text 43 | # The top-level 44 | 45 | # attributes for the "rfc" element are supplied by the RFC 46 | # editor. when preparing drafts, authors should leave them blank. 47 | # 48 | # the "seriesNo" attribute is used if the category is, e.g., BCP. 49 | rfc = element rfc { attlist.rfc, front, middle, back? } 50 | attlist.rfc &= 51 | attribute number { NUMBER }?, 52 | [ a:defaultValue = "" ] attribute obsoletes { NUMBERS }?, 53 | [ a:defaultValue = "" ] attribute updates { NUMBERS }?, 54 | [ a:defaultValue = "info" ] attribute category { "std" | "bcp" | "info" | "exp" | "historic" }?, 55 | attribute seriesNo { NUMBER }?, 56 | attribute ipr { 57 | "full2026" 58 | | "noDerivativeWorks2026" 59 | | "none" 60 | | "full3667" 61 | | "noModification3667" 62 | | "noDerivatives3667" 63 | | "full3978" 64 | | "noModification3978" 65 | | "noDerivatives3978" 66 | }?, 67 | attribute iprExtract { xsd:IDREF }?, 68 | attribute submissionType { "IETF" | "independent" }?, 69 | attribute docName { ATEXT }?, 70 | [ a:defaultValue = "en" ] attribute xml:lang { ATEXT }? 71 | # Front matter 72 | front = 73 | element front { 74 | attlist.front, 75 | title, 76 | author+, 77 | date, 78 | area*, 79 | workgroup*, 80 | keyword*, 81 | abstract?, 82 | note* 83 | } 84 | attlist.front &= empty 85 | # the "abbrev" attribute is used for headers, etc. 86 | title = element title { attlist.title, CTEXT } 87 | attlist.title &= attribute abbrev { ATEXT }? 88 | author = element author { attlist.author, organization, address? } 89 | attlist.author &= 90 | attribute initials { ATEXT }?, 91 | attribute surname { ATEXT }?, 92 | attribute fullname { ATEXT }?, 93 | attribute role { "editor" }? 94 | organization = element organization { attlist.organization, CTEXT } 95 | attlist.organization &= attribute abbrev { ATEXT }? 96 | address = 97 | element address { 98 | attlist.address, postal?, phone?, facsimile?, email?, uri? 99 | } 100 | attlist.address &= empty 101 | # this content model should be more strict: 102 | # at most one of each the city, region, code, and country 103 | # elements may be present 104 | postal = 105 | element postal { 106 | attlist.postal, street+, (city | region | code | country)* 107 | } 108 | attlist.postal &= empty 109 | street = element street { attlist.street, CTEXT } 110 | attlist.street &= empty 111 | city = element city { attlist.city, CTEXT } 112 | attlist.city &= empty 113 | region = element region { attlist.region, CTEXT } 114 | attlist.region &= empty 115 | code = element code { attlist.code, CTEXT } 116 | attlist.code &= empty 117 | country = element country { attlist.country, CTEXT } 118 | attlist.country &= empty 119 | phone = element phone { attlist.phone, CTEXT } 120 | attlist.phone &= empty 121 | facsimile = element facsimile { attlist.facsimile, CTEXT } 122 | attlist.facsimile &= empty 123 | email = element email { attlist.email, CTEXT } 124 | attlist.email &= empty 125 | uri = element uri { attlist.uri, CTEXT } 126 | attlist.uri &= empty 127 | date = element date { attlist.date, empty } 128 | attlist.date &= 129 | attribute day { DAY }?, 130 | attribute month { MONTH }?, 131 | attribute year { YEAR }? 132 | # meta-data... 133 | area = element area { attlist.area, CTEXT } 134 | attlist.area &= empty 135 | workgroup = element workgroup { attlist.workgroup, CTEXT } 136 | attlist.workgroup &= empty 137 | keyword = element keyword { attlist.keyword, CTEXT } 138 | attlist.keyword &= empty 139 | abstract = element abstract { attlist.abstract, t+ } 140 | attlist.abstract &= empty 141 | note = element note { attlist.note, t+ } 142 | attlist.note &= attribute title { ATEXT } 143 | # The body 144 | 145 | # later on, may be (section+,appendix*,section*) 146 | middle = element middle { attlist.middle, section+ } 147 | attlist.middle &= empty 148 | section = 149 | element section { 150 | attlist.section, ((t | figure | texttable | iref)* , section*) 151 | } 152 | attlist.section &= 153 | attribute anchor { xsd:ID }?, 154 | attribute title { ATEXT }, 155 | [ a:defaultValue = "default" ] attribute toc { "include" | "exclude" | "default" }? 156 | # 157 | # 162 | 163 | # use of
is deprecated... 164 | t = 165 | element t { 166 | attlist.t, 167 | (TEXT 168 | | \list 169 | | figure 170 | | xref 171 | | eref 172 | | iref 173 | | cref 174 | | spanx 175 | | vspace)* 176 | } 177 | attlist.t &= attribute anchor { xsd:ID }?, attribute hangText { ATEXT }? 178 | # the value of the style attribute is inherited from the closest 179 | # parent 180 | \list = element list { attlist.list, t+ } 181 | attlist.list &= 182 | attribute style { ATEXT }?, 183 | attribute hangIndent { NUMBER }?, 184 | attribute counter { ATEXT }? 185 | xref = element xref { attlist.xref, CTEXT } 186 | attlist.xref &= 187 | attribute target { xsd:IDREF }, 188 | [ a:defaultValue = "false" ] attribute pageno { "true" | "false" }?, 189 | [ a:defaultValue = "default" ] attribute format { "counter" | "title" | "none" | "default" }? 190 | eref = element eref { attlist.eref, CTEXT } 191 | attlist.eref &= attribute target { URI } 192 | iref = element iref { attlist.iref, empty } 193 | attlist.iref &= 194 | attribute item { ATEXT }, 195 | [ a:defaultValue = "" ] attribute subitem { ATEXT }?, 196 | [ a:defaultValue = "false" ] attribute primary { "true" | "false" }? 197 | cref = element cref { attlist.cref, CTEXT } 198 | attlist.cref &= 199 | attribute anchor { xsd:ID }?, 200 | attribute source { ATEXT }? 201 | spanx = element spanx { attlist.spanx, CTEXT } 202 | attlist.spanx &= 203 | [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, 204 | [ a:defaultValue = "emph" ] attribute style { ATEXT }? 205 | vspace = element vspace { attlist.vspace, empty } 206 | attlist.vspace &= 207 | [ a:defaultValue = "0" ] attribute blankLines { NUMBER }? 208 | figure = 209 | element figure { attlist.figure, iref*, preamble?, artwork, postamble? } 210 | attlist.figure &= 211 | attribute anchor { xsd:ID }?, 212 | [ a:defaultValue = "" ] attribute title { ATEXT }?, 213 | [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?, 214 | [ a:defaultValue = "" ] attribute src { ATEXT }?, 215 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?, 216 | [ a:defaultValue = "" ] attribute alt { ATEXT }?, 217 | [ a:defaultValue = "" ] attribute width { NUMBER }?, 218 | [ a:defaultValue = "" ] attribute height { NUMBER }? 219 | preamble = 220 | element preamble { 221 | attlist.preamble, (TEXT | xref | eref | iref | cref | spanx)* 222 | } 223 | attlist.preamble &= empty 224 | artwork = element artwork { attlist.artwork, TEXT* } 225 | attlist.artwork &= 226 | [ a:defaultValue = "preserve" ] attribute xml:space { "default" | "preserve" }?, 227 | [ a:defaultValue = "" ] attribute name { ATEXT }?, 228 | [ a:defaultValue = "" ] attribute type { ATEXT }?, 229 | attribute src { URI }?, 230 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }?, 231 | [ a:defaultValue = "" ] attribute alt { ATEXT }?, 232 | [ a:defaultValue = "" ] attribute width { ATEXT }?, 233 | [ a:defaultValue = "" ] attribute height { ATEXT }? 234 | postamble = 235 | element postamble { 236 | attlist.postamble, (TEXT | xref | eref | iref | cref | spanx)* 237 | } 238 | attlist.postamble &= empty 239 | texttable = 240 | element texttable { 241 | attlist.texttable, preamble?, ttcol+, c*, postamble? 242 | } 243 | attlist.texttable &= 244 | attribute anchor { xsd:ID }?, 245 | [ a:defaultValue = "" ] attribute title { ATEXT }?, 246 | [ a:defaultValue = "false" ] attribute suppress-title { "true" | "false" }?, 247 | [ a:defaultValue = "center" ] attribute align { "left" | "center" | "right" }?, 248 | [ a:defaultValue = "full" ] attribute style { "all" | "none" | "headers" | "full" }? 249 | ttcol = element ttcol { attlist.ttcol, CTEXT } 250 | attlist.ttcol &= 251 | attribute width { ATEXT }?, 252 | [ a:defaultValue = "left" ] attribute align { "left" | "center" | "right" }? 253 | c = element c { attlist.c, (TEXT | xref | eref | iref | cref | spanx)* } 254 | attlist.c &= empty 255 | # Back matter 256 | 257 | # sections, if present, are appendices 258 | back = element back { attlist.back, references*, section* } 259 | attlist.back &= empty 260 | references = element references { attlist.references, reference+ } 261 | attlist.references &= 262 | [ a:defaultValue = "References" ] attribute title { ATEXT }? 263 | reference = 264 | element reference { 265 | attlist.reference, front, seriesInfo*, format*, annotation* 266 | } 267 | attlist.reference &= 268 | attribute anchor { xsd:ID }?, 269 | attribute target { URI }? 270 | seriesInfo = element seriesInfo { attlist.seriesInfo, empty } 271 | attlist.seriesInfo &= 272 | attribute name { ATEXT }, 273 | attribute value { ATEXT } 274 | format = element format { attlist.format, empty } 275 | attlist.format &= 276 | attribute target { URI }?, 277 | attribute type { ATEXT }, 278 | attribute octets { NUMBER }? 279 | annotation = 280 | element annotation { 281 | attlist.annotation, (TEXT | xref | eref | iref | cref | spanx)* 282 | } 283 | attlist.annotation &= empty 284 | start = rfc 285 | -------------------------------------------------------------------------------- /tool/contrib/pekka.savola/template1b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 44 | 49 | 54 | 55 | 56 | Full Title 57 | 58 | 59 | 63 | 64 | 66 | Full Organization name 67 |
68 | 69 | 70 | 71 | Espoo 72 | 79 | Finland 80 | 81 | psavola@funet.fi 82 | 88 |
89 |
90 | 91 | 93 | 94 | Operations & Management 95 | 96 | 98 | Internet Engineering Task Force 99 | 100 | This is an abstract abstract. Remember, don't add references here. 101 | 102 | 103 | 104 | This "forward" section is an unnumbered section that is not included 105 | in the table of contents. It is primarily used for the IESG to 106 | make comments about the document. It can also be used for 107 | ...TODO: list uses... 108 | In this example, it is used as a handy place to specify URLs to 109 | documents and tools to author RFC-style documents using XML. 110 | RFC2629 is the original published document on authoring RFC-style 111 | documents in XML (http://xml.resource.org/public/rfc/html/rfc2629.html). 112 | It is being updated (and called RFC2629(bis) and is 113 | http://xml.resource.org/authoring/draft-mrose-writing-rfcs.html. 114 | The tool to convert XML documents to RFC-style text (and HTML) files 115 | is described in document http://xml.resource.org/authoring/README.html. 116 | Please also remember to check out 117 | http://www.ietf.org/ID-Checklist.html for issues to note when writing 118 | drafts. 119 | Remember, you don't need to have any other tools than a 'notepad' 120 | or your favorite editor to write xml2rfc drafts. You can use the web 121 | interface at http://xml.resource.org for processing. The benefit of using 122 | XML editors is mostly catching those missing tags which the processor will 123 | warn you about, but you don't need to worry about the editors when getting 124 | started. 125 | This template is not meant to be a conclusive list of everything, 126 | but summarize the often-needed basic features to get one started. 127 | 128 | 129 | 130 | 131 | The key words "MUST", "MUST NOT", 132 | "REQUIRED", "SHALL", "SHALL NOT", 133 | "SHOULD", "SHOULD NOT", "RECOMMENDED", 134 | "MAY", and "OPTIONAL" in this document are to be 135 | interpreted as described in RFC 2119. 136 | 137 | 138 | 139 | 140 |
141 | 142 | 143 |
144 | Now you can have a bit more lengthier text here. 145 | Let's refer to a couple of documents: 146 | and 147 | L2TP. For text generation, these look equivalent, 148 | but the latter looks a bit neater in the HTML representation. 149 | You might also add a note about the usage of RFC2119 keywords here.. 150 | You can cross-reference the sections in a stable manner; 151 | . 152 |
153 | 154 |
155 | There are multiple list styles: 'symbols', 'letters', 'numbers', 156 | 'hanging', 'format', etc. 157 | 158 | 159 | First bullet 160 | Second bullet 161 | 162 | 163 | One can draw fancy diagrams as well; remember to ensure that they 164 | don't exceed 72 chars/line. 165 |
166 | 167 | 173 | 174 |
175 | Note that including a CDATA you don't need to escape most special characters 176 | you might otherwise have to. 177 |
178 | There can be a lot of subsections. By default 3 levels of 179 | nesting show in table of contents but that can be adjusted with the 180 | value of the "tocdepth" processing instruction. 181 |
182 |
183 |
184 | The most common form of xml2rfc parsing erros are those where a 185 | closing tag has been expected to be present before a new kind of tag is 186 | specified. In the example below, Introduction section's last paragraph was 187 | missing the closing t-element. The rest of the error messages can be rather 188 | easily understood as well by reading it carefully and examining the context. 189 | The reason is typically a missing tag somewhere. 190 |
191 | 192 | 201 | 202 |
203 | 204 | =======8<======== 205 | ]]> 206 | 207 |
208 |
209 |
211 |
212 | 213 | 217 | 218 | void 219 | main(int argc, char *argv[]) 220 | { 221 | int i; 222 | 223 | printf("program arguments are:\n"); 224 | for (i = 0; i < argc; i++) { 225 | printf("%d: \"%s\"\n", i, argv[i]); 226 | } 227 | 228 | exit(0); 229 | } /* main */ 230 | 231 | /* end of file */ 232 | ]]> 233 | 234 |
235 |
236 |
237 | Remember, it's important to acknowledge people who have 238 | contributed to the work. 239 |
240 | 241 | 242 | 243 |
244 | This memo includes no request to IANA. 245 | (It's good to have an explicit note because otherwise IANA wastes 246 | cycles trying to figure out if something is needed..) 247 |
248 | 249 |
250 | Remember to consider security from the start.. 251 |
252 |
253 | 254 | 255 | 256 | 258 | 259 | 260 | 261 | RFC2661 262 | 263 | orgName 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | Key words for use in RFCs to Indicate Requirement Levels 272 | 273 | Harvard University 274 |
275 | 276 | 1350 Mass. Ave. 277 | Cambridge 278 | MA 02138 279 | - +1 617 495 3864 280 | sob@harvard.edu
281 | 282 | General 283 | keyword 284 | 285 | 286 | In many standards track documents several words are used to signify 287 | the requirements in the specification. These words are often 288 | capitalized. This document defines these words as they should be 289 | interpreted in IETF documents. Authors who follow these guidelines 290 | should incorporate this phrase near the beginning of their document: 291 | 292 | 293 | 294 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 295 | NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and 296 | "OPTIONAL" in this document are to be interpreted as described in 297 | RFC 2119. 298 | 299 | 300 | Note that the force of these words is modified by the requirement 301 | level of the document in which they are used. 302 |
303 | 304 | 305 | 306 | 307 | 308 | 309 |
310 | 311 |
312 | 313 | 314 | 316 | 317 | I-D.ietf-v6ops-3gpp-analysis 318 | 319 | orgName 320 | 321 | 322 | 323 | 324 | 325 | 326 |
327 | You can add appendices just as regular sections, the only 328 | difference is that they go within the "back" element, and not 329 | within the "middle" element. And they follow the "reference" 330 | elements. 331 |
332 |
333 | 334 |
335 | -------------------------------------------------------------------------------- /tool/sample.html: -------------------------------------------------------------------------------- 1 | 2 | An Example 3 | 4 | 5 | 6 | 140 | 141 | 142 |
 TOC 
143 |
144 | 145 | 146 | 147 | 148 |
Network Working GroupA. Mous
Internet-DraftFebruary 28, 2008
Intended status: Standards Track 
Expires: August 31, 2008 
149 |


An Example
sample.txt

150 | 151 |

Status of this Memo

152 |

153 | By submitting this Internet-Draft, 154 | each author represents that any applicable patent or other IPR claims of which 155 | he or she is aware have been or will be disclosed, 156 | and any of which he or she becomes aware will be disclosed, 157 | in accordance with Section 6 of BCP 79.

158 |

159 | Internet-Drafts are working documents of the Internet Engineering 160 | Task Force (IETF), its areas, and its working groups. 161 | Note that other groups may also distribute working documents as 162 | Internet-Drafts.

163 |

164 | Internet-Drafts are draft documents valid for a maximum of six months 165 | and may be updated, replaced, or obsoleted by other documents at any time. 166 | It is inappropriate to use Internet-Drafts as reference material or to cite 167 | them other than as “work in progress.”

168 |

169 | The list of current Internet-Drafts can be accessed at 170 | http://www.ietf.org/ietf/1id-abstracts.txt.

171 |

172 | The list of Internet-Draft Shadow Directories can be accessed at 173 | http://www.ietf.org/shadow.html.

174 |

175 | This Internet-Draft will expire on August 31, 2008.

176 | 177 |

Abstract

178 | 179 |

An example. 180 |



181 |

Table of Contents

182 |

183 | 1.  184 | Requirements notation
185 | 2.  186 | Security Considerations
187 | 3.  188 | Normative References
189 | §  190 | Author's Address
191 | §  192 | Intellectual Property and Copyright Statements
193 |

194 |
195 | 196 |

197 |
 TOC 
198 |

1.  199 | Requirements notation

200 | 201 |

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 202 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 203 | and "OPTIONAL" in this document are to be interpreted as 204 | described in [RFC2119] (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.). 205 |

206 |

207 |
 TOC 
208 |

2.  209 | Security Considerations

210 | 211 |

None. 212 |

213 |

214 |
 TOC 
215 |

3. Normative References

216 | 217 | 218 | 219 |
[RFC2119]Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML).
220 | 221 |

222 |
 TOC 
223 |

Author's Address

224 | 225 | 226 | 227 |
 Anon Y. Mous
228 |

229 |
 TOC 
230 |

Full Copyright Statement

231 | 233 | 238 | 248 |

Intellectual Property

249 | 259 | 266 | 274 | 275 | -------------------------------------------------------------------------------- /tool/rfc2629-xhtml.ent: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /tool/rfc2629.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | -------------------------------------------------------------------------------- /9p2000.u.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Plan 9 Remote Resource Protocol Unix Extension 15 | 16 | 17 | Plan 9 Fans 18 | 19 |
20 | 9fans@cse.psu.edu 21 | http://plan9.bell-labs.com/plan9 22 |
23 |
24 | 25 | General 26 | Plan 9 27 | 9P2000 28 | 9P2000.u 29 | v9fs 30 | 9P 31 | 32 | 33 | 9P is a distributed resource sharing protocol developed as 34 | part of the Plan 9 research operating system at AT&T Bell 35 | Laboratories (now a part of Lucent Technologies) by the Computer 36 | Science Research Center. It can be used to distributed file 37 | systems, devices, and application services. It was designed as 38 | an interface to both local and remote resources, making the 39 | transition from local to cluster to grid resources transparent. 40 | 41 | 42 | 9P2000.u is a set of extensions to the 9P protocol to better 43 | support UNIX environments connecting to Plan 9 file servers and 44 | UNIX environments connecting to other UNIX environments. The 45 | extensions include support for symbolic links, additional modes, 46 | and special files (such as pipes and devices). Also included 47 | are hints to better support mapping of numeric user-ids, group-ids, 48 | and error codes. 49 | 50 | 51 |
52 | 53 |
54 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 55 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 56 | and "OPTIONAL" in this document are to be interpreted as 57 | described in RFC2119. 58 |
59 |
60 | 61 | Many modern UNIX systems, including Linux use a virtual file system (VFS) 62 | layer as a basic level of abstraction for accessing underlying 63 | implementations. Implementing 9P2000 under Linux is a matter of mapping VFS 64 | operations to their associated 9P operations. The problem, however, is that 65 | 9P2000 was designed for a non-UNIX system so there are several fundamental 66 | differences in the functional semantics provided by 9P. 67 | 68 | 69 | To preserve compatibility with these pre-existing features we propose 70 | a transparent extension to the file system semantics which minimally effects 71 | the protocol syntax. 9P2000.u is a dialect of 9P2000 negotiated in the 72 | Tversion/Rversion exchange. If the server agrees to 9P2000.u, then the wire 73 | protocol that follows is 9P2000 with these changes. 74 | 75 |
76 |
77 | 78 | Under Plan 9 , user names as well as groups are represented by strings, while 79 | on Unix they are represented by unique numbers. This is complicated by Linux 80 | making it exceedingly difficult to map these numeric identifiers to their 81 | string values in the kernel. Many of the available UNIX network file systems 82 | avoid this issue and simply use numeric identifiers over the wire, hoping they 83 | map to the remote system. NFSv4 has provisions for sending string group 84 | and user info over the wire and then contacting a user-space daemon which 85 | attempts to provide a valid mapping. 86 | 87 | 88 | 9P2000.u provides a dual approach to this problem, changes have been made 89 | to the protocol to allow for numeric identifiers to be used along-side 90 | strings. Servers should make every attempt to provide valid information 91 | for both the numeric and string form of identifiers. Clients can then use 92 | the available information to best map the identifiers to their local 93 | environment. Use of extended form string user names (e.g. user@domain) 94 | as specified in the NFSv4 environment is also valid. 95 | 96 |
97 |
98 | 99 | A similar problem exists for error numbers, by default VFS operations 100 | return error numbers, whereas Plan 9 (and 9P) use error strings to 101 | describe failure conditions. This problem is further exacerbated by 102 | the potential for Plan 9 synthetic file servers to return custom error 103 | strings which may not match any pre-defined set (or pattern) of 104 | standard error messages. 105 | 106 | 107 | Again, our approach is to provide as much information as possible in 108 | order to help clients properly convey error conditions to end-applications 109 | and end-users. As such both error strings and error codes are conveyed in 110 | the 9P2000.u version of the protocol. A suggested implementation is that 111 | non-standard/unrecognized error strings/codes be made available to 112 | applications via some mechanism in order to communicate application 113 | synthetic file system events (via sysfs or procfs in Linux, or perhaps 114 | via a special extended attribute). 115 | 116 |
117 |
118 | 119 | Plan 9 has a different user security model , so there 120 | is no such concept as set-uid or set-gid permissions. There is also no 121 | equivalent for the sticky bit. Luckily, Plan 9 has plenty of space in 122 | higher permission mode bit space for such extensions. 123 | 124 |
125 |
126 | 127 | One of the unique aspects of the Plan 9 name space is that it is dynamic. 128 | Users are able to bind files and directories over each other in stackable 129 | layers similar to union file systems. This aspect of Plan 9 name spaces has 130 | obviated the need for symbolic or hard links. Symlinks on a remote UNIX file 131 | server will be traversed transparently as part of a walk - there is no native 132 | ability within Plan 9 to create symlinks. This breaks many assumptions for 133 | Linux file-systems and many existing applications (for example the kernel 134 | build creates a symlink in the include directory as part of the make process). 135 | 136 | 137 | Another unique aspect is that named pipes and devices look just like other 138 | files in Plan 9, there are no special mode bits and no concept of major 139 | and minor block numbers. 140 | 141 | 142 | To solve both of these problems special mode bits are introduced to mark 143 | special file types and a variable-length string field is added to the 144 | file attribute structure which is used to store the additional information 145 | associated with these special files. In the case of symlinks, for instance, 146 | the variable length string contains the full path target of the symbolic 147 | link. 148 | 149 |
150 |
151 | 152 | A VFS function not accounted for in the 9P infrastructure is the ioctl 153 | command. No attempt has been made at this time to accomodate its 154 | functionality. Plan 9 has traditionally used elements within a synthetic 155 | file system to provide for similar functionality, with the added benefit of 156 | getting transparent network distribution of the control path. For such 157 | devices/files that still require the use of ioctl, gateway synthetic file 158 | systems are suggested to provide analogous functionality. 159 | 160 |
161 |
162 | 163 | A relatively recent addition to VFS interfaces is the ability to have 164 | arbitrary key/value pairs added to file meta-data. 9P2000.u doesn't 165 | have provisions to accomodate this feature, but it may be added in the 166 | future as more file systems adopt extended attributes. 167 | 168 |
169 |
170 |
171 | 172 | 173 | 174 | size[4] Tversion tag[2] msize[4] version[s] 175 | 176 | 177 | size[4] Rversion tag[2] msize[4] version[s] 178 | 179 | 180 | 181 | size[4] Rerror tag[2] ename[s] errno[4] 182 | 183 | 184 | 185 | size[4] Tauth tag[2] afid[4] uname[s] aname[s] 186 | 187 | 188 | size[4] Rauth tag[2] aqid[13] 189 | 190 | 191 | 192 | size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s] 193 | 194 | 195 | size[4] Rattach tag[2] qid[13] 196 | 197 | 198 | 199 | size[4] Tcreate tag[2] fid[4] name[s] perm[4] mode[1] extension[s] 200 | 201 | 202 | size[4] Rcreate tag[2] qid[13] iounit[4] 203 | 204 | 205 | 206 | size[4] Tstat tag[2] fid[4] 207 | 208 | 209 | size[4] Rstat tag[2] stat[n] 210 | 211 | 212 | 213 | size[4] Twstat tag[2] fid[4] stat[n] 214 | 215 | 216 | size[4] Rwstat tag[2] 217 | 218 | 219 | 220 |
221 |
222 |
223 |
224 | TODO: cover changed data types in our protocol synopsis 225 |
226 |
227 | TODO: cover changed structs (like stat) that the protocol uses 228 |
229 |
230 |
231 | TODO: discuss changes 232 |
233 |
234 | TODO: describe protocol versioning in detail (steal from Protocol section) 235 |
236 |
237 | TODO: enumerate new standard file system error strings and describe 238 | possibility of application error strings 239 |
240 |
241 |
242 | 243 | SYNOPSIS 244 | 245 | 246 | 247 | size[4] Tversion tag[2] msize[4] version[s] 248 | size[4] Rversion tag[2] msize[4] version[s] 249 | 250 | 251 | 252 | DESCRIPTION 253 | 254 | 255 | 256 | 257 | Support for 9P2000.u is an optional extension which isn't 258 | quite covered in the existing version semantics for 9P2000. 259 | The original protocol specification describes discarding 260 | anything after an initial period in the version string. We 261 | use the information following the period as a method for 262 | negotiating optional protocol extensions. 263 | 264 | 265 | If a client desires support for the UNIX extensions, it will 266 | send the add a .u to the end of the version string (e.g. 9P2000.u). 267 | If a server is capable of supporting the extension, it will 268 | return 9P2000.u back to the client. If the server is incapable 269 | or unwilling to support the extensions, it will return the 270 | version string without the extension specification (e.g. 9P2000). 271 | 272 | 273 | Clients should be implemented in such a way to be able to operate 274 | without the extensions in some degraded form of operation. 275 | Specifics for how to gracefully degrade operation without 276 | specific extensions are suggested by this document. 277 | 278 | 279 | 280 |
281 | 282 |
283 | 284 | SYNOPSIS 285 | 286 | 287 | 288 | 289 | size[4] Rerror tag[2] ename[s] errno[4] 290 | 291 | 292 | 293 | 294 | DESCRIPTION 295 | 296 | 297 | 298 | 299 | An errno field has been added to the message in order to provide 300 | a hint of the underlying UNIX error number which caused the error 301 | on the server. Due to consistency problems of mapping error 302 | numbers betweeen different versions of UNIX, clients should give 303 | preference to the error string in attempting to report the error, 304 | however, in the event that they are unable to map an error string, 305 | they may return the errno to the application. 306 | 307 | 308 | A special errno (ERRUNDEF) is returned by servers who do not wish 309 | to return raw error numbers. In the event that clients can not 310 | interpret the error string, they should somehow make the error 311 | string available to end-application/end-user via dynamic custom 312 | error codes. 313 | 314 | 315 | 316 |
317 | 318 |
319 | 320 | SYNOPSIS 321 | 322 | 323 | 324 | size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s] n_uname[4] 325 | size[4] Rattach tag[2] qid[13] 326 | size[4] Tauth tag[2] afid[4] uname[s] aname[s] n_uname[4] 327 | size[4] Rauth tag[2] aqid[13] 328 | 329 | 330 | 331 | DESCRIPTION 332 | 333 | 334 | 335 | 336 | A numeric uname field has been added to the attach and auth messages 337 | in order to provide hints to map a string to a numeric id if such 338 | a facility is not available. 339 | 340 | The numeric uname should be given preference over the uname string 341 | unless n_uname is unspecified (~0). 342 | 343 | 344 | 345 |
346 | 347 |
348 | 349 | SYNOPSIS 350 | 351 | 352 | 353 | 354 | size[4] Tcreate tag[2] fid[4] name[s] perm[4] mode[1] extension[s] 355 | 356 | 357 | size[4] Rcreate tag[2] qid[13] iounit[4] 358 | 359 | 360 | 361 | 362 | DESCRIPTION 363 | 364 | 365 | 366 | 367 | The most signifigant change to the create operation is the new 368 | permission modes which allow for creation of special files. 369 | In addition to creating directories with DMDIR, 9P2000.u allows 370 | the creation of symlinks (DMSYMLINK), devices (DMDEVICE), 371 | named pipes (DMNAMEPIPE), and sockets (DMSOCKET). extension[s] 372 | is a string describing special files, depending on the mode bit. 373 | For DSYMLINK files, the string is the target of the link. For 374 | DMDEVICE files, the string is "b 1 2" for a block device with 375 | major 1, minor 2. For normal files, this string is empty. 376 | 377 | 378 | 379 |
380 | 381 |
382 | 383 | SYNOPSIS 384 | 385 | 386 | 387 | 388 | size[4] Tstat tag[2] fid[4] 389 | 390 | 391 | size[4] Rstat tag[2] stat[n] 392 | 393 | 394 | size[4] Twstat tag[2] fid[4] stat[n] 395 | 396 | 397 | size[4] Rwstat tag[2] 398 | 399 | 400 | 401 | 402 | DESCRIPTION 403 | 404 | 405 | 406 | 407 | There are four new fields in the stat structure supporting 408 | 9P2000 extensions - as well as new qid.type 409 | bits and mode bits. 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | total byte count of the following data 418 | 419 | 420 | 421 | for kernel use 422 | 423 | 424 | 425 | for kernel use 426 | 427 | 428 | 429 | the type of the file (directory, etc.), represented as 430 | a bit vector corresponding to the high 8 bits of the 431 | file's mode word. 432 | 433 | 434 | 435 | version number for given path 436 | 437 | 438 | 439 | the file server's unique identification for the file 440 | 441 | 442 | 443 | permissions and flags 444 | 445 | 446 | 447 | last access time 448 | 449 | 450 | 451 | last modification time 452 | 453 | 454 | 455 | length of file in bytes 456 | 457 | 458 | 459 | file name; must be / if the file is the root directory 460 | of the server 461 | 462 | 463 | 464 | owner name 465 | 466 | 467 | 468 | group name 469 | 470 | 471 | 472 | name of the user who last modified the file 473 | 474 | 475 | 476 | For use by the UNIX extension to store data about 477 | special files (links, devices, pipes, etc.) 478 | 479 | 480 | 481 | numeric id of the user who owns the file 482 | 483 | 484 | 485 | numeric id of the group associated with the file 486 | 487 | 488 | 489 | numeric id of the user who last modified the file 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | The n_uid, n_gid, and n_muid are numeric hints that clients 498 | may use to map numeric ids when a string to numeric id mapping 499 | facility is not available. 500 | 501 | 502 | extension[s] is a string describing special files, depending on the 503 | mode bit. For DSYMLINK files, the string is the target of the link. 504 | For DMDEVICE files, the string is "b 1 2" for a block device with 505 | major 1, minor 2. For normal files, this string is empty. 506 | 507 | 508 | 509 |
510 |
511 | 512 |
513 | TODO: Talk about specific security considerations of 9P under 514 | UNIX, specifically about the different auth models 515 |
516 |
517 |
518 | 519 | /* permissions */ 520 | enum { 521 | DMDIR = 0x80000000, 522 | DMAPPEND = 0x40000000, 523 | DMEXCL = 0x20000000, 524 | DMMOUNT = 0x10000000, 525 | DMAUTH = 0x08000000, 526 | DMTMP = 0x04000000, 527 | DMSYMLINK = 0x02000000, 528 | /* 9P2000.u extensions */ 529 | DMDEVICE = 0x00800000, 530 | DMNAMEDPIPE = 0x00200000, 531 | DMSOCKET = 0x00100000, 532 | DMSETUID = 0x00080000, 533 | DMSETGID = 0x00040000, 534 | }; 535 | 536 | /* qid.types */ 537 | enum { 538 | QTDIR = 0x80, 539 | QTAPPEND = 0x40, 540 | QTEXCL = 0x20, 541 | QTMOUNT = 0x10, 542 | QTAUTH = 0x08, 543 | QTTMP = 0x04, 544 | QTLINK = 0x02, 545 | QTFILE = 0x00, 546 | }; 547 | struct v9fs_stat { 548 | uint16_t size; 549 | uint16_t type; 550 | uint32_t dev; 551 | struct v9fs_qid qid; 552 | uint32_t mode; 553 | uint32_t atime; 554 | uint32_t mtime; 555 | uint64_t length; 556 | char *name; 557 | char *uid; 558 | char *gid; 559 | char *muid; 560 | /* 9p2000.u extensions */ 561 | char *extension; 562 | uint32_t n_uid; 563 | uint32_t n_gid; 564 | uint32_t n_muid; 565 | 566 | char data[0]; 567 | }; 568 | 569 | struct Rerror { 570 | char *error; 571 | uint32_t errno; /* 9p2000.u extension */ 572 | }; 573 | 574 |
575 |
576 |
577 | 578 | 579 | 580 | 581 | Plan 9 Home Page 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | Security in Plan 9 590 | 591 | 592 | MIT LCS 593 | 594 | 595 | 596 | 597 | Bell Labs 598 | 599 | 600 | 601 | 602 | Bell Labs 603 | 604 | 605 | 606 | 607 | Avaya Labs and Bell Labs 608 | 609 | 610 | 611 | 612 | Bell Labs 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 |
621 | 622 | The 9P2000.u protocol extensions evolved out of contributions from a 623 | number of people including: 624 | 625 | Abhishek Kilkarni 626 | Russ Cox 627 | Lachester Ionkov 628 | Ron Minnich 629 | Andrey Mirtchoviski 630 | Rob Pike 631 | Eric Van Hensbergen 632 | Uriel (Contentious Objector) 633 | 634 | 635 | 636 | The 9P protocol was the result of work done by the Computing Science 637 | Research Center of AT&T Bell Labs (now a part of Lucent Technologies) and in 638 | particular: 639 | 640 | 641 | Rob Pike 642 | 643 | Dave Presotto 644 | 645 | Sape Mullender 646 | 647 | Ken Thompson 648 | 649 | Russ Cox 650 | 651 | 652 | 653 |
654 |
655 | 656 | This specification is derrived from the Plan 9 Documentation and Manual Pages. 657 | The source material is 658 | Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights Reserved. 659 | 660 | 661 | Extensions to the original source material are Copyright (C) 2005, the authors 662 | of this document (as specified in Authors List in the References section). 663 | 664 |
665 |
666 |
667 | -------------------------------------------------------------------------------- /9p2000.L.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Plan 9 Remote Resource Protocol 13 | 14 | 15 | IBM Research 16 | 17 |
18 | ericvh@gmail.com 19 | http://www.research.ibm.com/people/b/bergevan 20 |
21 |
22 | 23 | General 24 | Plan 9 25 | 9P2000 26 | 9p2000.L 27 | v9fs 28 | 9P 29 | 30 | 31 | 9P is a distributed resource sharing protocol developed as 32 | part of the Plan 9 research operating system at AT&T Bell 33 | Laboratories (now a part of Lucent Technologies) by the Computer 34 | Science Research Center. It can be used to distributed file 35 | systems, devices, and application services. It was designed as 36 | an interface to both local and remote resources, making the 37 | transition from local to cluster to grid resources transparent. 38 | 39 | 40 | In my use of 9P within the Linux and IBM communities there have 41 | been several requests for extensions to better support Linux 42 | environments or features not currently a part of the protocol 43 | (locking, caching, batch operations, storage networking, etc.) 44 | As such, I'd like to work towards a specification of the protocol 45 | which can accomodate these extensions in as non-intrusive a way as 46 | possible (the counter-example being 9P2000.u which while negotiated 47 | ends up complicating clients and servers who wish to use it). 48 | 49 | 50 | 9p2000.L is an expanded version of the original protocol with 9P2000 51 | as its core. Extended operations representing either support for 52 | UNIX environments, or even alternate approaches to the protocol 53 | (such as Op from the Octopus project) exist in complimentary 54 | operand spaces. It briefly was referenced as the 9p2010 protocol, 55 | but this was retracted in form of referencing it as an extension 56 | (.L) 57 | 58 | 59 |
60 | 61 |
62 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 63 | "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 64 | and "OPTIONAL" in this document are to be interpreted as 65 | described in RFC2119. 66 |
67 |
68 | 69 | Many modern UNIX systems, including Linux use a virtual file system (VFS) 70 | layer as a basic level of abstraction for accessing underlying 71 | implementations. Implementing 9p2000.L under Linux is a matter of mapping VFS 72 | operations to their associated 9P operations. The problem, however, is that 73 | 9P2000 was designed for a non-UNIX system so there are several fundamental 74 | differences in the functional semantics provided by 9P. 75 | 76 | 77 | To preserve compatibility with these pre-existing features we propose 78 | a transparent extension to the file system semantics which minimally effects 79 | the protocol syntax. 9p2000.L is a dialect of 9P2000 negotiated in the 80 | Tversion/Rversion exchange. If the server agrees to 9p2000.L, then the wire 81 | protocol that follows is 9P2000 with these changes. 82 | 83 |
84 |
85 | 86 | Under Plan 9 , user names as well as groups are represented by strings, while 87 | on Unix they are represented by unique numbers. This is complicated by Linux 88 | making it exceedingly difficult to map these numeric identifiers to their 89 | string values in the kernel. Many of the available UNIX network file systems 90 | avoid this issue and simply use numeric identifiers over the wire, hoping they 91 | map to the remote system. NFSv4 has provisions for sending string group 92 | and user info over the wire and then contacting a user-space daemon which 93 | attempts to provide a valid mapping. 94 | 95 | 96 | 9p2000.L provides a dual approach to this problem, changes have been made 97 | to the protocol to allow for numeric identifiers to be used along-side 98 | strings. Servers should make every attempt to provide valid information 99 | for both the numeric and string form of identifiers. Clients can then use 100 | the available information to best map the identifiers to their local 101 | environment. Use of extended form string user names (e.g. user@domain) 102 | as specified in the NFSv4 environment is also valid. 103 | 104 |
105 |
106 | 107 | A similar problem exists for error numbers, by default VFS operations 108 | return error numbers, whereas Plan 9 (and 9P) use error strings to 109 | describe failure conditions. This problem is further exacerbated by 110 | the potential for Plan 9 synthetic file servers to return custom error 111 | strings which may not match any pre-defined set (or pattern) of 112 | standard error messages. 113 | 114 | 115 | Again, our approach is to provide as much information as possible in 116 | order to help clients properly convey error conditions to end-applications 117 | and end-users. As such both error strings and error codes are conveyed in 118 | the 9p2000.L version of the protocol. A suggested implementation is that 119 | non-standard/unrecognized error strings/codes be made available to 120 | applications via some mechanism in order to communicate application 121 | synthetic file system events (via sysfs or procfs in Linux, or perhaps 122 | via a special extended attribute). 123 | 124 |
125 |
126 | 127 | Plan 9 has a different user security model , so there 128 | is no such concept as set-uid or set-gid permissions. There is also no 129 | equivalent for the sticky bit. Luckily, Plan 9 has plenty of space in 130 | higher permission mode bit space for such extensions. 131 | 132 |
133 |
134 | 135 | One of the unique aspects of the Plan 9 name space is that it is dynamic. 136 | Users are able to bind files and directories over each other in stackable 137 | layers similar to union file systems. This aspect of Plan 9 name spaces has 138 | obviated the need for symbolic or hard links. Symlinks on a remote UNIX file 139 | server will be traversed transparently as part of a walk - there is no native 140 | ability within Plan 9 to create symlinks. This breaks many assumptions for 141 | Linux file-systems and many existing applications (for example the kernel 142 | build creates a symlink in the include directory as part of the make process). 143 | 144 | 145 | Another unique aspect is that named pipes and devices look just like other 146 | files in Plan 9, there are no special mode bits and no concept of major 147 | and minor block numbers. 148 | 149 | 150 | To solve both of these problems special mode bits are introduced to mark 151 | special file types and a variable-length string field is added to the 152 | file attribute structure which is used to store the additional information 153 | associated with these special files. In the case of symlinks, for instance, 154 | the variable length string contains the full path target of the symbolic 155 | link. 156 | 157 |
158 |
159 | 160 | A VFS function not accounted for in the 9P infrastructure is the ioctl 161 | command. No attempt has been made at this time to accomodate its 162 | functionality. Plan 9 has traditionally used elements within a synthetic 163 | file system to provide for similar functionality, with the added benefit of 164 | getting transparent network distribution of the control path. For such 165 | devices/files that still require the use of ioctl, gateway synthetic file 166 | systems are suggested to provide analogous functionality. 167 | 168 |
169 |
170 | 171 | A relatively recent addition to VFS interfaces is the ability to have 172 | arbitrary key/value pairs added to file meta-data. 9p2000.L doesn't 173 | have provisions to accomodate this feature, but it may be added in the 174 | future as more file systems adopt extended attributes. 175 | 176 |
177 |
178 |
179 | 180 | 181 | 182 | size[4] Tversion tag[2] msize[4] version[s] 183 | 184 | 185 | size[4] Rversion tag[2] msize[4] version[s] 186 | 187 | 188 | 189 | size[4] Rerror tag[2] ename[s] errno[4] 190 | 191 | 192 | 193 | size[4] Tauth tag[2] afid[4] uname[s] aname[s] 194 | 195 | 196 | size[4] Rauth tag[2] aqid[13] 197 | 198 | 199 | 200 | size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s] 201 | 202 | 203 | size[4] Rattach tag[2] qid[13] 204 | 205 | 206 | 207 | size[4] Tcreate tag[2] fid[4] name[s] perm[4] mode[1] extension[s] 208 | 209 | 210 | size[4] Rcreate tag[2] qid[13] iounit[4] 211 | 212 | 213 | 214 | size[4] Tstat tag[2] fid[4] 215 | 216 | 217 | size[4] Rstat tag[2] stat[n] 218 | 219 | 220 | 221 | size[4] Twstat tag[2] fid[4] stat[n] 222 | 223 | 224 | size[4] Rwstat tag[2] 225 | 226 | 227 | 228 |
229 |
230 |
231 |
232 | TODO: cover changed data types in our protocol synopsis 233 |
234 |
235 | TODO: cover changed structs (like stat) that the protocol uses 236 |
237 |
238 |
239 | TODO: discuss changes 240 |
241 |
242 | TODO: describe protocol versioning in detail (steal from Protocol section) 243 |
244 |
245 | TODO: enumerate new standard file system error strings and describe 246 | possibility of application error strings 247 |
248 |
249 |
250 | 251 | SYNOPSIS 252 | 253 | 254 | 255 | size[4] Tversion tag[2] msize[4] version[s] 256 | size[4] Rversion tag[2] msize[4] version[s] 257 | 258 | 259 | 260 | DESCRIPTION 261 | 262 | 263 | 264 | 265 | Support for 9p2000.L is an optional extension which isn't 266 | quite covered in the existing version semantics for 9P2000. 267 | The original protocol specification describes discarding 268 | anything after an initial period in the version string. We 269 | use the information following the period as a method for 270 | negotiating optional protocol extensions. 271 | 272 | 273 | If a client desires support for the UNIX extensions, it will 274 | send the add a .u to the end of the version string (e.g. 9p2000.L). 275 | If a server is capable of supporting the extension, it will 276 | return 9p2000.L back to the client. If the server is incapable 277 | or unwilling to support the extensions, it will return the 278 | version string without the extension specification (e.g. 9P2000). 279 | 280 | 281 | Clients should be implemented in such a way to be able to operate 282 | without the extensions in some degraded form of operation. 283 | Specifics for how to gracefully degrade operation without 284 | specific extensions are suggested by this document. 285 | 286 | 287 | 288 |
289 | 290 |
291 | 292 | SYNOPSIS 293 | 294 | 295 | 296 | 297 | size[4] Rerror tag[2] ename[s] errno[4] 298 | 299 | 300 | 301 | 302 | DESCRIPTION 303 | 304 | 305 | 306 | 307 | An errno field has been added to the message in order to provide 308 | a hint of the underlying UNIX error number which caused the error 309 | on the server. Due to consistency problems of mapping error 310 | numbers betweeen different versions of UNIX, clients should give 311 | preference to the error string in attempting to report the error, 312 | however, in the event that they are unable to map an error string, 313 | they may return the errno to the application. 314 | 315 | 316 | A special errno (ERRUNDEF) is returned by servers who do not wish 317 | to return raw error numbers. In the event that clients can not 318 | interpret the error string, they should somehow make the error 319 | string available to end-application/end-user via dynamic custom 320 | error codes. 321 | 322 | 323 | 324 |
325 | 326 |
327 | 328 | SYNOPSIS 329 | 330 | 331 | 332 | size[4] Tattach tag[2] fid[4] afid[4] uname[s] aname[s] n_uname[4] 333 | size[4] Rattach tag[2] qid[13] 334 | size[4] Tauth tag[2] afid[4] uname[s] aname[s] n_uname[4] 335 | size[4] Rauth tag[2] aqid[13] 336 | 337 | 338 | 339 | DESCRIPTION 340 | 341 | 342 | 343 | 344 | A numeric uname field has been added to the attach and auth messages 345 | in order to provide hints to map a string to a numeric id if such 346 | a facility is not available. 347 | 348 | The numeric uname should be given preference over the uname string 349 | unless n_uname is unspecified (~0). 350 | 351 | 352 | 353 |
354 | 355 |
356 | 357 | SYNOPSIS 358 | 359 | 360 | 361 | 362 | size[4] Tcreate tag[2] fid[4] name[s] perm[4] mode[1] extension[s] 363 | 364 | 365 | size[4] Rcreate tag[2] qid[13] iounit[4] 366 | 367 | 368 | 369 | 370 | DESCRIPTION 371 | 372 | 373 | 374 | 375 | The most signifigant change to the create operation is the new 376 | permission modes which allow for creation of special files. 377 | In addition to creating directories with DMDIR, 9p2000.L allows 378 | the creation of symlinks (DMSYMLINK), devices (DMDEVICE), 379 | named pipes (DMNAMEPIPE), and sockets (DMSOCKET). extension[s] 380 | is a string describing special files, depending on the mode bit. 381 | For DSYMLINK files, the string is the target of the link. For 382 | DMDEVICE files, the string is "b 1 2" for a block device with 383 | major 1, minor 2. For normal files, this string is empty. 384 | 385 | 386 | 387 |
388 | 389 |
390 | 391 | SYNOPSIS 392 | 393 | 394 | 395 | 396 | size[4] Tstat tag[2] fid[4] 397 | 398 | 399 | size[4] Rstat tag[2] stat[n] 400 | 401 | 402 | size[4] Twstat tag[2] fid[4] stat[n] 403 | 404 | 405 | size[4] Rwstat tag[2] 406 | 407 | 408 | 409 | 410 | DESCRIPTION 411 | 412 | 413 | 414 | 415 | There are four new fields in the stat structure supporting 416 | 9P2000 extensions - as well as new qid.type 417 | bits and mode bits. 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | total byte count of the following data 426 | 427 | 428 | 429 | for kernel use 430 | 431 | 432 | 433 | for kernel use 434 | 435 | 436 | 437 | the type of the file (directory, etc.), represented as 438 | a bit vector corresponding to the high 8 bits of the 439 | file's mode word. 440 | 441 | 442 | 443 | version number for given path 444 | 445 | 446 | 447 | the file server's unique identification for the file 448 | 449 | 450 | 451 | permissions and flags 452 | 453 | 454 | 455 | last access time 456 | 457 | 458 | 459 | last modification time 460 | 461 | 462 | 463 | length of file in bytes 464 | 465 | 466 | 467 | file name; must be / if the file is the root directory 468 | of the server 469 | 470 | 471 | 472 | owner name 473 | 474 | 475 | 476 | group name 477 | 478 | 479 | 480 | name of the user who last modified the file 481 | 482 | 483 | 484 | For use by the UNIX extension to store data about 485 | special files (links, devices, pipes, etc.) 486 | 487 | 488 | 489 | numeric id of the user who owns the file 490 | 491 | 492 | 493 | numeric id of the group associated with the file 494 | 495 | 496 | 497 | numeric id of the user who last modified the file 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | The n_uid, n_gid, and n_muid are numeric hints that clients 506 | may use to map numeric ids when a string to numeric id mapping 507 | facility is not available. 508 | 509 | 510 | extension[s] is a string describing special files, depending on the 511 | mode bit. For DSYMLINK files, the string is the target of the link. 512 | For DMDEVICE files, the string is "b 1 2" for a block device with 513 | major 1, minor 2. For normal files, this string is empty. 514 | 515 | 516 | 517 |
518 |
519 | 520 |
521 | TODO: Talk about specific security considerations of 9P under 522 | UNIX, specifically about the different auth models 523 |
524 |
525 |
526 | 527 | /* permissions */ 528 | enum { 529 | DMDIR = 0x80000000, 530 | DMAPPEND = 0x40000000, 531 | DMEXCL = 0x20000000, 532 | DMMOUNT = 0x10000000, 533 | DMAUTH = 0x08000000, 534 | DMTMP = 0x04000000, 535 | DMSYMLINK = 0x02000000, 536 | /* 9p2000.L extensions */ 537 | DMDEVICE = 0x00800000, 538 | DMNAMEDPIPE = 0x00200000, 539 | DMSOCKET = 0x00100000, 540 | DMSETUID = 0x00080000, 541 | DMSETGID = 0x00040000, 542 | }; 543 | 544 | /* qid.types */ 545 | enum { 546 | QTDIR = 0x80, 547 | QTAPPEND = 0x40, 548 | QTEXCL = 0x20, 549 | QTMOUNT = 0x10, 550 | QTAUTH = 0x08, 551 | QTTMP = 0x04, 552 | QTLINK = 0x02, 553 | QTFILE = 0x00, 554 | }; 555 | struct v9fs_stat { 556 | uint16_t size; 557 | uint16_t type; 558 | uint32_t dev; 559 | struct v9fs_qid qid; 560 | uint32_t mode; 561 | uint32_t atime; 562 | uint32_t mtime; 563 | uint64_t length; 564 | char *name; 565 | char *uid; 566 | char *gid; 567 | char *muid; 568 | /* 9p2000.u extensions */ 569 | char *extension; 570 | uint32_t n_uid; 571 | uint32_t n_gid; 572 | uint32_t n_muid; 573 | 574 | char data[0]; 575 | }; 576 | 577 | struct Rerror { 578 | char *error; 579 | uint32_t errno; /* 9p2000.u extension */ 580 | }; 581 | 582 |
583 |
584 |
585 | 586 | 587 | 588 | 589 | Plan 9 Home Page 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | Security in Plan 9 598 | 599 | 600 | MIT LCS 601 | 602 | 603 | 604 | 605 | Bell Labs 606 | 607 | 608 | 609 | 610 | Bell Labs 611 | 612 | 613 | 614 | 615 | Avaya Labs and Bell Labs 616 | 617 | 618 | 619 | 620 | Bell Labs 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 |
629 | 630 | The 9p2000.L protocol extensions evolved out of contributions from a 631 | number of people including: 632 | 633 | Abhishek Kilkarni 634 | Russ Cox 635 | Lachester Ionkov 636 | Ron Minnich 637 | Andrey Mirtchoviski 638 | Rob Pike 639 | Eric Van Hensbergen 640 | Uriel (Contentious Objector) 641 | 642 | 643 | 644 | The 9P protocol was the result of work done by the Computing Science 645 | Research Center of AT&T Bell Labs (now a part of Lucent Technologies) and in 646 | particular: 647 | 648 | 649 | Rob Pike 650 | 651 | Dave Presotto 652 | 653 | Sape Mullender 654 | 655 | Ken Thompson 656 | 657 | Russ Cox 658 | 659 | 660 | 661 |
662 |
663 | 664 | This specification is derrived from the Plan 9 Documentation and Manual Pages. 665 | The source material is 666 | Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights Reserved. 667 | 668 | 669 | Extensions to the original source material are Copyright (C) 2010, the authors 670 | of this document (as specified in Authors List in the References section). 671 | 672 |
673 |
674 |
675 | -------------------------------------------------------------------------------- /tool/README.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | xml2rfc v1.33 20 | 21 | 22 | Dover Beach Consulting, Inc. 23 | 24 |
25 | 26 | POB 255268 27 | Sacramento CA 95865-5268 28 | US 29 | 30 | 31 | +1 916 483 8878 32 | mrose@dbc.mtview.ca.us 33 |
34 |
35 | 36 | 37 | AT&T Labs - Research 38 |
39 | 40 | 1 River Oaks Place 41 | San Jose 42 | CA 43 | 95134-1918 44 | US 45 | 46 | +1 408 493-8505 47 | fenner@research.att.com 48 |
49 |
50 | 51 | 52 | 53 |
54 | 55 | 56 | Montréal 57 | QC 58 | Canada 59 | 60 | charles.levert@gmail.com 61 |
62 |
63 | 64 | 65 |
66 | 67 | 68 |
69 | This is a package to convert memos written in XML to the RFC format. 70 | 71 | If you don't want to install any software, 72 | you can use the 73 | web-based service. 74 |
75 | 76 |
77 | You need to have Tcl/Tk version 8 running on your system. 78 | Tcl is a scripting language, 79 | Tk is Tcl with support for your windowing system. 80 | 81 | To get a source or binary distribution for your system, 82 | go to the 83 | Tcl Developer Xchange website 84 | and install it. 85 | If you get the binary distribution, 86 | this is pretty simple. 87 | 88 |
89 | Of course, 90 | you may already have Tcl version 8. 91 | To find out, 92 | try typing this command from the shell 93 | (or the “MS-DOS Prompt”): 94 | 95 | % tclsh 96 | 97 | If the program launches, 98 | you're good to go with Tcl version 8. 99 |
100 | 101 |
102 | If you are running under a windowing system (e.g., X or MS-Windows), 103 | you can also try: 104 | 105 | % wish 106 | 107 | If a new window comes up along with a “Console” window, 108 | then you're good to go with Tk version 8. 109 |
110 | 111 | Finally, 112 | you may notice a file called xml2sgml.tcl 113 | in the distribution. 114 | It contains some extra functionality for a few special users — 115 | so, if you don't know what it is, don't worry about it... 116 |
117 | 118 |
119 | Now test your installation. 120 | 121 |
122 |
123 | Type this command from the shell: 124 | 125 | % xml2rfc.tcl 126 | 127 |
128 | 129 |
130 | A new window should come up that looks like this: 131 | 134 | +------------------------------------------------------------+ 135 | | Convert XML to RFC | 136 | | | 137 | | Select input file: ____________________________ [Browse] | 138 | | | 139 | | Select output file: ____________________________ [Browse] | 140 | | | 141 | | [Convert] [Quit] | 142 | | | 143 | +------------------------------------------------------------+ 144 | 145 | Fill-in the blanks and click on [Convert]. 146 |
147 |
148 | 149 |
150 |
151 | Type this command from the shell: 152 | 153 | % tclsh 154 | 155 |
156 | 157 |
158 | If the program launches, type this command to it: 159 | 160 | % source xml2rfc.tcl 161 | 162 |
163 | 164 |
165 | and you should see these five lines: 166 | 167 | invoke as "xml2rfc input-file output-file" 168 | or "xml2txt input-file" 169 | or "xml2html input-file" 170 | or "xml2nroff input-file" 171 | or "xml2unpg input-file" 172 | 173 |
174 |
175 |
176 | 177 |
178 | Read the 2629bis 179 | document. 180 | In particular, 181 | Section 3 182 | has some good information. 183 | 184 |
185 |
186 | A processing instruction contains 187 | directives to an XML application. 188 | If you want to give directives to xml2rfc, 189 | the processing instructions (PIs) look like this: 190 | 191 | <?rfc keyword='value'?> 192 | 193 | Of course, 194 | if you like the default behavior, 195 | you don't need any behavior-modifying directives in your input file! 196 | Although xml2rfc 197 | supports putting several attribute-like directives in one PI, 198 | be warned that 199 | rfc2629.xslt 200 | does not support it and that there are issues in 201 | doing this for a non-include-file directive following an 202 | include-file directive. 203 | It is good practice to always surround the value with either 204 | single or double quotes. 205 |
206 | 207 |
208 | 209 | The list of valid keywords are: 210 | 211 | keyword 212 | default 213 | meaning 214 | 215 | artworkdelimiter 216 | "" 217 | when producing txt or nroff files, use this string to delimit artwork 218 | 219 | artworklines 220 | 0 221 | when producing txt or nroff files, add this many blank lines around artwork 222 | 223 | authorship 224 | yes 225 | render author information 226 | 227 | autobreaks 228 | yes 229 | automatically force page breaks to avoid widows and orphans (not perfect) 230 | 231 | background 232 | "" 233 | when producing a html file, use this image 234 | 235 | colonspace 236 | no 237 | put two spaces instead of one after each colon (“:”) in txt or nroff files 238 | 239 | comments 240 | no 241 | render <cref> information 242 | 243 | compact 244 | (rfcedstyle) 245 | when producing a txt/nroff file, try to conserve vertical whitespace 246 | (the default value is the current value of the rfcedstyle PI) 247 | 248 | docmapping 249 | no 250 | use hierarchical tags (e.g., <h1>, <h2>, etc.) 251 | for (sub)section titles 252 | 253 | editing 254 | no 255 | insert editing marks for ease of discussing draft versions 256 | 257 | emoticonic 258 | no 259 | automatically replaces input sequences such as 260 | |*text| by, e.g., 261 | <strong>text</strong> 262 | in html output 263 | 264 | footer 265 | "" 266 | override the center footer string 267 | 268 | header 269 | "" 270 | override the leftmost header string 271 | 272 | include 273 | n/a 274 | see 275 | 276 | inline 277 | no 278 | if comments is "yes", 279 | then render comments inline; 280 | otherwise render them in an “Editorial Comments” section 281 | 282 | iprnotified 283 | no 284 | include boilerplate from Section 10.4(d) of 285 | 286 | linkmailto 287 | yes 288 | generate mailto: URL, as appropriate 289 | 290 | notedraftinprogress 291 | yes 292 | generates "(work in progress)", as appropriate 293 | 294 | linefile 295 | n/a 296 | a string like "35:file.xml" or just "35" 297 | (file name then defaults to the containing file's real name 298 | or to the latest linefile specification that changed it) 299 | that will be used to override xml2rfc's 300 | reckoning of the current input position (right after this PI) 301 | for warning and error reporting purposes (line numbers are 1-based) 302 | 303 | needLines 304 | n/a 305 | an integer hint indicating how many contiguous lines are needed at this point in the output 306 | 307 | private 308 | "" 309 | produce a private memo rather than an RFC or Internet-Draft 310 | 311 | refparent 312 | "References" 313 | title of the top-level section containing all references 314 | 315 | rfcedstyle 316 | no 317 | attempt to closely follow finer details 318 | from the latest observable RFC-Editor style 319 | so as to minimize the probability of 320 | being sent back corrections after submission; 321 | this directive is a kludge whose exact behavior 322 | is likely to change on a regular basis 323 | to match the current flavor of the month; 324 | presently, 325 | it will capitalize the adjective “This” 326 | in automatically generated headings, 327 | use the variant “acknowledgement” spelling instead of 328 | Merriam Webster's main “acknowledgment” dictionary entry, 329 | use the “eMail” spelling instead of 330 | Knuth's more modern “email” spelling, 331 | only put one blank line instead of two before top sections, 332 | omit “Intellectual Property and Copyright Statements” 333 | and “Author's Address” from the table of content, 334 | and not limit the indentation to a maximum tag length 335 | in <references> sections. 336 | 337 | 338 | rfcprocack 339 | no 340 | if there already is an automatically generated Acknowledg(e)ment section, 341 | pluralize its title and add a short sentence acknowledging that 342 | xml2rfc was used in the document's production 343 | to process an input XML source file in RFC-2629 format 344 | 345 | slides 346 | no 347 | when producing a html file, produce multiple files for a slide show 348 | 349 | sortrefs 350 | no 351 | sort references 352 | 353 | strict 354 | no 355 | try to enforce the ID-nits conventions and DTD validity 356 | 357 | subcompact 358 | (compact) 359 | if compact is "yes", 360 | then you can make things a little less compact by setting this to "no" 361 | (the default value is the current value of the compact PI) 362 | 363 | symrefs 364 | yes 365 | use anchors rather than numbers for references 366 | 367 | toc 368 | no 369 | generate a table-of-contents 370 | 371 | tocappendix 372 | yes 373 | control whether the word “Appendix” appears in the table-of-content 374 | 375 | tocdepth 376 | 3 377 | if toc is "yes", then this determines the depth of the table-of-contents 378 | 379 | tocindent 380 | yes 381 | if toc is "yes", then setting this to "yes" will indent subsections 382 | in the table-of-contents 383 | 384 | tocnarrow 385 | yes 386 | affects horizontal spacing in the table-of-content 387 | 388 | tocompact 389 | yes 390 | if toc is "yes", then setting this to "no" will make it a little less compact 391 | 392 | topblock 393 | yes 394 | put the famous header block on the first page 395 | 396 | typeout 397 | n/a 398 | during processing pass 2, print the value to standard output 399 | at that point in processing 400 | 401 | useobject 402 | no 403 | when producing a html file, 404 | use the <object> html element with inner replacement content 405 | instead of the <img> html element, 406 | when a source xml element includes an src attribute 407 | 408 | Remember that, 409 | as with everything else in XML, 410 | keywords and values are case-sensitive. 411 | 412 | 413 | With the exception of the needLines, 414 | typeout, and 415 | include directives, 416 | you normally put all of these processing instructions at the beginning 417 | of the document 418 | (right after the XML declaration). 419 |
420 | 421 |
422 |
423 | xml2rfc has an include-file facility, 424 | e.g., 425 | 426 | <?rfc include='file'?> 427 | 428 | xml2rfc will consult the 429 | XML_LIBRARY environment variable for a 430 | search path of where to look for files. 431 | (If this environment variable isn't set, 432 | the directory containing the file that contains the include-file 433 | directive is used.) 434 | The file's contents are inserted right after the PI. 435 | Putting non-include-file directives (especially needLines ones) 436 | after an include-file one in the same PI 437 | may not work as expected because of this. 438 | Remember that file names are generally case-sensitive and that 439 | an input file that is distributed to the outside world may be 440 | processed on a different operating system than that used by 441 | its author. 442 |
443 | 444 |
445 | You can also have xml2rfc set 446 | the XML_LIBRARY environment variable directly, 447 | by creating a file called .xml2rfc.rc in 448 | the directory where your 449 | main file is, 450 | e.g., 451 | 475 |
476 | 477 | There are links to various bibliographic databases (RFCs, I-Ds, and so on) 478 | on the xml2rfc 479 | homepage. 480 |
481 |
482 |
483 | 484 |
485 | The html 486 | rendering engine does not need to 487 | have a tightly defined page model. 488 | 489 | The txt and 490 | nr rendering engines 491 | assume the following page model. 492 | 493 | Each line has at most 72 columns from the left edge, 494 | including any left margin, but excluding the line terminator. 495 | Every output character is from the ASCII repertoire 496 | and the only control character used is the line-feed (LF); 497 | the character-tabulation (HT) character is never used. 498 | 499 | Each page has the following lines 500 | (in 1-based numbering, as reported to the user, but contrary to 501 | xml2rfc's 502 | internal 0-based numbering): 503 |  1: header line (blank line on first page) 504 |  2: blank line 505 |  3: blank line 506 |  4: 1st line of content 507 | ... 508 | 51: 48th line of content 509 | 52: blank line 510 | 53: blank line 511 | 54: blank line 512 | 55: footer line 513 | 56: form-feed character (followed by line terminator) 514 | 515 | Once processed through nroff 516 | and the fix.sh script (from 517 | 2-nroff.template), the nr 519 | output differs from this in two ways. 520 | It has three extra blank lines 521 | (that could be numbered -2, -1, and 0, for a total of six) 522 | at the very beginning of the document 523 | (so the first page is that much longer). 524 | It also has no line terminator following the 525 | very last form-feed character of the file. 526 | These differences originate in the design of 527 | the fix.sh script. 528 | 529 | Header and footer lines each have three parts: 530 | left, center, and right. 531 |
532 | 533 |
534 | A few additions have been made to the format originally defined in 535 | RFC 2629. 536 | In particular, 537 | Appendix C 538 | of the 2629bis document enumerates the additions. 539 | 540 |
541 | In addition, 542 | xml2rfc recognizes the undocumented 543 | src, 544 | alt, 545 | width, and 546 | height attributes in the 547 | figure and 548 | artwork elements, 549 | but only if HTML is being generated. 550 | Here are two examples, one for each case. 551 |
552 | Here, the attributes are added to the 553 | artwork element. 554 | 556 | This is the preamble. 557 | 559 | .-----------. 560 | | ASCII art | 561 | `-----------' 562 | 563 | This is the postamble. 564 |
565 | ]]> 566 | In this case, the 567 | preamble and 568 | postamble elements are kept and 569 | an img tag is placed in the HTML output 570 | to replace the whole artwork element 571 | and its textual drawing, which are ignored. 572 |
573 |
574 | Here, the attributes are added to the 575 | figure element. 576 | 579 | This is the preamble. 580 | 581 | .-----------. 582 | | ASCII art | 583 | `-----------' 584 | 585 | This is the postamble. 586 |
587 | ]]> 588 | In this case, 589 | an img tag is placed in the HTML output 590 | to replace the whole contents of the 591 | figure element 592 | (the preamble, 593 | artwork, and 594 | postamble inner elements 595 | and the textual drawing itself) 596 | which are ignored. 597 | 598 | 599 | xml2rfc also recognizes 600 | an undocumented align attribute 601 | (with possible values 602 | left, 603 | center, or 604 | right) 605 | in the 606 | figure and 607 | artwork elements. 608 | It affects the whole content of the targeted element 609 | for all types of generated output. 610 | Its default is inherited from the parent of its element. 611 | 612 | 613 |
614 | The artwork element from RFC 2629 615 | supports an optional type attribute. 616 | While most possible values are just ignored, 617 | including the special case 618 | where the attribute is unspecified or just empty, 619 | some values are recognized. 620 | In particular, type='abnf' 621 | can be used if the artwork 622 | contains an Augmented Backus-Naur Form (ABNF) 623 | syntax specification . 624 | As a special extension in its behavior, 625 | xml2rfc will attempt 626 | to validate the syntax and colorize the HTML output of ABNF, 627 | since it is so widely used in RFCs. 628 | It does this colorizing by relying 629 | on the full parsing it does right before, 630 | not on a quick and partial (e.g., line-by-line) pattern-based hack. 631 | ABNF is the only artwork type to benefit 632 | from this kind of internal support at this time. 633 | If the strict rfc-PI directive is activated, 634 | invalid ABNF content will cause xml2rfc 635 | to abort with an error message. 636 | Omitting the type attribute altogether 637 | is the obvious way to avoid having 638 | this validation and colorizing performed. 639 |
640 | For example (to be viewed in HTML): 641 | " 660 | ; bracketed string of SP and VCHAR 661 | without angles 662 | ; prose description, to be used as 663 | last resort 664 | ]]> 665 | This is from the 666 | original RFC on ABNF , 667 | with its minor mistakes in manually folded comment lines 668 | purposely left intact, for illustration. 669 | Since the result is still valid ABNF 670 | (but incorrect with respect to what was intended), 671 | this showcases how colorizing might give a human author 672 | (or editor or reader) 673 | a better chance to spot the three mistakes 674 | (and correct them, e.g., with extra semicolons, 675 | as has been done in 676 | a more recent version  677 | of the ABNF specification). 678 | Note that it is the white space characters 679 | at the beginning of the subsequent lines 680 | (including the commented ones) 681 | that conspire to extend the reach of those rules 682 | across several lines. 683 |
684 |
685 | 686 | 687 |
688 | 689 | The figure element's title attribute is ignored, 690 | except when generating HTML. 691 | 692 | The xref element's 693 | pageno attribute is ignored. 694 | 695 |
696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | The Internet Standards Process -- Revision 3 704 | 705 | Harvard University 706 |
707 | 708 | 1350 Mass. Ave. 709 | Cambridge 710 | MA 711 | 02138 712 | US 713 | +1 617 495 3864 714 | sob@harvard.edu
715 | 716 | 717 | This memo documents the process used by the Internet community for the standardization of protocols and procedures. It defines the stages in the standardization process, the requirements for moving a document between stages and the types of documents used during this process. It also addresses the intellectual property rights and copyright issues associated with the standards process.
718 | 719 | 720 | 721 | 722 |
723 | 724 | 725 | 726 | 727 | Augmented BNF for Syntax Specifications: ABNF 728 | 729 | Internet Mail Consortium 730 |
731 | 732 | 675 Spruce Dr. 733 | Sunnyvale 734 | CA 735 | 94086 736 | US 737 | +1 408 246 8253 738 | +1 408 249 6205 739 | dcrocker@imc.org
740 | 741 | Demon Internet Ltd. 742 |
743 | 744 | Dorking Business Park 745 | Dorking 746 | Surrey 747 | England 748 | RH4 1HN 749 | UK 750 | paulo@turnpike.com
751 | 752 | ABNF 753 | Augmented 754 | Backus-Naur 755 | Form 756 | electronic 757 | mail
758 | 759 | 760 | 761 | 762 | 763 |
764 | 765 | 766 | 767 | 768 | Augmented BNF for Syntax Specifications: ABNF 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 |
780 | 781 |
782 | 783 | Install Tcl/Tk 8.3.4 784 | 785 | When you performed Step 1, 786 | a folder in your Extensions folder 787 | called Tool Command Language was 788 | created. 789 | Create a new folder under Extensions, 790 | with any name you like. 791 | 792 | Drag the file xml2rfc.tcl onto the 793 | Drag & Drop Tclets 794 | application that was installed in Step 1. 795 | 796 | When asked for an appropriate wish stub, 797 | select Wish 8.3.4. 798 | 799 | The Drag & Drop Tclets 800 | application will write out an executable version of 801 | xml2rfc. 802 | 803 |
804 | 805 |
806 | The file rfc2629.xslt 807 | can be used with an XSLT-capable formatter 808 | (e.g., Saxon, Xalan, xsltproc, or MSIE6) to produce HTML. 809 | A word of warning though: 810 | the XSLT script only supports a limited subset of 811 | the processing instruction directives discussed 812 | earlier 813 | and each attribute-like directive must be in its own PI 814 | (i.e., <?rfc keyword='value'?>). 815 | The 816 | latest version 817 | (and full distribution ZIP file) 818 | can be downloaded from the 819 | original site 820 | which also hosts its 821 | documentation. 822 |
823 | 824 |
825 | 826 | 827 | install Cygwin: follow instructions at the 828 | Cygwin website (also visit the 829 | Cygwin pages on the Tcl Wiki), 830 | make sure to 831 | select tcltk in Libs 832 | 833 | place a copy of xml2rfc files on a local drive, e.g., in 834 | C:\xml2rfc NOTE: for xml2rfc-1.26 and 835 | earlier, see NOTE below. 836 | 837 | place a copy of bibxml* files on a local drive, e.g., in 838 | C:\xmlbib\ 839 | 840 | edit .xml2rfc.rc to indicate the bibxml* library path, e.g., as per Step 3, 842 | change ~/rfca/bibxml/* to /cygdrive/c/xmlbib/* 844 | 845 | run xml2rfc as follows: tclsh 846 | /cygdrive/c/xml2rfc/xml2rfc.tcl 847 | 848 | 849 | 850 | NOTE: for xml2rfc-1.26 and earlier ONLY, add an additional modification in Step 3: 851 | 852 | 853 | Patch .xml2rfc.rc (xml2rfc-1.26 and earlier). 854 | The purpose of the patch 855 | is to append library names in a format compatible with the OS; on 856 | MS-Windows XP, this replaces the Cygwin's / 857 | with MS-Windows' \. 858 | 859 | 860 | 861 | 862 |
863 | 864 | --- .xml2rfc.rc.orig Thu Jul 24 13:58:00 2003 865 | +++ .xml2rfc.rc Wed Oct 20 10:59:02 2004 866 | @@ -9,7 +9,8 @@ 867 | if {[catch { set env(XML_LIBRARY) } library]} { 868 | set library "" 869 | foreach bibxmlD [lsort -dictionary [glob -nocomplain ~/rfcs/bibxml/*]] { 870 | - append library $sep$bibxmlD 871 | + set natbibD [file nativename $bibxmlD] 872 | + append library $sep$natbibD 873 | } 874 | } 875 | 876 |
877 |
878 | 879 |
880 | A special thanks to Charles Levert for the v1.29 release, 881 | which includes many internal improvements made to the rendering engines. 882 |
883 | 884 |
885 | Copyright © 2003–2008 Marshall T. Rose 886 | 887 | Hold harmless the author, and any lawful use is allowed. 888 |
889 |
890 | 891 | --------------------------------------------------------------------------------