1 /* 2 * TextualOutputPort.h - 3 * 4 * Copyright (c) 2008 Higepon(Taro Minowa) <higepon@users.sourceforge.jp> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 23 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * 29 * $Id: TextualOutputPort.h 261 2008-07-25 06:16:44Z higepon $ 30 */ 31 32 #ifndef SCHEME_TEXTUAL_OUTPUT_PORT_ 33 #define SCHEME_TEXTUAL_OUTPUT_PORT_ 34 35 //#include "Port.h" 36 #include "OutputPort.h" 37 38 namespace scheme { 39 40 class String; 41 class Codec; 42 class Transcoder; 43 class BinaryOutputPort; 44 45 class TextualOutputPort : public OutputPort 46 { 47 public: 48 TextualOutputPort(); 49 virtual ~TextualOutputPort(); 50 51 virtual void putChar(ucs4char c) = 0; 52 virtual void flush() = 0; 53 virtual Transcoder* transcoder() const = 0; 54 55 virtual void putCharHandleSpecial(ucs4char c, bool inString); 56 57 // template method 58 virtual void putString(String* str); 59 virtual void putString(const ucs4string& s); 60 virtual void putString(const char* s); 61 virtual void putDatum(const VM* theVM, Object o, bool isSharedAware = false); 62 virtual void display(const VM* theVM, Object o, bool isSharedAware = false); 63 virtual void format(const VM* theVM, const ucs4string& fmt, Object args); 64 virtual bool isErrorOccured() const; 65 virtual Object errorMessage() const; 66 virtual Object irritants() const; 67 virtual Object position() const; 68 virtual bool setPosition(int64_t position); 69 virtual bool hasPosition() const; 70 virtual bool hasSetPosition() const; 71 72 protected: 73 bool writeAbbreviated(Object obj); 74 void scan(Object obj, EqHashTable* seen); 75 bool isInteresting(Object obj); 76 template<bool isHumanReadable> void print(const VM* theVM, Object o, EqHashTable* seen); 77 78 bool isErrorOccured_; 79 Object errorMessage_; 80 Object irritants_; 81 int sharedId_; 82 }; 83 84 } // namespace scheme 85 86 #endif // SCHEME_TEXTUAL_OUTPUT_PORT_ 87