You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(107) |
Dec
(67) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(76) |
Feb
(125) |
Mar
(72) |
Apr
(13) |
May
(18) |
Jun
(12) |
Jul
(129) |
Aug
(47) |
Sep
(1) |
Oct
(36) |
Nov
(128) |
Dec
(124) |
2002 |
Jan
(59) |
Feb
|
Mar
(14) |
Apr
(14) |
May
(72) |
Jun
(9) |
Jul
(3) |
Aug
(5) |
Sep
(18) |
Oct
(65) |
Nov
(28) |
Dec
(12) |
2003 |
Jan
(10) |
Feb
(2) |
Mar
(4) |
Apr
(33) |
May
(21) |
Jun
(9) |
Jul
(29) |
Aug
(34) |
Sep
(4) |
Oct
(8) |
Nov
(15) |
Dec
(4) |
2004 |
Jan
(26) |
Feb
(12) |
Mar
(11) |
Apr
(9) |
May
(7) |
Jun
|
Jul
(5) |
Aug
|
Sep
(3) |
Oct
(7) |
Nov
(1) |
Dec
(10) |
2005 |
Jan
(2) |
Feb
(72) |
Mar
(16) |
Apr
(39) |
May
(48) |
Jun
(97) |
Jul
(57) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(100) |
Dec
(24) |
2006 |
Jan
(15) |
Feb
(34) |
Mar
(33) |
Apr
(31) |
May
(79) |
Jun
(64) |
Jul
(41) |
Aug
(64) |
Sep
(31) |
Oct
(46) |
Nov
(55) |
Dec
(37) |
2007 |
Jan
(32) |
Feb
(61) |
Mar
(11) |
Apr
(58) |
May
(46) |
Jun
(30) |
Jul
(94) |
Aug
(93) |
Sep
(86) |
Oct
(69) |
Nov
(125) |
Dec
(177) |
2008 |
Jan
(169) |
Feb
(97) |
Mar
(74) |
Apr
(113) |
May
(120) |
Jun
(334) |
Jul
(215) |
Aug
(237) |
Sep
(72) |
Oct
(189) |
Nov
(126) |
Dec
(160) |
2009 |
Jan
(180) |
Feb
(45) |
Mar
(98) |
Apr
(140) |
May
(151) |
Jun
(71) |
Jul
(107) |
Aug
(119) |
Sep
(73) |
Oct
(121) |
Nov
(14) |
Dec
(6) |
2010 |
Jan
(13) |
Feb
(9) |
Mar
(10) |
Apr
(64) |
May
(3) |
Jun
(16) |
Jul
(7) |
Aug
(23) |
Sep
(17) |
Oct
(37) |
Nov
(5) |
Dec
(8) |
2011 |
Jan
(10) |
Feb
(11) |
Mar
(77) |
Apr
(11) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <pj...@us...> - 2009-05-29 02:42:23
|
Revision: 6419 http://jython.svn.sourceforge.net/jython/?rev=6419&view=rev Author: pjenvey Date: 2009-05-29 02:42:15 +0000 (Fri, 29 May 2009) Log Message: ----------- bump stack size on Windows to 1152k, the minimum needed for test_marshal Modified Paths: -------------- trunk/jython/src/shell/jython.bat Modified: trunk/jython/src/shell/jython.bat =================================================================== --- trunk/jython/src/shell/jython.bat 2009-05-29 02:34:44 UTC (rev 6418) +++ trunk/jython/src/shell/jython.bat 2009-05-29 02:42:15 UTC (rev 6419) @@ -77,7 +77,9 @@ :run set _JAVA_MEM=-Xmx512m -set _JAVA_STACK=-Xss512k +rem 1152k is the minimum for test_marshal to pass. Windows' default is +rem apparently 1M, anyway +set _JAVA_STACK=-Xss1152k rem Escape any quotes. Use _S for ', _D for ", and _U to escape _ itself. rem We have to escape _ itself, otherwise file names with _S and _D This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-29 02:34:53
|
Revision: 6418 http://jython.svn.sourceforge.net/jython/?rev=6418&view=rev Author: pjenvey Date: 2009-05-29 02:34:44 +0000 (Fri, 29 May 2009) Log Message: ----------- o fix comparison between Java objects of different types patch from Geoffrey French fixes #1338 o avoid test_nonexistent_import_with_security in odd environments like virtualenvs Modified Paths: -------------- trunk/jython/Lib/test/test_java_integration.py trunk/jython/NEWS trunk/jython/src/org/python/core/PyJavaType.java Modified: trunk/jython/Lib/test/test_java_integration.py =================================================================== --- trunk/jython/Lib/test/test_java_integration.py 2009-05-29 01:46:19 UTC (rev 6417) +++ trunk/jython/Lib/test/test_java_integration.py 2009-05-29 02:34:44 UTC (rev 6418) @@ -381,11 +381,36 @@ self.assertTrue(first_file <= first_date) self.assertTrue(first_date > first_file) self.assertTrue(first_date >= first_file) + + def test_equals(self): + # Test for bug #1338 + a = range(5) + + x = ArrayList() + x.addAll(a) + + y = Vector() + y.addAll(a) + + z = ArrayList() + z.addAll(range(1, 6)) + + self.assertTrue(x.equals(y)) + self.assertEquals(x, y) + self.assertTrue(not (x != y)) + + self.assertTrue(not x.equals(z)) + self.assertNotEquals(x, z) + self.assertTrue(not (x == z)) class SecurityManagerTest(unittest.TestCase): def test_nonexistent_import_with_security(self): + script = test_support.findfile("import_nonexistent.py") + home = os.path.realpath(sys.prefix) + if not os.path.commonprefix((home, os.path.realpath(script))) == home: + # script must lie within python.home for this test to work + return policy = test_support.findfile("python_home.policy") - script = test_support.findfile("import_nonexistent.py") self.assertEquals(subprocess.call([sys.executable, "-J-Dpython.cachedir.skip=true", "-J-Djava.security.manager", "-J-Djava.security.policy=%s" % policy, script]), 0) Modified: trunk/jython/NEWS =================================================================== --- trunk/jython/NEWS 2009-05-29 01:46:19 UTC (rev 6417) +++ trunk/jython/NEWS 2009-05-29 02:34:44 UTC (rev 6418) @@ -5,6 +5,10 @@ - [ 1354 ] core language failures in interactive interpreter - [ 1358 ] Simple pogram fails to parse in Jython 2.5rc3, but parses OK with CPython - [ 1357 ] no sys.executable when script runner is a relative link + - [ 1338 ] Comparing Java objects to each other fails when classes of values do not match + Fix file's repr with Windows paths + Fix urllib and urllib2 path handling on Windows + Fix r'\Jython25' not considered an abspath on Windows Jython 2.5.0 rc3 Bugs fixed Modified: trunk/jython/src/org/python/core/PyJavaType.java =================================================================== --- trunk/jython/src/org/python/core/PyJavaType.java 2009-05-29 01:46:19 UTC (rev 6417) +++ trunk/jython/src/org/python/core/PyJavaType.java 2009-05-29 02:34:44 UTC (rev 6418) @@ -510,16 +510,16 @@ @Override public PyObject __call__(PyObject o) { Object proxy = self.getJavaProxy(); - Object oAsJava = o.__tojava__(proxy.getClass()); - return proxy.equals(oAsJava) ? Py.True : Py.False; + Object oProxy = o.getJavaProxy(); + return proxy.equals(oProxy) ? Py.True : Py.False; } }); addMethod(new PyBuiltinMethodNarrow("__ne__", 1) { @Override public PyObject __call__(PyObject o) { Object proxy = self.getJavaProxy(); - Object oAsJava = o.__tojava__(proxy.getClass()); - return !proxy.equals(oAsJava) ? Py.True : Py.False; + Object oProxy = o.getJavaProxy(); + return !proxy.equals(oProxy) ? Py.True : Py.False; } }); addMethod(new PyBuiltinMethodNarrow("__hash__") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-29 02:30:43
|
Revision: 6417 http://jython.svn.sourceforge.net/jython/?rev=6417&view=rev Author: pjenvey Date: 2009-05-29 01:46:19 +0000 (Fri, 29 May 2009) Log Message: ----------- don't try putting null into this Hashtable Modified Paths: -------------- trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 13:37:28 UTC (rev 6416) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-05-29 01:46:19 UTC (rev 6417) @@ -660,7 +660,9 @@ } catch (SecurityException se) { encoding = null; } - registry.put(PYTHON_CONSOLE_ENCODING, encoding); + if (encoding != null) { + registry.put(PYTHON_CONSOLE_ENCODING, encoding); + } } // Set up options from registry Options.setFromRegistry(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2009-05-28 14:03:17
|
Revision: 6416 http://jython.svn.sourceforge.net/jython/?rev=6416&view=rev Author: otmarhumbel Date: 2009-05-28 13:37:28 +0000 (Thu, 28 May 2009) Log Message: ----------- provide jython.jar as sys.executable (if not otherwise specified), and let subprocesses run it using java -jar Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java trunk/jython/Lib/subprocess.py trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2009-05-28 13:37:28 UTC (rev 6416) @@ -23,7 +23,8 @@ private static final String BAT_EXTENSION = ".bat"; - private static final String JYTHON_UP = "jython up and running!"; + //TODO:Oti re-add an exclamation mark as soon subprocess/jython.bat can handle it + private static final String JYTHON_UP = "jython up and running"; private static final String JYTHON = "jython"; @@ -269,6 +270,23 @@ b.append("print '"); b.append(JYTHON_UP); b.append("'\n"); + b.append("# test subprocess if present\n"); + b.append("try:\n"); + b.append(" import subprocess\n"); + b.append(" proceed=True\n"); + b.append("except:\n"); + b.append(" proceed=False\n"); + b.append("if proceed:\n"); + b.append(" print '"); + b.append(VERIFYING); + b.append(" subprocess"); + b.append("'\n"); + b.append(" exitCode = subprocess.call([sys.executable, '-c', 'print "); + b.append('"'); + b.append(JYTHON_UP); + b.append('"'); + b.append("'])\n"); + b.append(" assert exitCode==0\n"); return b.toString(); } Modified: trunk/jython/Lib/subprocess.py =================================================================== --- trunk/jython/Lib/subprocess.py 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/jython/Lib/subprocess.py 2009-05-28 13:37:28 UTC (rev 6416) @@ -1236,6 +1236,9 @@ raise TypeError('args must contain only strings') args = _escape_args(args) + if len(args) > 0 and '.jar' == args[0][-4:] and executable is None: + args = ['java', '-jar'] + args + if shell: args = _shell_command + args Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 13:37:28 UTC (rev 6416) @@ -856,7 +856,7 @@ // Initialize the path (and add system defaults) defaultPath = initPath(registry, standalone, jarFileName); defaultArgv = initArgv(argv); - defaultExecutable = initExecutable(registry); + defaultExecutable = initExecutable(registry, jarFileName); // Set up the known Java packages initPackages(registry); // Finish up standard Python initialization... @@ -959,16 +959,23 @@ } /** - * Determine the default sys.executable value from the - * registry. Returns Py.None is no executable can be found. - * - * @param props a Properties registry + * Determine the default sys.executable value from the registry. Returns Py.None is no + * executable can be found. + * + * @param props + * a Properties registry + * @param jarFileName + * used as executable if python.executable not otherwise specified * @return a PyObject path string or Py.None */ - private static PyObject initExecutable(Properties props) { + private static PyObject initExecutable(Properties props, String jarFileName) { String executable = props.getProperty("python.executable"); if (executable == null) { - return Py.None; + if (jarFileName != null) { + executable = jarFileName; + } else { + return Py.None; + } } File executableFile = new File(executable); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 06:12:47
|
Revision: 6415 http://jython.svn.sourceforge.net/jython/?rev=6415&view=rev Author: pjenvey Date: 2009-05-28 06:12:41 +0000 (Thu, 28 May 2009) Log Message: ----------- enable with statement Modified Paths: -------------- trunk/jython/Lib/test/test_univnewlines.py Modified: trunk/jython/Lib/test/test_univnewlines.py =================================================================== --- trunk/jython/Lib/test/test_univnewlines.py 2009-05-28 06:12:37 UTC (rev 6414) +++ trunk/jython/Lib/test/test_univnewlines.py 2009-05-28 06:12:41 UTC (rev 6415) @@ -1,4 +1,5 @@ # Tests universal newline support for both reading and parsing files. +from __future__ import with_statement import unittest import os import sys This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 06:12:42
|
Revision: 6414 http://jython.svn.sourceforge.net/jython/?rev=6414&view=rev Author: pjenvey Date: 2009-05-28 06:12:37 +0000 (Thu, 28 May 2009) Log Message: ----------- from: http://svn.python.org/projects/python/trunk/Lib/test/test_univnewlines.py@72979 Added Paths: ----------- trunk/jython/Lib/test/test_univnewlines.py Added: trunk/jython/Lib/test/test_univnewlines.py =================================================================== --- trunk/jython/Lib/test/test_univnewlines.py (rev 0) +++ trunk/jython/Lib/test/test_univnewlines.py 2009-05-28 06:12:37 UTC (rev 6414) @@ -0,0 +1,129 @@ +# Tests universal newline support for both reading and parsing files. +import unittest +import os +import sys +from test import test_support + +if not hasattr(sys.stdin, 'newlines'): + raise unittest.SkipTest, \ + "This Python does not have universal newline support" + +FATX = 'x' * (2**14) + +DATA_TEMPLATE = [ + "line1=1", + "line2='this is a very long line designed to go past the magic " + + "hundred character limit that is inside fileobject.c and which " + + "is meant to speed up the common case, but we also want to test " + + "the uncommon case, naturally.'", + "def line3():pass", + "line4 = '%s'" % FATX, + ] + +DATA_LF = "\n".join(DATA_TEMPLATE) + "\n" +DATA_CR = "\r".join(DATA_TEMPLATE) + "\r" +DATA_CRLF = "\r\n".join(DATA_TEMPLATE) + "\r\n" + +# Note that DATA_MIXED also tests the ability to recognize a lone \r +# before end-of-file. +DATA_MIXED = "\n".join(DATA_TEMPLATE) + "\r" +DATA_SPLIT = [x + "\n" for x in DATA_TEMPLATE] +del x + +class TestGenericUnivNewlines(unittest.TestCase): + # use a class variable DATA to define the data to write to the file + # and a class variable NEWLINE to set the expected newlines value + READMODE = 'U' + WRITEMODE = 'wb' + + def setUp(self): + with open(test_support.TESTFN, self.WRITEMODE) as fp: + fp.write(self.DATA) + + def tearDown(self): + try: + os.unlink(test_support.TESTFN) + except: + pass + + def test_read(self): + with open(test_support.TESTFN, self.READMODE) as fp: + data = fp.read() + self.assertEqual(data, DATA_LF) + self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) + + def test_readlines(self): + with open(test_support.TESTFN, self.READMODE) as fp: + data = fp.readlines() + self.assertEqual(data, DATA_SPLIT) + self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) + + def test_readline(self): + with open(test_support.TESTFN, self.READMODE) as fp: + data = [] + d = fp.readline() + while d: + data.append(d) + d = fp.readline() + self.assertEqual(data, DATA_SPLIT) + self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) + + def test_seek(self): + with open(test_support.TESTFN, self.READMODE) as fp: + fp.readline() + pos = fp.tell() + data = fp.readlines() + self.assertEqual(data, DATA_SPLIT[1:]) + fp.seek(pos) + data = fp.readlines() + self.assertEqual(data, DATA_SPLIT[1:]) + + def test_execfile(self): + namespace = {} + execfile(test_support.TESTFN, namespace) + func = namespace['line3'] + self.assertEqual(func.func_code.co_firstlineno, 3) + self.assertEqual(namespace['line4'], FATX) + + +class TestNativeNewlines(TestGenericUnivNewlines): + NEWLINE = None + DATA = DATA_LF + READMODE = 'r' + WRITEMODE = 'w' + +class TestCRNewlines(TestGenericUnivNewlines): + NEWLINE = '\r' + DATA = DATA_CR + +class TestLFNewlines(TestGenericUnivNewlines): + NEWLINE = '\n' + DATA = DATA_LF + +class TestCRLFNewlines(TestGenericUnivNewlines): + NEWLINE = '\r\n' + DATA = DATA_CRLF + + def test_tell(self): + with open(test_support.TESTFN, self.READMODE) as fp: + self.assertEqual(repr(fp.newlines), repr(None)) + data = fp.readline() + pos = fp.tell() + self.assertEqual(repr(fp.newlines), repr(self.NEWLINE)) + +class TestMixedNewlines(TestGenericUnivNewlines): + NEWLINE = ('\r', '\n') + DATA = DATA_MIXED + + +def test_main(): + test_support.run_unittest( + TestNativeNewlines, + TestCRNewlines, + TestLFNewlines, + TestCRLFNewlines, + TestMixedNewlines + ) + +if __name__ == '__main__': + test_main() Property changes on: trunk/jython/Lib/test/test_univnewlines.py ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 05:32:19
|
Revision: 6413 http://jython.svn.sourceforge.net/jython/?rev=6413&view=rev Author: pjenvey Date: 2009-05-28 05:32:12 +0000 (Thu, 28 May 2009) Log Message: ----------- combine getPath/getPathLazy and special case paths with a single leading '\' (e.g. r'\Jython25') as an absolute path on Windows Modified Paths: -------------- trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 05:31:51 UTC (rev 6412) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 05:32:12 UTC (rev 6413) @@ -19,6 +19,7 @@ import java.util.jar.JarEntry; import java.util.jar.JarFile; +import org.jruby.ext.posix.util.Platform; import org.python.Version; import org.python.core.adapter.ClassicPyObjectAdapter; import org.python.core.adapter.ExtensiblePyObjectAdapter; @@ -482,16 +483,40 @@ * @return a resolved path String */ public String getPath(String path) { + return getPath(this, path); + } + + /** + * Resolve a path. Returns the full path taking the current + * working directory into account. + * + * Like getPath but called statically. The current PySystemState + * is only consulted for the current working directory when it's + * necessary (when the path is relative). + * + * @param path a path String + * @return a resolved path String + */ + public static String getPathLazy(String path) { + // XXX: This method likely an unnecessary optimization + return getPath(null, path); + } + + private static String getPath(PySystemState sys, String path) { if (path == null) { return path; - } else { - File file = new File(path); - if (!file.isAbsolute()) { - file = new File(getCurrentWorkingDir(), path); + } + + File file = new File(path); + // Python considers r'\Jython25' an abspath on Windows, unlike java.io.File + if (!file.isAbsolute() && (!Platform.IS_WINDOWS || !path.startsWith("\\"))) { + if (sys == null) { + sys = Py.getSystemState(); } - // This needs to be performed always to trim trailing backslashes on Windows - return file.getPath(); + file = new File(sys.getCurrentWorkingDir(), path); } + // This needs to be performed always to trim trailing backslashes on Windows + return file.getPath(); } public void callExitFunc() throws PyIgnoreMethodTag { @@ -1146,24 +1171,6 @@ packageManager.addJarDir(directoryPath, cache); } - /** - * Resolve a path. Returns the full path taking the current - * working directory into account. - * - * Like getPath but called statically. The current PySystemState - * is only consulted for the current working directory when it's - * necessary (when the path is relative). - * - * @param path a path String - * @return a resolved path String - */ - public static String getPathLazy(String path) { - if (path == null || new File(path).isAbsolute()) { - return path; - } - return new File(Py.getSystemState().getCurrentWorkingDir(), path).getPath(); - } - // Not public by design. We can't rebind the displayhook if // a reflected function is inserted in the class dict. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 05:31:57
|
Revision: 6412 http://jython.svn.sourceforge.net/jython/?rev=6412&view=rev Author: pjenvey Date: 2009-05-28 05:31:51 +0000 (Thu, 28 May 2009) Log Message: ----------- don't close external fileobjs Modified Paths: -------------- trunk/jython/Lib/tarfile.py Modified: trunk/jython/Lib/tarfile.py =================================================================== --- trunk/jython/Lib/tarfile.py 2009-05-28 04:03:31 UTC (rev 6411) +++ trunk/jython/Lib/tarfile.py 2009-05-28 05:31:51 UTC (rev 6412) @@ -1230,13 +1230,16 @@ if fileobj is not None: fileobj = _BZ2Proxy(fileobj, mode) + extfileobj = True else: fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) + extfileobj = False try: t = cls.taropen(name, mode, fileobj) except IOError: - fileobj.close() + if not extfileobj: + fileobj.close() raise ReadError("not a bzip2 file") t._extfileobj = False return t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 04:03:36
|
Revision: 6411 http://jython.svn.sourceforge.net/jython/?rev=6411&view=rev Author: pjenvey Date: 2009-05-28 04:03:31 +0000 (Thu, 28 May 2009) Log Message: ----------- o enable with statement for netrc to fix test_netrc on Windows o add jython windows check to test_urllib2 Modified Paths: -------------- trunk/jython/Lib/netrc.py trunk/jython/Lib/test/test_urllib2.py Modified: trunk/jython/Lib/netrc.py =================================================================== --- trunk/jython/Lib/netrc.py 2009-05-28 04:02:18 UTC (rev 6410) +++ trunk/jython/Lib/netrc.py 2009-05-28 04:03:31 UTC (rev 6411) @@ -2,6 +2,7 @@ # Module and documentation by Eric S. Raymond, 21 Dec 1998 +from __future__ import with_statement import os, shlex __all__ = ["netrc", "NetrcParseError"] Modified: trunk/jython/Lib/test/test_urllib2.py =================================================================== --- trunk/jython/Lib/test/test_urllib2.py 2009-05-28 04:02:18 UTC (rev 6410) +++ trunk/jython/Lib/test/test_urllib2.py 2009-05-28 04:03:31 UTC (rev 6411) @@ -535,7 +535,8 @@ def sanepathname2url(path): import urllib urlpath = urllib.pathname2url(path) - if os.name == "nt" and urlpath.startswith("///"): + if ((os._name if test_support.is_jython else os.name) == 'nt' + and urlpath.startswith("///")): urlpath = urlpath[2:] # XXX don't ask me about the mac... return urlpath This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 04:02:33
|
Revision: 6410 http://jython.svn.sourceforge.net/jython/?rev=6410&view=rev Author: pjenvey Date: 2009-05-28 04:02:18 +0000 (Thu, 28 May 2009) Log Message: ----------- from: http://svn.python.org/projects/python/trunk/Lib/netrc.py@72972 http://svn.python.org/projects/python/branches/release25-maint/Lib/test/test_urllib2.py@62464 Added Paths: ----------- trunk/jython/Lib/netrc.py trunk/jython/Lib/test/test_urllib2.py Added: trunk/jython/Lib/netrc.py =================================================================== --- trunk/jython/Lib/netrc.py (rev 0) +++ trunk/jython/Lib/netrc.py 2009-05-28 04:02:18 UTC (rev 6410) @@ -0,0 +1,114 @@ +"""An object-oriented interface to .netrc files.""" + +# Module and documentation by Eric S. Raymond, 21 Dec 1998 + +import os, shlex + +__all__ = ["netrc", "NetrcParseError"] + + +class NetrcParseError(Exception): + """Exception raised on syntax errors in the .netrc file.""" + def __init__(self, msg, filename=None, lineno=None): + self.filename = filename + self.lineno = lineno + self.msg = msg + Exception.__init__(self, msg) + + def __str__(self): + return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno) + + +class netrc: + def __init__(self, file=None): + if file is None: + try: + file = os.path.join(os.environ['HOME'], ".netrc") + except KeyError: + raise IOError("Could not find .netrc: $HOME is not set") + self.hosts = {} + self.macros = {} + with open(file) as fp: + self._parse(file, fp) + + def _parse(self, file, fp): + lexer = shlex.shlex(fp) + lexer.wordchars += r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~""" + while 1: + # Look for a machine, default, or macdef top-level keyword + toplevel = tt = lexer.get_token() + if not tt: + break + elif tt == 'machine': + entryname = lexer.get_token() + elif tt == 'default': + entryname = 'default' + elif tt == 'macdef': # Just skip to end of macdefs + entryname = lexer.get_token() + self.macros[entryname] = [] + lexer.whitespace = ' \t' + while 1: + line = lexer.instream.readline() + if not line or line == '\012': + lexer.whitespace = ' \t\r\n' + break + self.macros[entryname].append(line) + continue + else: + raise NetrcParseError( + "bad toplevel token %r" % tt, file, lexer.lineno) + + # We're looking at start of an entry for a named machine or default. + login = '' + account = password = None + self.hosts[entryname] = {} + while 1: + tt = lexer.get_token() + if (tt=='' or tt == 'machine' or + tt == 'default' or tt =='macdef'): + if password: + self.hosts[entryname] = (login, account, password) + lexer.push_token(tt) + break + else: + raise NetrcParseError( + "malformed %s entry %s terminated by %s" + % (toplevel, entryname, repr(tt)), + file, lexer.lineno) + elif tt == 'login' or tt == 'user': + login = lexer.get_token() + elif tt == 'account': + account = lexer.get_token() + elif tt == 'password': + password = lexer.get_token() + else: + raise NetrcParseError("bad follower token %r" % tt, + file, lexer.lineno) + + def authenticators(self, host): + """Return a (user, account, password) tuple for given host.""" + if host in self.hosts: + return self.hosts[host] + elif 'default' in self.hosts: + return self.hosts['default'] + else: + return None + + def __repr__(self): + """Dump the class data in the format of a .netrc file.""" + rep = "" + for host in self.hosts.keys(): + attrs = self.hosts[host] + rep = rep + "machine "+ host + "\n\tlogin " + repr(attrs[0]) + "\n" + if attrs[1]: + rep = rep + "account " + repr(attrs[1]) + rep = rep + "\tpassword " + repr(attrs[2]) + "\n" + for macro in self.macros.keys(): + rep = rep + "macdef " + macro + "\n" + for line in self.macros[macro]: + rep = rep + line + rep = rep + "\n" + return rep + +if __name__ == '__main__': + print netrc() Added: trunk/jython/Lib/test/test_urllib2.py =================================================================== --- trunk/jython/Lib/test/test_urllib2.py (rev 0) +++ trunk/jython/Lib/test/test_urllib2.py 2009-05-28 04:02:18 UTC (rev 6410) @@ -0,0 +1,1066 @@ +import unittest +from test import test_support + +import os, socket +import StringIO + +import urllib2 +from urllib2 import Request, OpenerDirector + +# XXX +# Request +# CacheFTPHandler (hard to write) +# parse_keqv_list, parse_http_list, HTTPDigestAuthHandler + +class TrivialTests(unittest.TestCase): + def test_trivial(self): + # A couple trivial tests + + self.assertRaises(ValueError, urllib2.urlopen, 'bogus url') + + # XXX Name hacking to get this to work on Windows. + fname = os.path.abspath(urllib2.__file__).replace('\\', '/') + if fname[1:2] == ":": + fname = fname[2:] + # And more hacking to get it to work on MacOS. This assumes + # urllib.pathname2url works, unfortunately... + if os.name == 'mac': + fname = '/' + fname.replace(':', '/') + elif os.name == 'riscos': + import string + fname = os.expand(fname) + fname = fname.translate(string.maketrans("/.", "./")) + + file_url = "file://%s" % fname + f = urllib2.urlopen(file_url) + + buf = f.read() + f.close() + + def test_parse_http_list(self): + tests = [('a,b,c', ['a', 'b', 'c']), + ('path"o,l"og"i"cal, example', ['path"o,l"og"i"cal', 'example']), + ('a, b, "c", "d", "e,f", g, h', ['a', 'b', '"c"', '"d"', '"e,f"', 'g', 'h']), + ('a="b\\"c", d="e\\,f", g="h\\\\i"', ['a="b"c"', 'd="e,f"', 'g="h\\i"'])] + for string, list in tests: + self.assertEquals(urllib2.parse_http_list(string), list) + + +def test_request_headers_dict(): + """ + The Request.headers dictionary is not a documented interface. It should + stay that way, because the complete set of headers are only accessible + through the .get_header(), .has_header(), .header_items() interface. + However, .headers pre-dates those methods, and so real code will be using + the dictionary. + + The introduction in 2.4 of those methods was a mistake for the same reason: + code that previously saw all (urllib2 user)-provided headers in .headers + now sees only a subset (and the function interface is ugly and incomplete). + A better change would have been to replace .headers dict with a dict + subclass (or UserDict.DictMixin instance?) that preserved the .headers + interface and also provided access to the "unredirected" headers. It's + probably too late to fix that, though. + + + Check .capitalize() case normalization: + + >>> url = "http://example.com" + >>> Request(url, headers={"Spam-eggs": "blah"}).headers["Spam-eggs"] + 'blah' + >>> Request(url, headers={"spam-EggS": "blah"}).headers["Spam-eggs"] + 'blah' + + Currently, Request(url, "Spam-eggs").headers["Spam-Eggs"] raises KeyError, + but that could be changed in future. + + """ + +def test_request_headers_methods(): + """ + Note the case normalization of header names here, to .capitalize()-case. + This should be preserved for backwards-compatibility. (In the HTTP case, + normalization to .title()-case is done by urllib2 before sending headers to + httplib). + + >>> url = "http://example.com" + >>> r = Request(url, headers={"Spam-eggs": "blah"}) + >>> r.has_header("Spam-eggs") + True + >>> r.header_items() + [('Spam-eggs', 'blah')] + >>> r.add_header("Foo-Bar", "baz") + >>> items = r.header_items() + >>> items.sort() + >>> items + [('Foo-bar', 'baz'), ('Spam-eggs', 'blah')] + + Note that e.g. r.has_header("spam-EggS") is currently False, and + r.get_header("spam-EggS") returns None, but that could be changed in + future. + + >>> r.has_header("Not-there") + False + >>> print r.get_header("Not-there") + None + >>> r.get_header("Not-there", "default") + 'default' + + """ + + +def test_password_manager(self): + """ + >>> mgr = urllib2.HTTPPasswordMgr() + >>> add = mgr.add_password + >>> add("Some Realm", "http://example.com/", "joe", "password") + >>> add("Some Realm", "http://example.com/ni", "ni", "ni") + >>> add("c", "http://example.com/foo", "foo", "ni") + >>> add("c", "http://example.com/bar", "bar", "nini") + >>> add("b", "http://example.com/", "first", "blah") + >>> add("b", "http://example.com/", "second", "spam") + >>> add("a", "http://example.com", "1", "a") + >>> add("Some Realm", "http://c.example.com:3128", "3", "c") + >>> add("Some Realm", "d.example.com", "4", "d") + >>> add("Some Realm", "e.example.com:3128", "5", "e") + + >>> mgr.find_user_password("Some Realm", "example.com") + ('joe', 'password') + >>> mgr.find_user_password("Some Realm", "http://example.com") + ('joe', 'password') + >>> mgr.find_user_password("Some Realm", "http://example.com/") + ('joe', 'password') + >>> mgr.find_user_password("Some Realm", "http://example.com/spam") + ('joe', 'password') + >>> mgr.find_user_password("Some Realm", "http://example.com/spam/spam") + ('joe', 'password') + >>> mgr.find_user_password("c", "http://example.com/foo") + ('foo', 'ni') + >>> mgr.find_user_password("c", "http://example.com/bar") + ('bar', 'nini') + + Actually, this is really undefined ATM +## Currently, we use the highest-level path where more than one match: + +## >>> mgr.find_user_password("Some Realm", "http://example.com/ni") +## ('joe', 'password') + + Use latest add_password() in case of conflict: + + >>> mgr.find_user_password("b", "http://example.com/") + ('second', 'spam') + + No special relationship between a.example.com and example.com: + + >>> mgr.find_user_password("a", "http://example.com/") + ('1', 'a') + >>> mgr.find_user_password("a", "http://a.example.com/") + (None, None) + + Ports: + + >>> mgr.find_user_password("Some Realm", "c.example.com") + (None, None) + >>> mgr.find_user_password("Some Realm", "c.example.com:3128") + ('3', 'c') + >>> mgr.find_user_password("Some Realm", "http://c.example.com:3128") + ('3', 'c') + >>> mgr.find_user_password("Some Realm", "d.example.com") + ('4', 'd') + >>> mgr.find_user_password("Some Realm", "e.example.com:3128") + ('5', 'e') + + """ + pass + + +def test_password_manager_default_port(self): + """ + >>> mgr = urllib2.HTTPPasswordMgr() + >>> add = mgr.add_password + + The point to note here is that we can't guess the default port if there's + no scheme. This applies to both add_password and find_user_password. + + >>> add("f", "http://g.example.com:80", "10", "j") + >>> add("g", "http://h.example.com", "11", "k") + >>> add("h", "i.example.com:80", "12", "l") + >>> add("i", "j.example.com", "13", "m") + >>> mgr.find_user_password("f", "g.example.com:100") + (None, None) + >>> mgr.find_user_password("f", "g.example.com:80") + ('10', 'j') + >>> mgr.find_user_password("f", "g.example.com") + (None, None) + >>> mgr.find_user_password("f", "http://g.example.com:100") + (None, None) + >>> mgr.find_user_password("f", "http://g.example.com:80") + ('10', 'j') + >>> mgr.find_user_password("f", "http://g.example.com") + ('10', 'j') + >>> mgr.find_user_password("g", "h.example.com") + ('11', 'k') + >>> mgr.find_user_password("g", "h.example.com:80") + ('11', 'k') + >>> mgr.find_user_password("g", "http://h.example.com:80") + ('11', 'k') + >>> mgr.find_user_password("h", "i.example.com") + (None, None) + >>> mgr.find_user_password("h", "i.example.com:80") + ('12', 'l') + >>> mgr.find_user_password("h", "http://i.example.com:80") + ('12', 'l') + >>> mgr.find_user_password("i", "j.example.com") + ('13', 'm') + >>> mgr.find_user_password("i", "j.example.com:80") + (None, None) + >>> mgr.find_user_password("i", "http://j.example.com") + ('13', 'm') + >>> mgr.find_user_password("i", "http://j.example.com:80") + (None, None) + + """ + +class MockOpener: + addheaders = [] + def open(self, req, data=None): + self.req, self.data = req, data + def error(self, proto, *args): + self.proto, self.args = proto, args + +class MockFile: + def read(self, count=None): pass + def readline(self, count=None): pass + def close(self): pass + +class MockHeaders(dict): + def getheaders(self, name): + return self.values() + +class MockResponse(StringIO.StringIO): + def __init__(self, code, msg, headers, data, url=None): + StringIO.StringIO.__init__(self, data) + self.code, self.msg, self.headers, self.url = code, msg, headers, url + def info(self): + return self.headers + def geturl(self): + return self.url + +class MockCookieJar: + def add_cookie_header(self, request): + self.ach_req = request + def extract_cookies(self, response, request): + self.ec_req, self.ec_r = request, response + +class FakeMethod: + def __init__(self, meth_name, action, handle): + self.meth_name = meth_name + self.handle = handle + self.action = action + def __call__(self, *args): + return self.handle(self.meth_name, self.action, *args) + +class MockHandler: + # useful for testing handler machinery + # see add_ordered_mock_handlers() docstring + handler_order = 500 + def __init__(self, methods): + self._define_methods(methods) + def _define_methods(self, methods): + for spec in methods: + if len(spec) == 2: name, action = spec + else: name, action = spec, None + meth = FakeMethod(name, action, self.handle) + setattr(self.__class__, name, meth) + def handle(self, fn_name, action, *args, **kwds): + self.parent.calls.append((self, fn_name, args, kwds)) + if action is None: + return None + elif action == "return self": + return self + elif action == "return response": + res = MockResponse(200, "OK", {}, "") + return res + elif action == "return request": + return Request("http://blah/") + elif action.startswith("error"): + code = action[action.rfind(" ")+1:] + try: + code = int(code) + except ValueError: + pass + res = MockResponse(200, "OK", {}, "") + return self.parent.error("http", args[0], res, code, "", {}) + elif action == "raise": + raise urllib2.URLError("blah") + assert False + def close(self): pass + def add_parent(self, parent): + self.parent = parent + self.parent.calls = [] + def __lt__(self, other): + if not hasattr(other, "handler_order"): + # No handler_order, leave in original order. Yuck. + return True + return self.handler_order < other.handler_order + +def add_ordered_mock_handlers(opener, meth_spec): + """Create MockHandlers and add them to an OpenerDirector. + + meth_spec: list of lists of tuples and strings defining methods to define + on handlers. eg: + + [["http_error", "ftp_open"], ["http_open"]] + + defines methods .http_error() and .ftp_open() on one handler, and + .http_open() on another. These methods just record their arguments and + return None. Using a tuple instead of a string causes the method to + perform some action (see MockHandler.handle()), eg: + + [["http_error"], [("http_open", "return request")]] + + defines .http_error() on one handler (which simply returns None), and + .http_open() on another handler, which returns a Request object. + + """ + handlers = [] + count = 0 + for meths in meth_spec: + class MockHandlerSubclass(MockHandler): pass + h = MockHandlerSubclass(meths) + h.handler_order += count + h.add_parent(opener) + count = count + 1 + handlers.append(h) + opener.add_handler(h) + return handlers + +def build_test_opener(*handler_instances): + opener = OpenerDirector() + for h in handler_instances: + opener.add_handler(h) + return opener + +class MockHTTPHandler(urllib2.BaseHandler): + # useful for testing redirections and auth + # sends supplied headers and code as first response + # sends 200 OK as second response + def __init__(self, code, headers): + self.code = code + self.headers = headers + self.reset() + def reset(self): + self._count = 0 + self.requests = [] + def http_open(self, req): + import mimetools, httplib, copy + from StringIO import StringIO + self.requests.append(copy.deepcopy(req)) + if self._count == 0: + self._count = self._count + 1 + name = httplib.responses[self.code] + msg = mimetools.Message(StringIO(self.headers)) + return self.parent.error( + "http", req, MockFile(), self.code, name, msg) + else: + self.req = req + msg = mimetools.Message(StringIO("\r\n\r\n")) + return MockResponse(200, "OK", msg, "", req.get_full_url()) + +class MockPasswordManager: + def add_password(self, realm, uri, user, password): + self.realm = realm + self.url = uri + self.user = user + self.password = password + def find_user_password(self, realm, authuri): + self.target_realm = realm + self.target_url = authuri + return self.user, self.password + + +class OpenerDirectorTests(unittest.TestCase): + + def test_add_non_handler(self): + class NonHandler(object): + pass + self.assertRaises(TypeError, + OpenerDirector().add_handler, NonHandler()) + + def test_badly_named_methods(self): + # test work-around for three methods that accidentally follow the + # naming conventions for handler methods + # (*_open() / *_request() / *_response()) + + # These used to call the accidentally-named methods, causing a + # TypeError in real code; here, returning self from these mock + # methods would either cause no exception, or AttributeError. + + from urllib2 import URLError + + o = OpenerDirector() + meth_spec = [ + [("do_open", "return self"), ("proxy_open", "return self")], + [("redirect_request", "return self")], + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + o.add_handler(urllib2.UnknownHandler()) + for scheme in "do", "proxy", "redirect": + self.assertRaises(URLError, o.open, scheme+"://example.com/") + + def test_handled(self): + # handler returning non-None means no more handlers will be called + o = OpenerDirector() + meth_spec = [ + ["http_open", "ftp_open", "http_error_302"], + ["ftp_open"], + [("http_open", "return self")], + [("http_open", "return self")], + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + req = Request("http://example.com/") + r = o.open(req) + # Second .http_open() gets called, third doesn't, since second returned + # non-None. Handlers without .http_open() never get any methods called + # on them. + # In fact, second mock handler defining .http_open() returns self + # (instead of response), which becomes the OpenerDirector's return + # value. + self.assertEqual(r, handlers[2]) + calls = [(handlers[0], "http_open"), (handlers[2], "http_open")] + for expected, got in zip(calls, o.calls): + handler, name, args, kwds = got + self.assertEqual((handler, name), expected) + self.assertEqual(args, (req,)) + + def test_handler_order(self): + o = OpenerDirector() + handlers = [] + for meths, handler_order in [ + ([("http_open", "return self")], 500), + (["http_open"], 0), + ]: + class MockHandlerSubclass(MockHandler): pass + h = MockHandlerSubclass(meths) + h.handler_order = handler_order + handlers.append(h) + o.add_handler(h) + + r = o.open("http://example.com/") + # handlers called in reverse order, thanks to their sort order + self.assertEqual(o.calls[0][0], handlers[1]) + self.assertEqual(o.calls[1][0], handlers[0]) + + def test_raise(self): + # raising URLError stops processing of request + o = OpenerDirector() + meth_spec = [ + [("http_open", "raise")], + [("http_open", "return self")], + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + req = Request("http://example.com/") + self.assertRaises(urllib2.URLError, o.open, req) + self.assertEqual(o.calls, [(handlers[0], "http_open", (req,), {})]) + +## def test_error(self): +## # XXX this doesn't actually seem to be used in standard library, +## # but should really be tested anyway... + + def test_http_error(self): + # XXX http_error_default + # http errors are a special case + o = OpenerDirector() + meth_spec = [ + [("http_open", "error 302")], + [("http_error_400", "raise"), "http_open"], + [("http_error_302", "return response"), "http_error_303", + "http_error"], + [("http_error_302")], + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + class Unknown: + def __eq__(self, other): return True + + req = Request("http://example.com/") + r = o.open(req) + assert len(o.calls) == 2 + calls = [(handlers[0], "http_open", (req,)), + (handlers[2], "http_error_302", + (req, Unknown(), 302, "", {}))] + for expected, got in zip(calls, o.calls): + handler, method_name, args = expected + self.assertEqual((handler, method_name), got[:2]) + self.assertEqual(args, got[2]) + + def test_processors(self): + # *_request / *_response methods get called appropriately + o = OpenerDirector() + meth_spec = [ + [("http_request", "return request"), + ("http_response", "return response")], + [("http_request", "return request"), + ("http_response", "return response")], + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + req = Request("http://example.com/") + r = o.open(req) + # processor methods are called on *all* handlers that define them, + # not just the first handler that handles the request + calls = [ + (handlers[0], "http_request"), (handlers[1], "http_request"), + (handlers[0], "http_response"), (handlers[1], "http_response")] + + for i, (handler, name, args, kwds) in enumerate(o.calls): + if i < 2: + # *_request + self.assertEqual((handler, name), calls[i]) + self.assertEqual(len(args), 1) + self.assert_(isinstance(args[0], Request)) + else: + # *_response + self.assertEqual((handler, name), calls[i]) + self.assertEqual(len(args), 2) + self.assert_(isinstance(args[0], Request)) + # response from opener.open is None, because there's no + # handler that defines http_open to handle it + self.assert_(args[1] is None or + isinstance(args[1], MockResponse)) + + +def sanepathname2url(path): + import urllib + urlpath = urllib.pathname2url(path) + if os.name == "nt" and urlpath.startswith("///"): + urlpath = urlpath[2:] + # XXX don't ask me about the mac... + return urlpath + +class HandlerTests(unittest.TestCase): + + def test_ftp(self): + class MockFTPWrapper: + def __init__(self, data): self.data = data + def retrfile(self, filename, filetype): + self.filename, self.filetype = filename, filetype + return StringIO.StringIO(self.data), len(self.data) + + class NullFTPHandler(urllib2.FTPHandler): + def __init__(self, data): self.data = data + def connect_ftp(self, user, passwd, host, port, dirs): + self.user, self.passwd = user, passwd + self.host, self.port = host, port + self.dirs = dirs + self.ftpwrapper = MockFTPWrapper(self.data) + return self.ftpwrapper + + import ftplib, socket + data = "rheum rhaponicum" + h = NullFTPHandler(data) + o = h.parent = MockOpener() + + for url, host, port, type_, dirs, filename, mimetype in [ + ("ftp://localhost/foo/bar/baz.html", + "localhost", ftplib.FTP_PORT, "I", + ["foo", "bar"], "baz.html", "text/html"), + ("ftp://localhost:80/foo/bar/", + "localhost", 80, "D", + ["foo", "bar"], "", None), + ("ftp://localhost/baz.gif;type=a", + "localhost", ftplib.FTP_PORT, "A", + [], "baz.gif", None), # XXX really this should guess image/gif + ]: + r = h.ftp_open(Request(url)) + # ftp authentication not yet implemented by FTPHandler + self.assert_(h.user == h.passwd == "") + self.assertEqual(h.host, socket.gethostbyname(host)) + self.assertEqual(h.port, port) + self.assertEqual(h.dirs, dirs) + self.assertEqual(h.ftpwrapper.filename, filename) + self.assertEqual(h.ftpwrapper.filetype, type_) + headers = r.info() + self.assertEqual(headers.get("Content-type"), mimetype) + self.assertEqual(int(headers["Content-length"]), len(data)) + + def test_file(self): + import time, rfc822, socket + h = urllib2.FileHandler() + o = h.parent = MockOpener() + + TESTFN = test_support.TESTFN + urlpath = sanepathname2url(os.path.abspath(TESTFN)) + towrite = "hello, world\n" + urls = [ + "file://localhost%s" % urlpath, + "file://%s" % urlpath, + "file://%s%s" % (socket.gethostbyname('localhost'), urlpath), + ] + try: + localaddr = socket.gethostbyname(socket.gethostname()) + except socket.gaierror: + localaddr = '' + if localaddr: + urls.append("file://%s%s" % (localaddr, urlpath)) + + for url in urls: + f = open(TESTFN, "wb") + try: + try: + f.write(towrite) + finally: + f.close() + + r = h.file_open(Request(url)) + try: + data = r.read() + headers = r.info() + newurl = r.geturl() + finally: + r.close() + stats = os.stat(TESTFN) + modified = rfc822.formatdate(stats.st_mtime) + finally: + os.remove(TESTFN) + self.assertEqual(data, towrite) + self.assertEqual(headers["Content-type"], "text/plain") + self.assertEqual(headers["Content-length"], "13") + self.assertEqual(headers["Last-modified"], modified) + + for url in [ + "file://localhost:80%s" % urlpath, +# XXXX bug: these fail with socket.gaierror, should be URLError +## "file://%s:80%s/%s" % (socket.gethostbyname('localhost'), +## os.getcwd(), TESTFN), +## "file://somerandomhost.ontheinternet.com%s/%s" % +## (os.getcwd(), TESTFN), + ]: + try: + f = open(TESTFN, "wb") + try: + f.write(towrite) + finally: + f.close() + + self.assertRaises(urllib2.URLError, + h.file_open, Request(url)) + finally: + os.remove(TESTFN) + + h = urllib2.FileHandler() + o = h.parent = MockOpener() + # XXXX why does // mean ftp (and /// mean not ftp!), and where + # is file: scheme specified? I think this is really a bug, and + # what was intended was to distinguish between URLs like: + # file:/blah.txt (a file) + # file://localhost/blah.txt (a file) + # file:///blah.txt (a file) + # file://ftp.example.com/blah.txt (an ftp URL) + for url, ftp in [ + ("file://ftp.example.com//foo.txt", True), + ("file://ftp.example.com///foo.txt", False), +# XXXX bug: fails with OSError, should be URLError + ("file://ftp.example.com/foo.txt", False), + ]: + req = Request(url) + try: + h.file_open(req) + # XXXX remove OSError when bug fixed + except (urllib2.URLError, OSError): + self.assert_(not ftp) + else: + self.assert_(o.req is req) + self.assertEqual(req.type, "ftp") + + def test_http(self): + class MockHTTPResponse: + def __init__(self, fp, msg, status, reason): + self.fp = fp + self.msg = msg + self.status = status + self.reason = reason + def read(self): + return '' + class MockHTTPClass: + def __init__(self): + self.req_headers = [] + self.data = None + self.raise_on_endheaders = False + def __call__(self, host): + self.host = host + return self + def set_debuglevel(self, level): + self.level = level + def request(self, method, url, body=None, headers={}): + self.method = method + self.selector = url + self.req_headers += headers.items() + self.req_headers.sort() + if body: + self.data = body + if self.raise_on_endheaders: + import socket + raise socket.error() + def getresponse(self): + return MockHTTPResponse(MockFile(), {}, 200, "OK") + + h = urllib2.AbstractHTTPHandler() + o = h.parent = MockOpener() + + url = "http://example.com/" + for method, data in [("GET", None), ("POST", "blah")]: + req = Request(url, data, {"Foo": "bar"}) + req.add_unredirected_header("Spam", "eggs") + http = MockHTTPClass() + r = h.do_open(http, req) + + # result attributes + r.read; r.readline # wrapped MockFile methods + r.info; r.geturl # addinfourl methods + r.code, r.msg == 200, "OK" # added from MockHTTPClass.getreply() + hdrs = r.info() + hdrs.get; hdrs.has_key # r.info() gives dict from .getreply() + self.assertEqual(r.geturl(), url) + + self.assertEqual(http.host, "example.com") + self.assertEqual(http.level, 0) + self.assertEqual(http.method, method) + self.assertEqual(http.selector, "/") + self.assertEqual(http.req_headers, + [("Connection", "close"), + ("Foo", "bar"), ("Spam", "eggs")]) + self.assertEqual(http.data, data) + + # check socket.error converted to URLError + http.raise_on_endheaders = True + self.assertRaises(urllib2.URLError, h.do_open, http, req) + + # check adding of standard headers + o.addheaders = [("Spam", "eggs")] + for data in "", None: # POST, GET + req = Request("http://example.com/", data) + r = MockResponse(200, "OK", {}, "") + newreq = h.do_request_(req) + if data is None: # GET + self.assert_("Content-length" not in req.unredirected_hdrs) + self.assert_("Content-type" not in req.unredirected_hdrs) + else: # POST + self.assertEqual(req.unredirected_hdrs["Content-length"], "0") + self.assertEqual(req.unredirected_hdrs["Content-type"], + "application/x-www-form-urlencoded") + # XXX the details of Host could be better tested + self.assertEqual(req.unredirected_hdrs["Host"], "example.com") + self.assertEqual(req.unredirected_hdrs["Spam"], "eggs") + + # don't clobber existing headers + req.add_unredirected_header("Content-length", "foo") + req.add_unredirected_header("Content-type", "bar") + req.add_unredirected_header("Host", "baz") + req.add_unredirected_header("Spam", "foo") + newreq = h.do_request_(req) + self.assertEqual(req.unredirected_hdrs["Content-length"], "foo") + self.assertEqual(req.unredirected_hdrs["Content-type"], "bar") + self.assertEqual(req.unredirected_hdrs["Host"], "baz") + self.assertEqual(req.unredirected_hdrs["Spam"], "foo") + + def test_errors(self): + h = urllib2.HTTPErrorProcessor() + o = h.parent = MockOpener() + + url = "http://example.com/" + req = Request(url) + # 200 OK is passed through + r = MockResponse(200, "OK", {}, "", url) + newr = h.http_response(req, r) + self.assert_(r is newr) + self.assert_(not hasattr(o, "proto")) # o.error not called + # anything else calls o.error (and MockOpener returns None, here) + r = MockResponse(201, "Created", {}, "", url) + self.assert_(h.http_response(req, r) is None) + self.assertEqual(o.proto, "http") # o.error called + self.assertEqual(o.args, (req, r, 201, "Created", {})) + + def test_cookies(self): + cj = MockCookieJar() + h = urllib2.HTTPCookieProcessor(cj) + o = h.parent = MockOpener() + + req = Request("http://example.com/") + r = MockResponse(200, "OK", {}, "") + newreq = h.http_request(req) + self.assert_(cj.ach_req is req is newreq) + self.assertEquals(req.get_origin_req_host(), "example.com") + self.assert_(not req.is_unverifiable()) + newr = h.http_response(req, r) + self.assert_(cj.ec_req is req) + self.assert_(cj.ec_r is r is newr) + + def test_redirect(self): + from_url = "http://example.com/a.html" + to_url = "http://example.com/b.html" + h = urllib2.HTTPRedirectHandler() + o = h.parent = MockOpener() + + # ordinary redirect behaviour + for code in 301, 302, 303, 307: + for data in None, "blah\nblah\n": + method = getattr(h, "http_error_%s" % code) + req = Request(from_url, data) + req.add_header("Nonsense", "viking=withhold") + req.add_unredirected_header("Spam", "spam") + try: + method(req, MockFile(), code, "Blah", + MockHeaders({"location": to_url})) + except urllib2.HTTPError: + # 307 in response to POST requires user OK + self.assert_(code == 307 and data is not None) + self.assertEqual(o.req.get_full_url(), to_url) + try: + self.assertEqual(o.req.get_method(), "GET") + except AttributeError: + self.assert_(not o.req.has_data()) + self.assertEqual(o.req.headers["Nonsense"], + "viking=withhold") + self.assert_("Spam" not in o.req.headers) + self.assert_("Spam" not in o.req.unredirected_hdrs) + + # loop detection + req = Request(from_url) + def redirect(h, req, url=to_url): + h.http_error_302(req, MockFile(), 302, "Blah", + MockHeaders({"location": url})) + # Note that the *original* request shares the same record of + # redirections with the sub-requests caused by the redirections. + + # detect infinite loop redirect of a URL to itself + req = Request(from_url, origin_req_host="example.com") + count = 0 + try: + while 1: + redirect(h, req, "http://example.com/") + count = count + 1 + except urllib2.HTTPError: + # don't stop until max_repeats, because cookies may introduce state + self.assertEqual(count, urllib2.HTTPRedirectHandler.max_repeats) + + # detect endless non-repeating chain of redirects + req = Request(from_url, origin_req_host="example.com") + count = 0 + try: + while 1: + redirect(h, req, "http://example.com/%d" % count) + count = count + 1 + except urllib2.HTTPError: + self.assertEqual(count, + urllib2.HTTPRedirectHandler.max_redirections) + + def test_cookie_redirect(self): + # cookies shouldn't leak into redirected requests + from cookielib import CookieJar + + from test.test_cookielib import interact_netscape + + cj = CookieJar() + interact_netscape(cj, "http://www.example.com/", "spam=eggs") + hh = MockHTTPHandler(302, "Location: http://www.cracker.com/\r\n\r\n") + hdeh = urllib2.HTTPDefaultErrorHandler() + hrh = urllib2.HTTPRedirectHandler() + cp = urllib2.HTTPCookieProcessor(cj) + o = build_test_opener(hh, hdeh, hrh, cp) + o.open("http://www.example.com/") + self.assert_(not hh.req.has_header("Cookie")) + + def test_proxy(self): + o = OpenerDirector() + ph = urllib2.ProxyHandler(dict(http="proxy.example.com:3128")) + o.add_handler(ph) + meth_spec = [ + [("http_open", "return response")] + ] + handlers = add_ordered_mock_handlers(o, meth_spec) + + req = Request("http://acme.example.com/") + self.assertEqual(req.get_host(), "acme.example.com") + r = o.open(req) + self.assertEqual(req.get_host(), "proxy.example.com:3128") + + self.assertEqual([(handlers[0], "http_open")], + [tup[0:2] for tup in o.calls]) + + def test_basic_auth(self): + opener = OpenerDirector() + password_manager = MockPasswordManager() + auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) + realm = "ACME Widget Store" + http_handler = MockHTTPHandler( + 401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % realm) + opener.add_handler(auth_handler) + opener.add_handler(http_handler) + self._test_basic_auth(opener, auth_handler, "Authorization", + realm, http_handler, password_manager, + "http://acme.example.com/protected", + "http://acme.example.com/protected", + ) + + def test_proxy_basic_auth(self): + opener = OpenerDirector() + ph = urllib2.ProxyHandler(dict(http="proxy.example.com:3128")) + opener.add_handler(ph) + password_manager = MockPasswordManager() + auth_handler = urllib2.ProxyBasicAuthHandler(password_manager) + realm = "ACME Networks" + http_handler = MockHTTPHandler( + 407, 'Proxy-Authenticate: Basic realm="%s"\r\n\r\n' % realm) + opener.add_handler(auth_handler) + opener.add_handler(http_handler) + self._test_basic_auth(opener, auth_handler, "Proxy-authorization", + realm, http_handler, password_manager, + "http://acme.example.com:3128/protected", + "proxy.example.com:3128", + ) + + def test_basic_and_digest_auth_handlers(self): + # HTTPDigestAuthHandler threw an exception if it couldn't handle a 40* + # response (http://python.org/sf/1479302), where it should instead + # return None to allow another handler (especially + # HTTPBasicAuthHandler) to handle the response. + + # Also (http://python.org/sf/14797027, RFC 2617 section 1.2), we must + # try digest first (since it's the strongest auth scheme), so we record + # order of calls here to check digest comes first: + class RecordingOpenerDirector(OpenerDirector): + def __init__(self): + OpenerDirector.__init__(self) + self.recorded = [] + def record(self, info): + self.recorded.append(info) + class TestDigestAuthHandler(urllib2.HTTPDigestAuthHandler): + def http_error_401(self, *args, **kwds): + self.parent.record("digest") + urllib2.HTTPDigestAuthHandler.http_error_401(self, + *args, **kwds) + class TestBasicAuthHandler(urllib2.HTTPBasicAuthHandler): + def http_error_401(self, *args, **kwds): + self.parent.record("basic") + urllib2.HTTPBasicAuthHandler.http_error_401(self, + *args, **kwds) + + opener = RecordingOpenerDirector() + password_manager = MockPasswordManager() + digest_handler = TestDigestAuthHandler(password_manager) + basic_handler = TestBasicAuthHandler(password_manager) + realm = "ACME Networks" + http_handler = MockHTTPHandler( + 401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % realm) + opener.add_handler(basic_handler) + opener.add_handler(digest_handler) + opener.add_handler(http_handler) + + # check basic auth isn't blocked by digest handler failing + self._test_basic_auth(opener, basic_handler, "Authorization", + realm, http_handler, password_manager, + "http://acme.example.com/protected", + "http://acme.example.com/protected", + ) + # check digest was tried before basic (twice, because + # _test_basic_auth called .open() twice) + self.assertEqual(opener.recorded, ["digest", "basic"]*2) + + def _test_basic_auth(self, opener, auth_handler, auth_header, + realm, http_handler, password_manager, + request_url, protected_url): + import base64, httplib + user, password = "wile", "coyote" + + # .add_password() fed through to password manager + auth_handler.add_password(realm, request_url, user, password) + self.assertEqual(realm, password_manager.realm) + self.assertEqual(request_url, password_manager.url) + self.assertEqual(user, password_manager.user) + self.assertEqual(password, password_manager.password) + + r = opener.open(request_url) + + # should have asked the password manager for the username/password + self.assertEqual(password_manager.target_realm, realm) + self.assertEqual(password_manager.target_url, protected_url) + + # expect one request without authorization, then one with + self.assertEqual(len(http_handler.requests), 2) + self.assertFalse(http_handler.requests[0].has_header(auth_header)) + userpass = '%s:%s' % (user, password) + auth_hdr_value = 'Basic '+base64.encodestring(userpass).strip() + self.assertEqual(http_handler.requests[1].get_header(auth_header), + auth_hdr_value) + + # if the password manager can't find a password, the handler won't + # handle the HTTP auth error + password_manager.user = password_manager.password = None + http_handler.reset() + r = opener.open(request_url) + self.assertEqual(len(http_handler.requests), 1) + self.assertFalse(http_handler.requests[0].has_header(auth_header)) + + +class MiscTests(unittest.TestCase): + + def test_build_opener(self): + class MyHTTPHandler(urllib2.HTTPHandler): pass + class FooHandler(urllib2.BaseHandler): + def foo_open(self): pass + class BarHandler(urllib2.BaseHandler): + def bar_open(self): pass + + build_opener = urllib2.build_opener + + o = build_opener(FooHandler, BarHandler) + self.opener_has_handler(o, FooHandler) + self.opener_has_handler(o, BarHandler) + + # can take a mix of classes and instances + o = build_opener(FooHandler, BarHandler()) + self.opener_has_handler(o, FooHandler) + self.opener_has_handler(o, BarHandler) + + # subclasses of default handlers override default handlers + o = build_opener(MyHTTPHandler) + self.opener_has_handler(o, MyHTTPHandler) + + # a particular case of overriding: default handlers can be passed + # in explicitly + o = build_opener() + self.opener_has_handler(o, urllib2.HTTPHandler) + o = build_opener(urllib2.HTTPHandler) + self.opener_has_handler(o, urllib2.HTTPHandler) + o = build_opener(urllib2.HTTPHandler()) + self.opener_has_handler(o, urllib2.HTTPHandler) + + # Issue2670: multiple handlers sharing the same base class + class MyOtherHTTPHandler(urllib2.HTTPHandler): pass + o = build_opener(MyHTTPHandler, MyOtherHTTPHandler) + self.opener_has_handler(o, MyHTTPHandler) + self.opener_has_handler(o, MyOtherHTTPHandler) + + def opener_has_handler(self, opener, handler_class): + for h in opener.handlers: + if h.__class__ == handler_class: + break + else: + self.assert_(False) + + +def test_main(verbose=None): + from test import test_urllib2 + test_support.run_doctest(test_urllib2, verbose) + test_support.run_doctest(urllib2, verbose) + tests = (TrivialTests, + OpenerDirectorTests, + HandlerTests, + MiscTests) + test_support.run_unittest(*tests) + +if __name__ == "__main__": + test_main(verbose=True) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 03:01:39
|
Revision: 6407 http://jython.svn.sourceforge.net/jython/?rev=6407&view=rev Author: pjenvey Date: 2009-05-28 01:46:00 +0000 (Thu, 28 May 2009) Log Message: ----------- from: http://svn.python.org/projects/python/trunk/Lib/gettext.py@72525 Added Paths: ----------- trunk/jython/Lib/gettext.py Added: trunk/jython/Lib/gettext.py =================================================================== --- trunk/jython/Lib/gettext.py (rev 0) +++ trunk/jython/Lib/gettext.py 2009-05-28 01:46:00 UTC (rev 6407) @@ -0,0 +1,591 @@ +"""Internationalization and localization support. + +This module provides internationalization (I18N) and localization (L10N) +support for your Python programs by providing an interface to the GNU gettext +message catalog library. + +I18N refers to the operation by which a program is made aware of multiple +languages. L10N refers to the adaptation of your program, once +internationalized, to the local language and cultural habits. + +""" + +# This module represents the integration of work, contributions, feedback, and +# suggestions from the following people: +# +# Martin von Loewis, who wrote the initial implementation of the underlying +# C-based libintlmodule (later renamed _gettext), along with a skeletal +# gettext.py implementation. +# +# Peter Funk, who wrote fintl.py, a fairly complete wrapper around intlmodule, +# which also included a pure-Python implementation to read .mo files if +# intlmodule wasn't available. +# +# James Henstridge, who also wrote a gettext.py module, which has some +# interesting, but currently unsupported experimental features: the notion of +# a Catalog class and instances, and the ability to add to a catalog file via +# a Python API. +# +# Barry Warsaw integrated these modules, wrote the .install() API and code, +# and conformed all C and Python code to Python's coding standards. +# +# Francois Pinard and Marc-Andre Lemburg also contributed valuably to this +# module. +# +# J. David Ibanez implemented plural forms. Bruno Haible fixed some bugs. +# +# TODO: +# - Lazy loading of .mo files. Currently the entire catalog is loaded into +# memory, but that's probably bad for large translated programs. Instead, +# the lexical sort of original strings in GNU .mo files should be exploited +# to do binary searches and lazy initializations. Or you might want to use +# the undocumented double-hash algorithm for .mo files with hash tables, but +# you'll need to study the GNU gettext code to do this. +# +# - Support Solaris .mo file formats. Unfortunately, we've been unable to +# find this format documented anywhere. + + +import locale, copy, os, re, struct, sys +from errno import ENOENT + + +__all__ = ['NullTranslations', 'GNUTranslations', 'Catalog', + 'find', 'translation', 'install', 'textdomain', 'bindtextdomain', + 'dgettext', 'dngettext', 'gettext', 'ngettext', + ] + +_default_localedir = os.path.join(sys.prefix, 'share', 'locale') + + +def test(condition, true, false): + """ + Implements the C expression: + + condition ? true : false + + Required to correctly interpret plural forms. + """ + if condition: + return true + else: + return false + + +def c2py(plural): + """Gets a C expression as used in PO files for plural forms and returns a + Python lambda function that implements an equivalent expression. + """ + # Security check, allow only the "n" identifier + try: + from cStringIO import StringIO + except ImportError: + from StringIO import StringIO + import token, tokenize + tokens = tokenize.generate_tokens(StringIO(plural).readline) + try: + danger = [x for x in tokens if x[0] == token.NAME and x[1] != 'n'] + except tokenize.TokenError: + raise ValueError, \ + 'plural forms expression error, maybe unbalanced parenthesis' + else: + if danger: + raise ValueError, 'plural forms expression could be dangerous' + + # Replace some C operators by their Python equivalents + plural = plural.replace('&&', ' and ') + plural = plural.replace('||', ' or ') + + expr = re.compile(r'\!([^=])') + plural = expr.sub(' not \\1', plural) + + # Regular expression and replacement function used to transform + # "a?b:c" to "test(a,b,c)". + expr = re.compile(r'(.*?)\?(.*?):(.*)') + def repl(x): + return "test(%s, %s, %s)" % (x.group(1), x.group(2), + expr.sub(repl, x.group(3))) + + # Code to transform the plural expression, taking care of parentheses + stack = [''] + for c in plural: + if c == '(': + stack.append('') + elif c == ')': + if len(stack) == 1: + # Actually, we never reach this code, because unbalanced + # parentheses get caught in the security check at the + # beginning. + raise ValueError, 'unbalanced parenthesis in plural form' + s = expr.sub(repl, stack.pop()) + stack[-1] += '(%s)' % s + else: + stack[-1] += c + plural = expr.sub(repl, stack.pop()) + + return eval('lambda n: int(%s)' % plural) + + + +def _expand_lang(locale): + from locale import normalize + locale = normalize(locale) + COMPONENT_CODESET = 1 << 0 + COMPONENT_TERRITORY = 1 << 1 + COMPONENT_MODIFIER = 1 << 2 + # split up the locale into its base components + mask = 0 + pos = locale.find('@') + if pos >= 0: + modifier = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_MODIFIER + else: + modifier = '' + pos = locale.find('.') + if pos >= 0: + codeset = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_CODESET + else: + codeset = '' + pos = locale.find('_') + if pos >= 0: + territory = locale[pos:] + locale = locale[:pos] + mask |= COMPONENT_TERRITORY + else: + territory = '' + language = locale + ret = [] + for i in range(mask+1): + if not (i & ~mask): # if all components for this combo exist ... + val = language + if i & COMPONENT_TERRITORY: val += territory + if i & COMPONENT_CODESET: val += codeset + if i & COMPONENT_MODIFIER: val += modifier + ret.append(val) + ret.reverse() + return ret + + + +class NullTranslations: + def __init__(self, fp=None): + self._info = {} + self._charset = None + self._output_charset = None + self._fallback = None + if fp is not None: + self._parse(fp) + + def _parse(self, fp): + pass + + def add_fallback(self, fallback): + if self._fallback: + self._fallback.add_fallback(fallback) + else: + self._fallback = fallback + + def gettext(self, message): + if self._fallback: + return self._fallback.gettext(message) + return message + + def lgettext(self, message): + if self._fallback: + return self._fallback.lgettext(message) + return message + + def ngettext(self, msgid1, msgid2, n): + if self._fallback: + return self._fallback.ngettext(msgid1, msgid2, n) + if n == 1: + return msgid1 + else: + return msgid2 + + def lngettext(self, msgid1, msgid2, n): + if self._fallback: + return self._fallback.lngettext(msgid1, msgid2, n) + if n == 1: + return msgid1 + else: + return msgid2 + + def ugettext(self, message): + if self._fallback: + return self._fallback.ugettext(message) + return unicode(message) + + def ungettext(self, msgid1, msgid2, n): + if self._fallback: + return self._fallback.ungettext(msgid1, msgid2, n) + if n == 1: + return unicode(msgid1) + else: + return unicode(msgid2) + + def info(self): + return self._info + + def charset(self): + return self._charset + + def output_charset(self): + return self._output_charset + + def set_output_charset(self, charset): + self._output_charset = charset + + def install(self, unicode=False, names=None): + import __builtin__ + __builtin__.__dict__['_'] = unicode and self.ugettext or self.gettext + if hasattr(names, "__contains__"): + if "gettext" in names: + __builtin__.__dict__['gettext'] = __builtin__.__dict__['_'] + if "ngettext" in names: + __builtin__.__dict__['ngettext'] = (unicode and self.ungettext + or self.ngettext) + if "lgettext" in names: + __builtin__.__dict__['lgettext'] = self.lgettext + if "lngettext" in names: + __builtin__.__dict__['lngettext'] = self.lngettext + + +class GNUTranslations(NullTranslations): + # Magic number of .mo files + LE_MAGIC = 0x950412deL + BE_MAGIC = 0xde120495L + + def _parse(self, fp): + """Override this method to support alternative .mo formats.""" + unpack = struct.unpack + filename = getattr(fp, 'name', '') + # Parse the .mo file header, which consists of 5 little endian 32 + # bit words. + self._catalog = catalog = {} + self.plural = lambda n: int(n != 1) # germanic plural by default + buf = fp.read() + buflen = len(buf) + # Are we big endian or little endian? + magic = unpack('<I', buf[:4])[0] + if magic == self.LE_MAGIC: + version, msgcount, masteridx, transidx = unpack('<4I', buf[4:20]) + ii = '<II' + elif magic == self.BE_MAGIC: + version, msgcount, masteridx, transidx = unpack('>4I', buf[4:20]) + ii = '>II' + else: + raise IOError(0, 'Bad magic number', filename) + # Now put all messages from the .mo file buffer into the catalog + # dictionary. + for i in xrange(0, msgcount): + mlen, moff = unpack(ii, buf[masteridx:masteridx+8]) + mend = moff + mlen + tlen, toff = unpack(ii, buf[transidx:transidx+8]) + tend = toff + tlen + if mend < buflen and tend < buflen: + msg = buf[moff:mend] + tmsg = buf[toff:tend] + else: + raise IOError(0, 'File is corrupt', filename) + # See if we're looking at GNU .mo conventions for metadata + if mlen == 0: + # Catalog description + lastk = k = None + for item in tmsg.splitlines(): + item = item.strip() + if not item: + continue + if ':' in item: + k, v = item.split(':', 1) + k = k.strip().lower() + v = v.strip() + self._info[k] = v + lastk = k + elif lastk: + self._info[lastk] += '\n' + item + if k == 'content-type': + self._charset = v.split('charset=')[1] + elif k == 'plural-forms': + v = v.split(';') + plural = v[1].split('plural=')[1] + self.plural = c2py(plural) + # Note: we unconditionally convert both msgids and msgstrs to + # Unicode using the character encoding specified in the charset + # parameter of the Content-Type header. The gettext documentation + # strongly encourages msgids to be us-ascii, but some appliations + # require alternative encodings (e.g. Zope's ZCML and ZPT). For + # traditional gettext applications, the msgid conversion will + # cause no problems since us-ascii should always be a subset of + # the charset encoding. We may want to fall back to 8-bit msgids + # if the Unicode conversion fails. + if '\x00' in msg: + # Plural forms + msgid1, msgid2 = msg.split('\x00') + tmsg = tmsg.split('\x00') + if self._charset: + msgid1 = unicode(msgid1, self._charset) + tmsg = [unicode(x, self._charset) for x in tmsg] + for i in range(len(tmsg)): + catalog[(msgid1, i)] = tmsg[i] + else: + if self._charset: + msg = unicode(msg, self._charset) + tmsg = unicode(tmsg, self._charset) + catalog[msg] = tmsg + # advance to next entry in the seek tables + masteridx += 8 + transidx += 8 + + def gettext(self, message): + missing = object() + tmsg = self._catalog.get(message, missing) + if tmsg is missing: + if self._fallback: + return self._fallback.gettext(message) + return message + # Encode the Unicode tmsg back to an 8-bit string, if possible + if self._output_charset: + return tmsg.encode(self._output_charset) + elif self._charset: + return tmsg.encode(self._charset) + return tmsg + + def lgettext(self, message): + missing = object() + tmsg = self._catalog.get(message, missing) + if tmsg is missing: + if self._fallback: + return self._fallback.lgettext(message) + return message + if self._output_charset: + return tmsg.encode(self._output_charset) + return tmsg.encode(locale.getpreferredencoding()) + + def ngettext(self, msgid1, msgid2, n): + try: + tmsg = self._catalog[(msgid1, self.plural(n))] + if self._output_charset: + return tmsg.encode(self._output_charset) + elif self._charset: + return tmsg.encode(self._charset) + return tmsg + except KeyError: + if self._fallback: + return self._fallback.ngettext(msgid1, msgid2, n) + if n == 1: + return msgid1 + else: + return msgid2 + + def lngettext(self, msgid1, msgid2, n): + try: + tmsg = self._catalog[(msgid1, self.plural(n))] + if self._output_charset: + return tmsg.encode(self._output_charset) + return tmsg.encode(locale.getpreferredencoding()) + except KeyError: + if self._fallback: + return self._fallback.lngettext(msgid1, msgid2, n) + if n == 1: + return msgid1 + else: + return msgid2 + + def ugettext(self, message): + missing = object() + tmsg = self._catalog.get(message, missing) + if tmsg is missing: + if self._fallback: + return self._fallback.ugettext(message) + return unicode(message) + return tmsg + + def ungettext(self, msgid1, msgid2, n): + try: + tmsg = self._catalog[(msgid1, self.plural(n))] + except KeyError: + if self._fallback: + return self._fallback.ungettext(msgid1, msgid2, n) + if n == 1: + tmsg = unicode(msgid1) + else: + tmsg = unicode(msgid2) + return tmsg + + +# Locate a .mo file using the gettext strategy +def find(domain, localedir=None, languages=None, all=0): + # Get some reasonable defaults for arguments that were not supplied + if localedir is None: + localedir = _default_localedir + if languages is None: + languages = [] + for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): + val = os.environ.get(envar) + if val: + languages = val.split(':') + break + if 'C' not in languages: + languages.append('C') + # now normalize and expand the languages + nelangs = [] + for lang in languages: + for nelang in _expand_lang(lang): + if nelang not in nelangs: + nelangs.append(nelang) + # select a language + if all: + result = [] + else: + result = None + for lang in nelangs: + if lang == 'C': + break + mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain) + if os.path.exists(mofile): + if all: + result.append(mofile) + else: + return mofile + return result + + + +# a mapping between absolute .mo file path and Translation object +_translations = {} + +def translation(domain, localedir=None, languages=None, + class_=None, fallback=False, codeset=None): + if class_ is None: + class_ = GNUTranslations + mofiles = find(domain, localedir, languages, all=1) + if not mofiles: + if fallback: + return NullTranslations() + raise IOError(ENOENT, 'No translation file found for domain', domain) + # Avoid opening, reading, and parsing the .mo file after it's been done + # once. + result = None + for mofile in mofiles: + key = os.path.abspath(mofile) + t = _translations.get(key) + if t is None: + with open(mofile, 'rb') as fp: + t = _translations.setdefault(key, class_(fp)) + # Copy the translation object to allow setting fallbacks and + # output charset. All other instance data is shared with the + # cached object. + t = copy.copy(t) + if codeset: + t.set_output_charset(codeset) + if result is None: + result = t + else: + result.add_fallback(t) + return result + + +def install(domain, localedir=None, unicode=False, codeset=None, names=None): + t = translation(domain, localedir, fallback=True, codeset=codeset) + t.install(unicode, names) + + + +# a mapping b/w domains and locale directories +_localedirs = {} +# a mapping b/w domains and codesets +_localecodesets = {} +# current global domain, `messages' used for compatibility w/ GNU gettext +_current_domain = 'messages' + + +def textdomain(domain=None): + global _current_domain + if domain is not None: + _current_domain = domain + return _current_domain + + +def bindtextdomain(domain, localedir=None): + global _localedirs + if localedir is not None: + _localedirs[domain] = localedir + return _localedirs.get(domain, _default_localedir) + + +def bind_textdomain_codeset(domain, codeset=None): + global _localecodesets + if codeset is not None: + _localecodesets[domain] = codeset + return _localecodesets.get(domain) + + +def dgettext(domain, message): + try: + t = translation(domain, _localedirs.get(domain, None), + codeset=_localecodesets.get(domain)) + except IOError: + return message + return t.gettext(message) + +def ldgettext(domain, message): + try: + t = translation(domain, _localedirs.get(domain, None), + codeset=_localecodesets.get(domain)) + except IOError: + return message + return t.lgettext(message) + +def dngettext(domain, msgid1, msgid2, n): + try: + t = translation(domain, _localedirs.get(domain, None), + codeset=_localecodesets.get(domain)) + except IOError: + if n == 1: + return msgid1 + else: + return msgid2 + return t.ngettext(msgid1, msgid2, n) + +def ldngettext(domain, msgid1, msgid2, n): + try: + t = translation(domain, _localedirs.get(domain, None), + codeset=_localecodesets.get(domain)) + except IOError: + if n == 1: + return msgid1 + else: + return msgid2 + return t.lngettext(msgid1, msgid2, n) + +def gettext(message): + return dgettext(_current_domain, message) + +def lgettext(message): + return ldgettext(_current_domain, message) + +def ngettext(msgid1, msgid2, n): + return dngettext(_current_domain, msgid1, msgid2, n) + +def lngettext(msgid1, msgid2, n): + return ldngettext(_current_domain, msgid1, msgid2, n) + +# dcgettext() has been deemed unnecessary and is not implemented. + +# James Henstridge's Catalog constructor from GNOME gettext. Documented usage +# was: +# +# import gettext +# cat = gettext.Catalog(PACKAGE, localedir=LOCALEDIR) +# _ = cat.gettext +# print _('Hello World') + +# The resulting catalog object currently don't support access through a +# dictionary API, which was supported (but apparently unused) in GNOME +# gettext. + +Catalog = translation Property changes on: trunk/jython/Lib/gettext.py ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 03:01:25
|
Revision: 6408 http://jython.svn.sourceforge.net/jython/?rev=6408&view=rev Author: pjenvey Date: 2009-05-28 01:46:11 +0000 (Thu, 28 May 2009) Log Message: ----------- enable with statement for trunk gettext to fix test_gettext on Windows Modified Paths: -------------- trunk/jython/Lib/gettext.py Modified: trunk/jython/Lib/gettext.py =================================================================== --- trunk/jython/Lib/gettext.py 2009-05-28 01:46:00 UTC (rev 6407) +++ trunk/jython/Lib/gettext.py 2009-05-28 01:46:11 UTC (rev 6408) @@ -46,6 +46,7 @@ # find this format documented anywhere. +from __future__ import with_statement import locale, copy, os, re, struct, sys from errno import ENOENT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-28 02:58:25
|
Revision: 6409 http://jython.svn.sourceforge.net/jython/?rev=6409&view=rev Author: pjenvey Date: 2009-05-28 02:58:09 +0000 (Thu, 28 May 2009) Log Message: ----------- plug more leaky file handles in tarfile and test_pkgimport Modified Paths: -------------- trunk/jython/Lib/tarfile.py trunk/jython/Lib/test/test_pkgimport.py trunk/jython/Lib/test/test_tarfile.py Modified: trunk/jython/Lib/tarfile.py =================================================================== --- trunk/jython/Lib/tarfile.py 2009-05-28 01:46:11 UTC (rev 6408) +++ trunk/jython/Lib/tarfile.py 2009-05-28 02:58:09 UTC (rev 6409) @@ -1210,6 +1210,7 @@ try: t = cls.taropen(name, mode, fileobj) except IOError: + fileobj.close() raise ReadError("not a gzip file") t._extfileobj = False return t @@ -1235,6 +1236,7 @@ try: t = cls.taropen(name, mode, fileobj) except IOError: + fileobj.close() raise ReadError("not a bzip2 file") t._extfileobj = False return t Modified: trunk/jython/Lib/test/test_pkgimport.py =================================================================== --- trunk/jython/Lib/test/test_pkgimport.py 2009-05-28 01:46:11 UTC (rev 6408) +++ trunk/jython/Lib/test/test_pkgimport.py 2009-05-28 02:58:09 UTC (rev 6409) @@ -22,7 +22,8 @@ self.package_dir = os.path.join(self.test_dir, self.package_name) os.mkdir(self.package_dir) - open(os.path.join(self.package_dir, '__init__'+os.extsep+'py'), 'w') + open(os.path.join(self.package_dir, '__init__'+os.extsep+'py'), + 'w').close() self.module_path = os.path.join(self.package_dir, 'foo'+os.extsep+'py') def tearDown(self): Modified: trunk/jython/Lib/test/test_tarfile.py =================================================================== --- trunk/jython/Lib/test/test_tarfile.py 2009-05-28 01:46:11 UTC (rev 6408) +++ trunk/jython/Lib/test/test_tarfile.py 2009-05-28 02:58:09 UTC (rev 6409) @@ -727,6 +727,7 @@ def test_no_name_argument(self): fobj = open(testtar, "rb") + self.tar.close() self.tar = tarfile.open(fileobj=fobj, mode="r") self.assertEqual(self.tar.name, os.path.abspath(fobj.name)) fobj.close() @@ -737,6 +738,7 @@ fp.close() fobj = StringIO.StringIO(data) self.assertRaises(AttributeError, getattr, fobj, "name") + self.tar.close() self.tar = tarfile.open(fileobj=fobj, mode="r") self.assertEqual(self.tar.name, None) @@ -746,6 +748,7 @@ fp.close() fobj = StringIO.StringIO(data) fobj.name = "" + self.tar.close() self.tar = tarfile.open(fileobj=fobj, mode="r") self.assertEqual(self.tar.name, None) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-28 02:13:48
|
Revision: 6406 http://jython.svn.sourceforge.net/jython/?rev=6406&view=rev Author: fwierzbicki Date: 2009-05-28 01:32:21 +0000 (Thu, 28 May 2009) Log Message: ----------- about page is empty - deleting. Removed Paths: ------------- trunk/website/archive/22/about.html trunk/website/archive/22/about.txt trunk/website/redirects/Project/about.txt Deleted: trunk/website/archive/22/about.html =================================================================== --- trunk/website/archive/22/about.html 2009-05-28 01:25:48 UTC (rev 6405) +++ trunk/website/archive/22/about.html 2009-05-28 01:32:21 UTC (rev 6406) @@ -1,66 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> -<title></title> -<link rel="stylesheet" href="../css/html4css1.css" type="text/css" /> -<link type="text/css" href="../css/basic.css" rel="stylesheet"> -<link media="screen" type="text/css" href="../css/screen.css" rel="stylesheet"> -<link media="print" type="text/css" href="../css/print.css" rel="stylesheet"> -<link type="text/css" href="../css/profile.css" rel="stylesheet"> -<!--[if lt IE 7]> -<script defer type="text/javascript" src="../css/pngfix.js"></script> -<![endif]--> -</head> -<body> -<div id="top"> -<div class="header"> -<div class="grouplogo"> -<a href="./" ><img class="logoImage" alt="Jython" src="../css/jython.png" title="Jython"></a> -</div> -<div class="searchbox"> -<form action="http://www.google.com/search" method="get" class="roundtopsmall"> -<input value="www.jython.org" name="sitesearch" type="hidden"><input size="25" name="q" id="query" type="text"> - <input name="Search" value="Search" type="submit"> -</form> -</div> -</div> -</div> -<div id="main"><div id="menu"><div class="menupage"> -<div class="menupagetitle">About</div> -<div class="menupageitem"><a href="./index.html">Welcome</a></div> -<div class="menupageitem"><a href="./license.html">License</a></div> -<div class="menupageitem"><a href="./installation.html">Installation</a></div> -<div class="menupageitem"><a href="./userfaq.html">FAQ</a></div> -<div class="menupageitem"><a href="./news.html">News</a></div> -<div class="menupageitem"><a href="./history.html">History</a></div> -<div class="menupageitem"><a href="./download.html">Download</a></div> -<div class="menupageitem"><a href="./userguide.html">User Guide</a></div> -<div class="menupageitem"><a href="../21/index.html">Old Website</a></div> -<div class="menupagetitle">Community</div> -<div class="menupageitem"><a href="http://wiki.python.org/jython/">Wiki</a></div> -<div class="menupageitem"><a href="./bugs.html">Reporting Bugs</a></div> -<div class="menupageitem"><a href="http://sourceforge.net/mail/?group_id=12867">Mailing Lists</a></div> -<div class="menupageitem"><a href="./devfaq.html">Developer FAQ</a></div> -<div class="menupageitem"><a href="http://wiki.python.org/jython/JythonDeveloperGuide">Developer Guide</a></div> -<div class="menupageitem"><a href="./roadmap.html">Jython Roadmap</a></div> -<div class="menupageitem"><a href="./contributors.html">Contributors</a></div> -<div class="menupagetitle"></div> -<div style="height:1em"></div> -<div class="menupageitem"><a target="_blank" href="http://www.python.org"><img src="../css/PythonPoweredSmall.gif" /></a></div> -<div style="height:1em"></div> -<div class="menupageitem"><a target="_blank" href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=12867" /></a></div> -</div> -</div> -</div> -<div id="content"><div class="document"> -</div> -<div class="footer"> -<hr class="footer" /> -<a class="reference" href="about.txt">View document source</a>. - -</div> - -</div></div></body> Deleted: trunk/website/redirects/Project/about.txt =================================================================== --- trunk/website/redirects/Project/about.txt 2009-05-28 01:25:48 UTC (rev 6405) +++ trunk/website/redirects/Project/about.txt 2009-05-28 01:32:21 UTC (rev 6406) @@ -1,9 +0,0 @@ -This page has been retired for versions of Jython older than 2.2. Please see the about_ wiki page for the current 2.5 version. - -If you want the archived web page: - -`2.2 about`_ - -.. _about: http://wiki.python.org/jython/AboutJython - -.. _2.2 about: ./archive/22/about.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-28 01:25:56
|
Revision: 6405 http://jython.svn.sourceforge.net/jython/?rev=6405&view=rev Author: fwierzbicki Date: 2009-05-28 01:25:48 +0000 (Thu, 28 May 2009) Log Message: ----------- Some cleanup, added "jsync" which is just a semi-hardcoded rsync for my convenience. Modified Paths: -------------- trunk/website/build.xml trunk/website/left.nav Added Paths: ----------- trunk/website/index.txt trunk/website/jsync Removed Paths: ------------- trunk/website/redirects/index.txt Modified: trunk/website/build.xml =================================================================== --- trunk/website/build.xml 2009-05-27 23:09:36 UTC (rev 6404) +++ trunk/website/build.xml 2009-05-28 01:25:48 UTC (rev 6405) @@ -32,7 +32,7 @@ <include name="left.nav"/> </fileset> </copy> - <copy todir="dist/Project"> + <copy todir="dist"> <fileset dir="."> <include name="*.txt"/> </fileset> Copied: trunk/website/index.txt (from rev 6403, trunk/website/redirects/index.txt) =================================================================== --- trunk/website/index.txt (rev 0) +++ trunk/website/index.txt 2009-05-28 01:25:48 UTC (rev 6405) @@ -0,0 +1,21 @@ +================== +The Jython Project +================== +.. admonition:: Latest News + + The Jython development team is proud to announce the release of `Jython 2.5rc3 <http://downloads.sourceforge.net/jython/jython_installer-2.5rc3.jar>`__! + +Jython 2.5 Documentation +======================== + +The documentation for Jython 2.5 is being developed on our wiki_. Please help +Jython by adding content and updating our wiki. As the content matures for 2.5 +it will be pulled back into this website. Archived versions of the old webpages +are available below: + +* Old website for `Jython 2.2`_ +* Old website for `Jython 2.1`_. + +.. _wiki: http://wiki.python.org/jython +.. _Jython 2.1: ./archive/21/index.html +.. _Jython 2.2: ./archive/22/index.html Added: trunk/website/jsync =================================================================== --- trunk/website/jsync (rev 0) +++ trunk/website/jsync 2009-05-28 01:25:48 UTC (rev 6405) @@ -0,0 +1,8 @@ +LOCAL_DIR=/Users/frank/svn/jython/trunk +WEB_ADMIN=fwierzbicki +SSH_COMMAND=/opt/local/bin/ssh + +rsync --progress --stats --compress --rsh=$SSH_COMMAND \ + --recursive --links --delete \ + --exclude "*bak" --exclude "*~" --exclude ".svn" \ + $LOCAL_DIR/website/dist/ $WEB...@di...:/data/jython/ Property changes on: trunk/website/jsync ___________________________________________________________________ Added: svn:executable + * Modified: trunk/website/left.nav =================================================================== --- trunk/website/left.nav 2009-05-27 23:09:36 UTC (rev 6404) +++ trunk/website/left.nav 2009-05-28 01:25:48 UTC (rev 6405) @@ -3,19 +3,15 @@ menupageitem | License | /license.html menupageitem | Old 2.1 Website | /archive/21/index.html menupageitem | Old 2.2 Website | /archive/22/index.html -menupageitem | Contributors | /contributors.html -menupageitem | Jython Roadmap | /roadmap.html menupageitem | Mailing Lists | http://sourceforge.net/mail/?group_id=12867 section | Wiki links -menupageitem | Front page | http://wiki.python.org/jython/ -menupageitem | Installation | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | FAQ | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | News | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | History | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Download | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | User Guide | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Books and Articles | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | CPython comparison | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Developer FAQ | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | Front page/News | http://wiki.python.org/jython/ +menupageitem | Installation | http://wiki.python.org/jython/InsallationInstructions +menupageitem | FAQ | http://wiki.python.org/jython/JythonFaq +menupageitem | Download | http://wiki.python.org/jython/DownloadInstructions +menupageitem | User Guide | http://wiki.python.org/jython/UserGuide +menupageitem | Books and Articles | http://wiki.python.org/jython/JythonBibliography +#menupageitem | CPython comparison | http://wiki.python.org/jython/FIXME +#menupageitem | Developer FAQ | http://wiki.python.org/jython/JythonDeveloperGuide menupageitem | Developer Guide | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Reporting Bugs | http://wiki.python.org/jython/JythonDeveloperGuide +#menupageitem | Reporting Bugs | http://wiki.python.org/jython/JythonDeveloperGuide Deleted: trunk/website/redirects/index.txt =================================================================== --- trunk/website/redirects/index.txt 2009-05-27 23:09:36 UTC (rev 6404) +++ trunk/website/redirects/index.txt 2009-05-28 01:25:48 UTC (rev 6405) @@ -1,21 +0,0 @@ -================== -The Jython Project -================== -.. admonition:: Latest News - - The Jython development team is proud to announce the release of Jython 2.5rc3! `Jython 2.5.0! <http://downloads.sourceforge.net/jython/jython_installer-2.5rc3.jar>`__ - -Jython 2.5 Documentation -======================== - -The documentation for Jython 2.5 is being developed on our wiki_. Please help -Jython by adding content and updating our wiki. As the content matures for 2.5 -it will be pulled back into this website. Archived versions of the old webpages -are available below: - -* Old website for `Jython 2.2`_ -* Old website for `Jython 2.1`_. - -.. _wiki: http://wiki.python.org/jython -.. _Jython 2.1: ./archive/21/index.html -.. _Jython 2.2: ./archive/22/index.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 23:09:45
|
Revision: 6404 http://jython.svn.sourceforge.net/jython/?rev=6404&view=rev Author: fwierzbicki Date: 2009-05-27 23:09:36 +0000 (Wed, 27 May 2009) Log Message: ----------- Kill old website (it's archived now, and we can get it back from the repo) Removed Paths: ------------- trunk/website/Project/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 20:36:37
|
Revision: 6403 http://jython.svn.sourceforge.net/jython/?rev=6403&view=rev Author: fwierzbicki Date: 2009-05-27 20:35:17 +0000 (Wed, 27 May 2009) Log Message: ----------- Make the site slightly less ugly. Modified Paths: -------------- trunk/website/build.xml trunk/website/css/profile.css trunk/website/left.nav trunk/website/redirects/index.txt Removed Paths: ------------- trunk/website/index.html Modified: trunk/website/build.xml =================================================================== --- trunk/website/build.xml 2009-05-27 18:50:38 UTC (rev 6402) +++ trunk/website/build.xml 2009-05-27 20:35:17 UTC (rev 6403) @@ -33,7 +33,7 @@ </fileset> </copy> <copy todir="dist/Project"> - <fileset dir="Project"> + <fileset dir="."> <include name="*.txt"/> </fileset> <fileset dir="."> Modified: trunk/website/css/profile.css =================================================================== --- trunk/website/css/profile.css 2009-05-27 18:50:38 UTC (rev 6402) +++ trunk/website/css/profile.css 2009-05-27 20:35:17 UTC (rev 6403) @@ -49,10 +49,10 @@ #level2tabs a:hover { color: #000000; } #main { - border-top: solid 18px #f5f6b5; + border-top: solid 3px #c3c3c3; } -.heading { background-color: #f5f6b5;} +.heading { background-color: #c3c3c3;} .boxed { background-color: #000000;} .underlined_5 {border-bottom: solid 5px #000000;} @@ -70,6 +70,9 @@ #menu .menupage { margin: 0; padding: 0; + border-right-color: #c3c3c3; + border-right-width: 1px; + border-right-style: solid; } #menu .menupageitem { @@ -81,7 +84,6 @@ } #menu .menupagetitle { - background-color: #9ac926; padding: 0; margin: 0; border-style: none; @@ -89,17 +91,12 @@ } #menu { - border-color: #999999; top: 0; width: 12em; font-size: 100%; } -#menu .menupagetitle { border-color: #999999;} - -#menu .menupageitemgroup { border-color: #999999;} - -#menu { background-color: #f5f6b5;} +#menu { background-color: #ffffff;} #menu { color: #000000;} #menu a:link { color: #000000;} #menu a:visited { color: #000000;} @@ -156,6 +153,6 @@ } #top .searchbox { -background-color: #f5f6b5 ; +background-color: #ffffff ; color: #000000; } Deleted: trunk/website/index.html =================================================================== --- trunk/website/index.html 2009-05-27 18:50:38 UTC (rev 6402) +++ trunk/website/index.html 2009-05-27 20:35:17 UTC (rev 6403) @@ -1,2 +0,0 @@ -<META HTTP-EQUIV="Refresh" - CONTENT="0; URL=Project/"> Modified: trunk/website/left.nav =================================================================== --- trunk/website/left.nav 2009-05-27 18:50:38 UTC (rev 6402) +++ trunk/website/left.nav 2009-05-27 20:35:17 UTC (rev 6403) @@ -1,25 +1,21 @@ section | About -menupageitem | Welcome | ./index.html -menupageitem | License | ./license.html -menupageitem | Installation | ./installation.html -menupageitem | FAQ | ./userfaq.html -menupageitem | News | ./news.html -menupageitem | History | ./history.html -menupageitem | Download | ./download.html -menupageitem | User Guide | ./userguide.html -menupageitem | Old Website | ../21/index.html -#menupageitem | Books and Articles | ./books_articles.html -#menupageitem | CPython comparison | ./differences.html -section | Community -menupageitem | Wiki | http://wiki.python.org/jython/ -menupageitem | Reporting Bugs | ./bugs.html +menupageitem | Welcome | /index.html +menupageitem | License | /license.html +menupageitem | Old 2.1 Website | /archive/21/index.html +menupageitem | Old 2.2 Website | /archive/22/index.html +menupageitem | Contributors | /contributors.html +menupageitem | Jython Roadmap | /roadmap.html menupageitem | Mailing Lists | http://sourceforge.net/mail/?group_id=12867 -menupageitem | Developer FAQ | ./devfaq.html +section | Wiki links +menupageitem | Front page | http://wiki.python.org/jython/ +menupageitem | Installation | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | FAQ | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | News | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | History | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | Download | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | User Guide | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | Books and Articles | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | CPython comparison | http://wiki.python.org/jython/JythonDeveloperGuide +menupageitem | Developer FAQ | http://wiki.python.org/jython/JythonDeveloperGuide menupageitem | Developer Guide | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Jython Roadmap | ./roadmap.html -menupageitem | Contributors | ./contributors.html -section | -raw | <div style="height:1em"></div> -image | ../css/PythonPoweredSmall.gif | http://www.python.org -raw | <div style="height:1em"></div> -image | http://sourceforge.net/sflogo.php?group_id=12867 | http://sourceforge.net +menupageitem | Reporting Bugs | http://wiki.python.org/jython/JythonDeveloperGuide Modified: trunk/website/redirects/index.txt =================================================================== --- trunk/website/redirects/index.txt 2009-05-27 18:50:38 UTC (rev 6402) +++ trunk/website/redirects/index.txt 2009-05-27 20:35:17 UTC (rev 6403) @@ -3,12 +3,15 @@ ================== .. admonition:: Latest News - The Jython development team is proud to announce the release of Jython 2.5.0! `Jython 2.5.0! <http://downloads.sourceforge.net/jython/jython_installer-2.5.0.jar>`__ + The Jython development team is proud to announce the release of Jython 2.5rc3! `Jython 2.5.0! <http://downloads.sourceforge.net/jython/jython_installer-2.5rc3.jar>`__ -2.5 Docs Being Developed on Our Wiki -==================================== +Jython 2.5 Documentation +======================== -The best documentation for Jython 2.5 is currently on our wiki_. Please help Jython by updating the wiki. As the wiki content matures for 2.5 it will be pulled back onto this website. Archived versions of the old webpages are available below +The documentation for Jython 2.5 is being developed on our wiki_. Please help +Jython by adding content and updating our wiki. As the content matures for 2.5 +it will be pulled back into this website. Archived versions of the old webpages +are available below: * Old website for `Jython 2.2`_ * Old website for `Jython 2.1`_. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 18:51:38
|
Revision: 6402 http://jython.svn.sourceforge.net/jython/?rev=6402&view=rev Author: fwierzbicki Date: 2009-05-27 18:50:38 +0000 (Wed, 27 May 2009) Log Message: ----------- another set of redirects. Modified Paths: -------------- trunk/website/build.xml Added Paths: ----------- trunk/website/redirects/graphics/ trunk/website/redirects/graphics/sample01.txt trunk/website/redirects/graphics/sample03.txt trunk/website/redirects/graphics/sample04.txt Modified: trunk/website/build.xml =================================================================== --- trunk/website/build.xml 2009-05-27 18:43:38 UTC (rev 6401) +++ trunk/website/build.xml 2009-05-27 18:50:38 UTC (rev 6402) @@ -69,6 +69,11 @@ <include name="left.nav"/> </fileset> </copy> + <copy todir="dist/graphics"> + <fileset dir="."> + <include name="left.nav"/> + </fileset> + </copy> <apply verbose="true" executable="${rst2jysite.command}" dest="dist"> <arg line="--link-stylesheet" /> <arg line="--stylesheet=../css/html4css1.css" /> Added: trunk/website/redirects/graphics/sample01.txt =================================================================== --- trunk/website/redirects/graphics/sample01.txt (rev 0) +++ trunk/website/redirects/graphics/sample01.txt 2009-05-27 18:50:38 UTC (rev 6402) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 graphics/sample01`_ + +.. _2.1 graphics/sample01: ../archive/21/graphics/sample01.html Added: trunk/website/redirects/graphics/sample03.txt =================================================================== --- trunk/website/redirects/graphics/sample03.txt (rev 0) +++ trunk/website/redirects/graphics/sample03.txt 2009-05-27 18:50:38 UTC (rev 6402) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 graphics/sample03`_ + +.. _2.1 graphics/sample03: ../archive/21/graphics/sample03.html Added: trunk/website/redirects/graphics/sample04.txt =================================================================== --- trunk/website/redirects/graphics/sample04.txt (rev 0) +++ trunk/website/redirects/graphics/sample04.txt 2009-05-27 18:50:38 UTC (rev 6402) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 graphics/sample04`_ + +.. _2.1 graphics/sample04: ../archive/21/graphics/sample04.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 18:43:46
|
Revision: 6401 http://jython.svn.sourceforge.net/jython/?rev=6401&view=rev Author: fwierzbicki Date: 2009-05-27 18:43:38 +0000 (Wed, 27 May 2009) Log Message: ----------- add leftnav for new redirects. Modified Paths: -------------- trunk/website/build.xml Modified: trunk/website/build.xml =================================================================== --- trunk/website/build.xml 2009-05-27 18:43:18 UTC (rev 6400) +++ trunk/website/build.xml 2009-05-27 18:43:38 UTC (rev 6401) @@ -64,6 +64,11 @@ <include name="left.nav"/> </fileset> </copy> + <copy todir="dist/accu04-scripting"> + <fileset dir="."> + <include name="left.nav"/> + </fileset> + </copy> <apply verbose="true" executable="${rst2jysite.command}" dest="dist"> <arg line="--link-stylesheet" /> <arg line="--stylesheet=../css/html4css1.css" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 18:43:19
|
Revision: 6400 http://jython.svn.sourceforge.net/jython/?rev=6400&view=rev Author: fwierzbicki Date: 2009-05-27 18:43:18 +0000 (Wed, 27 May 2009) Log Message: ----------- more redirects. Added Paths: ----------- trunk/website/redirects/accu04-scripting/ trunk/website/redirects/accu04-scripting/doctest.txt trunk/website/redirects/accu04-scripting/doctest_out.txt trunk/website/redirects/accu04-scripting/glue.txt trunk/website/redirects/accu04-scripting/ijyside.txt trunk/website/redirects/accu04-scripting/import.txt trunk/website/redirects/accu04-scripting/index.txt trunk/website/redirects/accu04-scripting/intro0.txt trunk/website/redirects/accu04-scripting/intro1.txt trunk/website/redirects/accu04-scripting/intro2.txt trunk/website/redirects/accu04-scripting/pinterp1.txt trunk/website/redirects/accu04-scripting/search_snpt.txt trunk/website/redirects/accu04-scripting/tasks_snpt.txt trunk/website/redirects/applets/ trunk/website/redirects/applets/button.txt trunk/website/redirects/applets/checkbox.txt trunk/website/redirects/applets/choice.txt trunk/website/redirects/applets/converter.txt trunk/website/redirects/applets/coordinates.txt trunk/website/redirects/applets/index.txt trunk/website/redirects/applets/issues.txt trunk/website/redirects/applets/label.txt trunk/website/redirects/applets/list.txt trunk/website/redirects/applets/problems.txt Added: trunk/website/redirects/accu04-scripting/doctest.txt =================================================================== --- trunk/website/redirects/accu04-scripting/doctest.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/doctest.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/doctest`_ + +.. _2.1 accu04-scripting/doctest: ../archive/21/accu04-scripting/doctest.html Added: trunk/website/redirects/accu04-scripting/doctest_out.txt =================================================================== --- trunk/website/redirects/accu04-scripting/doctest_out.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/doctest_out.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/doctest_out`_ + +.. _2.1 accu04-scripting/doctest_out: ../archive/21/accu04-scripting/doctest_out.html Added: trunk/website/redirects/accu04-scripting/glue.txt =================================================================== --- trunk/website/redirects/accu04-scripting/glue.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/glue.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/glue`_ + +.. _2.1 accu04-scripting/glue: ../archive/21/accu04-scripting/glue.html Added: trunk/website/redirects/accu04-scripting/ijyside.txt =================================================================== --- trunk/website/redirects/accu04-scripting/ijyside.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/ijyside.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/ijyside`_ + +.. _2.1 accu04-scripting/ijyside: ../archive/21/accu04-scripting/ijyside.html Added: trunk/website/redirects/accu04-scripting/import.txt =================================================================== --- trunk/website/redirects/accu04-scripting/import.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/import.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/import`_ + +.. _2.1 accu04-scripting/import: ../archive/21/accu04-scripting/import.html Added: trunk/website/redirects/accu04-scripting/index.txt =================================================================== --- trunk/website/redirects/accu04-scripting/index.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/index.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/index`_ + +.. _2.1 accu04-scripting/index: ../archive/21/accu04-scripting/index.html Added: trunk/website/redirects/accu04-scripting/intro0.txt =================================================================== --- trunk/website/redirects/accu04-scripting/intro0.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/intro0.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/intro0`_ + +.. _2.1 accu04-scripting/intro0: ../archive/21/accu04-scripting/intro0.html Added: trunk/website/redirects/accu04-scripting/intro1.txt =================================================================== --- trunk/website/redirects/accu04-scripting/intro1.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/intro1.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/intro1`_ + +.. _2.1 accu04-scripting/intro1: ../archive/21/accu04-scripting/intro1.html Added: trunk/website/redirects/accu04-scripting/intro2.txt =================================================================== --- trunk/website/redirects/accu04-scripting/intro2.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/intro2.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/intro2`_ + +.. _2.1 accu04-scripting/intro2: ../archive/21/accu04-scripting/intro2.html Added: trunk/website/redirects/accu04-scripting/pinterp1.txt =================================================================== --- trunk/website/redirects/accu04-scripting/pinterp1.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/pinterp1.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/pinterp1`_ + +.. _2.1 accu04-scripting/pinterp1: ../archive/21/accu04-scripting/pinterp1.html Added: trunk/website/redirects/accu04-scripting/search_snpt.txt =================================================================== --- trunk/website/redirects/accu04-scripting/search_snpt.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/search_snpt.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/search_snpt`_ + +.. _2.1 accu04-scripting/search_snpt: ../archive/21/accu04-scripting/search_snpt.html Added: trunk/website/redirects/accu04-scripting/tasks_snpt.txt =================================================================== --- trunk/website/redirects/accu04-scripting/tasks_snpt.txt (rev 0) +++ trunk/website/redirects/accu04-scripting/tasks_snpt.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 accu04-scripting/tasks_snpt`_ + +.. _2.1 accu04-scripting/tasks_snpt: ../archive/21/accu04-scripting/tasks_snpt.html Added: trunk/website/redirects/applets/button.txt =================================================================== --- trunk/website/redirects/applets/button.txt (rev 0) +++ trunk/website/redirects/applets/button.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/button`_ + +.. _2.1 applets/button: ../archive/21/applets/button.html Added: trunk/website/redirects/applets/checkbox.txt =================================================================== --- trunk/website/redirects/applets/checkbox.txt (rev 0) +++ trunk/website/redirects/applets/checkbox.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/checkbox`_ + +.. _2.1 applets/checkbox: ../archive/21/applets/checkbox.html Added: trunk/website/redirects/applets/choice.txt =================================================================== --- trunk/website/redirects/applets/choice.txt (rev 0) +++ trunk/website/redirects/applets/choice.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/choice`_ + +.. _2.1 applets/choice: ../archive/21/applets/choice.html Added: trunk/website/redirects/applets/converter.txt =================================================================== --- trunk/website/redirects/applets/converter.txt (rev 0) +++ trunk/website/redirects/applets/converter.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/converter`_ + +.. _2.1 applets/converter: ../archive/21/applets/converter.html Added: trunk/website/redirects/applets/coordinates.txt =================================================================== --- trunk/website/redirects/applets/coordinates.txt (rev 0) +++ trunk/website/redirects/applets/coordinates.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/coordinates`_ + +.. _2.1 applets/coordinates: ../archive/21/applets/coordinates.html Added: trunk/website/redirects/applets/index.txt =================================================================== --- trunk/website/redirects/applets/index.txt (rev 0) +++ trunk/website/redirects/applets/index.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/index`_ + +.. _2.1 applets/index: ../archive/21/applets/index.html Added: trunk/website/redirects/applets/issues.txt =================================================================== --- trunk/website/redirects/applets/issues.txt (rev 0) +++ trunk/website/redirects/applets/issues.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/issues`_ + +.. _2.1 applets/issues: ../archive/21/applets/issues.html Added: trunk/website/redirects/applets/label.txt =================================================================== --- trunk/website/redirects/applets/label.txt (rev 0) +++ trunk/website/redirects/applets/label.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/label`_ + +.. _2.1 applets/label: ../archive/21/applets/label.html Added: trunk/website/redirects/applets/list.txt =================================================================== --- trunk/website/redirects/applets/list.txt (rev 0) +++ trunk/website/redirects/applets/list.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/list`_ + +.. _2.1 applets/list: ../archive/21/applets/list.html Added: trunk/website/redirects/applets/problems.txt =================================================================== --- trunk/website/redirects/applets/problems.txt (rev 0) +++ trunk/website/redirects/applets/problems.txt 2009-05-27 18:43:18 UTC (rev 6400) @@ -0,0 +1,7 @@ +This page has been retired for versions of Jython older than 2.1. + +If you want the archived web page: + +`2.1 applets/problems`_ + +.. _2.1 applets/problems: ../archive/21/applets/problems.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 18:30:59
|
Revision: 6399 http://jython.svn.sourceforge.net/jython/?rev=6399&view=rev Author: fwierzbicki Date: 2009-05-27 18:30:54 +0000 (Wed, 27 May 2009) Log Message: ----------- cleanup. Modified Paths: -------------- trunk/website/build.xml Added Paths: ----------- trunk/website/redirects/css/ trunk/website/redirects/css/.profile.css.swp trunk/website/redirects/css/PythonPoweredSmall.gif trunk/website/redirects/css/basic.css trunk/website/redirects/css/html4css1.css trunk/website/redirects/css/jython.png trunk/website/redirects/css/moin-www.png trunk/website/redirects/css/pngfix.js trunk/website/redirects/css/print.css trunk/website/redirects/css/profile.css trunk/website/redirects/css/screen.css trunk/website/redirects/jpython-talk-1.ppt Removed Paths: ------------- trunk/website/archive/21/css/ trunk/website/archive/21/left.nav trunk/website/archive/22/left.nav Deleted: trunk/website/archive/21/left.nav =================================================================== --- trunk/website/archive/21/left.nav 2009-05-27 17:10:32 UTC (rev 6398) +++ trunk/website/archive/21/left.nav 2009-05-27 18:30:54 UTC (rev 6399) @@ -1,25 +0,0 @@ -section | About -menupageitem | Welcome | ../Project/index.html -menupageitem | License | ../Project/license.html -menupageitem | Installation | ../Project/installation.html -menupageitem | FAQ | ../Project/userfaq.html -menupageitem | News | ../Project/news.html -menupageitem | History | ../Project/history.html -menupageitem | Download | ../Project/download.html -menupageitem | User Guide | ../Project/userguide.html -menupageitem | Old Website | ../Jython21.html -#menupageitem | Books and Articles | ../Project/books_articles.html -#menupageitem | CPython comparison | ../Project/differences.html -section | Community -menupageitem | Wiki | http://wiki.python.org/jython/ -menupageitem | Reporting Bugs | ../Project/bugs.html -menupageitem | Mailing Lists | http://sourceforge.net/mail/?group_id=12867 -menupageitem | Developer FAQ | ../Project/devfaq.html -menupageitem | Developer Guide | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Jython Roadmap | ../Project/roadmap.html -menupageitem | Contributors | ../Project/contributors.html -section | -raw | <div style="height:1em"></div> -image | ../css/PythonPoweredSmall.gif | http://www.python.org -raw | <div style="height:1em"></div> -image | http://sourceforge.net/sflogo.php?group_id=12867 | http://sourceforge.net Deleted: trunk/website/archive/22/left.nav =================================================================== --- trunk/website/archive/22/left.nav 2009-05-27 17:10:32 UTC (rev 6398) +++ trunk/website/archive/22/left.nav 2009-05-27 18:30:54 UTC (rev 6399) @@ -1,25 +0,0 @@ -section | About -menupageitem | Welcome | ./index.html -menupageitem | License | ./license.html -menupageitem | Installation | ./installation.html -menupageitem | FAQ | ./userfaq.html -menupageitem | News | ./news.html -menupageitem | History | ./history.html -menupageitem | Download | ./download.html -menupageitem | User Guide | ./userguide.html -menupageitem | Old Website | ../21/index.html -#menupageitem | Books and Articles | ./books_articles.html -#menupageitem | CPython comparison | ./differences.html -section | Community -menupageitem | Wiki | http://wiki.python.org/jython/ -menupageitem | Reporting Bugs | ./bugs.html -menupageitem | Mailing Lists | http://sourceforge.net/mail/?group_id=12867 -menupageitem | Developer FAQ | ./devfaq.html -menupageitem | Developer Guide | http://wiki.python.org/jython/JythonDeveloperGuide -menupageitem | Jython Roadmap | ./roadmap.html -menupageitem | Contributors | ./contributors.html -section | -raw | <div style="height:1em"></div> -image | ../css/PythonPoweredSmall.gif | http://www.python.org -raw | <div style="height:1em"></div> -image | http://sourceforge.net/sflogo.php?group_id=12867 | http://sourceforge.net Modified: trunk/website/build.xml =================================================================== --- trunk/website/build.xml 2009-05-27 17:10:32 UTC (rev 6398) +++ trunk/website/build.xml 2009-05-27 18:30:54 UTC (rev 6399) @@ -54,6 +54,16 @@ <fileset dir="redirects"> </fileset> </copy> + <copy todir="dist/archive/22"> + <fileset dir="."> + <include name="left.nav"/> + </fileset> + </copy> + <copy todir="dist/applets"> + <fileset dir="."> + <include name="left.nav"/> + </fileset> + </copy> <apply verbose="true" executable="${rst2jysite.command}" dest="dist"> <arg line="--link-stylesheet" /> <arg line="--stylesheet=../css/html4css1.css" /> Added: trunk/website/redirects/css/.profile.css.swp =================================================================== (Binary files differ) Property changes on: trunk/website/redirects/css/.profile.css.swp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/website/redirects/css/PythonPoweredSmall.gif =================================================================== (Binary files differ) Property changes on: trunk/website/redirects/css/PythonPoweredSmall.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/website/redirects/css/basic.css =================================================================== --- trunk/website/redirects/css/basic.css (rev 0) +++ trunk/website/redirects/css/basic.css 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,143 @@ +/* +* Copyright 2002-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. +*/ +/** + * General + */ + +img { border: 0; } + +#content table { + border: 0; + width: 100%; +} +#content th, +#content td { + margin: 0; + padding: 0; + vertical-align: top; +} + +.clearboth { + clear: both; +} + +.frame { + border: solid black 1px; + margin: 1em 3em; +} + +.frame .label { + background: #369; + color: white; + font-weight: bold; + padding: 5px 10px; +} +.frame .content { + padding: 5px 10px; + background: #F0F0FF; + color: black; + line-height: 120%; + font-size: 90%; +} +.warning .label { + background: #C00; + color: white; +} +.warning .content { + background: #FFF0F0; + color: black; +} +.fixme .label { + background: #C6C600; +} + +/** + * Typography + */ + +body { + font-family: verdana, "Trebuchet MS", arial, helvetica, sans-serif; + font-size: 100%; +} + +#content { + font-family: Georgia, Palatino, Times, serif; + font-size: 95%; +} +#tabs { + font-size: 70%; +} +#menu { + font-size: 80%; +} +#footer { + font-size: 70%; +} + +h1, h2, h3, h4, h5, h6 { + font-family: "Trebuchet MS", verdana, arial, helvetica, sans-serif; + font-weight: bold; + margin-top: 1em; + margin-bottom: .5em; +} + +h1 { + margin-top: 0; + margin-bottom: 1em; + font-size: 1.4em; +} +#content h1 { + font-size: 160%; + margin-bottom: .5em; +} +#menu h1 { + margin: 0; + padding: 10px; + background: #336699; + color: white; +} +h2 { font-size: 120%; } +h3 { font-size: 100%; } +h4 { font-size: 90%; } +h5 { font-size: 80%; } +h6 { font-size: 75%; } + +p { + line-height: 120%; + text-align: left; + margin-top: .5em; + margin-bottom: 1em; +} + +#content li, +#content th, +#content td { + line-height: 110%; + margin-top: .1em; + margin-bottom: .1em; +} + +#content .attribution { + text-align: right; + font-style: italic; + font-size: 85%; + margin-top: 1em; +} + +.codefrag { + font-family: "Courier New", Courier, monospace; + font-size: 110%; +} \ No newline at end of file Added: trunk/website/redirects/css/html4css1.css =================================================================== --- trunk/website/redirects/css/html4css1.css (rev 0) +++ trunk/website/redirects/css/html4css1.css 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,276 @@ +/* +:Author: David Goodger +:Contact: go...@us... +:Date: $Date: 2005-11-17 10:41:19 -0600 (Thu, 17 Nov 2005) $ +:Revision: $Revision: 2638 $ +:Copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. +*/ + +/* "! important" is used here to override other ``margin-top`` and + ``margin-bottom`` styles that are later in the stylesheet or + more specific. See http://www.w3.org/TR/CSS1#the-cascade */ +.first { + margin-top: 0 ! important } + +.last, .with-subtitle { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dl.docutils dd { + margin-bottom: 0.5em } + +/* Uncomment (and remove this text!) to get bold-faced definition list terms +dl.docutils dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.admonition, div.attention, div.caution, div.danger, div.error, +div.hint, div.important, div.note, div.tip, div.warning { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.admonition p.admonition-title, div.hint p.admonition-title, +div.important p.admonition-title, div.note p.admonition-title, +div.tip p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +/* Uncomment (and remove this text!) to get reduced vertical space in + compound paragraphs. +div.compound .compound-first, div.compound .compound-middle { + margin-bottom: 0.5em } + +div.compound .compound-last, div.compound .compound-middle { + margin-top: 0.5em } +*/ + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em } + +div.footer, div.header { + clear: both; + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin-left: 1em ; + border: medium outset ; + padding: 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, +h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { + margin-top: 0.4em } + +h1.title { + text-align: center } + +h2.subtitle { + text-align: center } + +hr.docutils { + width: 75% } + +img.align-left { + clear: left } + +img.align-right { + clear: right } + +img.borderless { + border: 0 } + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font-family: serif ; + font-size: 100% } + +pre.line-block { + font-family: serif ; + font-size: 100% } + +pre.literal-block, pre.doctest-block { + margin-left: 2em ; + margin-right: 2em ; + background-color: #eeeeee } + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80% } + +table.citation { + border-left: solid thin gray } + +table.docinfo { + margin: 2em 4em } + +table.docutils { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.footnote { + border-left: solid thin black } + +table.docutils td, table.docutils th, +table.docinfo td, table.docinfo th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +table.docutils th.field-name, table.docinfo th.docinfo-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap ; + padding-left: 0 } + +h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, +h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { + font-size: 100% } + +tt.docutils { + background-color: #eeeeee } + +ul.auto-toc { + list-style-type: none } Added: trunk/website/redirects/css/jython.png =================================================================== (Binary files differ) Property changes on: trunk/website/redirects/css/jython.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/website/redirects/css/moin-www.png =================================================================== (Binary files differ) Property changes on: trunk/website/redirects/css/moin-www.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/website/redirects/css/pngfix.js =================================================================== --- trunk/website/redirects/css/pngfix.js (rev 0) +++ trunk/website/redirects/css/pngfix.js 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,39 @@ +/* + +Correctly handle PNG transparency in Win IE 5.5 & 6. +http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006. + +Use in <HEAD> with DEFER keyword wrapped in conditional comments: +<!--[if lt IE 7]> +<script defer type="text/javascript" src="pngfix.js"></script> +<![endif]--> + +*/ + +var arVersion = navigator.appVersion.split("MSIE") +var version = parseFloat(arVersion[1]) + +if ((version >= 5.5) && (document.body.filters)) +{ + for(var i=0; i<document.images.length; i++) + { + var img = document.images[i] + var imgName = img.src.toUpperCase() + if (imgName.substring(imgName.length-3, imgName.length) == "PNG") + { + var imgID = (img.id) ? "id='" + img.id + "' " : "" + var imgClass = (img.className) ? "class='" + img.className + "' " : "" + var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' " + var imgStyle = "display:inline-block;" + img.style.cssText + if (img.align == "left") imgStyle = "float:left;" + imgStyle + if (img.align == "right") imgStyle = "float:right;" + imgStyle + if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle + var strNewHTML = "<span " + imgID + imgClass + imgTitle + + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" + + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" + img.outerHTML = strNewHTML + i = i-1 + } + } +} Added: trunk/website/redirects/css/print.css =================================================================== --- trunk/website/redirects/css/print.css (rev 0) +++ trunk/website/redirects/css/print.css 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,53 @@ +/* +* Copyright 2002-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. +*/ +body { + font-family: Georgia, Palatino, serif; + font-size: 12pt; + background: white; +} + +#tabs, +#menu, +#content .toc { + display: none; +} + +#content { + width: auto; + padding: 0; + float: none !important; + color: black; + background: transparent; +} + +a:link, a:visited { + color: #336699; + background: transparent; + text-decoration: underline; +} + +#top .logo { + padding: 0; + margin: 0 0 2em 0; +} + +#footer { + margin-top: 4em; +} + +acronym { + border: 0; +} \ No newline at end of file Added: trunk/website/redirects/css/profile.css =================================================================== --- trunk/website/redirects/css/profile.css (rev 0) +++ trunk/website/redirects/css/profile.css 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,161 @@ + + +/* ==================== aural ============================ */ + +@media aural { + h1, h2, h3, h4, h5, h6 { voice-family: paul, male; stress: 20; richness: 90 } + h1 { pitch: x-low; pitch-range: 90 } + h2 { pitch: x-low; pitch-range: 80 } + h3 { pitch: low; pitch-range: 70 } + h4 { pitch: medium; pitch-range: 60 } + h5 { pitch: medium; pitch-range: 50 } + h6 { pitch: medium; pitch-range: 40 } + li, dt, dd { pitch: medium; richness: 60 } + dt { stress: 80 } + pre, code, tt { pitch: medium; pitch-range: 0; stress: 0; richness: 80 } + em { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } + strong { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } + dfn { pitch: high; pitch-range: 60; stress: 60 } + s, strike { richness: 0 } + i { pitch: medium; pitch-range: 60; stress: 60; richness: 50 } + b { pitch: medium; pitch-range: 60; stress: 90; richness: 90 } + u { richness: 0 } + + :link { voice-family: harry, male } + :visited { voice-family: betty, female } + :active { voice-family: betty, female; pitch-range: 80; pitch: x-high } +} + +#top { background-color: #ffffff;} +#top .grouplogo {padding: 0;} +#top .header .current { background-color: #f5f6b5;} +#top .header .current a:link { color: #000000; } +#top .header .current a:visited { color: #000000; } +#top .header .current a:hover { color: #000000; } + +#tabs { + clear: none; + padding-top: 45px; + padding-left: 0; +} +#tabs li { background-color: #f5f5dc ;} +#tabs li a:link { color: #000000; } +#tabs li a:visited { color: #000000; } +#tabs li a:hover { color: #000000; } + +#level2tabs { background-color: #000000 ;} +#level2tabs a:link { color: #000000; } +#level2tabs a:visited { color: #000000; } +#level2tabs a:hover { color: #000000; } + +#main { + border-top: solid 18px #f5f6b5; +} + +.heading { background-color: #f5f6b5;} + +.boxed { background-color: #000000;} +.underlined_5 {border-bottom: solid 5px #000000;} +.underlined_10 {border-bottom: solid 10px #000000;} +table caption { +background-color: #000000; +color: #ffffff; +} + +#publishedStrip { +color: #000000; +background: #f5f6b5; +} + +#menu .menupage { + margin: 0; + padding: 0; +} + +#menu .menupageitem { + margin-top: 0; + margin-bottom: 0; + margin-right: 0; + margin-left: 1em; + padding: 0; +} + +#menu .menupagetitle { + background-color: #9ac926; + padding: 0; + margin: 0; + border-style: none; + border-width: 0; +} + +#menu { + border-color: #999999; + top: 0; + width: 12em; + font-size: 100%; +} + +#menu .menupagetitle { border-color: #999999;} + +#menu .menupageitemgroup { border-color: #999999;} + +#menu { background-color: #f5f6b5;} +#menu { color: #000000;} +#menu a:link { color: #000000;} +#menu a:visited { color: #000000;} +#menu a:hover { +background-color: #f5f6b5; +color: #000000;} + +#menu .menupagetitle { color: #000000;} +#menu .menupageitemgroup { +background-color: #CFDCED; +} +#menu .menupageitem { +color: #000000; +} +#menu .menupageitem a:link { color: #0000ff;} +#menu .menupageitem a:visited { color: #0000ff;} +#menu .menupageitem a:hover { +background-color: #CFDCED; +color: #0000ff; +} + +#content { + padding: 20px 20px 20px 16em; +} + +body{ +background-color: #ffffff; +color: #000000; +} +a:link { color:#0000ff} +a:visited { color:#0000ff} +a:hover { color:#0000ff} + + +.ForrestTable { background-color: #ccc;} + +.ForrestTable td { background-color: #ffffff;} + +.highlight { background-color: #ffff00;} + +.fixme { border-color: #cc6600;} + +.note { border-color: #006699;} + +.warning { border-color: #990000;} + +.code { border-color: #003366;} + +#footer { background-color: #f5f6b5;} + +#menu h1 { +color: #000000; +background-color: #cfdced; +} + +#top .searchbox { +background-color: #f5f6b5 ; +color: #000000; +} Added: trunk/website/redirects/css/screen.css =================================================================== --- trunk/website/redirects/css/screen.css (rev 0) +++ trunk/website/redirects/css/screen.css 2009-05-27 18:30:54 UTC (rev 6399) @@ -0,0 +1,512 @@ +/* +* Copyright 2002-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. +*/ +body { margin: 0px 0px 0px 0px; font-family: Verdana, Helvetica, sans-serif; } + +h1 { font-size : 160%; margin: 0px 0px 0px 0px; padding: 0px; } +h2 { font-size : 140%; margin: 0.9em 0px 0px 0px; padding: 0px; font-weight : bold;} +h3 { font-size : 130%; margin: 0.8em 0px 0px 0px; padding: 0px; font-weight : bold; } +.h3 { margin: 22px 0px 3px 0px; } +h4 { font-size : 120%; margin: 0.7em 0px 0px 0px; padding: 0px; font-weight : normal; text-align: left; } +.h4 { margin: 18px 0px 0px 0px; } +h4.faq { font-size : 120%; margin: 18px 0px 0px 0px; padding: 0px; font-weight : bold; text-align: left; } +h5 { font-size : 100%; margin: 14px 0px 0px 0px; padding: 0px; font-weight : normal; text-align: left; } + +/** +* table +*/ +table .title { background-color: #000000; } +.ForrestTable { + color: #ffffff; + background-color: #7099C5; + width: 100%; + font-size : 100%; + empty-cells: show; +} +table caption { + padding-left: 5px; + color: white; + text-align: left; + font-weight: bold; + background-color: #000000; +} +.ForrestTable td { + color: black; + background-color: #f0f0ff; +} +.ForrestTable th { text-align: center; } +/** + * Page Header + */ + +#top { + position: relative; + float: left; + width: 100%; + background: #294563; /* if you want a background in the header, put it here */ +} + +#top .breadtrail { + background: #CFDCED; + color: black; + border-bottom: solid 1px white; + padding: 3px 10px; + font-size: 75%; +} +#top .breadtrail a { color: black; } + +#top .header { + float: left; + width: 100%; + background: url("images/header_white_line.gif") repeat-x bottom; +} + +#top .grouplogo { + padding: 7px 0 10px 10px; + float: left; + text-align: left; +} +#top .projectlogo { + padding: 7px 0 10px 10px; + float: left; + width: 33%; + text-align: right; +} +#top .projectlogoA1 { + padding: 7px 0 10px 10px; + float: right; +} +html>body #top .searchbox { + bottom: 0px; +} +#top .searchbox { + position: absolute; + right: 10px; + height: 42px; + font-size: 70%; + white-space: nowrap; + text-align: right; + color: white; + background-color: #000000; + z-index:0; + background-image: url(images/rc-t-l-5-1header-2searchbox-3searchbox.png); + background-repeat: no-repeat; + background-position: top left; + bottom: -1px; /* compensate for IE rendering issue */ +} + +#top .searchbox form { + padding: 5px 10px; + margin: 0; +} +#top .searchbox p { + padding: 0 0 2px 0; + margin: 0; +} +#top .searchbox input { + font-size: 100%; +} + +#tabs { + clear: both; + padding-left: 10px; + margin: 0; + list-style: none; +} +/* background: #CFDCED url("images/tab-right.gif") no-repeat right top;*/ +#tabs li { + float: left; + background-image: url(images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png); + background-repeat: no-repeat; + background-position: top right; + background-color: #000000; + margin: 0 3px 0 0; + padding: 0; +} + +/*background: url("images/tab-left.gif") no-repeat left top;*/ +#tabs li a { + float: left; + display: block; + font-family: verdana, arial, sans-serif; + text-decoration: none; + color: black; + white-space: nowrap; + background-image: url(images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png); + background-repeat: no-repeat; + background-position: top left; + padding: 5px 15px 4px; + width: .1em; /* IE/Win fix */ +} + +#tabs > li a { width: auto; } /* Rest of IE/Win fix */ + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +#tabs a { float: none; } +/* End IE5-Mac hack */ + +#top .header .current { + background-color: #4C6C8F; + background-image: url(images/rc-t-r-5-1header-2tab-selected-3tab-selected.png); + background-repeat: no-repeat; + background-position: top right; +} +#top .header .current a { + font-weight: bold; + padding-bottom: 5px; + color: white; + background-image: url(images/rc-t-l-5-1header-2tab-selected-3tab-selected.png); + background-repeat: no-repeat; + background-position: top left; +} +#publishedStrip { + padding-right: 10px; + padding-left: 20px; + padding-top: 3px; + padding-bottom:3px; + color: #ffffff; + font-size : 60%; + font-weight: bold; + background-color: #4C6C8F; + text-align:right; +} + +#level2tabs { +margin: 0; +float:left; +position:relative; +} + +/* +* border-top: solid #4C6C8F 15px; +*/ +#main { + position: relative; + background: white; + clear:both; +} +#main .breadtrail { + clear:both; + position: relative; + background: #CFDCED; + color: black; + border-bottom: solid 1px black; + border-top: solid 1px black; + padding: 0px 180px; + font-size: 75%; + z-index:10; +} +/** +* Round corner +*/ +#roundtop { + background-image: url(images/rc-t-r-15-1body-2menu-3menu.png); + background-repeat: no-repeat; + background-position: top right; +} + +#roundbottom { + background-image: url(images/rc-b-r-15-1body-2menu-3menu.png); + background-repeat: no-repeat; + background-position: top right; +} + +img.corner { + width: 15px; + height: 15px; + border: none; + display: block !important; +} + +.roundtopsmall { + background-image: url(images/rc-t-r-5-1header-2searchbox-3searchbox.png); + background-repeat: no-repeat; + background-position: top right; +} + +#roundbottomsmall { + background-image: url(images/rc-b-r-5-1header-2tab-selected-3tab-selected.png); + background-repeat: no-repeat; + background-position: top right; +} + +img.cornersmall { + width: 5px; + height: 5px; + border: none; + display: block !important; +} +/** + * Side menu + */ +#menu a { font-weight: normal;} +#menu a:visited { font-weight: normal; } +#menu a:active { font-weight: normal; } +#menu a:hover { font-weight: normal; } + +#menuarea { width:10em;} +#menu { + position: relative; + float: left; + width: 160px; + padding-top: 0px; + top:-18px; + left:10px; + z-index: 20; + background-color: #f90; + font-size : 70%; +} + +.menutitle { + cursor:pointer; + padding: 3px 12px; + margin-left: 10px; + background-image: url('images/chapter.gif'); + background-repeat: no-repeat; + background-position: center left; + font-weight : bold; +} + +#menu .menuitemgroup { + margin: 0px 0px 6px 8px; + padding: 0px; + font-weight : bold; } + +#menu .selectedmenuitemgroup{ + margin: 0px 0px 6px 8px; + padding: 0px; + font-weight : bold; } + +#menu .menuitem { + padding: 0px 0px 2px 12px; + background-image: url('images/page.gif'); + background-repeat: no-repeat; + background-position: center left; + font-weight : normal; + margin-left: 10px; +} + +#menu .menupage { + margin: 5px 0px 5px 10px; + padding: 0px 3px 0px 12px; + background-image: url('images/current.gif'); + background-repeat: no-repeat; + background-position: top left; + font-style : normal; +} +#menu .menupagetitle { + padding: 0px 0px 0px 6px; + font-style : normal; + border-style: solid; + border-width: 1px; + margin-right: 10px; +} +#menu .menupageitemgroup { + padding: 3px 0px 4px 6px; + font-style : normal; + border-bottom: 1px solid ; + border-left: 1px solid ; + border-right: 1px solid ; + margin-right: 10px; +} +#menu .menupageitem { + font-style : normal; + font-weight : normal; + border-width: 0px; + font-size : 90%; +} +#menu #credit { + text-align: center; +} + +#content { + padding: 20px 20px 20px 180px; + margin: 0; + font : small Verdana, Helvetica, sans-serif; + font-size : 80%; +} + +#content ul { + margin: 0; + padding: 0 25px; +} +#content li { + padding: 0 5px; +} +#feedback { + color: black; + background: #CFDCED; + text-align:center; + margin-top: 5px; +} +#feedback #feedbackto { + font-size: 90%; + color: black; +} +#footer { + clear: both; + position: relative; /* IE bugfix (http://www.dracos.co.uk/web/css/ie6floatbug/) */ + width: 100%; + background: #CFDCED; + border-top: solid 1px #4C6C8F; + color: black; +} +#footer .copyright { + position: relative; /* IE bugfix cont'd */ + padding: 5px; + margin: 0; + width: 45%; +} +#footer .lastmodified { + position: relative; /* IE bugfix cont'd */ + float: right; + width: 45%; + padding: 5px; + margin: 0; + text-align: right; +} +#footer a { color: white; } + +#footer #logos { + text-align: left; +} + + +/** + * Misc Styles + */ + +acronym { cursor: help; } +.boxed { background-color: #a5b6c6;} +.underlined_5 {border-bottom: solid 5px #4C6C8F;} +.underlined_10 {border-bottom: solid 10px #4C6C8F;} +/* ==================== snail trail ============================ */ + +.trail { + position: relative; /* IE bugfix cont'd */ + font-size: 70%; + text-align: right; + float: right; + margin: -10px 5px 0px 5px; + padding: 0; +} + +#minitoc-area { + border-top: solid 1px #4C6C8F; + border-bottom: solid 1px #4C6C8F; + margin-bottom: 15px; + margin-left: 15px; + margin-right: 10%; + padding-bottom: 5px; + padding-top: 5px; +} +.minitoc { + list-style-image: url('images/current.gif'); + font-weight: normal; +} +li p { + margin: 0; + padding: 0; +} + +.pdflink { + position: relative; /* IE bugfix cont'd */ + float: right; + margin: 0px 5px; + padding: 0; +} +.pdflink br { + margin-top: -10px; + padding-left: 1px; +} +.pdflink a { + display: block; + font-size: 70%; + text-align: center; + margin: 0; + padding: 0; +} + +.pdflink img { + display: block; + height: 16px; + width: 16px; +} +.xmllink { + position: relative; /* IE bugfix cont'd */ + float: right; + margin: 0px 5px; + padding: 0; +} +.xmllink br { + margin-top: -10px; + padding-left: 1px; +} +.xmllink a { + display: block; + font-size: 70%; + text-align: center; + margin: 0; + padding: 0; +} + +.xmllink img { + display: block; + height: 16px; + width: 16px; +} +.podlink { + position: relative; /* IE bugfix cont'd */ + float: right; + margin: 0px 5px; + padding: 0; +} +.podlink br { + margin-top: -10px; + padding-left: 1px; +} +.podlink a { + display: block; + font-size: 70%; + text-align: center; + margin: 0; + padding: 0; +} + +.podlink img { + display: block; + height: 16px; + width: 16px; +} + +.printlink { + float: right; +} +.printlink br { + margin-top: -10px; + padding-left: 1px; +} +.printlink a { + display: block; + font-size: 70%; + text-align: center; + margin: 0; + padding: 0; +} +.printlink img { + display: block; + height: 16px; + width: 16px; +} \ No newline at end of file Added: trunk/website/redirects/jpython-talk-1.ppt =================================================================== (Binary files differ) Property changes on: trunk/website/redirects/jpython-talk-1.ppt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 17:10:37
|
Revision: 6398 http://jython.svn.sourceforge.net/jython/?rev=6398&view=rev Author: fwierzbicki Date: 2009-05-27 17:10:32 +0000 (Wed, 27 May 2009) Log Message: ----------- Re-arrange the website so that we have archived versions of the 2.1 and 2.2 websites, but replace most of the old pages with a page of links to the corresponding wiki page for 2.5 docs and pointers to the archive pages. This is the first cut, lots missing yet. Modified Paths: -------------- trunk/website/archive/21/index.html trunk/website/build.xml trunk/website/left.nav Added Paths: ----------- trunk/website/archive/22/ trunk/website/archive/22/about.html trunk/website/archive/22/about.txt trunk/website/archive/22/books_articles.html trunk/website/archive/22/books_articles.txt trunk/website/archive/22/bugs.html trunk/website/archive/22/bugs.txt trunk/website/archive/22/constants.html trunk/website/archive/22/constants.txt trunk/website/archive/22/contributors.html trunk/website/archive/22/contributors.txt trunk/website/archive/22/devfaq.html trunk/website/archive/22/devfaq.txt trunk/website/archive/22/download.html trunk/website/archive/22/download.txt trunk/website/archive/22/history.html trunk/website/archive/22/history.txt trunk/website/archive/22/index.html trunk/website/archive/22/index.txt trunk/website/archive/22/installation.html trunk/website/archive/22/installation.txt trunk/website/archive/22/jythonc.html trunk/website/archive/22/jythonc.txt trunk/website/archive/22/left.nav trunk/website/archive/22/license.html trunk/website/archive/22/license.txt trunk/website/archive/22/news.html trunk/website/archive/22/news.txt trunk/website/archive/22/roadmap.html trunk/website/archive/22/roadmap.txt trunk/website/archive/22/todo.html trunk/website/archive/22/todo.txt trunk/website/archive/22/userfaq.html trunk/website/archive/22/userfaq.txt trunk/website/archive/22/userguide.html trunk/website/archive/22/userguide.txt trunk/website/archive/css/ trunk/website/archive/css/PythonPoweredSmall.gif trunk/website/archive/css/basic.css trunk/website/archive/css/html4css1.css trunk/website/archive/css/jython.png trunk/website/archive/css/moin-www.png trunk/website/archive/css/pngfix.js trunk/website/archive/css/print.css trunk/website/archive/css/profile.css trunk/website/archive/css/screen.css trunk/website/redirects/ trunk/website/redirects/MacOS_Install.txt trunk/website/redirects/MacOS_Install2.txt trunk/website/redirects/MacOS_Install3.txt trunk/website/redirects/MacOS_Install4.txt trunk/website/redirects/MacOS_Install5.txt trunk/website/redirects/NEWS.txt trunk/website/redirects/Project/ trunk/website/redirects/Project/about.txt trunk/website/redirects/Project/books_articles.txt trunk/website/redirects/Project/bugs.txt trunk/website/redirects/Project/constants.txt trunk/website/redirects/Project/contributors.txt trunk/website/redirects/Project/devfaq.txt trunk/website/redirects/Project/download.txt trunk/website/redirects/Project/history.txt trunk/website/redirects/Project/index.txt trunk/website/redirects/Project/installation.txt trunk/website/redirects/Project/jythonc.txt trunk/website/redirects/Project/license.txt trunk/website/redirects/Project/news.txt trunk/website/redirects/Project/roadmap.txt trunk/website/redirects/Project/todo.txt trunk/website/redirects/Project/userfaq.txt trunk/website/redirects/Project/userguide.txt trunk/website/redirects/constants.txt trunk/website/redirects/download.txt trunk/website/redirects/graphics.txt trunk/website/redirects/index.txt trunk/website/redirects/install.txt trunk/website/redirects/license.txt trunk/website/redirects/platform.txt trunk/website/redirects/users.txt Removed Paths: ------------- trunk/website/archive/21/Jython21.html Deleted: trunk/website/archive/21/Jython21.html =================================================================== --- trunk/website/archive/21/Jython21.html 2009-05-27 16:12:33 UTC (rev 6397) +++ trunk/website/archive/21/Jython21.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -1,448 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<!-- THIS PAGE IS AUTOMATICALLY GENERATED. DO NOT EDIT. --> -<!-- Wed Mar 16 10:38:58 2005 --> -<!-- USING HT2HTML 2.0 --> -<!-- SEE http://ht2html.sf.net --> -<!-- User-specified headers: -Title: Jython Home Page - ---> - -<head> -<title>Jython Home Page</title> -<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> -<meta name="generator" content="HT2HTML/2.0"> -<style type="text/css"> -body { margin: 0px; } -</style> -</head> -<body bgcolor="#ffffff" text="#000000" - marginwidth="0" marginheight="0" - link="#0000bb" vlink="#00000" - alink="#ff0000"> -<!-- start of page table --> -<table width="100%" border="0" cellspacing="0" cellpadding="0"> -<!-- start of banner row --> -<tr> -<!-- start of corner cells --> -<td width="150" valign="middle" bgcolor="#cccccc" class="corner"> - -<center> - <a href="./"> - <img border="0" src="./images/jython-new-small.gif"></a></center> </td> -<td width="15" bgcolor="#cccccc"> </td><!--spacer--> -<!-- end of corner cells --> -<!-- start of banner --> -<td width="90%" bgcolor="#cccccc" class="banner"> -<!-- start of site links table --> -<table width="100%" border="0" -cellspacing="0" cellpadding="2" - bgcolor="#ffffff"> -<tr> - <td bgcolor="#cccccc"> -<a href="./">Home</a> - </td> - <td bgcolor="#cccccc"> -<a href="http://www.python.org/">www.python.org</a> - </td> -</tr><tr> - <td bgcolor="#cccccc"> -<a href="./download.html">Download</a> - </td> - <td bgcolor="#cccccc"> -<a href="./docs/index.html">Documentation</a> - </td> -</tr> -</table><!-- end of site links table --> - -</td><!-- end of banner --> -</tr><!-- end of banner row --> -<tr><!-- start of sidebar/body row --> -<!-- start of sidebar cells --> -<td width="150" valign="top" bgcolor="#cccccc" class="sidebar"> -<!-- start of sidebar table --> -<table width="100%" border="0" cellspacing="0" cellpadding="3" - bgcolor="#ffffff"> -<tr><td bgcolor="#666699"><b><font color="#ffffff"> -Home -</font></b></td></tr> -<tr><td bgcolor="#cccccc"> -<a href="./index.html">Overview</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="license.html">License</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://sourceforge.net/project/showfiles.php?group_id=12867&release_id=21045">Jython 2.0</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="download.html">Jython 2.1</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="install.html">Installing</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="platform.html">JVM Compatibility</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<tr><td bgcolor="#666699"><b><font color="#ffffff"> -Resources -</font></b></td></tr> -<tr><td bgcolor="#cccccc"> -<a href="applets/index.html">Applet Demos</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://sourceforge.net/mail/?group_id=12867">Mailling Lists (exit)</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://sourceforge.net/bugs/?group_id=12867">Bugs (exit)</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="users.html">Jython Users</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<tr><td bgcolor="#666699"><b><font color="#ffffff"> -Doc Quick Links -</font></b></td></tr> -<tr><td bgcolor="#cccccc"> -<a href="docs/whatis.html">What is Jython</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="docs/index.html">All Documentation</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.jython.org/cgi-bin/faqw.py?req=index">FAQ</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.jpython.org/jpython-talk-1.ppt">JimH's Slides</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<tr><td bgcolor="#666699"><b><font color="#ffffff"> -Exits -</font></b></td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.python.org/">Python Language</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.python.org/psf">PSF</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.javasoft.com">Java Language</a> -</td></tr> -<tr><td bgcolor="#cccccc"> -<tr><td bgcolor="#666699"><b><font color="#ffffff"> -Contact -</font></b></td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://lists.sourceforge.net/lists/listinfo/jython-users">Questions on Jython?<br>jython-users</a> -</td></tr> -<tr><td bgcolor="#cccccc"> - -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://www.python.org/"> -<center> - <img border="0" src="./images/PythonPoweredSmall.gif"></center> -</a> -</td></tr> -<tr><td bgcolor="#cccccc"> - -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="http://sourceforge.net/"> -<center> - <img src="http://sourceforge.net/sflogo.php?group_id=12867" width="88" height="31" border="0" alt="SourceForge Logo"></center> -</a> -</td></tr> -<tr><td bgcolor="#cccccc"> - -</td></tr> -<tr><td bgcolor="#cccccc"> - -</td></tr> -<tr><td bgcolor="#cccccc"> -<a href="mailto:jyt...@li...">webmaster</a> -</td></tr> -</table><!-- end of sidebar table --> - -</td> -<td width="15"> </td><!--spacer--> -<!-- end of sidebar cell --> -<!-- start of body cell --> -<td valign="top" width="90%" class="body"><br> -<p>Welcome to the Jython homepage. Jython is an implementation of -the high-level, dynamic, object-oriented language -<a href="http://www.python.org/">Python</a> written in -100% Pure Java, and seamlessly integrated with -the <a href="http://www.javasoft.com">Java</a> platform. It thus -allows you to run Python on any Java platform. - -<ul> -<li>What is <A HREF="docs/whatis.html">Jython</A>? -<li>Jython <a href="http://wiki.python.org/jython/">WIKI</a>. -<li><A HREF="download.html">Download</a> the latest version. -<li><A HREF="docs/index.html">Documentation</A> -<li>The Jython <A HREF="http://www.jython.org/cgi-bin/faqw.py?req=index">FAQ</A>. -<li>Brian Zimmer's <a href="http://www.ziclix.com/bzimmer/">Jython development blog</a></li> -<li><a href="https://coyote.dev.java.net/">Jython support in NetBeans</a></li> - -</ul> - - <dd><i><blockquote> - Jython, lest you do not know of it, is the most compelling weapon the Java platform has for its survival into the 21st century:-) - <br>— <cite><a href="http://seanmcgrath.blogspot.com/2003_07_27_seanmcgrath_archive.html#105971971904416520">Sean McGrath, CTO, Propylon</a></cite> - </blockquote></i> - -<h3><font size=+1 color="#666699">Jython News</font></h3> - -<dl> -<p><dt><b>16th March 2005</b></dt></p> -<li>Jython support in <a href="http://www.netbeans.org">NetBeans</a> has been announced as part of a more general dynamic languages support initiative for NetBeans called <a href="https://coyote.dev.java.net/">Coyote</a>. See blog entries by <a href="http://www.tbray.org/ongoing/When/200x/2005/03/15/Coyote">Tim Bray</a> and <a href="http://blogs.sun.com/roller/page/webmink/20050315#doing_java_without_java">Simon Phipps</a> of Sun Microsystems. -</li> -</dl> - - - -<dl> -<p><dt><b>14th February 2005</b></dt></p> -<li>The Jython <a href="http://wiki.python.org/jython/">WIKI</a> -is up and running. Thanks to <a -href="http://www.dehora.net/journal/">Bill de h\xD3ra</a> who did much of -the running to get this set up.</li> -</dl> - -<dl> -<p><dt><b>24th January 2005</b></dt></p> -<li>Brian Zimmer has started a Jython development blog : <a href="http://www.ziclix.com/bzimmer/">http://www.ziclix.com/bzimmer/</a></li> - -</dl> - -<dl> -<p><dt><b>14 January 2005</b></dt></p> - -<p>The PSF recently published its <a -href="http://www.python.org/psf/grants/">list of projects</a> to -recieve grant funding. Brian Zimmer will manage the project <a -href="http://www.python.org/psf/grants/Jython_PSF_Grant_Proposal.pdf">Moving -Jython Forward</a>. - -<p>A new article on <a -href="http://www.devx.com/Java/Article/26602">writing Eclipse JUnit -tests in Jython</a></p> - -<p>Random Jython Spotlight: <a -<a href="http://staf.sourceforge.net/index.php">STAF (Software Testing Automation Framework)</a> uses Jython for its execution engine <a href="http://staf.sourceforge.net/index.php#STAXOverview">STAX</a> (Added to <a href="users.html">Jython users page</a>. -</dl> - -<dl> -<p><dt><b>21 December 2004</b></dt></p> - -<p><a href="http://sulu.sourceforge.net/">Sulu</a> added to <a href="users.html">Jython Users Page</a>. -<p><a href="http://www.jedit.org/">jEdit</a> added to <a href="users.html">Jython Users Page</a>. - - -<p><dt><b>20 December 2004</b></dt></p> - -<p><a -href="http://www.tbray.org/ongoing/When/200x/2004/12/19/NB4-plus">Tim -Bray</a> announces an upcoming <a -href="http://www.java.net">java.net</a> project to add -dynamic-language infrastructure, including Jython, to the <a -href="http://www.netbeans.org/">NetBeans</a> IDE. - -<p><dt><b>19 December 2004</b></dt></p> - -<p>Samuele Pedroni, Guido van Rossum and Sean McGrath represent the -Python community at a dynamic languages <a -href="http://www.tbray.org/ongoing/When/200x/2004/12/08/DynamicJava">summit</a>. -Hosted by <a href="http://www.tbray.org/ongoing/">Tim Bray</a> of Sun.</p> - -<p><a href="users.html">Who uses Jython?</a> page updated.</p> - -<p>Random Jython Spotlight: <a -href="http://www.smallshire.org.uk/jython3d.htm">Jython3D</a> -combining Jython and Java3D. - -<p><dt><b>25 October 2004: website revamp announced</b></dt></p> - -<p>Over the next short while, the Jython website will be -revamped. Suggestions for the revamp welcome. Send suggestions to the -Jython developer mailing list.</p> - -<p><dt><b>25 October 2004: Progress on new-style classes -implementation</b></dt></p> - -<p> -Samuele Pedroni is making strong progress in the end-to-end -modifications required to the Jython code-base in order to support -new-style classes. The implementation of new style classes in Jython -is a key moment on the road to compatibility with CPython 2.3 and -beyond. - -Samuele plans to make an initial check-in of the branch on or around -<b>15 November 2004</b>. Stay tuned for further updates. - -For more details about the state of play, see the jython-dev archive <a href="http://sourceforge.net/mailarchive/forum.php?thread_id=5754593&forum_id=5587">here</a> and <a href="http://sourceforge.net/mailarchive/message.php?msg_id=9838528">here</a> - -<p><dt><b>25 October 2004: Jython tutorial</b></dt></p> - -<p> -Barry Feigenbaum has written a substantial two part Jython tutorial on -using Jython. The tutorial consists of two PDF files: <a -href="j-jython1-ltr.pdf">Part 1</a> (82 pages) and <a -href="j-jython2-ltr.pdf">Part 2</a> (100 pages). First published by IBM developerWorks at <a -href="http://www.ibm.com/developerWorks/">http://www.ibm.com/developerWorks/</a>. -</p> - - <p><dt><b>April 2004: Newstyle branch work.</b> - <dd> Work is undergoing since the beginning of the year to implement new-style classes - features (the biggest quantum-leap post 2.1 missing feature for a new release) on the newstyle-branch in the CVS (see e.g. <a href="http://cvs.sourceforge.net/viewcvs.py/jython/jython/org/python/core/Attic/PyType.java?only_with_tag=newstyle-branch">this check-in</a>). <b> There will be a new alpha release when this branch will be merged to the trunk. We expect then a new release for the summer, with 2.2 and some 2.3 features. Leading up to the release this site will be revamped.</b> - - <p><dt><b>31 July 2003 : Jython 2.2 alpha 0 available</b> - - <dd>Experimental, unstable release of Jython now available. This is an - alpha release, in that it is not feature complete for a Jython 2.2 - release, and there are significant known issues. - <p> - This is a snapshot that contains a mixture of Python 2.1 and 2.2 - features. Use this release at your own risk. - <p> - There has been no validation of which parts of the Python - library are functional with this relase. Expect pickle and - related modules to be broken, probably others as well. - <p> - <a href="jython22a0.zip">jython22a0.zip</a>| - <a href="README.txt">readme.txt<br></a> - -</dl> -<hr> -<dl> - <p><b>Older news items from the Jython project</b></p> - - <p><dt><b>Work in progress</b> - <dd>Something from history: - <ul><li> Python 1.5.2 was realeased on 14 Apr 1999. - <li> Python 2.0 was released on 20 Oct 2000.</ul> - - Indeed 2.1 (corresponding feature-wise to CPython 2.1) is becoming our 1.5.2, - it is not perfect but quite stable and can be used for real work, and is also - documented in print: - <ul> - <li><i><a href="http://www.oreilly.com/catalog/jythoness/"> - Jython Essentials</a></i> by Samuele Pedroni, Noel Rappin, - <a href="http://www.oreilly.com/">O'Reilly</a> - <img border="0" align="middle"src="./images/JythonEss.jpg" - alt="Jython Essentials cover" > - <li><i>Jython for Java Programmers</i> by Robert W. Bill, - <a href="http://www.newriders.com/">New Riders</a>. - <img border="0" align="middle"src="./images/Jython4JavaProgrammers.jpg" - alt="Jython for Java Programmers cover" > - </ul> - - Last year we have been working toward a new release with CPython 2.2/2.3 - features, and we are working on it. <br> - - Development peekholes: - <ul> - <li><a href="http://sf.net/projects/jython/">Jython on SourceForge</a> - <li><a href="http://sf.net/cvs/?group_id=12867">Jython CVS</a> - <li><a href="http://sourceforge.net/mailarchive/forum.php?forum_id=5588">Jython checkins maillist</a> - </ul> (jan 2003). - - <p><dt><b>Jython 2.1 released!</b> - <dd>Download the latest stable relase of Jython - <a href="download.html">here</a> and - <a href="NEWS.html">read a summary</a> of recent changes.<br> - (31-dec-2001). - - <p><dt><b>New website layout.</b> - <dd>New colors and an jython icon created by Ivan Kougaenko. (15-jan-2001). - - <p><dt><b>Step by step installation instruction for MacOS.</b> - <dd>L. Humbert has contributed a <a href="MacOS_Install.html">guide</a> - for installation and setup of Jython on MacOS. (27-dec-2000). - - <p><dt><b>Jython project announced</b> - <dd>The Jython project have been created on sourceforge. Read the - <a href="http://www.python.org/pipermail/jpython-interest/2000-October/003998.html"> - announcement</a> (19-oct-2000). -</dl> - - -<h3><font size=+1 color="#666699">Jython In the press</font></h3> - -<dl> - <p><dt><b>10-jun-2003</b> - <dd><a href="http://today.java.net/pub/a/today/2003/06/10/jython.html">Scripting with Jython Instead of XML</a>, - Jonathan Simon on <a href="http://java.net/">java.net</a> - - <p><dt><b>6-may-2003</b> - <dd>Uche Ogbuij in IBM developerWorks - <a href="http://www-106.ibm.com/developerworks/java/library/j-jython.html">Charming Jython</a> - - <p><dt><b>11-apr-2002</b> - <dd>Noel Rappin has written another - <a href="http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html"> - article</a> with jython tips for python programmers. - - <p><dt><b>2-apr-2002</b> - <dd>Our second Jython book called - <i><a href="http://www.oreilly.com/catalog/jythoness/"> - Jython Essentials</a></i> was written by By Noel Rappin and - Samuele Pedroni and published by <a href="http://www.oreilly.com/"> - O'Reilly</a>. - - <p><dt><b>28-mar-2002</b> - <dd>Noel Rappin has written an - <a href="http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html"> - article</a> on how to script java with Jython. - - <p><dt><b>15-jan-2002</b> - <dd>The very first Jython book called - <i><a href="http://www.newriders.com/books/title.cfm?isbn=0735711119"> - Jython for Java Programmers</a></i> was written by Robert W. Bill - and published by <a href="http://www.newriders.com/">New Riders</a>. - - <p><dt><b>8-apr-2001</b> - <dd>Ross Lonstein has written an - <a href="http://www.agoron.com/~lonstein/articles/jython-bsf.html">article</a> - on how Jython can be integrated with - <a href="http://oss.software.ibm.com/developerworks/projects/bsf">BSF</a>. - - <p><dt><b>12-mar-2001</b> - <dd>Weiqi Gao <a href="http://www.ociweb.com/jnb/archive/jnbMar2001.html">shows</a> - scripting examples using Jython and Rhino (javascript). - - <p><dt><b>18-dec-2000</b> - <dd>Jon Udell - <a href="http://www.byte.com/documents/s=505/BYT20001214S0006/">talks</a> - about using the JVM to implement other languages, among them JPython. - - <p><dt><b>8-dec-2000</b> - <dd>Bruce Eckel has release a new revision of his - <a href="http://www.mindview.net/Books/TIPatterns/"> - Thinking in Patterns with Java</a> book and chapter 9 has been updated to - cover Jython. - - <p><dt><b>5-dec-2000</b> - <dd>David Mertz has written an - <a href="http://gnosis.cx/publish/programming/charming_python_10.txt">interview</a> - with some of the jython developers - - <p><dt><b>8-nov-2000</b> - <dd>JPython is mentioned in an - <a href="http://www.javasoft.com/features/2000/11/dotnetvsms.html?frontpage-banner"> - article</a> that compares the Java platform with MicroSoft's .NET - - -</dl> - -<font size=-1> last updated 20-jun-2003 </font> - - - -</td><!-- end of body cell --> -</tr><!-- end of sidebar/body row --> -</table><!-- end of page table --> -</body></html> Modified: trunk/website/archive/21/index.html =================================================================== --- trunk/website/archive/21/index.html 2009-05-27 16:12:33 UTC (rev 6397) +++ trunk/website/archive/21/index.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -1,2 +1,448 @@ -<META HTTP-EQUIV="Refresh" - CONTENT="0; URL=Project/"> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<!-- THIS PAGE IS AUTOMATICALLY GENERATED. DO NOT EDIT. --> +<!-- Wed Mar 16 10:38:58 2005 --> +<!-- USING HT2HTML 2.0 --> +<!-- SEE http://ht2html.sf.net --> +<!-- User-specified headers: +Title: Jython Home Page + +--> + +<head> +<title>Jython Home Page</title> +<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> +<meta name="generator" content="HT2HTML/2.0"> +<style type="text/css"> +body { margin: 0px; } +</style> +</head> +<body bgcolor="#ffffff" text="#000000" + marginwidth="0" marginheight="0" + link="#0000bb" vlink="#00000" + alink="#ff0000"> +<!-- start of page table --> +<table width="100%" border="0" cellspacing="0" cellpadding="0"> +<!-- start of banner row --> +<tr> +<!-- start of corner cells --> +<td width="150" valign="middle" bgcolor="#cccccc" class="corner"> + +<center> + <a href="./"> + <img border="0" src="./images/jython-new-small.gif"></a></center> </td> +<td width="15" bgcolor="#cccccc"> </td><!--spacer--> +<!-- end of corner cells --> +<!-- start of banner --> +<td width="90%" bgcolor="#cccccc" class="banner"> +<!-- start of site links table --> +<table width="100%" border="0" +cellspacing="0" cellpadding="2" + bgcolor="#ffffff"> +<tr> + <td bgcolor="#cccccc"> +<a href="./">Home</a> + </td> + <td bgcolor="#cccccc"> +<a href="http://www.python.org/">www.python.org</a> + </td> +</tr><tr> + <td bgcolor="#cccccc"> +<a href="./download.html">Download</a> + </td> + <td bgcolor="#cccccc"> +<a href="./docs/index.html">Documentation</a> + </td> +</tr> +</table><!-- end of site links table --> + +</td><!-- end of banner --> +</tr><!-- end of banner row --> +<tr><!-- start of sidebar/body row --> +<!-- start of sidebar cells --> +<td width="150" valign="top" bgcolor="#cccccc" class="sidebar"> +<!-- start of sidebar table --> +<table width="100%" border="0" cellspacing="0" cellpadding="3" + bgcolor="#ffffff"> +<tr><td bgcolor="#666699"><b><font color="#ffffff"> +Home +</font></b></td></tr> +<tr><td bgcolor="#cccccc"> +<a href="./index.html">Overview</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="license.html">License</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://sourceforge.net/project/showfiles.php?group_id=12867&release_id=21045">Jython 2.0</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="download.html">Jython 2.1</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="install.html">Installing</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="platform.html">JVM Compatibility</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<tr><td bgcolor="#666699"><b><font color="#ffffff"> +Resources +</font></b></td></tr> +<tr><td bgcolor="#cccccc"> +<a href="applets/index.html">Applet Demos</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://sourceforge.net/mail/?group_id=12867">Mailling Lists (exit)</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://sourceforge.net/bugs/?group_id=12867">Bugs (exit)</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="users.html">Jython Users</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<tr><td bgcolor="#666699"><b><font color="#ffffff"> +Doc Quick Links +</font></b></td></tr> +<tr><td bgcolor="#cccccc"> +<a href="docs/whatis.html">What is Jython</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="docs/index.html">All Documentation</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.jython.org/cgi-bin/faqw.py?req=index">FAQ</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.jpython.org/jpython-talk-1.ppt">JimH's Slides</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<tr><td bgcolor="#666699"><b><font color="#ffffff"> +Exits +</font></b></td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.python.org/">Python Language</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.python.org/psf">PSF</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.javasoft.com">Java Language</a> +</td></tr> +<tr><td bgcolor="#cccccc"> +<tr><td bgcolor="#666699"><b><font color="#ffffff"> +Contact +</font></b></td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://lists.sourceforge.net/lists/listinfo/jython-users">Questions on Jython?<br>jython-users</a> +</td></tr> +<tr><td bgcolor="#cccccc"> + +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://www.python.org/"> +<center> + <img border="0" src="./images/PythonPoweredSmall.gif"></center> +</a> +</td></tr> +<tr><td bgcolor="#cccccc"> + +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="http://sourceforge.net/"> +<center> + <img src="http://sourceforge.net/sflogo.php?group_id=12867" width="88" height="31" border="0" alt="SourceForge Logo"></center> +</a> +</td></tr> +<tr><td bgcolor="#cccccc"> + +</td></tr> +<tr><td bgcolor="#cccccc"> + +</td></tr> +<tr><td bgcolor="#cccccc"> +<a href="mailto:jyt...@li...">webmaster</a> +</td></tr> +</table><!-- end of sidebar table --> + +</td> +<td width="15"> </td><!--spacer--> +<!-- end of sidebar cell --> +<!-- start of body cell --> +<td valign="top" width="90%" class="body"><br> +<p>Welcome to the Jython homepage. Jython is an implementation of +the high-level, dynamic, object-oriented language +<a href="http://www.python.org/">Python</a> written in +100% Pure Java, and seamlessly integrated with +the <a href="http://www.javasoft.com">Java</a> platform. It thus +allows you to run Python on any Java platform. + +<ul> +<li>What is <A HREF="docs/whatis.html">Jython</A>? +<li>Jython <a href="http://wiki.python.org/jython/">WIKI</a>. +<li><A HREF="download.html">Download</a> the latest version. +<li><A HREF="docs/index.html">Documentation</A> +<li>The Jython <A HREF="http://www.jython.org/cgi-bin/faqw.py?req=index">FAQ</A>. +<li>Brian Zimmer's <a href="http://www.ziclix.com/bzimmer/">Jython development blog</a></li> +<li><a href="https://coyote.dev.java.net/">Jython support in NetBeans</a></li> + +</ul> + + <dd><i><blockquote> + Jython, lest you do not know of it, is the most compelling weapon the Java platform has for its survival into the 21st century:-) + <br>— <cite><a href="http://seanmcgrath.blogspot.com/2003_07_27_seanmcgrath_archive.html#105971971904416520">Sean McGrath, CTO, Propylon</a></cite> + </blockquote></i> + +<h3><font size=+1 color="#666699">Jython News</font></h3> + +<dl> +<p><dt><b>16th March 2005</b></dt></p> +<li>Jython support in <a href="http://www.netbeans.org">NetBeans</a> has been announced as part of a more general dynamic languages support initiative for NetBeans called <a href="https://coyote.dev.java.net/">Coyote</a>. See blog entries by <a href="http://www.tbray.org/ongoing/When/200x/2005/03/15/Coyote">Tim Bray</a> and <a href="http://blogs.sun.com/roller/page/webmink/20050315#doing_java_without_java">Simon Phipps</a> of Sun Microsystems. +</li> +</dl> + + + +<dl> +<p><dt><b>14th February 2005</b></dt></p> +<li>The Jython <a href="http://wiki.python.org/jython/">WIKI</a> +is up and running. Thanks to <a +href="http://www.dehora.net/journal/">Bill de h\xD3ra</a> who did much of +the running to get this set up.</li> +</dl> + +<dl> +<p><dt><b>24th January 2005</b></dt></p> +<li>Brian Zimmer has started a Jython development blog : <a href="http://www.ziclix.com/bzimmer/">http://www.ziclix.com/bzimmer/</a></li> + +</dl> + +<dl> +<p><dt><b>14 January 2005</b></dt></p> + +<p>The PSF recently published its <a +href="http://www.python.org/psf/grants/">list of projects</a> to +recieve grant funding. Brian Zimmer will manage the project <a +href="http://www.python.org/psf/grants/Jython_PSF_Grant_Proposal.pdf">Moving +Jython Forward</a>. + +<p>A new article on <a +href="http://www.devx.com/Java/Article/26602">writing Eclipse JUnit +tests in Jython</a></p> + +<p>Random Jython Spotlight: <a +<a href="http://staf.sourceforge.net/index.php">STAF (Software Testing Automation Framework)</a> uses Jython for its execution engine <a href="http://staf.sourceforge.net/index.php#STAXOverview">STAX</a> (Added to <a href="users.html">Jython users page</a>. +</dl> + +<dl> +<p><dt><b>21 December 2004</b></dt></p> + +<p><a href="http://sulu.sourceforge.net/">Sulu</a> added to <a href="users.html">Jython Users Page</a>. +<p><a href="http://www.jedit.org/">jEdit</a> added to <a href="users.html">Jython Users Page</a>. + + +<p><dt><b>20 December 2004</b></dt></p> + +<p><a +href="http://www.tbray.org/ongoing/When/200x/2004/12/19/NB4-plus">Tim +Bray</a> announces an upcoming <a +href="http://www.java.net">java.net</a> project to add +dynamic-language infrastructure, including Jython, to the <a +href="http://www.netbeans.org/">NetBeans</a> IDE. + +<p><dt><b>19 December 2004</b></dt></p> + +<p>Samuele Pedroni, Guido van Rossum and Sean McGrath represent the +Python community at a dynamic languages <a +href="http://www.tbray.org/ongoing/When/200x/2004/12/08/DynamicJava">summit</a>. +Hosted by <a href="http://www.tbray.org/ongoing/">Tim Bray</a> of Sun.</p> + +<p><a href="users.html">Who uses Jython?</a> page updated.</p> + +<p>Random Jython Spotlight: <a +href="http://www.smallshire.org.uk/jython3d.htm">Jython3D</a> +combining Jython and Java3D. + +<p><dt><b>25 October 2004: website revamp announced</b></dt></p> + +<p>Over the next short while, the Jython website will be +revamped. Suggestions for the revamp welcome. Send suggestions to the +Jython developer mailing list.</p> + +<p><dt><b>25 October 2004: Progress on new-style classes +implementation</b></dt></p> + +<p> +Samuele Pedroni is making strong progress in the end-to-end +modifications required to the Jython code-base in order to support +new-style classes. The implementation of new style classes in Jython +is a key moment on the road to compatibility with CPython 2.3 and +beyond. + +Samuele plans to make an initial check-in of the branch on or around +<b>15 November 2004</b>. Stay tuned for further updates. + +For more details about the state of play, see the jython-dev archive <a href="http://sourceforge.net/mailarchive/forum.php?thread_id=5754593&forum_id=5587">here</a> and <a href="http://sourceforge.net/mailarchive/message.php?msg_id=9838528">here</a> + +<p><dt><b>25 October 2004: Jython tutorial</b></dt></p> + +<p> +Barry Feigenbaum has written a substantial two part Jython tutorial on +using Jython. The tutorial consists of two PDF files: <a +href="j-jython1-ltr.pdf">Part 1</a> (82 pages) and <a +href="j-jython2-ltr.pdf">Part 2</a> (100 pages). First published by IBM developerWorks at <a +href="http://www.ibm.com/developerWorks/">http://www.ibm.com/developerWorks/</a>. +</p> + + <p><dt><b>April 2004: Newstyle branch work.</b> + <dd> Work is undergoing since the beginning of the year to implement new-style classes + features (the biggest quantum-leap post 2.1 missing feature for a new release) on the newstyle-branch in the CVS (see e.g. <a href="http://cvs.sourceforge.net/viewcvs.py/jython/jython/org/python/core/Attic/PyType.java?only_with_tag=newstyle-branch">this check-in</a>). <b> There will be a new alpha release when this branch will be merged to the trunk. We expect then a new release for the summer, with 2.2 and some 2.3 features. Leading up to the release this site will be revamped.</b> + + <p><dt><b>31 July 2003 : Jython 2.2 alpha 0 available</b> + + <dd>Experimental, unstable release of Jython now available. This is an + alpha release, in that it is not feature complete for a Jython 2.2 + release, and there are significant known issues. + <p> + This is a snapshot that contains a mixture of Python 2.1 and 2.2 + features. Use this release at your own risk. + <p> + There has been no validation of which parts of the Python + library are functional with this relase. Expect pickle and + related modules to be broken, probably others as well. + <p> + <a href="jython22a0.zip">jython22a0.zip</a>| + <a href="README.txt">readme.txt<br></a> + +</dl> +<hr> +<dl> + <p><b>Older news items from the Jython project</b></p> + + <p><dt><b>Work in progress</b> + <dd>Something from history: + <ul><li> Python 1.5.2 was realeased on 14 Apr 1999. + <li> Python 2.0 was released on 20 Oct 2000.</ul> + + Indeed 2.1 (corresponding feature-wise to CPython 2.1) is becoming our 1.5.2, + it is not perfect but quite stable and can be used for real work, and is also + documented in print: + <ul> + <li><i><a href="http://www.oreilly.com/catalog/jythoness/"> + Jython Essentials</a></i> by Samuele Pedroni, Noel Rappin, + <a href="http://www.oreilly.com/">O'Reilly</a> + <img border="0" align="middle"src="./images/JythonEss.jpg" + alt="Jython Essentials cover" > + <li><i>Jython for Java Programmers</i> by Robert W. Bill, + <a href="http://www.newriders.com/">New Riders</a>. + <img border="0" align="middle"src="./images/Jython4JavaProgrammers.jpg" + alt="Jython for Java Programmers cover" > + </ul> + + Last year we have been working toward a new release with CPython 2.2/2.3 + features, and we are working on it. <br> + + Development peekholes: + <ul> + <li><a href="http://sf.net/projects/jython/">Jython on SourceForge</a> + <li><a href="http://sf.net/cvs/?group_id=12867">Jython CVS</a> + <li><a href="http://sourceforge.net/mailarchive/forum.php?forum_id=5588">Jython checkins maillist</a> + </ul> (jan 2003). + + <p><dt><b>Jython 2.1 released!</b> + <dd>Download the latest stable relase of Jython + <a href="download.html">here</a> and + <a href="NEWS.html">read a summary</a> of recent changes.<br> + (31-dec-2001). + + <p><dt><b>New website layout.</b> + <dd>New colors and an jython icon created by Ivan Kougaenko. (15-jan-2001). + + <p><dt><b>Step by step installation instruction for MacOS.</b> + <dd>L. Humbert has contributed a <a href="MacOS_Install.html">guide</a> + for installation and setup of Jython on MacOS. (27-dec-2000). + + <p><dt><b>Jython project announced</b> + <dd>The Jython project have been created on sourceforge. Read the + <a href="http://www.python.org/pipermail/jpython-interest/2000-October/003998.html"> + announcement</a> (19-oct-2000). +</dl> + + +<h3><font size=+1 color="#666699">Jython In the press</font></h3> + +<dl> + <p><dt><b>10-jun-2003</b> + <dd><a href="http://today.java.net/pub/a/today/2003/06/10/jython.html">Scripting with Jython Instead of XML</a>, + Jonathan Simon on <a href="http://java.net/">java.net</a> + + <p><dt><b>6-may-2003</b> + <dd>Uche Ogbuij in IBM developerWorks + <a href="http://www-106.ibm.com/developerworks/java/library/j-jython.html">Charming Jython</a> + + <p><dt><b>11-apr-2002</b> + <dd>Noel Rappin has written another + <a href="http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html"> + article</a> with jython tips for python programmers. + + <p><dt><b>2-apr-2002</b> + <dd>Our second Jython book called + <i><a href="http://www.oreilly.com/catalog/jythoness/"> + Jython Essentials</a></i> was written by By Noel Rappin and + Samuele Pedroni and published by <a href="http://www.oreilly.com/"> + O'Reilly</a>. + + <p><dt><b>28-mar-2002</b> + <dd>Noel Rappin has written an + <a href="http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html"> + article</a> on how to script java with Jython. + + <p><dt><b>15-jan-2002</b> + <dd>The very first Jython book called + <i><a href="http://www.newriders.com/books/title.cfm?isbn=0735711119"> + Jython for Java Programmers</a></i> was written by Robert W. Bill + and published by <a href="http://www.newriders.com/">New Riders</a>. + + <p><dt><b>8-apr-2001</b> + <dd>Ross Lonstein has written an + <a href="http://www.agoron.com/~lonstein/articles/jython-bsf.html">article</a> + on how Jython can be integrated with + <a href="http://oss.software.ibm.com/developerworks/projects/bsf">BSF</a>. + + <p><dt><b>12-mar-2001</b> + <dd>Weiqi Gao <a href="http://www.ociweb.com/jnb/archive/jnbMar2001.html">shows</a> + scripting examples using Jython and Rhino (javascript). + + <p><dt><b>18-dec-2000</b> + <dd>Jon Udell + <a href="http://www.byte.com/documents/s=505/BYT20001214S0006/">talks</a> + about using the JVM to implement other languages, among them JPython. + + <p><dt><b>8-dec-2000</b> + <dd>Bruce Eckel has release a new revision of his + <a href="http://www.mindview.net/Books/TIPatterns/"> + Thinking in Patterns with Java</a> book and chapter 9 has been updated to + cover Jython. + + <p><dt><b>5-dec-2000</b> + <dd>David Mertz has written an + <a href="http://gnosis.cx/publish/programming/charming_python_10.txt">interview</a> + with some of the jython developers + + <p><dt><b>8-nov-2000</b> + <dd>JPython is mentioned in an + <a href="http://www.javasoft.com/features/2000/11/dotnetvsms.html?frontpage-banner"> + article</a> that compares the Java platform with MicroSoft's .NET + + +</dl> + +<font size=-1> last updated 20-jun-2003 </font> + + + +</td><!-- end of body cell --> +</tr><!-- end of sidebar/body row --> +</table><!-- end of page table --> +</body></html> Added: trunk/website/archive/22/about.html =================================================================== --- trunk/website/archive/22/about.html (rev 0) +++ trunk/website/archive/22/about.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> +<title></title> +<link rel="stylesheet" href="../css/html4css1.css" type="text/css" /> +<link type="text/css" href="../css/basic.css" rel="stylesheet"> +<link media="screen" type="text/css" href="../css/screen.css" rel="stylesheet"> +<link media="print" type="text/css" href="../css/print.css" rel="stylesheet"> +<link type="text/css" href="../css/profile.css" rel="stylesheet"> +<!--[if lt IE 7]> +<script defer type="text/javascript" src="../css/pngfix.js"></script> +<![endif]--> +</head> +<body> +<div id="top"> +<div class="header"> +<div class="grouplogo"> +<a href="./" ><img class="logoImage" alt="Jython" src="../css/jython.png" title="Jython"></a> +</div> +<div class="searchbox"> +<form action="http://www.google.com/search" method="get" class="roundtopsmall"> +<input value="www.jython.org" name="sitesearch" type="hidden"><input size="25" name="q" id="query" type="text"> + <input name="Search" value="Search" type="submit"> +</form> +</div> +</div> +</div> +<div id="main"><div id="menu"><div class="menupage"> +<div class="menupagetitle">About</div> +<div class="menupageitem"><a href="./index.html">Welcome</a></div> +<div class="menupageitem"><a href="./license.html">License</a></div> +<div class="menupageitem"><a href="./installation.html">Installation</a></div> +<div class="menupageitem"><a href="./userfaq.html">FAQ</a></div> +<div class="menupageitem"><a href="./news.html">News</a></div> +<div class="menupageitem"><a href="./history.html">History</a></div> +<div class="menupageitem"><a href="./download.html">Download</a></div> +<div class="menupageitem"><a href="./userguide.html">User Guide</a></div> +<div class="menupageitem"><a href="../21/index.html">Old Website</a></div> +<div class="menupagetitle">Community</div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/">Wiki</a></div> +<div class="menupageitem"><a href="./bugs.html">Reporting Bugs</a></div> +<div class="menupageitem"><a href="http://sourceforge.net/mail/?group_id=12867">Mailing Lists</a></div> +<div class="menupageitem"><a href="./devfaq.html">Developer FAQ</a></div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/JythonDeveloperGuide">Developer Guide</a></div> +<div class="menupageitem"><a href="./roadmap.html">Jython Roadmap</a></div> +<div class="menupageitem"><a href="./contributors.html">Contributors</a></div> +<div class="menupagetitle"></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://www.python.org"><img src="../css/PythonPoweredSmall.gif" /></a></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=12867" /></a></div> +</div> +</div> +</div> +<div id="content"><div class="document"> +</div> +<div class="footer"> +<hr class="footer" /> +<a class="reference" href="about.txt">View document source</a>. + +</div> + +</div></div></body> Added: trunk/website/archive/22/books_articles.html =================================================================== --- trunk/website/archive/22/books_articles.html (rev 0) +++ trunk/website/archive/22/books_articles.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> +<title>Books and Articles about Jython</title> +<link rel="stylesheet" href="../css/html4css1.css" type="text/css" /> +<link type="text/css" href="../css/basic.css" rel="stylesheet"> +<link media="screen" type="text/css" href="../css/screen.css" rel="stylesheet"> +<link media="print" type="text/css" href="../css/print.css" rel="stylesheet"> +<link type="text/css" href="../css/profile.css" rel="stylesheet"> +<!--[if lt IE 7]> +<script defer type="text/javascript" src="../css/pngfix.js"></script> +<![endif]--> +</head> +<body> +<div id="top"> +<div class="header"> +<div class="grouplogo"> +<a href="./" ><img class="logoImage" alt="Jython" src="../css/jython.png" title="Jython"></a> +</div> +<div class="searchbox"> +<form action="http://www.google.com/search" method="get" class="roundtopsmall"> +<input value="www.jython.org" name="sitesearch" type="hidden"><input size="25" name="q" id="query" type="text"> + <input name="Search" value="Search" type="submit"> +</form> +</div> +</div> +</div> +<div id="main"><div id="menu"><div class="menupage"> +<div class="menupagetitle">About</div> +<div class="menupageitem"><a href="./index.html">Welcome</a></div> +<div class="menupageitem"><a href="./license.html">License</a></div> +<div class="menupageitem"><a href="./installation.html">Installation</a></div> +<div class="menupageitem"><a href="./userfaq.html">FAQ</a></div> +<div class="menupageitem"><a href="./news.html">News</a></div> +<div class="menupageitem"><a href="./history.html">History</a></div> +<div class="menupageitem"><a href="./download.html">Download</a></div> +<div class="menupageitem"><a href="./userguide.html">User Guide</a></div> +<div class="menupageitem"><a href="../21/index.html">Old Website</a></div> +<div class="menupagetitle">Community</div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/">Wiki</a></div> +<div class="menupageitem"><a href="./bugs.html">Reporting Bugs</a></div> +<div class="menupageitem"><a href="http://sourceforge.net/mail/?group_id=12867">Mailing Lists</a></div> +<div class="menupageitem"><a href="./devfaq.html">Developer FAQ</a></div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/JythonDeveloperGuide">Developer Guide</a></div> +<div class="menupageitem"><a href="./roadmap.html">Jython Roadmap</a></div> +<div class="menupageitem"><a href="./contributors.html">Contributors</a></div> +<div class="menupagetitle"></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://www.python.org"><img src="../css/PythonPoweredSmall.gif" /></a></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=12867" /></a></div> +</div> +</div> +</div> +<div id="content"><div class="document" id="books-and-articles-about-jython"> +<h1 class="title">Books and Articles about Jython</h1> +<div class="contents topic"> +<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p> +<ul class="simple"> +<li><a class="reference" href="#articles" id="id7" name="id7">Articles</a><ul> +<li><a class="reference" href="#id1" id="id8" name="id8">2005</a></li> +<li><a class="reference" href="#id2" id="id9" name="id9">2004</a></li> +<li><a class="reference" href="#id3" id="id10" name="id10">2003</a></li> +<li><a class="reference" href="#id4" id="id11" name="id11">2002</a></li> +<li><a class="reference" href="#id5" id="id12" name="id12">2001</a></li> +<li><a class="reference" href="#id6" id="id13" name="id13">2000</a></li> +</ul> +</li> +<li><a class="reference" href="#books" id="id14" name="id14">Books</a></li> +</ul> +</div> +<div class="section"> +<h1><a class="toc-backref" href="#id7" id="articles" name="articles">Articles</a></h1> +<div class="section"> +<h2><a class="toc-backref" href="#id8" id="id1" name="id1">2005</a></h2> +<p>Write Eclipse JUnit Tests in Jython: <a class="reference" href="http://www.devx.com/Java/Article/26602">http://www.devx.com/Java/Article/26602</a></p> +</div> +<div class="section"> +<h2><a class="toc-backref" href="#id9" id="id2" name="id2">2004</a></h2> +<p>Barry Feigenbaum has written a substantial two part Jython tutorial on using Jython. The tutorial consists of two PDF files: Part 1 (82 pages) and Part 2 (100 pages). First published by IBM developerWorks at <a class="reference" href="http://www.ibm.com/developerWorks/">http://www.ibm.com/developerWorks/</a>.</p> +</div> +<div class="section"> +<h2><a class="toc-backref" href="#id10" id="id3" name="id3">2003</a></h2> +<p>Scripting with Jython Instead of XML, Jonathan Simon on java.net <a class="reference" href="http://today.java.net/pub/a/today/2003/06/10/jython.html">http://today.java.net/pub/a/today/2003/06/10/jython.html</a></p> +<p>Uche Ogbuij in IBM developerWorks Charming Jython <a class="reference" href="http://www-128.ibm.com/developerworks/java/library/j-jython.html">http://www-128.ibm.com/developerworks/java/library/j-jython.html</a></p> +</div> +<div class="section"> +<h2><a class="toc-backref" href="#id11" id="id4" name="id4">2002</a></h2> +<p>Noel Rappin has written an article on how to script java with Jython. <a class="reference" href="http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html">http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html</a></p> +</div> +<div class="section"> +<h2><a class="toc-backref" href="#id12" id="id5" name="id5">2001</a></h2> +<p>Weiqi Gao shows scripting examples using Jython and Rhino (javascript). <a class="reference" href="http://www.ociweb.com/jnb/archive/jnbMar2001.html">http://www.ociweb.com/jnb/archive/jnbMar2001.html</a></p> +</div> +<div class="section"> +<h2><a class="toc-backref" href="#id13" id="id6" name="id6">2000</a></h2> +<p>Jon Udell talks about using the JVM to implement other languages, among them JPython. <a class="reference" href="http://www.byte.com/documents/s=505/BYT20001214S0006/">http://www.byte.com/documents/s=505/BYT20001214S0006/</a> +David Mertz has written an interview with some of the jython developers <a class="reference" href="http://gnosis.cx/publish/programming/charming_python_10.txt">http://gnosis.cx/publish/programming/charming_python_10.txt</a></p> +</div> +</div> +<div class="section"> +<h1><a class="toc-backref" href="#id14" id="books" name="books">Books</a></h1> +</div> +</div> +<div class="footer"> +<hr class="footer" /> +<a class="reference" href="books_articles.txt">View document source</a>. + +</div> + +</div></div></body> Added: trunk/website/archive/22/books_articles.txt =================================================================== --- trunk/website/archive/22/books_articles.txt (rev 0) +++ trunk/website/archive/22/books_articles.txt 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,38 @@ +=============================== +Books and Articles about Jython +=============================== + +.. contents:: Table of Contents + +Articles +======== + +2005 +---- +Write Eclipse JUnit Tests in Jython: http://www.devx.com/Java/Article/26602 + +2004 +---- +Barry Feigenbaum has written a substantial two part Jython tutorial on using Jython. The tutorial consists of two PDF files: Part 1 (82 pages) and Part 2 (100 pages). First published by IBM developerWorks at http://www.ibm.com/developerWorks/. + +2003 +---- +Scripting with Jython Instead of XML, Jonathan Simon on java.net http://today.java.net/pub/a/today/2003/06/10/jython.html + +Uche Ogbuij in IBM developerWorks Charming Jython http://www-128.ibm.com/developerworks/java/library/j-jython.html + +2002 +---- +Noel Rappin has written an article on how to script java with Jython. http://www.onjava.com/pub/a/onjava/2002/03/27/jython.html + +2001 +---- +Weiqi Gao shows scripting examples using Jython and Rhino (javascript). http://www.ociweb.com/jnb/archive/jnbMar2001.html + +2000 +---- +Jon Udell talks about using the JVM to implement other languages, among them JPython. http://www.byte.com/documents/s=505/BYT20001214S0006/ +David Mertz has written an interview with some of the jython developers http://gnosis.cx/publish/programming/charming_python_10.txt + +Books +===== Added: trunk/website/archive/22/bugs.html =================================================================== --- trunk/website/archive/22/bugs.html (rev 0) +++ trunk/website/archive/22/bugs.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> +<title>Reporting Bugs</title> +<link rel="stylesheet" href="../css/html4css1.css" type="text/css" /> +<link type="text/css" href="../css/basic.css" rel="stylesheet"> +<link media="screen" type="text/css" href="../css/screen.css" rel="stylesheet"> +<link media="print" type="text/css" href="../css/print.css" rel="stylesheet"> +<link type="text/css" href="../css/profile.css" rel="stylesheet"> +<!--[if lt IE 7]> +<script defer type="text/javascript" src="../css/pngfix.js"></script> +<![endif]--> +</head> +<body> +<div id="top"> +<div class="header"> +<div class="grouplogo"> +<a href="./" ><img class="logoImage" alt="Jython" src="../css/jython.png" title="Jython"></a> +</div> +<div class="searchbox"> +<form action="http://www.google.com/search" method="get" class="roundtopsmall"> +<input value="www.jython.org" name="sitesearch" type="hidden"><input size="25" name="q" id="query" type="text"> + <input name="Search" value="Search" type="submit"> +</form> +</div> +</div> +</div> +<div id="main"><div id="menu"><div class="menupage"> +<div class="menupagetitle">About</div> +<div class="menupageitem"><a href="./index.html">Welcome</a></div> +<div class="menupageitem"><a href="./license.html">License</a></div> +<div class="menupageitem"><a href="./installation.html">Installation</a></div> +<div class="menupageitem"><a href="./userfaq.html">FAQ</a></div> +<div class="menupageitem"><a href="./news.html">News</a></div> +<div class="menupageitem"><a href="./history.html">History</a></div> +<div class="menupageitem"><a href="./download.html">Download</a></div> +<div class="menupageitem"><a href="./userguide.html">User Guide</a></div> +<div class="menupageitem"><a href="../21/index.html">Old Website</a></div> +<div class="menupagetitle">Community</div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/">Wiki</a></div> +<div class="menupageitem"><a href="./bugs.html">Reporting Bugs</a></div> +<div class="menupageitem"><a href="http://sourceforge.net/mail/?group_id=12867">Mailing Lists</a></div> +<div class="menupageitem"><a href="./devfaq.html">Developer FAQ</a></div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/JythonDeveloperGuide">Developer Guide</a></div> +<div class="menupageitem"><a href="./roadmap.html">Jython Roadmap</a></div> +<div class="menupageitem"><a href="./contributors.html">Contributors</a></div> +<div class="menupagetitle"></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://www.python.org"><img src="../css/PythonPoweredSmall.gif" /></a></div> +<div style="height:1em"></div> +<div class="menupageitem"><a target="_blank" href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=12867" /></a></div> +</div> +</div> +</div> +<div id="content"><div class="document" id="reporting-bugs"> +<h1 class="title">Reporting Bugs</h1> +<div class="section"> +<h1><a id="viewing-and-submitting-a-bugs" name="viewing-and-submitting-a-bugs">Viewing and submitting a bugs</a></h1> +<p>The Jython project uses a roundup based bug tracker. Go to <a class="reference" href="http://bugs.jython.org">http://bugs.jython.org</a> for all bug management needs.</p> +</div> +<div class="section"> +<h1><a id="using-the-bug-tracker" name="using-the-bug-tracker">Using the bug tracker</a></h1> +<p>By default, you will see the list of all Open bugs. You can change which bugs you're viewing through the <a class="reference" href="http://bugs.jython.org/issue?@template=search&status=1">search</a> system. +To submit a bug, <a class="reference" href="http://bugs.jython.org/user?@template=register">create an account</a>, login and go to the <a class="reference" href="http://bugs.jython.org/issue?@template=item">issue creation</a> page</p> +</div> +</div> +<div class="footer"> +<hr class="footer" /> +<a class="reference" href="bugs.txt">View document source</a>. + +</div> + +</div></div></body> Added: trunk/website/archive/22/bugs.txt =================================================================== --- trunk/website/archive/22/bugs.txt (rev 0) +++ trunk/website/archive/22/bugs.txt 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,20 @@ +=============== +Reporting Bugs +=============== + +----------------------------- +Viewing and submitting a bugs +----------------------------- + +The Jython project uses a roundup based bug tracker. Go to http://bugs.jython.org for all bug management needs. + +--------------------------------- +Using the bug tracker +--------------------------------- + +By default, you will see the list of all Open bugs. You can change which bugs you're viewing through the search_ system. +To submit a bug, `create an account`_, login and go to the `issue creation`_ page + +.. _create an account: http://bugs.jython.org/user?@template=register +.. _issue creation: http://bugs.jython.org/issue?@template=item +.. _search: http://bugs.jython.org/issue?@template=search&status=1 Added: trunk/website/archive/22/constants.html =================================================================== --- trunk/website/archive/22/constants.html (rev 0) +++ trunk/website/archive/22/constants.html 2009-05-27 17:10:32 UTC (rev 6398) @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> +<title></title> +<link rel="stylesheet" href="../css/html4css1.css" type="text/css" /> +<link type="text/css" href="../css/basic.css" rel="stylesheet"> +<link media="screen" type="text/css" href="../css/screen.css" rel="stylesheet"> +<link media="print" type="text/css" href="../css/print.css" rel="stylesheet"> +<link type="text/css" href="../css/profile.css" rel="stylesheet"> +<!--[if lt IE 7]> +<script defer type="text/javascript" src="../css/pngfix.js"></script> +<![endif]--> +</head> +<body> +<div id="top"> +<div class="header"> +<div class="grouplogo"> +<a href="./" ><img class="logoImage" alt="Jython" src="../css/jython.png" title="Jython"></a> +</div> +<div class="searchbox"> +<form action="http://www.google.com/search" method="get" class="roundtopsmall"> +<input value="www.jython.org" name="sitesearch" type="hidden"><input size="25" name="q" id="query" type="text"> + <input name="Search" value="Search" type="submit"> +</form> +</div> +</div> +</div> +<div id="main"><div id="menu"><div class="menupage"> +<div class="menupagetitle">About</div> +<div class="menupageitem"><a href="./index.html">Welcome</a></div> +<div class="menupageitem"><a href="./license.html">License</a></div> +<div class="menupageitem"><a href="./installation.html">Installation</a></div> +<div class="menupageitem"><a href="./userfaq.html">FAQ</a></div> +<div class="menupageitem"><a href="./news.html">News</a></div> +<div class="menupageitem"><a href="./history.html">History</a></div> +<div class="menupageitem"><a href="./download.html">Download</a></div> +<div class="menupageitem"><a href="./userguide.html">User Guide</a></div> +<div class="menupageitem"><a href="../21/index.html">Old Website</a></div> +<div class="menupagetitle">Community</div> +<div class="menupageitem"><a href="http://wiki.python.org/jython/">Wiki</a></div> +<div class="menupageitem"><a href="./bugs.html">Reporting Bugs</a></div> +<div class="menupageitem"><a href="http://sourceforge.net/mail/?gr... [truncated message content] |
From: <fwi...@us...> - 2009-05-27 16:12:41
|
Revision: 6397 http://jython.svn.sourceforge.net/jython/?rev=6397&view=rev Author: fwierzbicki Date: 2009-05-27 16:12:33 +0000 (Wed, 27 May 2009) Log Message: ----------- Fix for http://bugs.jython.org/issue1354: core language failures in interactive interpreter PythonPartial was not allowing for multiple dedents on incomplete input in interactive mode. Modified Paths: -------------- trunk/jython/NEWS trunk/jython/grammar/PythonPartial.g Modified: trunk/jython/NEWS =================================================================== --- trunk/jython/NEWS 2009-05-27 14:38:04 UTC (rev 6396) +++ trunk/jython/NEWS 2009-05-27 16:12:33 UTC (rev 6397) @@ -2,6 +2,7 @@ Jython 2.5.0 Bugs fixed + - [ 1354 ] core language failures in interactive interpreter - [ 1358 ] Simple pogram fails to parse in Jython 2.5rc3, but parses OK with CPython - [ 1357 ] no sys.executable when script runner is a relative link Modified: trunk/jython/grammar/PythonPartial.g =================================================================== --- trunk/jython/grammar/PythonPartial.g 2009-05-27 14:38:04 UTC (rev 6396) +++ trunk/jython/grammar/PythonPartial.g 2009-05-27 16:12:33 UTC (rev 6397) @@ -300,7 +300,7 @@ suite : simple_stmt | NEWLINE (EOF - |DEDENT EOF + | (DEDENT)+ EOF |INDENT (stmt)+ (DEDENT |EOF ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2009-05-27 14:38:09
|
Revision: 6396 http://jython.svn.sourceforge.net/jython/?rev=6396&view=rev Author: fwierzbicki Date: 2009-05-27 14:38:04 +0000 (Wed, 27 May 2009) Log Message: ----------- fix for http://bugs.jython.org/issue1358: Simple pogram fails to parse in Jython 2.5rc3, but parses OK with CPython. Before this fix we failed to parse 1 \ # 2 Modified Paths: -------------- trunk/jython/NEWS trunk/jython/grammar/Python.g Modified: trunk/jython/NEWS =================================================================== --- trunk/jython/NEWS 2009-05-27 06:44:07 UTC (rev 6395) +++ trunk/jython/NEWS 2009-05-27 14:38:04 UTC (rev 6396) @@ -2,6 +2,7 @@ Jython 2.5.0 Bugs fixed + - [ 1358 ] Simple pogram fails to parse in Jython 2.5rc3, but parses OK with CPython - [ 1357 ] no sys.executable when script runner is a relative link Jython 2.5.0 rc3 Modified: trunk/jython/grammar/Python.g =================================================================== --- trunk/jython/grammar/Python.g 2009-05-27 06:44:07 UTC (rev 6395) +++ trunk/jython/grammar/Python.g 2009-05-27 14:38:04 UTC (rev 6396) @@ -1800,7 +1800,8 @@ */ CONTINUED_LINE : '\\' ('\r')? '\n' (' '|'\t')* { $channel=HIDDEN; } - ( nl=NEWLINE { + ( c1=COMMENT + | nl=NEWLINE { if (!partial) { emit(new CommonToken(NEWLINE,nl.getText())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-05-27 06:44:08
|
Revision: 6395 http://jython.svn.sourceforge.net/jython/?rev=6395&view=rev Author: pjenvey Date: 2009-05-27 06:44:07 +0000 (Wed, 27 May 2009) Log Message: ----------- poll should set returncode if the process terminated Modified Paths: -------------- trunk/jython/Lib/subprocess.py Modified: trunk/jython/Lib/subprocess.py =================================================================== --- trunk/jython/Lib/subprocess.py 2009-05-27 03:29:59 UTC (rev 6394) +++ trunk/jython/Lib/subprocess.py 2009-05-27 06:44:07 UTC (rev 6395) @@ -1275,7 +1275,7 @@ attribute.""" if self.returncode is None: try: - return self._process.exitValue() + self.returncode = self._process.exitValue() except java.lang.IllegalThreadStateException: pass return self.returncode This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |