Return-Path: Delivered-To: apmail-httpd-dev-archive@www.apache.org Received: (qmail 66073 invoked from network); 29 Nov 2004 09:52:37 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 29 Nov 2004 09:52:37 -0000 Received: (qmail 53552 invoked by uid 500); 29 Nov 2004 09:51:07 -0000 Delivered-To: apmail-httpd-dev-archive@httpd.apache.org Received: (qmail 53447 invoked by uid 500); 29 Nov 2004 09:51:06 -0000 Mailing-List: contact dev-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list dev@httpd.apache.org Received: (qmail 53345 invoked by uid 99); 29 Nov 2004 09:51:05 -0000 X-ASF-Spam-Status: No, hits=0.1 required=10.0 tests=MIME_BASE64_NO_NAME,URG_BIZ X-Spam-Check-By: apache.org Received-SPF: neutral (hermes.apache.org: local policy) Received: from sodan.org (HELO www.sodan.org) (210.224.163.21) by apache.org (qpsmtpd/0.28) with ESMTP; Mon, 29 Nov 2004 01:51:01 -0800 Received: from localhost.logos.t.u-tokyo.ac.jp (localhost [127.0.0.1]) by www.sodan.org (8.9.3p2+3.2W/3.7W/Sodan.smtpfeed) with ESMTP id SAA23481; Mon, 29 Nov 2004 18:50:32 +0900 Mail-Copies-To: nobody To: docs@httpd.apache.org Cc: dev@httpd.apache.org Subject: Re: Web site translation From: Yoshiki Hayashi References: <87mzx1tlv3.fsf@sodan.org> <782A116ABEB6AF3B07766597@10.0.1.12> <200411290952.28360@news.perlig.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Mon_Nov_29_18:49:19_2004-1" Date: Mon, 29 Nov 2004 18:49:19 +0900 In-Reply-To: <200411290952.28360@news.perlig.de> (=?ISO-8859-1?Q?Andr=E9?= Malo's message of "Mon, 29 Nov 2004 09:52:28 +0100") Message-ID: <874qj9ugrk.fsf@sodan.org> User-Agent: T-gnus/6.15.16 (based on Oort Gnus v0.16) X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N --Multipart_Mon_Nov_29_18:49:19_2004-1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Andr=E9 Malo writes: > * Justin Erenkrantz wrote: > >> --On Monday, November 29, 2004 11:44 AM +0900 Yoshiki Hayashi >> >> wrote: >> > More than a year after I proposed web site translation, I >> > finally sat down for a while and did necessary coding to add >> > translation support. >> >> BTW, this might need to be discussed on dev@httpd as well. This is going >> to affect all developers who touch the site. > > In fact, I wanted to wait until we have the new layout and a better build= =20 > system (with xslt). We also need to think about the paths of the=20 > translation in conclusion with the docs etc. I didn't know you were going to replace the build system. All I knew was CSS work and it doesn't conflict with my change because layout is only handled by site.vsl which I didn't really change much. Could you elaborate on your new build system? I've never heard of it before. I'd rather stick with current system than going XSLT (I hate XSLT as a language). If we change the build system at all, I think it's better to consider using projects like forrest than creating yet another documentation system. >> > Does anyone object to the direction we are going? i.e., >> > having translation of web site at all? >> >> No, not really. However, I'm concerned about how long the translations >> could stay out of sync. There's going to be times when we try to post an >> urgent notice and if the translator is asleep (or AWOL for a few weeks), >> then that's troublesome. One idea: perhaps when we change the English >> version of a page, we pull all translations until the individual >> translation is sync'd up? > > That could be done similar to the docs. Either a note on the top or just = > dropping outdated translation (perhaps a combination). That's exactly what I had in mind. >> > Now that we have true version control software, I think >> > the way to go is to create a branch like Paul did. >> > I'm going to create >> > https://svn.apache.org/repos/asf/httpd/site/branches/translation >> > unless someone objects. >> > Is there any policy on how to create and use branch? >> >> That's fine, I guess. However, if we have two branches going: one for >> css deployment and translation, that could end up being nasty to merge >> back together.... > > One of the reasons I would wait. As I said above, my work doesn't conflict with CSS work. Translation focuses on contents whereas CSS does on layout. Thanks to Velocity, those two are mostly separated. I also don't intent to start translation on the branch. It should wait after the build system is moved to main branch and it can even wait until the CSS change goes to the trunk. It's main purpose is to give people time to look at the build system and raise concerns and/or brush up the build system. Justin Erenkrantz writes: >> I extended Anakia to do some new things like providing >> context to get available languages and getting the >> destination filename. I'd like to put the source code >> somewhere in Subversion repository. Where shoud I put it? >> https://svn.apache.org/repos/asf/httpd/site-build looks like a >> good candidate to me. > > First, you should post the source code changes either to here or dev@http= d so=20 > that we can review it. I'm not sure what exactly you changed. Did you c= hange=20 > Velocity? Or, just the Velocity templates that we used? -- justin It's both. I extended AnakiaTask to contain additional contexts to make some of the operation required by translation possible. What I have done is to add mapper support to map *.xml to *.html.en and *.xml.ja to *.html.ja.euc-jp etc. and add new context $language to get list of available translations for a given file. I also modified template to include "Available Language:" thingy at the bottom of the page (you can see it at http://www.apache.org/~yoshiki/httpd-site/index.html) and added a template and a build rule to generate typemap. I attach the patches. The build system change is also in my copied working copy at cvs.apache.org:~yoshiki/httpd-site. You need jars in there to actually try it out. --Multipart_Mon_Nov_29_18:49:19_2004-1 Content-Type: text/plain; charset=US-ASCII; type=patch Content-Disposition: inline; filename="tools.diff" Content-Transfer-Encoding: 7bit --- AnakiaTask.java 2004-11-29 18:46:35.000000000 +0900 +++ HttpdSiteDoc.java 2004-11-29 09:30:12.000000000 +0900 @@ -1,4 +1,4 @@ -package org.apache.velocity.anakia; +package org.apache.httpd.docs; /* * Copyright 2001-2004 The Apache Software Foundation. @@ -28,6 +28,8 @@ import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.MatchingTask; +import org.apache.tools.ant.types.Mapper; +import org.apache.tools.ant.util.FileNameMapper; import org.xml.sax.SAXParseException; @@ -42,6 +44,12 @@ import org.apache.velocity.util.StringUtils; import org.apache.velocity.VelocityContext; +import org.apache.velocity.anakia.AnakiaJDOMFactory; +import org.apache.velocity.anakia.OutputWrapper; +import org.apache.velocity.anakia.TreeWalker; +import org.apache.velocity.anakia.XPathTool; +import org.apache.velocity.anakia.Escape; +import org.apache.httpd.docs.Language; /** * The purpose of this Ant Task is to allow you to use @@ -58,7 +66,7 @@ * @author Attila Szegedi * @version $Id: AnakiaTask.java,v 1.38 2004/03/20 03:35:50 dlr Exp $ */ -public class AnakiaTask extends MatchingTask +public class HttpdSiteDoc extends MatchingTask { /** {@link SAXBuilder} instance to use */ private SAXBuilder builder; @@ -102,10 +110,13 @@ /** the VelocityEngine instance to use */ private VelocityEngine ve = new VelocityEngine(); + /** Mapper to use. */ + private Mapper mapperElement = null; + /** * Constructor creates the SAXBuilder. */ - public AnakiaTask() + public HttpdSiteDoc() { builder = new SAXBuilder(); builder.setFactory(new AnakiaJDOMFactory()); @@ -297,6 +308,18 @@ } /** + * Defines the mapper to map source to destination files. + * @exception BuildException if more than one mapper is defined + */ + public void addMapper(Mapper mapper) { + if (mapperElement != null) { + throw new BuildException("Cannot define more than one mapper", + getLocation()); + } + mapperElement = mapper; + } + + /** * Process an XML file using Velocity */ private void process(File baseDir, String xmlFile, File destDir, @@ -310,10 +333,26 @@ { // the current input file relative to the baseDir inFile = new File(baseDir,xmlFile); - // the output file relative to basedir - outFile = new File(destDir, - xmlFile.substring(0, - xmlFile.lastIndexOf('.')) + extension); + + FileNameMapper mapper = null; + if (mapperElement != null) { + mapper = mapperElement.getImplementation(); + } else { + mapper = new StyleMapper(); + } + + String[] outFileName = mapper.mapFileName(xmlFile); + if (outFileName == null || outFileName.length == 0) { + log("Skipping " + inFile + " it cannot get mapped to output.", + Project.MSG_VERBOSE); + return; + } else if (outFileName == null || outFileName.length > 1) { + log("Skipping " + inFile + " its mapping is ambiguos.", + Project.MSG_VERBOSE); + return; + } + + outFile = new File(destDir, outFileName[0]); // only process files that have changed if (lastModifiedCheck == false || @@ -355,6 +394,8 @@ context.put ("xpath", new XPathTool() ); context.put ("escape", new Escape() ); context.put ("date", new java.util.Date() ); + context.put ("fileName", outFile.getName()); + context.put ("language", new Language(inFile.toString())); // only put this into the context if it exists. if (projectDocument != null) @@ -470,4 +511,24 @@ } } } + + + /** + * Mapper implementation of the "traditional" way <xslt> + * mapped filenames. + * + *

