diff --git a/1872.zip b/1872.zip
new file mode 100644
index 0000000..f099562
Binary files /dev/null and b/1872.zip differ
diff --git a/1941.pdf b/1941.pdf
new file mode 100644
index 0000000..472dd02
Binary files /dev/null and b/1941.pdf differ
diff --git a/1955.html b/1955.html
new file mode 100644
index 0000000..7a49ebf
--- /dev/null
+++ b/1955.html
@@ -0,0 +1,31 @@
+Part One Introduction
+Chapter 1 PHP: Design and Management
+
+Part Two Objects
+Chapter 2 PHP and Objects
+Chapter 3 Object Basics
+Chapter 4 Advanced Features
+Chapter 5 Object Tools
+Chapter 6 Objects and Design
+
+Part Three Patterns
+Chapter 7 What Are Design Patterns? Why Use Them?
+Chapter 8 Some Pattern Principles
+Chapter 9 Generating Objects
+Chapter 10 Designing for Object Relations
+Chapter 11 Performing and Representing Tasks
+Chapter 12 Enterprise Patterns
+
+Part Four Practice
+Chapter 13 Good (and Bad) Practice
+Chapter 14 An Introduction to PEAR
+Chapter 15 Generating Documentation with phpDocumentor
+Chapter 16 Version Control with CVS
+Chapter 17 Automated Build with Phing
+
+Part Five Conclusion
+Chapter 18 Objects, Patterns, Practice
+
+Part Six Appendixes
+Appendix A Bibliography
+Appendix B A Simple Parser
\ No newline at end of file
diff --git a/2500.html b/2500.html
new file mode 100644
index 0000000..2508286
--- /dev/null
+++ b/2500.html
@@ -0,0 +1 @@
+
Errata 380-4 Zandstra (corrected in the 2nd printing)
Page |
Original Sentence |
Corrected Sentence |
408 |
protected
function doScan( Scanner $scanner ) { foreach(
$this->parsers as $parser ) { if
( ! ( $parser->trigger( $scanner ) && $scan=$parser->scan(
$scanner )) ) { return
false; } } return
true; |
protected
function doScan( Scanner $scanner ) { $s_copy
= clone $scanner; foreach(
$this->parsers as $parser ) { if
( ! ( $parser->trigger( $s_copy ) && $scan=$parser->scan(
$s_copy )) ) { return
false; } } $scanner->updateToMatch(
$s_copy ); return
true; |
408 |
//
This matches if one or more subparsers match |
//
This matches if zero or more subparsers match |
408 |
protected
function doScan( Scanner $scanner ) { if
( empty( $this->parsers ) ) { return
true; |
protected
function doScan( Scanner $scanner ) { $s_copy
= clone $scanner; if
( empty( $this->parsers ) ) { |
409 |
if
( ! $parser->trigger( $scanner ) ) { //
no initial match is fine return
true; } if
( $parser->scan( $scanner ) ) { //
all is well. go again $this->scan(
$scanner ); }
else { //
we got a partial match but failed return
false; } return
true; |
while
( true ) { if
( ! $parser->trigger( $s_copy ) ) { $scanner->updateToMatch(
$s_copy ); return
true; } $s_copy2
= clone $s_copy; if
( ! $parser->scan( $s_copy2 ) ) { $scanner->updateToMatch(
$s_copy ); return
true; } $s_copy
= $s_copy2; } return
true; |