From e59f160f706ae41c4e5145e6a3fa1d9c2b939c1a Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 31 Oct 2013 08:10:05 +0000 Subject: [PATCH] OK, my first git repository may have got smashed, but that isn't a reason for doing without. Reinitialising, history lost. And this time push to remote! --- .classpath | 6 + .project | 17 + .settings/org.eclipse.jdt.core.prefs | 11 + README.txt | 72 + build.xml | 74 + manifest.mf | 3 + nbproject/build-impl.xml | 1444 +++++++ nbproject/genfiles.properties | 8 + nbproject/private/private.properties | 2 + nbproject/private/private.xml | 4 + nbproject/project.properties | 73 + nbproject/project.properties~ | 72 + nbproject/project.xml | 16 + src/cc/journeyman/milkwood/Milkwood.java | 74 + .../milkwood/NoSuchPathException.java | 17 + src/cc/journeyman/milkwood/RuleTreeNode.java | 170 + src/cc/journeyman/milkwood/TextGenerator.java | 432 ++ .../journeyman/milkwood/TupleDictionary.java | 60 + src/cc/journeyman/milkwood/WordSequence.java | 22 + undermilkwood.txt | 3628 +++++++++++++++++ 20 files changed, 6205 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 README.txt create mode 100644 build.xml create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.properties~ create mode 100644 nbproject/project.xml create mode 100644 src/cc/journeyman/milkwood/Milkwood.java create mode 100644 src/cc/journeyman/milkwood/NoSuchPathException.java create mode 100644 src/cc/journeyman/milkwood/RuleTreeNode.java create mode 100644 src/cc/journeyman/milkwood/TextGenerator.java create mode 100644 src/cc/journeyman/milkwood/TupleDictionary.java create mode 100644 src/cc/journeyman/milkwood/WordSequence.java create mode 100644 undermilkwood.txt diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..18d70f0 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..423bbca --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + milkwood + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8000cd6 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5d05c3a --- /dev/null +++ b/README.txt @@ -0,0 +1,72 @@ +Trigrams process + +Started at: 20131030:12:48 GMT + +OK, it's a tokeniser, with a map. The map maps token tuples onto tokens. + +(A, B) -> C + +But, one tuple (A, B) may map onto any number of a number of tokens, so it's + +(A, B) -> one_of( C, D, E...) + +From the problem specification: 'What do we do with punctuation? Paragraphs?' + +Punctuation is just tokens and should follow the same rules as other tokens + +i.e. 'I CAME, I SAW, I CONQUERED,' should be treated as 'I CAME COMMA I SAW COMMA I CONQUERED' + +Paragraphs... Since this is nonsense, a paragraph won't contain a logical unit of narrative vor argument, since there can be no logical units. It is effectively a lorem ipsum text. So paragraphs should be generated at random at the ends of sentences, with a roughly 20% probability (i.e. on average five sentences to a paragraph). A 'sentence' ends just exactly when we emit a period. + +Is it really as simple as that? Seriously? + +OK, this is (1) an ideal Prolog problem, and (2) something which it would be delightful to tackle in Lisp or Clojure (or indeed use that neat little Prolog-in-Clojure I saw somewhere recently) but I'm asked to do it in Java, so Java it shall (for now) be. + +OK, interesting little problemette: + +iterating over tokens on the input, I need to hold open N uncompleted tuples, where N is the number of tokens in a tuple. H'mmmm... + +Oh, bother. A stream tokenizer doesn't return simple tokens, it tries to be clever. + +Question: does it matter if, against a word, we map multiple identical tuples? Answer: no, it doesn't - it just slightly increases the probability of that sequence being selected on output. + +Damn! and actually, this is why this really is a Lisp problem! the data structure we want is not + +I -> [[I, CAME, COMMA],[I, CAME, TO],[I, SAW, COMMA],[I, SAW, HER]] + +it would be better to have rule trees + +I -> [I, [[CAME, [[COMMA], [TO]]], [SAW [[COMMA],[HER]]]] + +Because then we could just walk the rule tree on output... Wait! No, dammit, it's even simpler than that. All we need to store is successors. Because we walk the succession hierarchy as deep as we need on output... Jings, that's neat. + +But no, in won't work - because then I don't know where I've come from. Rule trees it must be. + +Right. Backtracking required? My hunch is yes, because, suppose the input comprises the sequences: + +A B B +A B C +B C A +B C D +C D A +C A B +D B C + +Then we start by emitting A B C D, we're stuck, because we have no rule with the left-hand side 'D A'. So we have to roll back the B C D step and choose B C A instead. Which means, generation must be a recursive function. + +OK, this would be SO MUCH easier in a functional language like Clojure... the problem is in the backtracking. I had thought it wouldn't matter not marking which branches I'd explored because I could just explore branches at random, but that doesn't work because either I end up getting stuck in an infinite loop retrying branches I've explored before, or else I could fail when there is a valid solution. + +OK, the problem only specified that the tuple length should be two. I'm trying to build the general case. But the special case of tuple length = 2 would be easier to solve. Should I admit defeat, or shall I be arrogant? It would be more elegant to solve the general case. + +Argh, power cut. This is not what I need. Copied everything onto laptop but Git repository is corrupt. Never mind, don't have time to fix it. Also, don't have Java 7 on laptop so no try-with-resources... bother. + +Also don't have Netbeans on laptop and while Eclipse is handling the Netbeans project mostly fine, I can't do 'ant jar' because of stuff in the netbeans project file. Argghh! Hnd-hacked project.properties and now it works... + +Now overtired and making mistakes - a situation made worse by broken git. I don't think I'm going through the whole sequence as I intend; also, something is scrambling glanceBack - and it's something I've broken recently, which makes it worse. Taking a break. + +And, dammit! Although I've specified that line feed and carriage return are whitespace, the parser is still treating them as special. Oh, no, I beg it's pardon, it isn't. However, although I haven't specified 'period' as a word character, it is being treated as one. Bother. + +Having said all that, the parse tree is looking very good. I'm extracting the rules well. It's applying them that's proving hard. + +Right, StreamTokenizer was a poor choice. It seems to be legacy. But schlurping the whole text into a string and then using StringTokenizer or String.split() looks a bad choice too, since I don't know how long the string is. H'mmmm... This is a problem I kind of don't need, since it's not key to the project, and the .endsWith(PERIOD) hack works around it. Concentate on output. + diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..fbe28d5 --- /dev/null +++ b/build.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project milkwood. + + + diff --git a/manifest.mf b/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..86591fe --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set platform.home + Must set platform.bootcp + Must set platform.java + Must set platform.javac + + The J2SE Platform is not correctly set up. + Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. + Either open the project in the IDE and setup the Platform with the same name or add it manually. + For example like this: + ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) + or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + ${platform.java} -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + ${platform.java} -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..8621aae --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=d35b316e +build.xml.script.CRC32=cd5c02b3 +build.xml.stylesheet.CRC32=28e38971@1.56.1.46 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=d35b316e +nbproject/build-impl.xml.script.CRC32=0441a68e +nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..f8e12c4 --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=/home/simon/.jmonkeyplatform/3.0/build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..4750962 --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..27b980f --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,73 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/milkwood.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=cc.journeyman.milkwood.Milkwood +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=JDK_1.6 +platforms.JDK_1.6.home=/usr/lib/jvm/java-6-openjdk-amd64/ +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test +project.license=unpublished diff --git a/nbproject/project.properties~ b/nbproject/project.properties~ new file mode 100644 index 0000000..438cdb6 --- /dev/null +++ b/nbproject/project.properties~ @@ -0,0 +1,72 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/milkwood.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=cc.journeyman.milkwood.Milkwood +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=JDK_1.6 +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test +project.license=unpublished diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..a6aa914 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + milkwood + + + + + + + + + + diff --git a/src/cc/journeyman/milkwood/Milkwood.java b/src/cc/journeyman/milkwood/Milkwood.java new file mode 100644 index 0000000..f8d249e --- /dev/null +++ b/src/cc/journeyman/milkwood/Milkwood.java @@ -0,0 +1,74 @@ +package cc.journeyman.milkwood; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ + + +/** + * + * @author Simon Brooke + */ +public class Milkwood { + + /** + * Parse command line arguments and kick off the process. Expected + * arguments include: + *
+ *
-i, -input
+ *
Input file, expected to be an English (or, frankly, other natural + * language) text. Defaults to standard in.
+ *
-n, -tuple-length
+ *
The length of tuples into which the file will be analised, default 2.
+ *
-o, -output
+ *
Output file, to which generated text will be written. + * Defaults to standard out.
+ *
+ * + * @param args the command line arguments + * @exception FileNotFoundException if the user specifies a file which + * isn't available. + * @excpetion IOException if could not read from input or write to output. + */ + public static void main(String[] args) throws FileNotFoundException, IOException { + InputStream in = System.in; + OutputStream out = System.out; + int tupleLength = 2; + + for (int cursor = 0; cursor < args.length; cursor++) { + String arg = args[cursor]; + + if (arg.startsWith("-") && arg.length() > 1) { + switch (arg.charAt(1)) { + case 'i': + // input + in = new FileInputStream(new File(args[++cursor])); + break; + case 'o': // output + out = new FileOutputStream(new File(args[++cursor])); + break; + case 'n': + case 't': // tuple length + tupleLength = Integer.parseInt(args[++cursor]); + break; + default: + throw new IllegalArgumentException( + String.format("Unrecognised argument '%s'", arg)); + } + } + } + + new TextGenerator().readAndGenerate( in, out, tupleLength); + } +} diff --git a/src/cc/journeyman/milkwood/NoSuchPathException.java b/src/cc/journeyman/milkwood/NoSuchPathException.java new file mode 100644 index 0000000..2b49071 --- /dev/null +++ b/src/cc/journeyman/milkwood/NoSuchPathException.java @@ -0,0 +1,17 @@ +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ +package cc.journeyman.milkwood; + +/** + * + * @author Simon Brooke + */ +class NoSuchPathException extends Exception { + + private static final long serialVersionUID = 1L; + +} diff --git a/src/cc/journeyman/milkwood/RuleTreeNode.java b/src/cc/journeyman/milkwood/RuleTreeNode.java new file mode 100644 index 0000000..6d28baf --- /dev/null +++ b/src/cc/journeyman/milkwood/RuleTreeNode.java @@ -0,0 +1,170 @@ +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ +package cc.journeyman.milkwood; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Queue; +import java.util.Random; +import java.util.Stack; + +/** + * Mapping a word to its successor words. This is probably highly + * inefficient of store, but for the present purposes my withers are unwrung. + * Not thread safe in this form because of access to the random number generator. + * + * @author Simon Brooke + */ +public class RuleTreeNode { + /** + * The line separator on this platform. + */ + public static final String NEWLINE = System.getProperty("line.separator", "\n"); + /** + * A random number generator. + */ + private static Random RANDOM = new Random(); + + /** + * The word at this node. + */ + private final String word; + + /** + * Potential successors of this node + */ + private Map rules = new HashMap(); + + /** + * Create me wrapping this word. + * @param word the word I represent. + */ + public RuleTreeNode(String word) { + this.word = word; + } + + + public String toString() { + StringBuffer buffy = new StringBuffer(); + + this.printToBuffer( buffy, 0); + + + return buffy.toString(); + } + + + private void printToBuffer(StringBuffer buffy, int indent) { + for (int i = 0; i < indent; i++) { + buffy.append( '\t'); + } + buffy.append( this.getWord()); + + + if ( this.rules.isEmpty()) { + buffy.append(NEWLINE); + } else { + buffy.append( " ==>").append(NEWLINE); + for ( String successor : this.getSuccessors()) { + rules.get(successor).printToBuffer(buffy, indent + 1); + } + buffy.append(NEWLINE); + } + } + + + /** + * + * @return my word. + */ + public String getWord() { + return word; + } + + /** + * + * @return a shuffled list of the words which could follow this one. + */ + public Collection getSuccessors() { + ArrayList result = new ArrayList(); + result.addAll(rules.keySet()); + Collections.shuffle(result, RANDOM); + return result; + } + + + /** + * Compile this sequence of tokens into rule nodes under me. + * @param sequence the sequence of tokens to compile. + */ + public void addSequence(Queue sequence) { + if (!sequence.isEmpty()) { + String word = sequence.remove(); + RuleTreeNode successor = this.getRule(word); + if (successor == null) { + successor = new RuleTreeNode(word); + this.rules.put(word, successor); + } + + successor.addSequence(sequence); + } + } + + /** + * Choose a successor at random. + * + * @return the successor chosen, or null if I have none. + */ + protected RuleTreeNode getRule() { + RuleTreeNode result = null; + + if (!rules.isEmpty()) { + int target = RANDOM.nextInt(rules.keySet().size()); + + for (String key : rules.keySet()) { + /* + * NOTE: decrement after test. + */ + if (target-- == 0) { + result = rules.get(key); + } + } + } + + return result; + } + + /** + * + * @param token a token to seek. + * @return the successor among my successors which has this token, if any. + */ + protected RuleTreeNode getRule(String token) { + return rules.get(token); + } + + protected String getWord(Stack path) throws NoSuchPathException { + final String result; + + if ( path.isEmpty()) { + result = this.getWord(); + } else { + final RuleTreeNode successor = this.getRule(path.pop()); + + if (successor == null) { + throw new NoSuchPathException(); + } else { + result = successor.getWord(path); + } + } + + return result; + } +} diff --git a/src/cc/journeyman/milkwood/TextGenerator.java b/src/cc/journeyman/milkwood/TextGenerator.java new file mode 100644 index 0000000..2e4e60d --- /dev/null +++ b/src/cc/journeyman/milkwood/TextGenerator.java @@ -0,0 +1,432 @@ +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ +package cc.journeyman.milkwood; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.StreamTokenizer; +import java.util.Collection; +import java.util.LinkedList; +import java.util.Locale; +import java.util.Queue; +import java.util.Random; +import java.util.Stack; +import java.util.logging.Level; +import java.util.logging.Logger; + + + +/** + * + * @author Simon Brooke + */ +class TextGenerator { + /** + * The magic token which identifies the root node of the + * rule tree. + */ + private static final String ROOTMAGICTOKEN = "*ROOT*"; + + /** + * The special magic token which is deemed to end sentences. + */ + public static final String PERIOD = "."; + + /** + * The average number of sentences in a paragraph. + */ + public static final int AVSENTENCESPERPARA = 5; + /** + * A random number generator. + */ + private static Random RANDOM = new Random(); + /** + * Dictionary of first-words we know about; each first-word maps + * onto a tuple of tuples of word sequences beginning with that + * word, so 'I' might map onto [[I, CAME, COMMA],[I, SAW, COMMA],[I CONQUERED COMMA]]. + */ + TupleDictionary dictionary = new TupleDictionary(); + + public TextGenerator() { + } + + /** + * Read tokens from this input and use them to generate text on this output. + * @param in the input stream to read. + * @param out the output stream to write to. + * @param tupleLength the length of tuples to be used in generation. + * @throws IOException if the file system buggers up, which is not, in the + * cosmic scheme of things, very likely. + */ + void readAndGenerate(InputStream in, OutputStream out, int tupleLength) throws IOException { + /* The root of the rule tree I shall build. */ + RuleTreeNode root = new RuleTreeNode( ROOTMAGICTOKEN); + int length = read(in, tupleLength, root); + + System.err.println( root.toString()); + + generate( out, tupleLength, root, length); + } + + /** + * Read tokens from the input stream, and compile them into a ruleset below root. + * @param in the input stream from which I read. + * @param tupleLength the length of the tuples I read. + * @param root the ruleset to which I shall add. + * @return the number of tokens read. + * @throws IOException + */ + private int read(InputStream in, int tupleLength, RuleTreeNode root) throws IOException { + int result = 0; + Queue openTuples = new LinkedList(); + StreamTokenizer tok = prepareTokenizer(in); + + for (int type = tok.nextToken(); type != StreamTokenizer.TT_EOF; type = tok.nextToken()) { + result ++; + final WordSequence newTuple = new WordSequence(); + String token = readBareToken(tok, type); + + openTuples.add(newTuple); + for ( WordSequence tuple : openTuples) { + tuple.add(token); + } + + if (openTuples.size() > tupleLength) { + root.addSequence( openTuples.remove()); + } + } + + return result; + } + + /** + * There surely must be a better way to get just the token out of a + * StreamTokenizer...! + * @param tok the tokenizer. + * @return just the next token. + */ + private String readBareToken(StreamTokenizer tok, int type) { + final String token; + + switch (type) { + case StreamTokenizer.TT_EOL: + token = "FIXME"; // TODO: fix this! + break; + case StreamTokenizer.TT_NUMBER: + token = new Double(tok.nval).toString(); + break; + case StreamTokenizer.TT_WORD: + token = tok.sval.toLowerCase(); + break; + default: + StringBuffer buffy = new StringBuffer(); + buffy.append((char) type); + token = buffy.toString(); + break; + } + return token; + } + + /** + * Prepare a tokeniser on this input stream, set up to handle at least + * Western European natural language text. + * @param in the stream. + * @return a suitable tokeniser. + */ + private StreamTokenizer prepareTokenizer(InputStream in) { + Reader gentle = new BufferedReader(new InputStreamReader(in)); + StreamTokenizer tok = new StreamTokenizer(gentle); + + tok.resetSyntax(); + tok.whitespaceChars(8, 15); + tok.whitespaceChars(28, 32); + /* treat quotemarks as white space */ + tok.whitespaceChars((int) '\"', (int) '\"'); + tok.whitespaceChars((int) '\'', (int) '\''); + tok.wordChars((int) '0', (int) '9'); + tok.wordChars((int) 'A', (int) 'Z'); + tok.wordChars((int) 'a', (int) 'z'); + tok.parseNumbers(); + return tok; + } + + private void generate(OutputStream out, int tupleLength, RuleTreeNode root, int length) throws IOException { + WordSequence tokens = this.compose( root, tupleLength, length); + + if ( tokens.contains(PERIOD)) { + // TODO: eq = equal? + tokens = this.truncateAtLastInstance( tokens, PERIOD); + } + + this.generate( out, tokens); + } + + /** + * Write this sequence of tokens on this stream, sorting out minor + * issues of orthography. + * @param out the stream. + * @param tokens the tokens. + * @throws IOException if it is impossible to write (e.g. file system full). + */ + private void generate(OutputStream out, WordSequence tokens) throws IOException { + BufferedWriter dickens = new BufferedWriter(new OutputStreamWriter(out)); + boolean capitaliseNext = true; + + try { + for (String token : tokens) { + capitaliseNext = writeToken(dickens, capitaliseNext, token); + } + } finally { + dickens.flush(); + dickens.close(); + } + } + + /** + * Deal with end of paragraph, capital after full stop, and other + * minor orthographic conventions. + * @param dickens the scrivenor who writes for us. + * @param capitalise whether or not the token should be capitalised + * @param token the token to write; + * @returnvtrue if the next token to be written should be capitalised. + * @throws IOException + */ + private boolean writeToken(BufferedWriter dickens, boolean capitalise, + String token) throws IOException { + if ( this.spaceBefore(token)) { + dickens.write( " "); + } + if ( capitalise) { + dickens.write(token.substring(0, 1).toUpperCase(Locale.getDefault())); + dickens.write(token.substring(1)); + } else { + dickens.write(token); + } + + this.maybeParagraph( token, dickens); + + return (token.endsWith(PERIOD)); + } + + /** + * Return false if token is punctuation, else true. Wouldn't it be + * nice if Java provided Character.isPunctuation(char)? However, since it + * doesn't, I can give this slightly special semantics: return true only if + * this is punctuation which would not normally be preceded with a space. + * @param ch a character. + * @return true if the should be preceded by a space, else false. + */ + private boolean spaceBefore(String token) { + final boolean result; + + if (token.length() == 1) { + switch (token.charAt(0)) { + case '.': + case ',': + case ':': + case ';': + case 's': + /* + * an 's' on its own is probably evidence of a possessive with + * the apostrophe lost + */ + case 't': + /* similar; probably 'doesn't' or 'shouldn't' or other cases + * of 'not' with an elided 'o'. + */ + result = false; + break; + default: + result = true; + break; + } + } else { + result = false; + } + + return result; + } + + /** + * If this token is an end-of-sentence token, then, on one chance in + * some, have the writer write two new lines. NOTE: The tokeniser is treating + * PERIOD ('.') as a word character, even though it has not been told to. + * Token.endsWith( PERIOD) is a hack to get round this problem. + * TODO: investigate and fix. + * + * @param token a token + * @param dickens our scrivenor + * @throws IOException if Mr Dickens has run out of ink + */ + private void maybeParagraph(String token, BufferedWriter dickens) throws IOException { + if ( token.endsWith(PERIOD) && RANDOM.nextInt(AVSENTENCESPERPARA) == 0) { + dickens.write("\n\n"); + } + } + + /** + * Recursive, backtracking, output generator. + * @param rules + * @param tupleLength + * @param length + * @return + */ + private WordSequence compose(RuleTreeNode rules, int tupleLength, int length) { + Stack preamble = composePreamble( rules); + WordSequence result = new WordSequence(); + + // composing the preamble will have ended with *ROOT* on top of the stack; + // get rid of it. + preamble.pop(); + + result.addAll(preamble); + + result.addAll(this.compose( preamble, rules, rules, tupleLength, length)); + return result; + } + + /** + * Recursively attempt to find sequences in the ruleset to append to + * what's been composed so far. + * @param glanceBack + * @param allRules + * @param currentRules + * @param tupleLength + * @param length + * @return + */ + private WordSequence compose(Stack glanceBack, + RuleTreeNode allRules, RuleTreeNode currentRules, int tupleLength, + int length) { + assert (glanceBack.size() == tupleLength) : "Shouldn't happen: bad tuple size"; + assert (allRules.getWord() == ROOTMAGICTOKEN) : "Shoudn't happen: bad rule set"; + WordSequence result; + + try { + @SuppressWarnings("unchecked") + String here = currentRules.getWord((Stack) glanceBack.clone()); + System.err.println( String.format( "Trying token %s", here)); + + result = new WordSequence(); + result.add(here); + + if (length != 0) { + /* we're not done yet */ + Collection options = allRules.getSuccessors(); + + for (String next : options) { + WordSequence rest = + this.tryOption( (Stack) glanceBack.clone(), allRules, + currentRules.getRule(next), tupleLength, length - 1); + + if (rest != null) { + /* we have a solution */ + result.addAll(rest); + break; + } + } + } + } catch (NoSuchPathException ex) { + Logger.getLogger(TextGenerator.class.getName()).log(Level.WARNING, + String.format("No path %s: Backtracking...", glanceBack)); + result = null; + } + + return result; + } + + /** + * Try composing with this ruleset + * @param glanceBack + * @param allRules all the rules there are. + * @param currentRules the current node in the rule tree. + * @param tupleLength the size of the glanceback window we're considering. + * @param length + * @return + */ + private WordSequence tryOption(Stack glanceBack, + RuleTreeNode allRules, RuleTreeNode currentRules, int tupleLength, + int length) { + final Stack restack = this.restack(glanceBack, + currentRules.getWord()); + restack.pop(); + return this.compose(restack, allRules, currentRules, tupleLength, + length); + } + + /** + * Return a new stack comprising all the items on the current stack, + * with this new string added at the bottom + * + * @param stack the stack to restack. + * @param bottom the item to place on the bottom. + * @return the restacked stack. + */ + private Stack restack(Stack stack, String bottom) { + final Stack result; + if (stack.isEmpty()) { + result = new Stack(); + result.push(bottom); + } else { + String top = stack.pop(); + result = restack(stack, bottom); + result.push(top); + } + return result; + } + + + /** + * Random walk of the rule tree to extract (from the root) a legal sequence of words the length of our tuple. + * + * @param rules the rule tree (fragment) to walk. + * @return a sequence of words. + */ + private Stack composePreamble(RuleTreeNode rules) { + final Stack result; + final RuleTreeNode successor = rules.getRule(); + + if (successor == null) { + result = new Stack(); + } else { + result = this.composePreamble(successor); + result.push(rules.getWord()); + } + return result; + } + + /** + * + * @param tokens a sequence of tokens + * @param marker a marker to terminate after the last occurrance of. + * @return a copy of tokens, truncated at the last occurrance of the marker. + */ + private WordSequence truncateAtLastInstance(WordSequence tokens, + String marker) { + final WordSequence result = new WordSequence(); + + if (!tokens.isEmpty()) { + + String token = tokens.remove(); + result.add(token); + if (!(marker.equals(token) && !tokens.contains(marker))) { + /* woah, double negatives. If the token we're looking at is the + * marker, and the remainder of the tokens does not include the + * marker, we're done. Otherwise, we continue. OK? */ + result.addAll(this.truncateAtLastInstance(tokens, marker)); + } + } + + return result; + } +} diff --git a/src/cc/journeyman/milkwood/TupleDictionary.java b/src/cc/journeyman/milkwood/TupleDictionary.java new file mode 100644 index 0000000..ae192ab --- /dev/null +++ b/src/cc/journeyman/milkwood/TupleDictionary.java @@ -0,0 +1,60 @@ +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ +package cc.journeyman.milkwood; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; + +/** + * + * @author Simon Brooke + */ +public class TupleDictionary extends HashMap> { + + private static final long serialVersionUID = 1L; + + /** + * Specialisation: if there isn't an existing entry, create one. + * + * @param token the token to look up + * @return the collection of possible tuples for that token. + */ + public Collection get(String token) { + Collection result = super.get(token); + + if (result == null) { + result = new ArrayList(); + this.put(token, result); + } + + return result; + } + + /** + * Add a new, empty sequence to my entry for this token. + * @param token the token + * @return the new sequence which was added. + */ + protected WordSequence addSequence(String token) { + return this.addSequence(token, new WordSequence()); + } + + /** + * Add this sequence to my entry for this token. + * @param token the token. + * @param sequence the sequence to add. Must not be null! + * @return the sequence which was added. + */ + protected WordSequence addSequence(String token, WordSequence sequence) { + assert (sequence != null) : "invalid sequence argument"; + + this.get(token).add(sequence); + + return sequence; + } +} diff --git a/src/cc/journeyman/milkwood/WordSequence.java b/src/cc/journeyman/milkwood/WordSequence.java new file mode 100644 index 0000000..8706f45 --- /dev/null +++ b/src/cc/journeyman/milkwood/WordSequence.java @@ -0,0 +1,22 @@ +/* + * Proprietary unpublished source code property of + * Simon Brooke . + * + * Copyright (c) 2013 Simon Brooke + */ +package cc.journeyman.milkwood; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * An ordered sequence of words. Of course it implements Queue since it is a + * LinkedList and LinkedList implements Queue, but I want to make it explicitly + * clear that this is a queue and can be used as such. + * @author Simon Brooke + */ +class WordSequence extends LinkedList implements Queue { + + private static final long serialVersionUID = 1L; + +} diff --git a/undermilkwood.txt b/undermilkwood.txt new file mode 100644 index 0000000..5464558 --- /dev/null +++ b/undermilkwood.txt @@ -0,0 +1,3628 @@ + +Under Milk Wood +A Play for Voices +by +Dylan Thomas + +First published 1954 + + + + + UNDER MILK WOOD + + + + [Silence] + + FIRST VOICE (_Very softly_) + +To begin at the beginning: + +It is spring, moonless night in the small town, starless +and bible-black, the cobblestreets silent and the hunched, +courters'-and-rabbits' wood limping invisible down to the +sloeblack, slow, black, crowblack, fishingboatbobbing sea. +The houses are blind as moles (though moles see fine to-night +in the snouting, velvet dingles) or blind as Captain Cat +there in the muffled middle by the pump and the town clock, +the shops in mourning, the Welfare Hall in widows' weeds. +And all the people of the lulled and dumbfound town are +sleeping now. + +Hush, the babies are sleeping, the farmers, the fishers, +the tradesmen and pensioners, cobbler, schoolteacher, +postman and publican, the undertaker and the fancy woman, +drunkard, dressmaker, preacher, policeman, the webfoot +cocklewomen and the tidy wives. Young girls lie bedded soft +or glide in their dreams, with rings and trousseaux, +bridesmaided by glowworms down the aisles of the +organplaying wood. The boys are dreaming wicked or of the +bucking ranches of the night and the jollyrodgered sea. And +the anthracite statues of the horses sleep in the fields, +and the cows in the byres, and the dogs in the wetnosed +yards; and the cats nap in the slant corners or lope sly, +streaking and needling, on the one cloud of the roofs. + +You can hear the dew falling, and the hushed town breathing. +Only _your_ eyes are unclosed to see the black and folded +town fast, and slow, asleep. And you alone can hear the +invisible starfall, the darkest-beforedawn minutely dewgrazed +stir of the black, dab-filled sea where the _Arethusa_, the +_Curlew_ and the _Skylark_, _Zanzibar_, _Rhiannon_, the _Rover_, +the _Cormorant_, and the _Star of Wales_ tilt and ride. + +Listen. It is night moving in the streets, the processional +salt slow musical wind in Coronation Street and Cockle Row, +it is the grass growing on Llaregyb Hill, dewfall, starfall, +the sleep of birds in Milk Wood. + +Listen. It is night in the chill, squat chapel, hymning in +bonnet and brooch and bombazine black, butterfly choker and +bootlace bow, coughing like nannygoats, sucking mintoes, +fortywinking hallelujah; night in the four-ale, quiet as a +domino; in Ocky Milkman's lofts like a mouse with gloves; +in Dai Bread's bakery flying like black flour. It is to-night +in Donkey Street, trotting silent, With seaweed on its +hooves, along the cockled cobbles, past curtained fernpot, +text and trinket, harmonium, holy dresser, watercolours +done by hand, china dog and rosy tin teacaddy. It is night +neddying among the snuggeries of babies. + +Look. It is night, dumbly, royally winding through the +Coronation cherry trees; going through the graveyard of +Bethesda with winds gloved and folded, and dew doffed; +tumbling by the Sailors Arms. + +Time passes. Listen. Time passes. + +Come closer now. + +Only you can hear the houses sleeping in the streets in the +slow deep salt and silent black, bandaged night. Only you +can see, in the blinded bedrooms, the coms. and petticoats +over the chairs, the jugs and basins, the glasses of teeth, +Thou Shalt Not on the wall, and the yellowing dickybird-watching +pictures of the dead. Only you can hear and see, behind the +eyes of the sleepers, the movements and countries and mazes +and colours and dismays and rainbows and tunes and wishes +and flight and fall and despairs and big seas of their dreams. + +From where you are, you can hear their dreams. + +Captain Cat, the retired blind sea-captain, asleep in his +bunk in the seashelled, ship-in-bottled, shipshape best +cabin of Schooner House dreams of + + SECOND VOICE + +never such seas as any that swamped the decks of his _S.S. +Kidwelly_ bellying over the bedclothes and jellyfish-slippery +sucking him down salt deep into the Davy dark where the fish +come biting out and nibble him down to his wishbone, and +the long drowned nuzzle up to him. + + FIRST DROWNED + +Remember me, Captain? + + CAPTAIN CAT + +You're Dancing Williams! + + FIRST DROWNED + +I lost my step in Nantucket. + + SECOND DROWNED + +Do you see me, Captain? the white bone talking? I'm Tom-Fred +the donkeyman...we shared the same girl once...her name was +Mrs Probert... + + WOMAN'S VOICE + +Rosie Probert, thirty three Duck Lane. Come on up, boys, +I'm dead. + + THIRD DROWNED + +Hold me, Captain, I'm Jonah Jarvis, come to a bad end, very +enjoyable. + + FOURTH DROWNED + +Alfred Pomeroy Jones, sea-lawyer, born in Mumbles, sung +like a linnet, crowned you with a flagon, tattooed with +mermaids, thirst like a dredger, died of blisters. + + FIRST DROWNED + +This skull at your earhole is + + FIFTH DROWNED + +Curly Bevan. Tell my auntie it was me that pawned he ormolu +clock. + + CAPTAIN CAT + +Aye, aye, Curly. + + SECOND DROWNED + +Tell my missus no I never + + THIRD DROWNED + +I never done what she said I never. + + FOURTH DROWNED + +Yes they did. + + FIFTH DROWNED + +And who brings coconuts and shawls and parrots to _my_ +Gwen now? + + FIRST DROWNED + +How's it above? + + SECOND DROWNED + +Is there rum and laverbread? + + THIRD DROWNED + +Bosoms and robins? + + FOURTH DROWNED + +Concertinas? + + FIFTH DROWNED + +Ebenezer's bell? + + FIRST DROWNED + +Fighting and onions? + + SECOND DROWNED + +And sparrows and daisies? + + THIRD DROWNED + +Tiddlers in a jamjar? + + FOURTH DROWNED + +Buttermilk and whippets? + + FIFTH DROWNED + +Rock-a-bye baby? + + FIRST DROWNED + +Washing on the line? + + SECOND DROWNED + +And old girls in the snug? + + THIRD DROWNED + +How's the tenors in Dowlais? + + FOURTH DROWNED + +Who milks the cows in Maesgwyn? + + FIFTH DROWNED + +When she smiles, is there dimples? + + FIRST DROWNED + +What's the smell of parsley? + + CAPTAIN CAT + +Oh, my dead dears! + + FIRST VOICE + +From where you are you can hear in Cockle Row in the spring, +moonless night, Miss Price, dressmaker and sweetshop-keeper, +dream of + + SECOND VOICE +her lover, tall as the town clock tower, Samsonsyrup-gold-maned, +whacking thighed and piping hot, thunderbolt-bass'd and +barnacle-breasted, flailing up the cockles with his eyes +like blowlamps and scooping low over her lonely loving +hotwaterbottled body. + + MR EDWARDS + +Myfanwy Price! + + MISS PRICE + +Mr Mog Edwards! + + MR EDWARDS + +I am a draper mad with love. I love you more than all the +flannelette and calico, candlewick, dimity, crash and merino, +tussore, cretonne, crepon, muslin, poplin, ticking and twill +in the whole Cloth Hall of the world. I have come to take +you away to my Emporium on the hill, where the change hums +on wires. Throw away your little bedsocks and your Welsh +wool knitted jacket, I will warm the sheets like an electric +toaster, I will lie by your side like the Sunday roast. + + MISS PRICE + +I will knit you a wallet of forget-me-not blue, for the +money, to be comfy. I will warm your heart by the fire so +that you can slip it in under your vest when the shop is +closed. + + MR EDWARDS + +Myfanwy, Myfanwy, before the mice gnaw at your bottom drawer +will you say + + MISS PRICE + +Yes, Mog, yes, Mog, yes, yes, yes. + + MR EDWARDS + +And all the bells of the tills of the town shall ring for +our wedding. + + [_Noise of money-tills and chapel bells_ + + FIRST VOICE + +Come now, drift up the dark, come up the drifting sea-dark +street now in the dark night seesawing like the sea, to the +bible-black airless attic over Jack Black the cobbler's +shop where alone and savagely Jack Black sleeps in a +nightshirt tied to his ankles with elastic and dreams of + + SECOND VOICE + +chasing the naughty couples down the grassgreen gooseberried +double bed of the wood, flogging the tosspots in the +spit-and-sawdust, driving out the bare bold girls from the +sixpenny hops of his nightmares. + + JACK BLACK (_Loudly_) + + Ach y fi! + Ach y fi! + + FIRST VOICE + +Evans the Death, the undertaker, + + SECOND VOICE + +laughs high and aloud in his sleep and curls up his toes as +he sees, upon waking fifty years ago, snow lie deep on the +goosefield behind the sleeping house ; and he runs out into +the field where his mother is making welsh-cakes in the +snow, and steals a fistful of snowflakes and currants and +climbs back to bed to eat them cold and sweet under the +warm, white clothes while his mother dances in the snow +kitchen crying out for her lost currants. + + FIRST VOICE + +And in the little pink-eyed cottage next to the undertaker's, +lie, alone, the seventeen snoring gentle stone of Mister +Waldo, rabbitcatcher, barber, herbalist, catdoctor, quack, +his fat pink hands, palms up, over the edge of the patchwork +quilt, his black boots neat and tidy in the washing-basin, +his bowler on a nail above the bed, a milk stout and a slice +of cold bread pudding under the pillow; and, dripping in +the dark, he dreams of + + MOTHER + + This little piggy went to market + This little piggy stayed at home + This little piggy had roast beef + This little piggy had none + And this little piggy went + + LITTLE BOY + +wee wee wee wee wee + + MOTHER + +all the way home to + + WIFE (_Screaming_) + +Waldo! Wal-do! + + MR WALDO + +Yes, Blodwen love? + + WIFE + +Oh, what'll the neighbours say, what'll the neighbours... + + FIRST NEIGHBOUR + +Poor Mrs Waldo + + SECOND NEIGHBOUR + +What she puts up with + + FIRST NEIGHBOUR + +Never should of married + + SECOND NEIGHBOUR + +If she didn't had to + + FIRST NEIGHBOUR + +Same as her mother + + SECOND NEIGHBOUR + +There's a husband for you + + FIRST NEIGHBOUR + +Bad as his father + + SECOND NEIGHBOUR + +And you know where he ended + + FIRST NEIGHBOUR + +Up in the asylum + + SECOND NEIGHBOUR + +Crying for his ma + + FIRST NEIGHBOUR + +Every Saturday + + SECOND NEIGHBOUR + +He hasn't got a log + + FIRST NEIGHBOUR + +And carrying on + + SECOND NEIGHBOUR + +With that Mrs Beattie Morris + + FIRST NEIGHBOUR + +Up in the quarry + + SECOND NEIGHBOUR + +And seen her baby + + FIRST NEIGHBOUR + +It's got his nose + + SECOND NEIGHBOUR + +Oh it makes my heart bleed + + FIRST NEIGHBOUR + +What he'll do for drink + + SECOND NEIGHBOUR + +He sold the pianola to + + FIRST NEIGHBOUR + +And her sewing machine + + SECOND NEIGHBOUR + +Falling in the gutter + + FIRST NEIGHBOUR + +Talking to the lamp-post + + SECOND NEIGHBOUR + +Using language + + FIRST NEIGHBOUR + +Singing in the w + + SECOND NEIGHBOUR + +Poor Mrs Waldo + + WIFE (_Tearfully_) + +...Oh, Waldo, Waldo! + + MR WALDO + +Hush, love, hush. I'm widower Waldo now. + + MOTHER (_Screaming_) + +Waldo, Wal-do! + + LITTLE BOY + +Yes, our mum? + + MOTHER + +Oh, what'll the neighbours say, what'll the neighbours... + + THIRD NEIGHBOUR + +Black as a chimbley + + FOURTH NEIGHBOUR + +Ringing doorbells + + THIRD NEIGHBOUR + +Breaking windows + + FOURTH NEIGHBOUR + +Making mudpies + + THIRD NEIGHBOUR + +Stealing currants + + FOURTH NEIGHBOUR + +Chalking words + + THIRD NEIGHBOUR + +Saw him in the bushes + + FOURTH NEIGHBOUR + +Playing mwchins + + THIRD NEIGHBOUR + +Send him to bed without any supper + + FOURTH NEIGHBOUR + +Give him sennapods and lock him in the dark + + THIRD NEIGHBOUR + +Off to the reformatory + + FOURTH NEIGHBOUR + +Off to the reformatory + + TOGETHER + +Learn him with a slipper on his b.t.m. + + ANOTHER MOTHER (_Screaming_) + +Waldo, Wal-do! what you doing with our Matti? + + LITTLE BOY + +Give us a kiss, Matti Richards. + + LITTLE GIRL + +Give us a penny then. + + MR WALDO + +I only got a halfpenny. + + FIRST WOMAN + +Lips is a penny. + + PREACHER + +Will you take this woman Matti Richards + + SECOND WOMAN + +Dulcie Prothero + + THIRD WOMAN + +Effie Bevan + + FOURTH WOMAN + +Lil the Gluepot + + FIFTH WOMAN + +Mrs Flusher + + WIFE + +Blodwen Bowen + + PREACHER + +To be your awful wedded wife + + LITTLE BOY (_Screaming_) + +No, no, no! + + FIRST VOICE + +Now, in her iceberg-white, holily laundered crinoline +nightgown, under virtuous polar sheets, in her spruced and +scoured dust-defying bedroom in trig and trim Bay View, a +house for paying guests, at the top of the town, Mrs +Ogmore-Pritchard widow, twice, of Mr Ogmore, linoleum, +retired, and Mr Pritchard, failed bookmaker, who maddened +by besoming, swabbing and scrubbing, the voice of the +vacuum-cleaner and the fume of polish, ironically swallowed +disinfectant, fidgets in her rinsed sleep, wakes in a +dream, and nudges in the ribs dead Mr Ogmore, dead Mr +Pritchard, ghostly on either side. + + MRS OGMORE-PRITCHARD + +Mr Ogmore! + +Mr Pritchard! + +It is time to inhale your balsam. + + MR OGMORE + +Oh, Mrs Ogmore! + + MR PRITCHARD + +Oh, Mrs Pritchard! + + MRS OGMORE-PRITCHARD + +Soon it will be time to get up. + +Tell me your tasks, in order. + + MR OGMORE + +I must put my pyjamas in the drawer marked pyjamas. + + MR PRITCHARD + +I must take my cold bath which is good for me. + + MR OGMORE + +I must wear my flannel band to ward off sciatica. + + MR PRITCHARD + +I must dress behind the curtain and put on my apron. + + MR OGMORE + +I must blow my nose. + + MRS OGMORE-PRITCHARD + +In the garden, if you please. + + MR OGMORE + +In a piece of tissue-paper which I afterwards burn. + + MR PRITCHARD + +I must take my salts which are nature's friend. + + MR OGMORE + +I must boil the drinking water because of germs. + + MR PRITCHARD + +I must make my herb tea which is free from tannin. + + MR OGMORE + +And have a charcoal biscuit which is good for me. + + MR PRITCHARD + +I may smoke one pipe of asthma mixture. + + MRS OGMORE-PRITCHARD + +In the woodshed, if you please. + + MR PRITCHARD + +And dust the parlour and spray the canary. IS + + MR OGMORE + +I must put on rubber gloves and search the peke for fleas. + + MR PRITCHARD + +I must dust the blinds and then I must raise them. + + MRS OGMORE-PRITCHARD + +And before you let the sun in, mind it wipes its shoes. + + FIRST VOICE + +In Butcher Beynon's, Gossamer Beynon, daughter, schoolteacher, +dreaming deep, daintily ferrets under a fluttering hummock +of chicken's feathers in a slaughterhouse that has chintz +curtains and a three-pieced suite, and finds, with no surprise, +a small rough ready man with a bushy tail winking in a paper +carrier. + + GOSSAMER BEYNON + +At last, my love, + + FIRST VOICE + +sighs Gossamer Beynon. And the bushy tail wags rude and ginger. + + ORGAN MORGAN + +Help, + + SECOND VOICE + +cries Organ Morgan, the organist, in his dream, + + ORGAN MORGAN + +There is perturbation and music in Coronation Street! All +the spouses are honking like geese and the babies singing +opera. P.C. Attila Rees has got his truncheon out and is +playing cadenzas by the pump, the cows from Sunday Meadow +ring like reindeer, and on the roof of Handel Villa see the +Women's Welfare hoofing, bloomered, in the moon. + + FIRST VOICE + +At the sea-end of town, Mr and Mrs Floyd, the cocklers, are +sleeping as quiet as death, side by wrinkled side, toothless, +salt and brown, like two old kippers In a box. + +And high above, in Salt Lake Farm, Mr Utah Watkins counts, +all night, the wife-faced sheep as they leap the knees on +the hill, smiling and knitting and bleating just like Mrs +Utah Watkins. + + UTAH WATKINS (_Yawning_) + +Thirty - four, thirty - five, thirty - six, forty - eight, +eighty-nine... + + MRS UTAH WATKINS (_Bleating_) + +Knit one slip one +Knit two together +Pass the slipstitch over... + + FIRST VOICE + +Ocky Milkman, drowned asleep in Cockle Street, is emptying +his churns into the Dewi River, + + OCKY MILKMAN (_Whispering_) + +regardless of expense, + + FIRST VOICE + +and weeping like a funeral. + + SECOND VOICE + +Cherry Owen, next door, lifts a tankard to his but nothing +flows out of it. He shakes the tankar ' It turns into a +fish. He drinks the fish. + + FIRST VOICE + +P.C. Attila Rees lumps out of bed, dead to the dar and still +foghorning, and drags out his helmet from under the bed; +but deep in the backyard lock-up of his slee a mean voice +murmurs + + A VOICE (_Murmuring_) + +You'll be sorry for this in the morning, + + FIRST VOICE + +and he heave-ho's back to bed. His helmet swashes in the dark. + + SECOND VOICE + +Willy Nilly, postman, asleep up street, walks fourteen miles +to deliver the post as he does every day of the night, and +rat-a-tats hard and sharp on Mrs Willy Nilly. + + MRS WILLY NILLY + +Don't spank me, please, teacher, + + SECOND VOICE + +whimpers his wife at his side, but every night of her married +life she has been late for school. + + FIRST VOICE + +Sinbad Sailors, over the taproom of the Sailors Arms, hugs +his damp pillow whose secret name is Gossamer Beynon. + +A mogul catches Lily Smalls in the wash-house. + + LILY SMALLS + +Ooh, you old mogul! + + SECOND VOICE + +Mrs Rose Cottage's eldest, Mae, peals off her pink-and-white +skin in a furnace in a tower in a cave in a waterfall in a +wood and waits there raw as an onion for Mister Right to +leap up the burning tall hollow splashes of leaves like a +brilliantined trout. + + MAE ROSE COTTAGE (_Very close and softly, drawing + out the words_) + +Call me Dolores +Like they do in the stories. + + FIRST VOICE + +Alone until she dies, Bessie Bighead, hired help, born in +the workhouse, smelling of the cowshed, snores bass and +gruff on a couch of straw in a loft in Salt Lake Farm and +picks a posy of daisies in Sunday Meadow to put on the grave +of Gomer Owen who kissed her once by the pig-sty when she +wasn't looking and never kissed her again although she was +looking all the time. + +And the Inspectors of Cruelty fly down into Mrs Butcher +Brynon's dream to persecute Mr Beynon for selling + + BUTCHER BEYNON + +owlmeat, dogs' eyes, manchop. + + SECOND VOICE + +Mr Beynon, in butcher's bloodied apron, spring-heels down +Coronation Street, a finger, not his own, in his mouth. +Straightfaced in his cunning sleep he pulls the legs of +his dreams and + + BUTCHER BEYNON + +hunting on pigback shoots down the wild giblets. + + ORGAN MORGAN (_High and softly_) + +Help! + + GOSSAMER BEYNON (_Softly_) + +My foxy darling. + + FIRST VOICE + +Now behind the eyes and secrets of the dreamers in the +streets rocked to sleep by the sea, see the + + SECOND VOICE + +titbits and topsyturvies, bobs and buttontops, bags and +bones, ash and rind and dandruff and nailparings, saliva +and snowflakes and moulted feathers of dreams, the wrecks +and sprats and shells and fishbones, whale-juice and moonshine +and small salt fry dished up by the hidden sea. + + FIRST VOICE + +The owls are hunting. Look, over Bethesda gravestones one +hoots and swoops and catches a mouse by Hannah Rees, Beloved +Wife. And in Coronation Street, which you alone can see it +is so dark under the chapel in the skies, the Reverend Eli +Jenkins, poet, preacher, turns in his deep towards-dawn +sleep and dreams of + + REV. ELI JENKINS + +Eisteddfodau. + +SECOND VOICE + +He intricately rhymes, to the music of crwth and pibgorn, +all night long in his druid's seedy nightie in a beer-tent +black with parchs. + + FIRST VOICE + +Mr Pugh, schoolmaster, fathoms asleep, pretends to be sleeping, +spies foxy round the droop of his nightcap and pssst! whistles up + + MR PUGH + +Murder. + + FIRST VOICE + +Mrs Organ Morgan, groceress, coiled grey like a dormouse, +her paws to her ears, conjures + + MRS ORGAN MORGAN + +Silence. + + SECOND VOICE + +She sleeps very dulcet in a cove of wool, and trumpeting +Organ Morgan at her side snores no louder than a +spider. + + FIRST VOICE + +Mary Ann Sailors dreams of + + MARY ANN SAILORS + +The Garden of Eden. + + FIRST VOICE + +She comes in her smock-frock and clogs + + MARY ANN SAILORS + +away from the cool scrubbed cobbled kitchen with the +Sunday-school pictures on the whitewashed wall and the +farmers' almanac hung above the settle and the sides of +bacon on the ceiling hooks, and goes down the cockleshelled +paths of that applepie kitchen garden, ducking under the +gippo's clothespegs, catching her apron on the blackcurrant +bushes, past beanrows and onion-bed and tomatoes ripening +on the wall towards the old man playing the harmonium in +the orchard, and sits down on the grass at his side and +shells the green peas that grow up through the lap of her +frock that brushes the dew. + + FIRST VOICE + +In Donkey Street, so furred with sleep, Dai Bread, Polly +Garter, Nogood Boyo, and Lord Cut-Glass sigh before the +dawn that is about to be and dream of + + DAI BREAD + +Harems. + + POLLY GARTER + +Babies. + + NOGOOD BOYO + +Nothing. + + LORD CUT-GLASS + +Tick tock tick tock tick tock tick tock. + + FIRST VOICE + +Time passes. Listen. Time passes. An owl flies I home past +Bethesda, to a chapel in an oak. And the dawn inches up. + + [_One distant bell-note, faintly reverberating_ + + FIRST VOICE + +Stand on this hill. This is Llaregyb Hill, old as the hills, +high, cool, and green, and from this small circle, of stones, +made not by druids but by Mrs Beynon's Billy, you can see all +the town below you sleeping in the first of the dawn. + +You can hear the love-sick woodpigeons mooning in bed. A dog +barks in his sleep, farmyards away. The town ripples like a +lake in the waking haze. + + VOICE OF A GUIDE-BOOK + +Less than five hundred souls inhabit the three quaint streets +and the few narrow by-lanes and scattered farmsteads that +constitute this small, decaying watering-place which may, +indeed, be called a 'backwater of life' without disrespect +to its natives who possess, to this day, a salty individuality +of their own. The main street, Coronation Street, consists, +for the most part, of humble, two-storied houses many of which +attempt to achieve some measure of gaiety by prinking +themselves out in crude colours and by the liberal use of +pinkwash, though there are remaining a few eighteenth-century +houses of more pretension, if, on the whole, in a sad state +of disrepair. Though there is little to attract the hillclimber, +the healthseeker, the sportsman, or the weekending motorist, +the contemplative may, if sufficiently attracted to spare +it some leisurely hours, find, in its cobbled streets and +its little fishing harbour, in its several curious customs, +and in the conversation of its local 'characters,' some of +that picturesque sense of the past so frequently lacking in +towns and villages which have kept more abreast of the times. +The River Dewi is said to abound in trout, but is much poached. +The one place of worship, with its neglected graveyard, is of +no architectural interest. + + [_A cock crows_ + + FIRST VOICE + +The principality of the sky lightens now, over our green +hill, into spring morning larked and crowed and belling. + + [_Slow bell notes_ + + FIRST VOICE + +Who pulls the townhall bellrope but blind Captain Cat? One +by one, the sleepers are rung out of sleep this one morning +as every morning. And soon you shall see the chimneys' slow +upflying snow as Captain Cat, in sailor's cap and seaboots, +announces to-day with his loud get-out-of-bed bell. + + SECOND VOICE + +The Reverend Eli Jenkins, in Bethesda House, gropes out of +bed into his preacher's black, combs back his bard's white +hair, forgets to wash, pads barefoot downstairs, opens the +front door, stands in the doorway and, looking out at the +day and up at the eternal hill, and hearing the sea break +and the gab of birds, remembers his own verses and tells +them softly to empty Coronation Street that is rising and +raising its blinds. + + REV. ELI JENKINS + +Dear Gwalia! I know there are +Towns lovelier than ours, +And fairer hills and loftier far, +And groves more full of flowers, + +And boskier woods more blithe with spring +And bright with birds' adorning, +And sweeter bards than I to sing +Their praise this beauteous morning. + +By Cader Idris, tempest-torn, +Or Moel yr Wyddfa's glory, +Carnedd Llewelyn beauty born, +Plinlimmon old in story, + +By mountains where King Arthur dreams, +By Penmaenmawr defiant, +Llaregyb Hill a molehill seems, +A pygmy to a giant. + +By Sawdde, Senny, Dovey, Dee, +Edw, Eden, Aled, all, +Taff and Towy broad and free, +Llyfnant with its waterfall, + +Claerwen, Cleddau, Dulais, Daw, +Ely, Gwili, Ogwr, Nedd, +Small is our River Dewi, Lord, +A baby on a rushy bed. + +By Carreg Cennen, King of time, +Our Heron Head is only +A bit of stone with seaweed spread +Where gulls come to be lonely. + +A tiny dingle is Milk Wood +By Golden Grove 'neath Grongar, +But let me choose and oh! I should +Love all my life and longer + +To stroll among our trees and stray +In Goosegog Lane, on Donkey Down, +And hear the Dewi sing all day, +And never, never leave the town. + + SECOND VOICE + +The Reverend Jenkins closes the front door. His morning +service is over. + + [_Slow bell notes_ + + FIRST VOICE + +Now, woken at last by the out-of-bed-sleepy-head-Polly-put- +the-kettle-on townhall bell, Lily Smalls, Mrs Beynon's +treasure, comes downstairs from a dream of royalty who all +night long went larking with her full of sauce in the Milk +Wood dark, and puts the kettle on the primus ring in Mrs +Beynon's kitchen, and looks at herself in Mr Beynon's +shaving-glass over the sink, and sees: + + LILY SMALLS + +Oh there's a face! +Where you get that hair from? +Got it from a old tom cat. +Give it back then, love. +Oh there's a perm! + +Where you get that nose from, Lily? +Got it from my father, silly. +You've got it on upside down! +Oh there's a conk! + +Look at your complexion! +Oh no, you look. +Needs a bit of make-up. +Needs a veil. +Oh there's glamour! + +Where you get that smile, +Lil? Never you mind, girl. +Nobody loves you. +That's what you think. + +Who is it loves you? +Shan't tell. +Come on, Lily. +Cross your heart then? +Cross my heart. + + FIRST VOICE + +And very softly, her lips almost touching her reflection, +she breathes the name and clouds the shaving-glass. + + MRS BEYNON (_Loudly, from above_) + +Lily! + + LILY SMALLS (_Loudly_) + +Yes, mum. + + MRS BEYNON + +Where's my tea, girl? + + LILY SMALLS + +(_Softly_) Where d'you think? In the cat-box? + +(_Loudly_) Coming up, mum. + + FIRST VOICE + +Mr Pugh, in the School House opposite, takes up the morning +tea to Mrs Pugh, and whispers on the stairs + + MR. PUGH + +Here's your arsenic, dear. +And your weedkiller biscuit. +I've throttled your parakeet. +I've spat in the vases. +I've put cheese in the mouseholes. +Here's your... [_Door creaks open_ + ...nice tea, dear. + + MRS PUGH + +Too much sugar. + + MR PUGH + +You haven't tasted it yet, dear. + + MRS PUGH + +Too much milk, then. Has Mr Jenkins said his poetry? + + MR PUGH + +Yes, dear. + + MRS PUGH + +Then it's time to get up. Give me my glasses. + +No, not my _reading_ glasses, I want to look out. +I want to see + + SECOND VOICE + +Lily Smalls the treasure down on her red knees washing the +front step. + + MRS PUGH + +She's tucked her dress in her bloomers--oh, the baggage! + + SECOND VOICE + +P.C. Attila Rees, ox-broad, barge-booted, stamping out of +Handcuff House in a heavy beef-red huff, black browed under +his damp helmet... + + MRS PUGH + +He's going to arrest Polly Garter, mark my words, + + MR PUGH + +What for, dear? + + MRS PUGH + +For having babies. + + SECOND VOICE + +...and lumbering down towards the strand to see that the +sea is still there. + + FIRST VOICE + +Mary Ann Sailors, opening her bedroom window above the +taproom and calling out to the heavens + + MARY ANN SAILORS + +I'm eighty-five years three months and a day! + + MRS PUGH + +I will say this for her, she never makes a mistake. + + FIRST VOICE + +Organ Morgan at his bedroom window playing chords on the +sill to the morning fishwife gulls who, heckling over Donkey +Street, observe + + DAI BREAD + +Me, Dai Bread, hurrying to the bakery, pushing in my +shirt-tails, buttoning my waistcoat, ping goes a button, +why can't they sew them, no time for breakfast, nothing for +breakfast, there's wives for you. + + MRS DAI BREAD ONE +Me, Mrs Dai Bread One, capped and shawled and no old corset, +nice to be comfy, nice to be nice, clogging on the cobbles +to stir up a neighbour. Oh, Mrs Sarah, can you spare a loaf, +love? Dai Bread forgot the bread. There's a lovely morning! +How's your boils this morning? Isn't that good news now, +it's a change to sit down. Ta, Mrs Sarah. + + MRS DAI BREAD TWO + +Me, Mrs Dai Bread Two, gypsied to kill in a silky scarlet +petticoat above my knees, dirty pretty knees, see my body +through my petticoat brown as a berry, high-heel shoes with +one heel missing, tortoiseshell comb in my bright black +slinky hair, nothing else at all but a dab of scent, lolling +gaudy at the doorway, tell your fortune in the tea-leaves, +scowling at the sunshine, lighting up my pipe. + + LORD CUT-GLASS + +Me, Lord Cut-Glass, in an old frock-coat belonged to Eli +Jenkins and a pair of postman's trousers from Bethesda +Jumble, running out of doors to empty slops--mind there, +Rover!--and then running in again, tick tock. + + NOGOOD BO YO + +Me, Nogood Boyo, up to no good in the wash-house + + MISS PRICE + +Me, Miss Price, in my pretty print housecoat, deft at the +clothesline, natty as a jenny-wren, then pit-pat back to my +egg in its cosy, my crisp toast-fingers, my home-made plum +and butterpat. + + POLLY GARTER + +Me, Polly Garter, under the washing line, giving the breast +in the garden to my bonny new baby. Nothing grows in our +garden, only washing. And babies. And where's their fathers +live, my love? Over the hills and far away. You're looking +up at me now. I know what you're thinking, you poor little +milky creature. You're thinking, you're no better than you +should be, Polly, and that's good enough for me. Oh, isn't +life a terrible thing, thank God? + + [_Single long high chord on strings_ + FIRST VOICE + +Now frying-pans spit, kettles and cats purr in the kitchen. +The town smells of seaweed and breakfast all the way down +from Bay View, where Mrs OgmorePritchard, in smock and turban, +big-besomed to engage the dust, picks at her starchless bread +and sips lemon-rind tea, to Bottom Cottage, where Mr Waldo, +in bowler and bib, gobbles his bubble-and-squeak and kippers +and swigs from the saucebottle. Mary Ann Sailors + + MARY ANN SAILORS + +praises the Lord who made porridge. + + FIRST VOICE + +Mr Pugh + + MR PUGH + +remembers ground glass as he juggles his omelet. + + FIRST VOICE + +Mrs Pugh + + MRS PUGH + +nags the salt-cellar. + + FIRST VOICE + +Willy Nilly postman + + WILLY NILLY + +downs his last bucket of black brackish tea and rumbles out +bandy to the clucking back where the hens twitch and grieve +for their tea-soaked sops. + + FIRST VOICE + +Mrs Willy Nilly + + MRS WILLY NILLY + +full of tea to her double-chinned brim broods and bubbles +over her coven of kettles on the hissing hot range always +ready to steam open the mail. + + FIRST VOICE + +The Reverend Eli Jenkins + + REV. ELI JENKINS + +finds a rhyme and dips his pen in his cocoa. + + FIRST VOICE + +Lord Cut-Glass in his ticking kitchen + + LORD CUT-GLASS + +scampers from clock to clock, a bunch of clock-keys in one +hand, a fish-head in the other. + + FIRST VOICE + +Captain Cat in his galley + + CAPTAIN CAT + +blind and fine-fingered savours his sea-fry. + + FIRST VOICE + +Mr and Mrs Cherry Owen, in their Donkey Street room that is +bedroom, parlour, kitchen, and scullery, sit down to last +night's supper of onions boiled in their overcoats and broth +of spuds and baconrind and leeks and bones. + + MRS CHERRY OWEN + +See that smudge on the wall by the picture of Auntie Blossom? +That's where you threw the sago. + + [_Cherry Owen laughs with delight_ + + MRS CHERRY OWEN + +You only missed me by a inch. + + CHERRY OWEN + +I always miss Auntie Blossom too. + + MRS CHERRY OWEN + +Remember last night? In you reeled, my boy, as drunk as a +deacon with a big wet bucket and a fish-frail full of stout +and you looked at me and you said, 'God has come home!' you +said, and then over the bucket you went, sprawling and +bawling, and the floor was all flagons and eels. + + CHERRY OWEN + +Was I wounded? + + MRS CHERRY OWEN + +And then you took off your trousers and you said, 'Does +anybody want a fight!' Oh, you old baboon. + + CHERRY OWEN + +Give me a kiss. + + MRS CHERRY OWEN + +And then you sang 'Bread of Heaven,' tenor and bass. + + CHERRY OWEN + +I always sing 'Bread of Heaven.' + + MRS CHERRY OWEN + +And then you did a little dance on the table. + + CHERRY OWEN + +I did? + MRS CHERRY OWEN + +Drop dead! + + CHERRY OWEN + +And then what did I do? + + MRS CHERRY OWEN + +Then you cried like a baby and said you were a poor drunk +orphan with nowhere to go but the grave. + + CHERRY OWEN + +And what did I do next, my dear? + + MRS CHERRY OWEN + +Then you danced on the table all over again and said you +were King Solomon Owen and I was your Mrs Sheba. + + CHERRY OWEN (_Softy_) + +And then? + + MRS CHERRY OWEN + +And then I got you into bed and you snored all night like +a brewery. + + [_Mr and Mrs Cherry Owen laugh delightedly together_ + + FIRST VOICE + +From Beynon Butchers in Coronation Street, the smell of +fried liver sidles out with onions on its breath. And listen! +In the dark breakfast-room behind the shop, Mr and Mrs Beynon, +waited upon by their treasure, enjoy, between bites, their +everymorning hullabaloo, and Mrs Beynon slips the gristly +bits under the tasselled tablecloth to her fat cat. + + [_Cat purrs_ + + MRS BEYNON + +She likes the liver, Ben. + + MR BEYNON + +She ought to do, Bess. It's her brother's. + + MRS BEYNON (_Screaming_) + +Oh, d'you hear that, Lily? + + LILY SMALLS + +Yes, mum. + + MRS BEYNON + +We're eating pusscat. + + LILY SMALLS + +Yes, mum. + + MRS BEYNON + +Oh, you cat-butcher! + + MR BEYNON + +It was doctored, mind. + + MRS BEYNON (_Hysterical_) + +What's that got to do with it? + + MR BEYNON + +Yesterday we had mole. + + MRS BEYNON + +Oh, Lily, Lily! + + MR BEYNON + +Monday, otter. Tuesday, shrews. + + [_Mrs Beynon screams_ + + LILY SMALLS + +Go on, Mrs Beynon. He's the biggest liar in town. + + MRS BEYNON + +Don't you dare say that about Mr Beynon. + + LILY SMALLS + +Everybody knows it, mum. + + MRS BEYNON + +Mr Beynon never tells a lie. Do you, Ben? + +MR BEYNON + +No, Bess. And now I am going out after the corgies, with my +little cleaver. + + MRS BEYNON + +Oh, Lily, Lily! + + FIRST VOICE + +Up the street, in the Sailors Arms, Sinbad Sailors, grandson +of Mary Ann Sailors, draws a pint in the sunlit bar. The +ship's clock in the bar says half past eleven. Half past +eleven is opening time. The hands of the clock have stayed +still at half past eleven for fifty years. It is always +opening time in the Sailors Arms. + + SINBAD + +Here's to me, Sinbad. + + FIRST VOICE + +All over the town, babies and old men are cleaned and put into +their broken prams and wheeled on to the sunlit cockled cobbles +or out into the backyards under the dancing underclothes, and +left. A baby cries. + + OLD MAN + +I want my pipe and he wants his bottle. + + [_School bell rings_ + + FIRST VOICE + +Noses are wiped, heads picked, hair combed, paws scrubbed, +ears boxed, and the children shrilled off to school. + + SECOND VOICE + +Fishermen grumble to their nets. Nogood Boyo goes out in +the dinghy _Zanzibar_, ships the oars, drifts slowly in the +dab-filled bay, and, lying on his back in the unbaled water, +among crabs' legs and tangled lines, looks up at the +spring sky. + + NOGOOD BOYO (_Softly, lazily_) + +I don't know who's up there and I don't care. + + FIRST VOICE + +He turns his head and looks up at Llaregyb Hill, and sees, +among green lathered trees, the white houses of the strewn +away farms, where farmboys whistle, dogs shout, cows low, +but all too far away for him, or you, to hear. And in the +town, the shops squeak open. Mr Edwards, in butterfly-collar +and straw-hat at the doorway of Manchester House, measures +with his eye the dawdlers-by for striped flannel shirts and +shrouds and flowery blouses, and bellows to himself in the +darkness behind his eye + + MR EDWARDS (_Whispers_) + +I love Miss Price. + + FIRST VOICE + +Syrup is sold in the post-office. A car drives to market, +full of fowls and a farmer. Milk-churns stand at Coronation +Corner like short silver policemen. And, sitting at the +open window of Schooner House, blind Captain Cat hears all +the morning of the town. + + [_School bell in background. + Children's voices. The noise of + children's feet on the cobbles_ + + CAPTAIN CAT (_Softly, to himself_) + +Maggie Richards, Ricky Rhys, Tommy Powell, our Sal, little +Gerwain, Billy Swansea with the dog's voice, one of Mr +Waldo's, nasty Humphrey, Jackie with the sniff....Where's +Dicky's Albie? and the boys from Ty-pant? Perhaps they got +the rash again. + + [_A sudden cry among the children's voices_ + + CAPTAIN CAT + +Somebody's hit Maggie Richards. Two to one it's Billy Swansea. +Never trust a boy who barks. + + [_A burst of yelping crying_ + +Right again! It's Billy. + + FIRST VOICE + +And the children's voices cry away. + + [_Postman's rat-a-tat on door, distant_ + + CAPTAIN CAT (_Softly, to himself_) + +That's Willy Nilly knocking at Bay View. Rat-a-tat, very +soft. The knocker's got a kid glove on. Who's sent a letter +to Mrs Ogmore-Pritchard? + + [_Rat-a-tat, distant again_ + + CAPTAIN CAT + +Careful now, she swabs the front glassy. Every step's like +a bar of soap. Mind your size twelveses. That old Bessie +would beeswax the lawn to make the birds slip. + + WILLY NILLY + +Morning, Mrs Ogmore-Pritchard. + + MRS OGMORE -PRITCHARD + +Good morning, postman. + + WILLY NILLY + +Here's a letter for you with stamped and addressed envelope +enclosed, all the way from Builth Wells. A gentleman wants +to study birds and can he have accommodation for two weeks +and a bath vegetarian. + + MRS OGMORE-PRITCHARD + +No. + WILLY NILLY (_Persuasively_) + +You wouldn't know he was in the house, Mrs Ogmore-Pritchard. +He'd be out in the mornings at the bang of dawn with his bag +of breadcrumbs and his little telescope... + + MRS OGMORE-PRITCHARD + +And come home at all hours covered with feathers. I don't +want persons in my nice clean rooms breathing all over the +chairs... + + WILLY NILLY + +Cross my heart, he won't breathe. + + MRS OGMORE-PRITCHARD + +...and putting their feet on my carpets and sneezing on my +china and sleeping in my sheets... + + WILLY NILLY + +He only wants a single bed, Mrs Ogmore. Pritchard. + + [_Door slams_ + + CAPTAIN CAT (_Softly_) + +And back she goes to the kitchen to polish the potatoes. + + FIRST VOICE + +Captain Cat hears Willy Nilly's feet heavy on the distant +cobbles. + + CAPTAIN CAT + +One, two, three, four, five...That's Mrs Rose Cottage. +What's to-day? To-day she gets the letter from her sister +in Gorslas. How's the twins' teeth? + +He's stopping at School House. + + WILLY NILLY + +Morning, Mrs Pugh. Mrs Ogmore-Pritchard won't have a +gentleman in from Builth Wells because he'll sleep in her +sheets, Mrs Rose Cottage's sister in Gorslas's twins have +got to have them out... + + MRS PUGH + +Give me the parcel. + + WILLY NILLY + +It's for _Mr_ Pugh, Mrs Pugh. + + MRS PUGH + +Never you mind. What's inside it? + + WILLY NILLY + +A book called _Lives of the Great Poisoners_. + + CAPTAIN CAT + +That's Manchester House. + + WILLY NILLY + +Morning, Mr Edwards. Very small news. Mrs Ogmore-Pritchard +won't have birds in the house, and Mr Pugh's bought a book +now on how to do in Mrs Pugh. + + MR EDWARDS + +Have you got a letter from _her?_ + + WILLY NILLY + +Miss Price loves you with all her heart. Smelling of lavender +to-day. She's down to the last of the elderflower wine but +the quince jam's bearing up and she's knitting roses on the +doilies. Last week she sold three jars of boiled sweets, +pound of humbugs, half a box of jellybabies and six coloured +photos of Llaregyb. Yours for ever. Then twenty-one X's. + + MR EDWARDS + +Oh, Willy Nilly, she's a ruby! Here's my letter. Put it +into her hands now. + + [_Slow feet on cobbles, quicker feet approaching_ + + CAPTAIN CAT + +Mr Waldo hurrying to the Sailors Arms. Pint of stout with +a egg in it. [_Footsteps stop_ + +(_Softly_) There's a letter for him. + + WILLY NILLY + +It's another paternity summons, Mr Waldo. + + FIRST VOICE + +The quick footsteps hurry on along the cobbles and up +three steps to the Sailors Arms. + + MR WALDO (_Calling out_) + +Quick, Sinbad. Pint of stout. And no egg in. + + FIRST VOICE + +People are moving now up and down the cobbled street. + + CAPTAIN CAT + +All the women are out this morning, in the sun. You can +tell it's Spring. There goes Mrs Cherry, you can tell her +by her trotters, off she trots new as a daisy. Who's that +talking by the pump? Mrs Floyd and Boyo, talking flatfish. +What can you talk about flatfish? That's Mrs Dai Bread +One, waltzing up the street like a jelly, every time she +shakes it's slap slap slap. Who's that? Mrs Butcher Beynon +with her pet black cat, it follows her everywhere, miaow +and all. There goes Mrs Twenty-Three, important, the sun +gets up and goes down in her dewlap, when she shuts her +eyes, it's night. High heels now, in the morning too, Mrs +Rose Cottage's eldest Mae, seventeen and never been kissed +ho ho, going young and milking under my window to the +field with the nannygoats, she reminds me all the way. +Can't hear what the women are gabbing round the pump. Same +as ever. Who's having a baby, who blacked whose eye, seen +Polly Garter giving her belly an airing, there should be +a law, seen Mrs Beynon's new mauve jumper, it's her old +grey jumper dyed, who's dead, who's dying, there's a +lovely day, oh the cost of soapflakes! + + [_Organ music, distant_ + + CAPTAIN CAT + +Organ Morgan's at it early. You can tell it's Spring. + + FIRST VOICE + +And he hears the noise of milk-cans. + + CAPTAIN CAT + +Ocky Milkman on his round. I will say this, his milk's as +fresh as the dew. Half dew it is. Snuffle on, Ocky, +watering the town...Somebody's coming. Now the voices +round the pump can see somebody coming. Hush, there's a +hush! You can tell by the noise of the hush, it's Polly +Garter. (_Louder_) Hullo, Polly, who's there? + + POLLY GARTER (_Off_) + +Me, love. + + CAPTAIN CAT + +_That's_ Polly Garter. (_Softly_) Hullo, Polly my love, can +you hear the dumb goose-hiss of the wives as they huddle +and peck or flounce at a waddle away? Who cuddled you +when? Which of their pandering hubbies moaned in Milk Wood +for your naughty mothering arms and body like a wardrobe, +love? Scrub the floors of the Welfare Hall for the +Mothers' Union Social Dance, you're one mother won't +wriggle her roly poly bum or pat her fat little buttery +feet in that wedding-ringed holy to-night though the +waltzing breadwinners snatched from the cosy smoke of the +Sailors Arms will grizzle and mope. + + [_A cock crows_ + + CAPTAIN CAT + +Too late, cock, too late + + SECOND VOICE + +for the town's half over with its morning. The morning's +busy as bees. + + [_Organ music fades into silence_ + + FIRST VOICE + +There's the clip clop of horses on the sunhoneyed cobbles +of the humming streets, hammering of horse- shoes, gobble +quack and cackle, tomtit twitter from the bird-ounced +boughs, braying on Donkey Down. Bread is baking, pigs are +grunting, chop goes the butcher, milk-churns bell, tills +ring, sheep cough, dogs shout, saws sing. Oh, the Spring +whinny and morning moo from the clog dancing farms, the +gulls' gab and rabble on the boat-bobbing river and sea +and the cockles bubbling in the sand, scamper of +sanderlings, curlew cry, crow caw, pigeon coo, clock +strike, bull bellow, and the ragged gabble of the +beargarden school as the women scratch and babble in Mrs +Organ Morgan's general shop where everything is sold: +custard, buckets, henna, rat-traps, shrimp-nets, sugar, +stamps, confetti, paraffin, hatchets, whistles. + + FIRST WOMAN + +Mrs Ogmore-Pritchard + + SECOND WOMAN + +la di da + + FIRST WOMAN + +got a man in Builth Wells + + THIRD WOMAN + +and he got a little telescope to look at birds + + SECOND WOMAN + +Willy Nilly said + + THIRD WOMAN + +Remember her first husband? He didn't need a telescope + + FIRST WOMAN + +he looked at them undressing through the keyhole + + THIRD WOMAN + +and he used to shout Tallyho + + SECOND WOMAN + +but Mr Ogmore was a proper gentleman + + FIRST WOMAN + +even though he hanged his collie. + + THIRD WOMAN + +Seen Mrs Butcher Beynon? + + SECOND WOMAN + +she said Butcher Beynon put dogs in the mincer + + FIRST WOMAN + +go on, he's pulling her leg + + THIRD WOMAN + +now don't you dare tell her that, there's a dear + + SECOND WOMAN + +or she'll think he's trying to pull it off and eat it, + + FOURTH WOMAN + +There's a nasty lot live here when you come to think. + + FIRST WOMAN + +Look at that Nogood Boyo now + + SECOND WOMAN + +too lazy to wipe his snout + + THIRD WOMAN + +and going out fishing every day and all he ever brought +back was a Mrs Samuels + + FIRST WOMAN + +been in the water a week. + + SECOND WOMAN + +And look at Ocky Milkman's wife that nobody's ever seen + + FIRST WOMAN + +he keeps her in the cupboard with the empties + + THIRD WOMAN + +and think of Dai Bread with two wives + + SECONE WOMAN + +one for the daytime one for the night. + + FOURTH WOMAN + +Men are brutes on the quiet. + + THIRD WOMAN + +And how's Organ Morgan, Mrs Morgan? + + FIRST WOMAN + +you look dead beat + + SECOND WOMAN + +it's organ organ all the time with him + + THIRD WOMAN + +up every night until midnight playing the organ. + + MRS ORGAN MORGAN + +Oh, I'm a martyr to music. + + FIRST VOICE + +Outside, the sun springs down on the rough and tumbling +town. It runs through the hedges of Goosegog Lane, cuffing +the birds to sing. Spring whips green down Cockle Row, and +the shells ring out. Llaregyb this snip of a morning is +wildfruit and warm, the streets, fields, sands and waters +springing in the young sun. + + SECOND VOICE + +Evans the Death presses hard with black gloves on the +coffin of his breast in case his hearts jumps out, + + EVANS THE DEATH (_Harshly_) + +Where's your dignity. Lie down. + + SECOND VOICE + +Spring stirs Gossamer Beynon schoolmistress like spoon. + + GOSSAMER BEYNON (_Tearfully_) + +Oh, what can I do? I'll never be refined if I twitch. + + SECOND VOICE + +Spring this strong morning foams in a flame in Jack Black +as he cobbles a high-heeled shoe for Mrs Dai Bread Two the +gypsy, but he hammers it sternly out. + + JACK BLACK (_To a hammer rhythm_) + +There is _no leg_ belonging to the foot that belongs to this +shoe. + + SECOND VOICE + +The sun and the green breeze ship Captain Cat sea-memory +again. + + CAPTAIN CAT + +No, _I'll_ take the mulatto, by God, who's captain here? +Parlez-vous jig jig, Madam? + + SECOND VOICE + +Mary Ann Sailors says very softly to herself as she looks +out at Llaregyb Hill from the bedroom where she was born + + MARY ANN SAILORS (_Loudly_) + +It is Spring in Llaregyb in the sun in my old age, and +this is the Chosen Land. + + [_A choir of children's voices suddenly cries out on one, + high, glad, long, sighing note_ + + FIRST VOICE + +And in Willy Nilly the Postman's dark and sizzling damp +tea-coated misty pygmy kitchen where the spittingcat +kettles throb and hop on the range, Mrs Willy Nilly steams +open Mr Mog Edwards' letter to Miss Myfanwy Price and +reads it aloud to Willy Nilly by the squint of the Spring +sun through the one sealed window running with tears, +while the drugged, bedraggled hens at the back door +whimper and snivel for the lickerish bog-black tea. + + MRS WILLY NILLY + +From Manchester House, Llaregyb. Sole Prop: Mr Mog Edwards +(late of Twll), Linendraper, Haberdasher, Master Tailor, +Costumier. For West End Negligee, Lingerie, Teagowns, +Evening Dress, Trousseaux, Layettes. Also Ready to Wear +for All Occasions. Economical Outfitting for Agricultural +Employment Our Speciality, Wardrobes Bought. Among Our +Satisfied Customers Ministers of Religion and J .P 's. +Fittings by Appointment. Advertising Weekly in the _Twll +Bugle_. Beloved Myfanwy Price my Bride in Heaven, + + MOG EDWARDS + +I love you until Death do us part and then we shall be +together for ever and ever. A new parcel of ribbons has +come from Carmarthen to-day, all the colours in the +rainbow. I wish I could tie a ribbon in your hair a white +one but it cannot be. I dreamed last night you were all +dripping wet and you sat on my lap as the Reverend Jenkins +went down the street. I see you got a mermaid in your lap +he said and he lifted his hat. He is a proper Christian. +Not like Cherry Owen who said you should have thrown her +back he said. Business is very poorly. Polly Garter bought +two garters with roses but she never got stockings so what +is the use I say. Mr Waldo tried to sell me a woman's +nightie outsize he said he found it and we know where. I +sold a packet of pins to Tom the Sailors to pick his +teeth. If this goes on I shall be in the workhouse. My +heart is in your bosom and yours is in mine. God be with +you always Myfanwy Price and keep you lovely for me in His +Heavenly Mansion. I must stop now and remain, Your Eternal, +Mog Edwards. + + MRS WILLY NILLY + +And then a little message with a rubber stamp. Shop at +Mog's!!! + + FIRST VOICE. + +And Willy Nilly, rumbling, jockeys out again to the +three-seated shack called the House of Commons in the back +where the hens weep, and sees, in sudden Springshine, + + SECOND VOICE + +herring gulls heckling down to the harbour where the +fishermen spit and prop the morning up and eye the fishy +sea smooth to the sea's end as it lulls in blue. Green and +gold money, tobacco, tinned salmon, hats with feathers, +pots of fish-paste, warmth for the winter-to-be, weave and +leap in it rich and slippery in the flash and shapes of +fishes through the cold sea-streets. But with blue lazy +eyes the fishermen gaze at that milkmaid whispering water +with no nick or ripple as though it blew great guns and +serpents and typhooned the town. + + FISHERMAN + +Too rough for fishing to-day. + + SECOND VOICE + +And they thank God, and gob at a gull for luck, and +moss-slow and silent make their way uphill, from the still +still sea, towards the Sailors Arms as the children + + [_School bell_ + + FIRST VOICE + +spank and scamper rough and singing out of school into the +draggletail yard. And Captain Cat at his window says soft +to himself the words of their song. + + CAPTAIN CAT (_To the beat of the singing_) + +Johnnie Crack and Flossie Snail +Kept their baby in a +milking pail Flossie +Snail and Johnnie Crack +One would pull it out and one would put it back + +O it's my turn now said Flossie Snail +To take the baby from the milking pail +And it's my turn now said Johnnie Crack +To smack it on the head and put it back + +Johnnie Crack and Flossie Snail +Kept their baby in a milking pail +One would put it back and one would pull it out +And all it had to drink was ale and stout +For Johnnie Crack and Flossie Snail +Always used to say that stout and ale +Was _good_ for a baby in a milking pail. + + [_Long pause_ + + FIRST VOICE + +The music of the spheres is heard distinctly over Milk +Wood. It is 'The Rustle of Spring.' + + SECOND VOICE + +A glee-party sings in Bethesda Graveyard, gay but muffled. + + FIRST VOICE + +Vegetables make love above the tenors + +SECOND VOICE + +and dogs bark blue in the face. + + FIRST VOICE + +Mrs Ogmore-Pritchard belches in a teeny hanky and chases +the sunlight with a flywhisk, but even she cannot drive +out the Spring: from one of the finger-bowls a primrose +grows. + + SECOND VOICE + +Mrs Dai Bread One and Mrs Dai Bread Two are sitting +outside their house in Donkey Lane, one darkly one plumply +blooming in the quick, dewy sun. Mrs Dai Bread Two is +looking into a crystal ball which she holds in the lap of +her dirty yellow petticoat, hard against her hard dark +thighs. + + MRS DAI BREAD TWO + +Cross my palm with silver. Out of our housekeeping money. +Aah! + + MRS DAI BREAD ONE + +What d'you see, lovie? + + MRS DAI BREAD TWO + +I see a featherbed. With three pillows on it. And a text +above the bed. I can't read what it says, there's great +clouds blowing. Now they have blown away. God is Love, the +text says. + + MRS DAI BREAD ONE (_Delighted_) + +That's _our_ bed. + + MRS DAI BREAD TWO + +And now it's vanished. The sun's spinning like a top. +Who's this coming out of the sun? It's a hairy little man +with big pink lips. He got a wall eye. + + MRS DAI BREAD ONE + +It's Dai, it's Dai Bread! + +MRS DAI BREAD TWO + +Ssh! The featherbed's floating back. The little man's +taking his boots off. He's pulling his shirt over his +head. He's beating his chest with his fists. I le's +climbing into bed. + + MRS DAI BREAD ONE + +Go on, go on. + + MRS DAI BREAD TWO + +There's two women in bed. He looks at them both, with his +head cocked on one side. He's whistling through his teeth. +Now he grips his little arms round one of the women. + + MRS DAI BREAD ONE + +Which one, which one? + +MRS DAI BREAD TWO + +I can't see any more. There's great clouds blowing again. + + MRS DAI BREAD ONE + +Ach, the mean old clouds! + + [_Pause. The children's singing fades_ + + FIRST VOICE + +The morning is all singing. The Reverend Eli Jenkins, busy +on his morning calls, stops outside the Welfare Hall to +hear Polly Garter as she scrubs the floors for the +Mothers' Union Dance to-night. + + POLLY GARTER (_Singing_) + +I loved a man whose name was Tom +He was strong as a bear and two yards long +I loved a man whose name was Dick +He was big as a barrel and three feet thick +And I loved a man whose name was Harry +Six feet tall and sweet as a cherry +But the one I loved best awake or asleep +Was little Willy Wee and he's six feet deep. + +O Tom Dick and Harry were three fine men +And I'll never have such loving again +But little Willy Wee who took me on his knee +Little Willy Wee was the man for me. + +Now men from every parish round +Run after me and roll me on the ground +But whenever I love another man back +Johnnie from the Hill or Sailing Jack +I always think as they do what they please +Of Tom Dick and Harry who were tall as trees +And most I think when I'm by their side +Of little Willy Wee who downed and died. + +O Tom Dick and Harry were three fine men +And I'll never have such loving again +But little Willy Wee who took me on his knee +Little Willy Weazel is, the man for me. + + REV. ELI JENKINS + +Praise the Lord! We are a musical nation. + + SECOND VOICE + +And the Reverend Jenkins hurries on through the town to +visit the sick with jelly and poems. + + FIRST VOICE + +The town's as full as a lovebird's egg. + + MR WALDO + +There goes the Reverend, + + FIRST VOICE + +says Mr Waldo at the smoked herring brown window of the +unwashed Sailors Arms, + + MR WALDO + +with his brolly and his odes. Fill 'em up, Sinbad, I'm on +the treacle to-day. + + SECOND VOICE + +The silent fishermen flush down their pints. + + SINBAD + +Oh, Mr Waldo, + + FIRST VOICE + +sighs Sinbad Sailors, + + SINBAD + +I dote on that Gossamer Beynon. She's a lady all over. + + FIRST VOICE + +And Mr Waldo, who is thinking of a woman soft as Eve and +sharp as sciatica to share his bread-pudding bed, answers + + MR WALDO + +No lady that I know is + + SINBAD + +And if only grandma'd die, cross my heart I'd go down on +my knees Mr Waldo and I'd say Miss Gossamer I'd say + + CHILDREN'S VOICES + +When birds do sing hey ding a ding a ding +Sweet lovers love the Spring... + + SECOND VOICE + +Polly Garter sings, still on her knees, + + POLLY GARTER + +Tom Dick and Harry were three fine men +And I'll never have such + + CHILDREN + + ding a ding + + POLLY GARTER + + again. + + FIRST VOICE + +And the morning school is over, and Captain Cat at his +curtained schooner's porthole open to the Spring sun tides +hears the naughty forfeiting children tumble and rhyme on +the cobbles. + + GIRLS' VOICES + +Gwennie call the boys +They make such a noise. + + GIRL + +Boys boys boys +Come along to me'. + + GIRLS' VOICES + +Boys boys boys +Kiss Gwennie where she says +Or give her a penny. +Go on, Gwennie. + + GIRL + +Kiss me in Goosegog Lane +Or give me a penny. +What's your name? + + FIRST BOY + +Billy. + + GIRL + +Kiss me in Goosegog Lane Billy +Or give me a penny silly. + + FIRST BO Y + +Gwennie Gwennie +I kiss you in Goosegog Lane. +Now I haven't got to give you a penny. + + GIRLS' VOICES + +Boys boys boys +Kiss Gwennie where she says +Or give her a penny. +Go on, Gwennie. + + GIRL + +Kiss me on Llaregyb Hill +Or give me a penny. +What's your name? + + SECOND BOY + +Johnnie Cristo. + + GIRL + +Kiss me on Llaregyb Hill Johnnie Cristo +Or give me a penny mister. + + SECOND BOY + +Gwennie Gwennie +I kiss you on Llaregyb Hill. +Now I haven't got to give you a penny. + + GIRLS' VOICES + +Boys boys boys +Kiss Gwennie where she says +Or give her a penny. +Go on, Gwennie. + + GIRL + +Kiss me in Milk Wood +Or give me a penny. +What's your name? + + THIRD BOY + +Dicky. + + GIRL + +Kiss me in Milk Wood Dicky +Or give me a penny quickly. + + THIRD BOY + +Gwennie Gwennie +I can't kiss you in Milk Wood. + + GIRLS' VOICES + +Gwennie ask him why. + + GIRL + +Why? + + THIRD BOY + +Because my mother says I mustn't. + + GIRLS' VOICES + +Cowardy cowardy custard +Give Gwennie a penny. + + GIRL + +Give me a penny. + + THIRD BOY + +I haven't got any. + + GIRLS' VOICES + +Put him in the river +Up to his liver +Quick quick Dirty Dick +Beat him on the bum +With a rhubarb stick. +Aiee! +Hush! + + FIRST VOICE + +And the shrill girls giggle and master around him and +squeal as they clutch and thrash, and he blubbers away +downhill with his patched pants falling, and his +tear-splashed blush burns all the way as the triumphant +bird-like sisters scream with buttons in their claws and +the bully brothers hoot after him his little nickname and +his mother's shame and his father's wickedness with the +loose wild barefoot women of the hovels of the hills. It +all means nothing at all, and, howling for his milky mum, +for her cawl and buttermilk and cowbreath and welshcakes +and the fat birth-smelling bed and moonlit kitchen of her +arms, he'll never forget as he paddles blind home through +the weeping end of the world. Then his tormentors tussle +and run to the Cockle Street sweet-shop, their pennies +sticky as honey, to buy from Miss Myfanwy Price, who is +cocky and neat as a puff-bosomed robin and her small round +buttocks tight as ticks, gobstoppers big as wens that +rainbow as you suck, brandyballs, winegums, hundreds and +thousands, liquorice sweet as sick, nougat to tug and +ribbon out like another red rubbery tongue, gum to glue +in girls' curls, crimson coughdrops to spit blood, +ice-cream comets, dandelion-and-burdock, raspberry and +cherryade, pop goes the weasel and the wind. + + SECOND VOICE + +Gossamer Beynon high-heels out of school The sun hums down +through the cotton flowers of her dress into the bell of +her heart and buzzes in the honey there and couches and +kisses, lazy-loving and boozed, in her red-berried breast. +Eyes run from the trees and windows of the street, +steaming 'Gossamer,' and strip her to the nipples and the +bees. She blazes naked past the Sailors Arms, the only +woman on the Dai-Adamed earth. Sinbad Sailors places on +her thighs still dewdamp from the first mangrowing +cockcrow garden his reverent goat-bearded hands. + + GOSSAMER BEYNON + +I don't care if he _is_ common, + + SECOND VOICE + +she whispers to her salad-day deep self, + + GOSSAMER BEYNON + +I want to gobble him up. I don't care if he _does_ drop his +aitches, + + SECOND VOICE + +she tells the stripped and mother-of-the-world big-beamed +and Eve-hipped spring of her self, + + GOSSAMER BEYNON + +so long as he's all cucumber and hooves. + + SECOND VOICE + +Sinbad Sailors watches her go by, demure and proud and +schoolmarm in her crisp flower dress and sun-defying hat, +with never a look or lilt or wriggle, the butcher's +unmelting icemaiden daughter veiled for ever from the +hungry hug of his eyes. + + SINBAD SAILORS + +Oh, Gossamer Beynon, why are you so proud? + + SECOND VOICE + +he grieves to his guinness, + + SINBAD SAILORS + +Oh, beautiful beautiful Gossamer B, I wish I wish that you +were for me. I wish you were not so educated. + + SECOND VOICE + +She feels his goatbeard tickle her in the middle of the +world like a tuft of wiry fire, and she turns in a terror +of delight away from his whips and whiskery conflagration, +and sits down in the kitchen to a plate heaped high with +chips and the kidneys of lambs. + + FIRST VOICE + +In the blind-drawn dark dining-room of School House, dusty +and echoing as a dining-room in a vault, Mr and Mrs Pugh +are silent over cold grey cottage pie. Mr Pugh reads, as +he forks the shroud meat in, from _Lives of the Great +Poisoners_. He has bound a plain brown-paper cover round +the book. Slyly, between slow mouthfuls, he sidespies up +at Mrs Pugh, poisons her with his eye, then goes on +reading. He underlines certain passages and smiles in +secret. + + MRS PUGH + +Persons with manners do not read at table, + + FIRST VOICE + +says Mrs Pugh. She swallows a digestive tablet as big as a +horse-pill, washing it down with clouded peasoup water. + + [_Pause_ + + MRS PUGH + +Some persons were brought up in pigsties. + + MR PUGH + +Pigs don't read at table, dear. + + FIRST VOICE + +Bitterly she flicks dust from the broken cruet. It settles +on the pie in a thin gnat-rain. + + MR PUGH + +Pigs can't read, my dear. + + MRS PUGH + +I know one who can. + + FIRST VOICE + +Alone in the hissing laboratory of his wishes, Mr Pugh +minces among bad vats and jeroboams, tiptoes through +spinneys of murdering herbs, agony dancing in his +crucibles, and mixes especially for Mrs Pugh a venomous +porridge unknown to toxicologists which will scald and +viper through her until her ears fall off like figs, her +toes grow big and black as balloons, and steam comes +screaming out of her navel. + + MR PUGH + +You know best, dear, + + FIRST VOICE + +says Mr Pugh, and quick as a flash he ducks her in rat +soup. + + MRS PUGH + +What's that book by your trough, Mr Pugh? + + MR PUGH + +It's a theological work, my dear. _Lives of the Great +Saints_. + + FIRST VOICE + +Mrs Pugh smiles. An icicle forms in the cold air of the +dining-vault. + + MRS PUGH + +I saw you talking to a saint this morning. Saint Polly +Garter. She was martyred again last night. Mrs Organ +Morgan saw her with Mr Waldo. + + MRS ORGAN MORGAN + +And when they saw me they pretended they were looking for +nests, + + SECOND VOICE + +said Mrs Organ Morgan to her husband, with her mouth full +of fish as a pelican's. + + MRS ORGAN MORGAN + +But you don't go nesting in long combinations, I said to +myself, like Mr Waldo was wearing, and your dress nearly +over your head like Polly Garter's. Oh, they didn't fool me. + + SECOND VOICE + +One big bird gulp, and the flounder's gone. She licks her +lips and goes stabbing again. + + MRS ORGAN MORGAN + +And when you think of all those babies she's got, then all +I can say is she'd better give up bird nesting that's all +I can say, it isn't the right kind of hobby at all for a +woman that can't say No even to midgets. Remember Bob +Spit? He wasn't any bigger than a baby and he gave her +two. But they're two nice boys, I will say that, Fred Spit +and Arthur. Sometimes I like Fred best and sometimes I +like Arthur. Who do you like best, Organ? + + ORGAN MORGAN + +Oh, Bach without any doubt. Bach every time for me. + + MRS ORGAN MORGAN + +Organ Morgan, you haven't been listening to a word 1 said. +It's organ organ all the time with you.. + + FIRST VOICE + +And she bursts into tears, and, in the middle of her salty +howling, nimbly spears a small flatfish and pelicans it +whole. + + ORGAN MORGAN + +And then Palestrina, + + SECOND VOICE + +says Organ Morgan. + + FIRST VOICE + +Lord Cut-Glass, in his kitchen full of time, squats down +alone to a dogdish, marked Fido, of peppery fish-scraps +and listens to the voices of his sixty-six clocks, one for +each year of his loony age, and watches, with love, their +black-and-white moony loudlipped faces tocking the earth +away: slow clocks, quick clocks, pendulumed heart-knocks, +china, alarm, grandfather, cuckoo; clocks shaped like +Noah's whirring Ark, clocks that bicker in marble ships, +clocks in the wombs of glass women, hourglass chimers, +tu-wit-tuwoo clocks, clocks that pluck tunes, Vesuvius +clocks all black bells and lava, Niagara clocks that +cataract their ticks, old time-weeping clocks with ebony +beards, clocks with no hands for ever drumming out time +without ever knowing what time it is. His sixty-six +singers are all set at different hours. Lord Cut-Glass +lives in a house and a life at siege. Any minute or dark +day now, the unknown enemy will loot and savage downhill, +but they will not catch him napping. Sixty-six different +times in his fish-slimy kitchen ping, strike, tick, chime, +and tock. + + SECOND VOICE + +The lust and lilt and lather and emerald breeze and +crackle of the bird-praise and body of Spring with its +breasts full of rivering May-milk, means, to that lordly +fish-head nibbler, nothing but another nearness to the +tribes and navies of the Last Black Day who'll sear and +pillage down Armageddon Hill to his double-locked +rusty-shuttered tick-tock dust-scrabbled shack at the +bottom of the town that has fallen head over bells in love. + + POLLY GARTER + +And I'll never have such loving again, + + SECOND VOICE + +pretty Polly hums and longs. + + POLLY GARTER (_Sings_) + +Now when farmers' boys on the first fair day +Come down from the hills to drink and be gay, +Before the sun sinks I'll lie there in their arms +For they're good bad boys from the lonely farms, + +But I always think as we tumble into bed +Of little Willy Wee who is dead, dead, dead... + + [_A silence_ + + FIRST VOICE + +The sunny slow lulling afternoon yawns and moons through +the dozy town. The sea lolls, laps and idles in, with +fishes sleeping in its lap. The meadows still as Sunday, +the shut-eye tasselled bulls, the goat-anddaisy dingles, +nap happy and lazy. The dumb duck-ponds snooze. Clouds sag +and pillow on Llaregyb Hill. Pigs grunt in a wet +wallow-bath, and smile as they snort and dream. They dream +of the acorned swill of the world, the rooting for +pig-fruit, the bagpipe dugs of the mother sow, the squeal +and snuffle of yesses of the women pigs in rut. They +mud-bask and snout in the pig-loving sun; their tails +curl; they rollick and slobber and snore to deep, smug, +after-swill sleep. Donkeys angelically drowse on Donkey +Down. + + MRS PUGH + +Persons with manners, + + SECOND VOICE + +snaps Mrs cold Pugh, + + MRS PUGH + +do not nod at table. + + FIRST VOICE + +Mr Pugh cringes awake. He puts on a soft-soaping smile: it +is sad and grey under his nicotine-eggyellow weeping +walrus Victorian moustache worn thick and long in memory +of Doctor Crippen. + + MRS PUGH + +You should wait until you retire to your sty, + + SECOND VOICE + +says Mrs Pugh, sweet as a razor. His fawning measly +quarter-smile freezes. Sly and silent, he foxes into his +chemist's den and there, in a hiss and prussic circle +of cauldrons and phials brimful with pox and the Black +Death, cooks up a fricassee of deadly nightshade, +nicotine, hot frog, cyanide and bat-spit for his needling +stalactite hag and bednag of a pokerbacked nutcracker +wife. + + MR PUGH + +I beg your pardon, my dear, + + SECOND VOICE + +he murmurs with a wheedle. + + FIRST VOICE + +Captain Cat, at his window thrown wide to the sun and the +clippered seas he sailed long ago when his eyes were blue +and bright, slumbers and voyages; ear-ringed and rolling, +I Love You Rosie Probert tattooed on his belly, he brawls +with broken bottles in the fug and babel of the dark dock +bars, roves with a herd of short and good time cows in +every naughty port and twines and souses with the drowned +and blowzy-breasted dead. He weeps as he sleeps and sails. + + SECOND VOICE + +One voice of all he remembers most dearly as his dream +buckets down. Lazy early Rosie with the flaxen thatch, +whom he shared with Tom-Fred the donkeyman and many +another seaman, clearly and near to him speaks from the +bedroom of her dust. In that gulf and haven, fleets by the +dozen have anchored for the little heaven of the night; +but she speaks to Captain napping Cat alone. Mrs Probert... + + ROSIE PROBERT + +from Duck Lane, Jack. Quack twice and ask for Rosie + + SECOND VOICE + +...is the one love of his sea-life that was sardined with +women. + + ROSIE PROBERT (_Softly_) + +What seas did you see, +Tom Cat, Tom Cat, +In your sailoring days +Long long ago? +What sea beasts were +In the wavery green +When you were my master? + + CAPTAIN CAT + +I'll tell you the truth. +Seas barking like +seals, Blue seas and green, +Seas covered with eels +And mermen and whales. + + ROSIE PROBERT + +What seas did you sail +Old whaler when +On the blubbery waves +Between Frisco and Wales +You were my bosun? + + CAPTAIN CAT + +As true as I'm here +Dear you Tom Cat's tart +You landlubber Rosie +You cosy love +My easy as easy +My true sweetheart, +Seas green as a bean +Seas gliding with swans +In the seal-barking moon. + + ROSIE PROBERT + +What seas were rocking +My little deck hand +My favourite husband +In your seaboots and hunger +My duck my whaler +My honey my daddy +My pretty sugar sailor. +With my name on your belly +When you were a boy +Long long ago? + + CAPTAIN CAT + +I'll tell you no lies. +The only sea I saw +Was the seesaw sea +With you riding on it. +Lie down, lie easy. +Let me shipwreck in your thighs. + + ROSIE PROBERT, + +Knock twice, Jack, +At the door of my grave +And ask for Rosie. + + CAPTAIN CAT + +Rosie Probert. + + ROSIE PROBERT + +Remember her. +She is forgetting. +The earth which filled her mouth +Is vanishing from her. +Remember me. +I have forgotten you. +I am going into the darkness of the darkness for ever. +I have forgotten that I was ever born. + + CHILD + +Look, + + FIRST VOICE + +says a child to her mother as they pass by the window of +Schooner House, + + CHILD + +Captain Cat is crying + + FIRST VOICE + +Captain Cat is crying + + CAPTAIN CAT + +Come back, come back, + + FIRST VOICE + +up the silences and echoes of the passages of the eternal +night. + + CHILD + +He's crying all over his nose, + + FIRST VOICE + +says the child. Mother and child move on down the street. + + CHILD + +He's got a nose like strawberries, + + FIRST VOICE + +the child says ; and then she forgets him too. She sees in +the still middle of the bluebagged bay Nogood Boyo fishing +from the _Zanzibar_. + + CHILD + +Nogood Boyo gave me three pennies yesterday but I wouldn't, + + FIRST VOICE + +the child tells her mother. + + SECOND VOICE + +Boyo catches a whalebone corset. It is all he has caught +all day. + + NOGOOD BOYO + +Bloody funny fish! + + SECOND VOICE + +Mrs Dai Bread Two gypsies up his mind's slow eye, dressed +only in a bangle. + + NOGOOD BOYO + +She's wearing her nightgown. (_Pleadingly_) Would you like +this nice wet corset, Mrs Dai Bread Two? + + MRS DAI BREAD TWO + +No, I _won't!_ + +NOGOOD BO YO + +And a bite of my little apple? + + SECOND VOICE + +he offers with no hope. + + FIRST VOICE + +She shakes her brass nightgown, and he chases her out of +his mind; and when he comes gusting back, there in the +bloodshot centre of his eye a geisha girl grins and bows +in a kimono of ricepaper. + + NOGOOD BO YO + +I want to be _good_ Boyo, but nobody'll let me, + + FIRST VOICE + +he sighs as she writhes politely. The land fades, the sea +flocks silently away; and through the warm white cloud +where he lies, silky, tingling, uneasy Eastern music +undoes him in a Japanese minute. + + SECOND VOICE + +The afternoon buzzes like lazy bees round the flowers +round Mae Rose Cottage. Nearly asleep in the field of +nannygoats who hum and gently butt the sun, she blows love +on a puffball. + + MAE ROSE COTTAGE (_Lazily_) + +He loves me +He loves me not +He loves me +He loves me not +He _loves_ me!--the dirty old fool. + + SECOND VOICE + +Lazy she lies alone in clover and sweet-grass, seventeen +and never been sweet in the grass ho ho. + + FIRST VOICE + +The Reverend Eli Jenkins inky in his cool front parlour or +poem-room tells only the truth in his Lifework--the +Population, Main Industry, Shipping, History, Topography, +Flora and Fauna of the town he worships in--the White Book +of Llaregyb. Portraits of famous bards and preachers, all +fur and wool from the squint to the kneecaps, hang over +him heavy as sheep, next to faint lady watercolours of +pale green Milk Wood like a lettuce salad dying. His +mother, propped against a pot in a palm, with her +wedding-ring waist and bust like a black-clothed +dining-table suffers in her stays. + + REV. ELI JENKINS + +Oh angels be careful there with your knives and forks, + + FIRST VOICE + +he prays. There is no known likeness of his father Esau, +who, undogcollared because of his little weakness, was +scythed to the bone one harvest by mistake when sleeping +with his weakness in the corn. He lost all ambition and +died, with one leg. + + REV. ELI JENKINS + +Poor Dad, + + SECOND VOICE + +grieves the Reverend Eli, + + REV. ELI JENKINS + +to die of drink and agriculture. + +SECOND VOICE + +Farmer Watkins in Salt Lake Farm hates his cattle on the +hill as he ho's them in to milking. + + UTAH WATKINS (_In a fury_) + +Damn you, you damned dairies! + + SECOND VOICE + +A cow kisses him. + + UTAH WATKINS + +Bite her to death! + + SECOND VOICE + +he shouts to his deaf dog who smiles and licks his hands. + +UTAH WATKINS + +Gore him, sit on him, Daisy! + + SECOND VOICE + +he bawls to the cow who barbed him with her tongue, and +she moos gentle words as he raves and dances among his +summerbreathed slaves walking delicately to the farm. The +coming of the end of the Spring day is already reflected +in the lakes of their great eyes. Bessie Bighead greets +them by the names she gave them when they were maidens. + + BESSIE BIGHEAD + +Peg, Meg, Buttercup, Moll, +Fan from the Castle, +Theodosia and Daisy. + + SECOND VOICE + +They bow their heads. + + FIRST VOICE + +Look up Bessie Bighead in the White Book of Llaregyb and +you will find the few haggard rags and the one poor +glittering thread of her history laid out in pages there +with as much love and care as the lock of hair of a first +lost love. Conceived in Milk Wood, born in a barn, wrapped +in paper, left on a doorstep, bigheaded and bass-voiced +she grew in the dark until long-dead Gomer Owen kissed her +when she wasn't looking because he was dared. Now in the +light she'll work, sing, milk, say the cows' sweet names +and sleep until the night sucks out her soul and spits it +into the sky. In her life-long low light, holily Bessie +milks the fond lake-eyed cows as dusk showers slowly down +over byre, sea and town. + +Utah Watkins curses through the farmyard on a carthorse. + + UTAH WATKINS + +Gallop, you bleeding cripple! + + FIRST VOICE + +and the huge horse neighs softly as though he had given it +a lump of sugar. + +Now the town is disk. Each cobble, donkey, goose and +gooseberry street is a thoroughfare of dusk; and dusk and +ceremonial dust, and- night's first darkening snow, and +the sleep of birds, drift under and through the live dusk +of this place of love. Llaregyb is the capital of dusk. + +Mrs Ogmore-Pritchard, at the first drop of the +dusk-shower, seals all her sea-view doors, draws the +germ-free blinds, sits, erect as a dry dream on a +high-backed hygienic chair and wills herself to cold, +quick sleep. At once, at twice, Mr Ogmore and Mr +Pritchard, who all dead day long have been gossiping like +ghosts in the woodshed, planning the loveless destruction +of their glass widow, reluctantly sigh and sidle into her +clean house. + + MR PRITCHARD You first, Mr Ogmore. + + MR OGMORE + +After you, Mr Pritchard. + + MR PRITCHARD + +No, no, Mr Ogmore. You widowed her first. + + FIRST VOICE + +And in through the keyhole, with tears where their eyes +once were, they ooze and grumble. + + MRS OGMORE-PRITCHARD + +Husbands, + + FIRST VOICE + +she says in her sleep. There is acid love in her voice for +one of the two shambling phantoms. Mr Ogmore hopes that it +is not for him. So does Mr Pritchard. + + MRS OGMORE-PRITCHARD + +I love you both. + + MR OGMORE (_With terror_) + +Oh, Mrs Ogmore. + + MR PRITCHARD (_With horror_) + +Oh, Mrs Pritchard. + + MRS OGMORE-PRITCHARD + +Soon it will be time to go to bed. Tell me your tasks in +order. + + MR OGMORE AND MR PRITCHARD + +We must take our pyjamas from the drawer marked pyjamas. + + MRS OGMORE-PRITCHARD (_Coldly_) + +And then you must take them off. + + SECOND VOICE + +Down in the dusking town, Mae Rose Cottage, still lying in +clover, listens to the nannygoats chew, draws circles of +lipstick round her nipples. + + MAE ROSE COTTAGE + +I'm _fast_. I'm a bad lot. God will strike me dead. I'm +seventeen. I'll go to hell, + + SECOND VOICE + +she tells the goats. + + MAE ROSE COTTAGE + +You just wait. I'll sin till I blow up! + + SECOND VOICE + +She lies deep, waiting for the worst to happen; the goats +champ and sneer. + + FIRST VOICE + +And at the doorway of Bethesda House, the Reverend Jenkins +recites to Llaregyb Hill his sunset poem. + + REV. ELI JENKINS + +Every morning when I wake, +Dear Lord, a little prayer I make, +O please to keep Thy lovely eye +On all poor creatures born to die + +And every evening at sun-down +I ask a blessing on the town, +For whether we last the night or no +I'm sure is always touch-and-go. + +We are not wholly bad or good +Who live our lives under Milk Wood, +And Thou, I know, wilt be the first +To see our best side, not our worst. + +O let us see another day! +Bless us all this night, I pray, +And to the sun we all will bow +And say, good-bye--but just for now! + + FIRST VOICE + +Jack Black prepares once more to meet his Satan in the +Wood. He grinds his night-teeth, closes his eyes, climbs +into his religious trousers, their flies sewn up with +cobbler's thread, and pads out, torched and bibled, +grimly, joyfully, into the already sinning dusk. + + JACK BLACK + +Off to Gomorrah! + + SECOND VOICE + +And Lily Smalls is up to Nogood Boyo in the wash-house. + + FIRST VOICE + +And Cherry Owen, sober as Sunday as he is every day of the +week, goes off happy as Saturday to get drunk as a deacon +as he does every night. + + CHERRY OWEN + +I always say she's got two husbands, + + FIRST VOICE + +says Cherry Owen, + + CHERRY OWEN + +one drunk and one sober. + + FIRST VOICE + +And Mrs Cherry simply says + + MRS CHERRY OWEN + +And aren't I a lucky woman? Because I love them both. + + SINBAD + +Evening, Cherry. + + CHERRY OWEN + +Evening, Sinbad. + + SINBAD + +What'll you have? + + CHERRY OWEN + +Too much. + + SINBAD + +The Sailors Arms is always open... + + FIRST VOICE + +Sinbad suffers to himself, heartbroken, + + SINBAD + +...oh, Gossamer, open yours! + + FIRST VOICE + +Dusk is drowned for ever until to-morrow, It is all at +once night now, The windy town is a hill of windows, and +from the larrupped waves the lights of the lamps in the +windows call back the day and the dead that have run away +to sea. All over the calling dark, babies and old men are +bribed and lullabied to sleep. + + FIRST WOMAN'S VOICE + +Hushabye, baby, the sandman is coming... + + SECOND WOMAN'S VOICE (Singing) + +Rockabye, grandpa, in the tree top, +When the wind blows the cradle will rock, +When the bough breaks the cradle will fall, +Down will come grandpa, whiskers and all. + + FIRST VOICE + +Or their daughters cover up the old unwinking men like +parrots, and in their little dark in the lit and bustling +young kitchen corners, all night long they watch, +beady-eyed, the long night through in case death catches +them asleep. + + SECOND VOICE + +Unmarried girls, alone in their privately bridal bedrooms, +powder and curl for the Dance of the World. + + [_Accordion music: dim_ + +They make, in front of their looking-glasses, haughty or +come-hithering faces for the young men in the street +outside, at the lamplit leaning corners, who wait in the +all-at-once wind to wolve and whistle. + + [_Accordion music louder, then fading under_ + + FIRST VOICE + +The drinkers in the Sailors Arms drink to the failure of +the dance. + + A DRINKER + +Down with the waltzing and the skipping. + + CHERRY OWEN + +Dancing isn't natural, + + FIRST VOICE + +righteously says Cherry Owen who has just downed seventeen +pints of flat, warm, thin, Welsh, bitter beer. + + SECOND VOICE + +A farmer's lantern glimmers, a spark on Llaregyb hillside. + + [_Accordion music fades into silence_ + + VOICE FIRST + +Llaregyb Hill, writes the Reverend Jenkins in his poem-room, + + REV. ELI JENKINS + +Llaregyb Hill, that mystic tumulus, the memorial of +peoples that dwelt in the region of Llaregyb before the +Celts left the Land of Summer and where the old wizards +made themselves a wife out of flowers. + + SECOND VOICE + +Mr Waldo, in his corner of the Sailors Arms, sings: + + MR WALDO + +In Pembroke City when I was young +I lived by the Castle Keep +Sixpence a week was my wages +For working for the chimbley-sweep. +Six cold pennies he +gave me Not a farthing more or less +And all the fare I could afford +Was parsnip gin and watercress. +I did not need a knife and fork +Or a bib up to my chin +To dine on a dish of watercress +And a jug of parsnip gin. +Did you ever hear a growing boy +To live so cruel cheap +On grub that has no flesh and bones +And liquor that makes you weep? +Sweep sweep chimbley sweep, +I wept through Pembroke City +Poor and barefoot in the snow +Till a kind young woman took pity. +Poor little chimbley sweep she said +Black as the ace of spades +O nobody's swept my chimbley +Since my husband went his ways +Come and sweep my chimbley +Come and sweep my chimbley +She sighed to me with a blush +Come and sweep my chimbley +Come and sweep my chimbley +Bring along your chimbley brush! + + FIRST VOICE + +Blind Captain Cat climbs into his bunk. Like a cat, he +sees in the dark. Through the voyages of his tears he +sails to see the dead. + + CAPTAIN CAT + +Dancing Williams! + + FIRST DROWNED + +Still dancing. + + CAPTAIN CAT + +Jonah Jarvis + + THIRD DROWNED + +Still. + + FIRST DROWNED + +Curly Bevan's skull. + + ROSIE PROBERT + +Rosie, with God. She has forgotten dying. + + FIRST VOICE + +The dead come out in their Sunday best. + + SECOND VOICE + +Listen to the night breaking. + + FIRST VOICE + +Organ Morgan goes to chapel to play the organ. He sees +Bach lying on a tombstone. + + ORGAN MORGAN + +Johann Sebastian! + + CHERRY OWEN (_Drunkenly_) + +Who? + + ORGAN MORGAN + +Johann Sebastian mighty Bach. Oh, Bach fach + + CHERRY OWEN + +To hell with you, + + FIRST VOICE + +says Cherry Owen who is resting on the tombstone on his +way home. + +Mr Mog Edwards and Miss Myfanwy Price happily apart from +one another at the top and the sea end of the town write +their everynight letters of love and desire. In the warm +White Book of Llaregyb you will find the little maps of +the islands of their contentment. + + MYFANWY PRICE + +Oh, my Mog, I am yours for ever. + + FIRST VOICE + +And she looks around with pleasure at her own neat +neverdull room which Mr Mog Edwards will never enter. + + MOG EDWARDS + +Come to my arms, Myfanwy. + + FIRST VOICE + +And he hugs his lovely money to his _own_ heart. + +And Mr Waldo drunk in the dusky wood hugs his lovely Polly +Garter under the eyes and rattling tongues of the +neighbours and the birds, and he does not care. He smacks +his live red lips. + +But it is not _his_ name that Polly Garter whispers as she +lies under the oak and loves him back. Six feet deep that +name sings in the cold earth. + +POLLY GARTER (Sings) + +But I always think as we tumble into bed +Of little Willy Wee who is dead, dead, dead. + + FIRST VOICE + +The thin night darkens. A breeze from the creased water +sighs the streets close under Milk waking Wood. The Wood, +whose every tree-foot's cloven in the black glad sight of +the hunters of lovers, that is a God-built garden to Mary +Ann Sailors who knows there is Heaven on earth and the +chosen people of His kind fire in Llaregyb's land, that is +the fairday farmhands' wantoning ignorant chapel of +bridesbeds, and, to the Reverend Eli Jenkins, a greenleaved +sermon on the innocence of men, the suddenly wind-shaken +wood springs awake for the second dark time this one +Spring day. + + +