If the file has an extension, chop it off. Append whatever + * the user has specified as extension or ".html".

+ */ + private class StyleMapper implements FileNameMapper { + public void setFrom(String from) {} + public void setTo(String to) {} + public String[] mapFileName(String xmlFile) { + int dotPos = xmlFile.lastIndexOf('.'); + if (dotPos > 0) { + xmlFile = xmlFile.substring(0, dotPos); + } + return new String[] {xmlFile + extension}; + } + } } --- /dev/null 2004-09-06 10:55:55.000000000 +0900 +++ Language.java 2004-11-29 11:10:28.000000000 +0900 @@ -0,0 +1,67 @@ +package org.apache.httpd.docs; + +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.Vector; +import java.io.File; + +/** + * This class is to get available languages for a given file. + * It assumes the files follow the pattern *.xml.?? where ?? is + * a two letter language code. If the language code is omitted, + * it is assumed to be in English. + */ +public class Language +{ + public Language(String path) { + this.path = path; + } + + public Vector availableLanguages() { + Vector codes = new Vector(); + File file = new File(path); + + String fileName = file.getName(); + int extensionIndex = fileName.lastIndexOf(".xml"); + if (extensionIndex != -1) { + fileName = fileName.substring(0, extensionIndex + 4); + } + + File parentDir = file.getParentFile(); + + if (parentDir == null) + return codes; + + String[] files = parentDir.list(); + + for (int i = 0; i < files.length; i++) { + if (files[i].startsWith(fileName)) { + if (files[i].equals(fileName)) { + codes.add("en"); + } else { + String code = files[i].substring(fileName.length() + 1); + if (code.length() == 2) { + codes.add(code); + } + } + } + } + return codes; + } + + private String path; +} --Multipart_Mon_Nov_29_18:49:19_2004-1 Content-Type: text/plain; charset=UTF-8; type=patch Content-Disposition: inline; filename="site.diff" Content-Transfer-Encoding: base64 SW5kZXg6IGJ1aWxkLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBidWlsZC54bWwJKHJldmlzaW9u IDEwNjcwNSkKKysrIGJ1aWxkLnhtbAkod29ya2luZyBjb3B5KQpAQCAtMTIsMjQgKzEyLDI0 IEBACiAgICAgPC9wYXRoPgogCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIj4gICAgCi0g ICAgICAgIDxhdmFpbGFibGUgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnZlbG9jaXR5LmFuYWtp YS5BbmFraWFUYXNrIiAKLSAgICAgICAgICAgIHByb3BlcnR5PSJBbmFraWFUYXNrLnByZXNl bnQiPgorICAgICAgICA8YXZhaWxhYmxlIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5odHRwZC5k b2NzLkh0dHBkU2l0ZURvYyIgCisgICAgICAgICAgICBwcm9wZXJ0eT0iSHR0cGRTaXRlRG9j LnByZXNlbnQiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+ CiAgICAgICAgIDwvYXZhaWxhYmxlPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBk ZXBlbmRzPSJwcmVwYXJlIiBuYW1lPSJwcmVwYXJlLWVycm9yIiB1bmxlc3M9IkFuYWtpYVRh c2sucHJlc2VudCI+CisgICAgPHRhcmdldCBkZXBlbmRzPSJwcmVwYXJlIiBuYW1lPSJwcmVw YXJlLWVycm9yIiB1bmxlc3M9Ikh0dHBkU2l0ZURvYy5wcmVzZW50Ij4KICAgICAgICAgPGVj aG8+Ci0gICAgICAgICAgICBBbmFraWFUYXNrIGlzIG5vdCBwcmVzZW50ISBQbGVhc2UgY2hl Y2sgdG8gbWFrZSBzdXJlIHRoYXQgCi0gICAgICAgICAgICB2ZWxvY2l0eS5qYXIgaXMgaW4g eW91ciBjbGFzc3BhdGguCisgICAgICAgICAgICBIdHRwZFNpdGVEb2MgaXMgbm90IHByZXNl bnQhIFBsZWFzZSBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCAKKyAgICAgICAgICAgIGh0dHBk LWRvY3MuamFyIGlzIGluIHlvdXIgY2xhc3NwYXRoLgogICAgICAgICA8L2VjaG8+CiAgICAg PC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRvY3MiIGRlcGVuZHM9InByZXBhcmUt ZXJyb3IiIGlmPSJBbmFraWFUYXNrLnByZXNlbnQiPgotICAgICAgICA8dGFza2RlZiBuYW1l PSJhbmFraWEiIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS52ZWxvY2l0eS5hbmFraWEuQW5ha2lh VGFzayI+CisgICAgPHRhcmdldCBuYW1lPSJkb2NzIiBkZXBlbmRzPSJwcmVwYXJlLWVycm9y IiBpZj0iSHR0cGRTaXRlRG9jLnByZXNlbnQiPgorICAgICAgICA8dGFza2RlZiBuYW1lPSJo dHRwZERvY3MiIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5odHRwZC5kb2NzLkh0dHBkU2l0ZURv YyI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAg ICAgPC90YXNrZGVmPgotICAgICAgICA8YW5ha2lhIGJhc2VkaXI9IiR7ZG9jcy5zcmN9IiBk ZXN0ZGlyPSIke2RvY3MuZGVzdH0vIgorICAgICAgICA8aHR0cGREb2NzIGJhc2VkaXI9IiR7 ZG9jcy5zcmN9IiBkZXN0ZGlyPSIke2RvY3MuZGVzdH0vIgogICAgICAgICAgICAgIGV4dGVu c2lvbj0iLmh0bWwiIHN0eWxlPSIuL3NpdGUudnNsIgogICAgICAgICAgICAgIHByb2plY3RG aWxlPSJzdHlsZXNoZWV0cy9wcm9qZWN0LnhtbCIKICAgICAgICAgICAgICBleGNsdWRlcz0i Kiovc3R5bGVzaGVldHMvKiogZW1wdHkueG1sICoqL3Rlc3QvZmxvb2QvKiIKQEAgLTM3LDkg KzM3LDMyIEBACiAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkQ2hlY2s9InRydWUiCiAgICAg ICAgICAgICAgdGVtcGxhdGVQYXRoPSIke2RvY3Muc3JjfS9zdHlsZXNoZWV0cyIKICAgICAg ICAgPgotICAgICAgICA8L2FuYWtpYT4KKyAgICAgICAgPG1hcHBlciB0eXBlPSJnbG9iIiBm cm9tPSIqLnhtbCIgdG89IiouaHRtbC5lbiIvPgorICAgICAgICA8L2h0dHBkRG9jcz4KIAot ICAgICAgICA8YW5ha2lhIGJhc2VkaXI9IiR7ZG9jcy5zcmN9IiAKKyAgICAgICAgPGh0dHBk RG9jcyBiYXNlZGlyPSIke2RvY3Muc3JjfSIgZGVzdGRpcj0iJHtkb2NzLmRlc3R9LyIKKyAg ICAgICAgICAgICBleHRlbnNpb249Ii5odG1sIiBzdHlsZT0iLi9zaXRlLnZzbCIKKyAgICAg ICAgICAgICBwcm9qZWN0RmlsZT0ic3R5bGVzaGVldHMvamEvcHJvamVjdC54bWwiCisgICAg ICAgICAgICAgZXhjbHVkZXM9IioqL3N0eWxlc2hlZXRzLyoqIGVtcHR5LnhtbCAqKi90ZXN0 L2Zsb29kLyoiCisgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyoueG1sLmphIgorICAgICAg ICAgICAgIGxhc3RNb2RpZmllZENoZWNrPSJ0cnVlIgorICAgICAgICAgICAgIHRlbXBsYXRl UGF0aD0iJHtkb2NzLnNyY30vc3R5bGVzaGVldHMiCisgICAgICAgICAgICAgdmVsb2NpdHlQ cm9wZXJ0aWVzRmlsZT0icHJvcGVydGllcy9qYSIKKyAgICAgICAgPgorICAgICAgICA8bWFw cGVyIHR5cGU9Imdsb2IiIGZyb209IioueG1sLmphIiB0bz0iKi5odG1sLmphLmV1Yy1qcCIv PgorICAgICAgICA8L2h0dHBkRG9jcz4KKworICAgICAgICA8aHR0cGREb2NzIGJhc2VkaXI9 IiR7ZG9jcy5zcmN9IiBkZXN0ZGlyPSIke2RvY3MuZGVzdH0vIgorICAgICAgICAgICAgIGV4 dGVuc2lvbj0iLmh0bWwiIHN0eWxlPSIuL3R5cGVtYXAudnNsIgorICAgICAgICAgICAgIHBy b2plY3RGaWxlPSJzdHlsZXNoZWV0cy9sYW5nLnhtbCIKKyAgICAgICAgICAgICBleGNsdWRl cz0iKiovc3R5bGVzaGVldHMvKiogZW1wdHkueG1sICoqL3Rlc3QvZmxvb2QvKiIKKyAgICAg ICAgICAgICBpbmNsdWRlcz0iKiovKi54bWwiCisgICAgICAgICAgICAgbGFzdE1vZGlmaWVk Q2hlY2s9InRydWUiCisgICAgICAgICAgICAgdGVtcGxhdGVQYXRoPSIke2RvY3Muc3JjfS9z dHlsZXNoZWV0cyIKKyAgICAgICAgPgorICAgICAgICA8L2h0dHBkRG9jcz4KKworICAgICAg ICA8aHR0cGREb2NzIGJhc2VkaXI9IiR7ZG9jcy5zcmN9IiAKICAgICAgICAgICAgICBkZXN0 ZGlyPSIke2RvY3MuZGVzdH0iCiAgICAgICAgICAgICAgZXh0ZW5zaW9uPSIuaHRtbCIgc3R5 bGU9Ii4vc2l0ZS52c2wiCiAgICAgICAgICAgICAgcHJvamVjdEZpbGU9InN0eWxlc2hlZXRz L2Zsb29kLnhtbCIKQEAgLTQ4LDcgKzcxLDcgQEAKICAgICAgICAgICAgICBsYXN0TW9kaWZp ZWRDaGVjaz0idHJ1ZSIKICAgICAgICAgICAgICB0ZW1wbGF0ZVBhdGg9IiR7ZG9jcy5zcmN9 L3N0eWxlc2hlZXRzIgogICAgICAgICA+Ci0gICAgICAgIDwvYW5ha2lhPgorICAgICAgICA8 L2h0dHBkRG9jcz4KIAogICAgICAgICA8Y29weSB0b2Rpcj0iJHtkb2NzLmRlc3R9LyIgZmls dGVyaW5nPSJubyI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZG9jcy5zcmN9LyI+ CkluZGV4OiBwcm9wZXJ0aWVzL2phCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHByb3BlcnRpZXMvamEJ KHJldmlzaW9uIDApCisrKyBwcm9wZXJ0aWVzL2phCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDMgQEAKK2ZpbGUucmVzb3VyY2UubG9hZGVyLnBhdGg9eGRvY3Mvc3R5bGVzaGVldHMKK2lu cHV0LmVuY29kaW5nPXV0Zi04CitvdXRwdXQuZW5jb2Rpbmc9ZXVjLWpwCkluZGV4OiB4ZG9j cy9zdHlsZXNoZWV0cy9sYW5nLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB4ZG9jcy9zdHlsZXNo ZWV0cy9sYW5nLnhtbAkocmV2aXNpb24gMCkKKysrIHhkb2NzL3N0eWxlc2hlZXRzL2xhbmcu eG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi IGVuY29kaW5nPSJJU08tODg1OS0xIj8+Cis8cHJvamVjdCBocmVmPSJodHRwOi8vaHR0cGQu YXBhY2hlLm9yZy8iPgorCis8ZW4+Cis8ZXh0ZW5zaW9uPi5lbjwvZXh0ZW5zaW9uPgorPGNo YXJzZXQ+aXNvLTg4NTktMTwvY2hhcnNldD4KKzwvZW4+CisKKzxqYT4KKzxleHRlbnNpb24+ LmphLmV1Yy1qcDwvZXh0ZW5zaW9uPgorPGNoYXJzZXQ+ZXVjLWpwPC9jaGFyc2V0PgorPC9q YT4KKworPC9wcm9qZWN0PgpJbmRleDogeGRvY3Mvc3R5bGVzaGVldHMvdHlwZW1hcC52c2wK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0geGRvY3Mvc3R5bGVzaGVldHMvdHlwZW1hcC52c2wJKHJldmlz aW9uIDApCisrKyB4ZG9jcy9zdHlsZXNoZWV0cy90eXBlbWFwLnZzbAkocmV2aXNpb24gMCkK QEAgLTAsMCArMSw2IEBACisjZm9yZWFjaCAoICRsYW5nIGluICRsYW5ndWFnZS5hdmFpbGFi bGVMYW5ndWFnZXMoKSApCitVUkk6ICR7ZmlsZU5hbWV9JHByb2plY3QuZ2V0Q2hpbGQoJGxh bmcpLmdldENoaWxkKCJleHRlbnNpb24iKS5nZXRUZXh0KCkKK0NvbnRlbnQtTGFuZ3VhZ2U6 ICRsYW5nCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0kcHJvamVjdC5nZXRD aGlsZCgkbGFuZykuZ2V0Q2hpbGQoImNoYXJzZXQiKS5nZXRUZXh0KCkKKworI2VuZApJbmRl eDogeGRvY3Mvc3R5bGVzaGVldHMvc2l0ZS52c2wKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geGRvY3Mv c3R5bGVzaGVldHMvc2l0ZS52c2wJKHJldmlzaW9uIDEwNjcwNSkKKysrIHhkb2NzL3N0eWxl c2hlZXRzL3NpdGUudnNsCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDEzIEBACiAg ICAgPC90ZD4KICAgIDwvdHI+CiAgICA8IS0tIEZPT1RFUiAtLT4KKyAgIDx0cj48dGQgY29s c3Bhbj0iMiIgYWxpZ249InJpZ2h0Ij4KKyAgICAgQXZhaWxhYmxlIExhbmd1YWdlczoKKyAg ICAgI3NldCAoJGJhc2VIdG1sID0gJGZpbGVOYW1lLnN1YnN0cmluZygwLCAkZmlsZU5hbWUu bGFzdEluZGV4T2YoIi5odG1sIikpKQorICAgICAjZm9yZWFjaCAoICRsYW5nIGluICRsYW5n dWFnZS5hdmFpbGFibGVMYW5ndWFnZXMoKSApCisgICAgICAgPGEgaHJlZj0iJHJlbGF0aXZl UGF0aC8ke2Jhc2VIdG1sfS5odG1sLiRsYW5nIj4kbGFuZzwvYT4KKyAgICAgI2VuZAorICAg PC90ZD48L3RyPgogICAgPHRyPjx0ZCBjb2xzcGFuPSIyIj48aHIgbm9zaGFkZT0ibm9zaGFk ZSIgc2l6ZT0iMSIvPjwvdGQ+PC90cj4KICAgIDx0cj48dGQgY29sc3Bhbj0iMiIgYWxpZ249 ImNlbnRlciI+CiAgICAgICAgIDxmb250IHNpemU9Ii0xIj4KQEAgLTI1OCwzICsyNjUsNCBA QAogIDwvYm9keT4KIDwvaHRtbD4KICNlbmQKKwpJbmRleDogeGRvY3Mvc3R5bGVzaGVldHMv amEvcHJvamVjdC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geGRvY3Mvc3R5bGVzaGVldHMvamEv cHJvamVjdC54bWwJKHJldmlzaW9uIDApCisrKyB4ZG9jcy9zdHlsZXNoZWV0cy9qYS9wcm9q ZWN0LnhtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0i MS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IGhyZWY9Imh0dHA6Ly9odHRwZC5h cGFjaGUub3JnLyI+CisKKzx0aXRsZT5UaGUgQXBhY2hlIEhUVFAgU2VydmVyIFByb2plY3Q8 L3RpdGxlPgorPGJvZHk+Cis8bWVudT48dGl0bGU+6YeN6KaBPC90aXRsZT4KKyAgPGxpPjxh IGhyZWY9Ii9BQk9VVF9BUEFDSEUuaHRtbCI+QXBhY2hlIOOBq+mWouOBl+OBpjwvYT48L2xp PgorICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLyI+44Op 44Kk44K744Oz44K5PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvZG9jcy9taXNjL0ZBUS5o dG1sIj5GQVE8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii9zZWN1cml0eV9yZXBvcnQuaHRt bCI+44K744Kt44Ol44Oq44OG44KjPGJyIC8+44Os44Od44O844OIPC9hPjwvbGk+Cis8L21l bnU+CisKKzxtZW51Pjx0aXRsZT7jg4Djgqbjg7Pjg63jg7zjg4khPC90aXRsZT4KKyAgPGxp PjxhIGhyZWY9Ii9kb3dubG9hZC5jZ2kiPuODn+ODqeODvOOBi+OCiTwvYT48L2xpPgorPC9t ZW51PgorCis8bWVudT48dGl0bGUgaHJlZj0iL2RvY3MtcHJvamVjdC8iPuODieOCreODpeOD oeODs+ODiDwvdGl0bGU+CisgIDxsaT48YSBocmVmPSIvZG9jcy8iPkFwYWNoZSAxLjM8L2E+ PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii9kb2NzLTIuMC8iPkFwYWNoZSAyLjA8L2E+PC9saT4K KzwvbWVudT4KKworPG1lbnU+PHRpdGxlPuWPguWKoOOBmeOCizwvdGl0bGU+CisgIDxsaT48 YSBocmVmPSIvbGlzdHMuaHRtbCI+44Oh44O844Oq44Oz44Kw44Oq44K544OIPC9hPjwvbGk+ CisgIDxsaT48YSBocmVmPSIvYnVnX3JlcG9ydC5odG1sIj7jg5DjgrDloLHlkYo8L2E+PC9s aT4KKyAgPGxpPjxhIGhyZWY9Ii9kZXYvIj7plovnmbrogIXlkJHjgZHjga7mg4XloLE8L2E+ PC9saT4KKzwvbWVudT4KKworPG1lbnU+PHRpdGxlPuOCteODluODl+ODreOCuOOCp+OCr+OD iDwvdGl0bGU+CisgIDxsaT48YSBocmVmPSIvZG9jcy1wcm9qZWN0LyI+RG9jczwvYT48L2xp PgorICA8bGk+PGEgaHJlZj0iL3Rlc3QvIj5UZXN0PC9hPjwvbGk+CisgIDxsaT48YSBocmVm PSIvdGVzdC9mbG9vZC8iPkZsb29kPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvYXByZXEv Ij5saWJhcHJlcTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iL21vZHVsZXMvIj5Nb2R1bGVz PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSIvY2xpLyI+Y2xpICguTkVUKTwvYT48L2xpPgor PC9tZW51PgorCis8bWVudT48dGl0bGUgaHJlZj0iL2luZm8vIj7jgZ3jga7ku5Y8L3RpdGxl PgorICA8bGk+PGEgaHJlZj0iL2NvbnRyaWJ1dG9ycy8iPuiyoueMruiAhemBlDwvYT48L2xp PgorICA8bGk+PGEgaHJlZj0iL2F3YXJkcy5odG1sIj7os548L2E+PC9saT4KKyAgPGxpPjxh IGhyZWY9Imh0dHA6Ly93ZWJyaW5nLmNvbS9odWI/cmluZz1hcGFjaGVzdXBwb3J0IgorICAg ICAgPuOCteODneODvOODiDxiciAvPuOCpuOCp+ODluODquODs+OCsDwvYT48L2xpPiAKKzwv bWVudT4KKzwhLS0gIAorICA8TEk+PEEgSFJFRj0iYW5ub3VuY2VsaXN0Lmh0bWwiPkFubm91 bmNlbWVudHMgdmlhIEVtYWlsPC9BPgorICA8TEk+PEEgSFJFRj0icmVsYXRlZF9wcm9qZWN0 cy5odG1sIj5SZWxhdGVkIFByb2plY3RzPC9BPgorLS0+Cis8L2JvZHk+Cis8L3Byb2plY3Q+ Cg== --Multipart_Mon_Nov_29_18:49:19_2004-1 Content-Type: text/plain; charset=US-ASCII -- Yoshiki Hayashi --Multipart_Mon_Nov_29_18:49:19_2004-1--