OSDN Git Service

OMakeを利用するように、OMakefileを再度作成。
authorderui <derutakayu@user.sourceforge.jp>
Mon, 14 Dec 2009 14:46:09 +0000 (23:46 +0900)
committerderui <derutakayu@user.sourceforge.jp>
Mon, 14 Dec 2009 14:46:09 +0000 (23:46 +0900)
src/test を test/ として独立させた。
lexerにstring_lexerとcharactor_lexerを追加。test/にも追加。

48 files changed:
.gitignore
INSTALL [deleted file]
OMakefile
OMakeroot
autom4te.cache/requests
config.log
log.log [moved from COPYING with 100% similarity]
src/Makefile.in
src/OMakefile
src/common/OMakefile [new file with mode: 0644]
src/common/scoped_ptr.h
src/common/textarrayformat.cpp
src/common/textarrayformat.h
src/encoding_reader.cpp
src/exception.h
src/file_reader.cpp
src/lexer/OMakefile [new file with mode: 0644]
src/lexer/charactor_lexer.cpp
src/lexer/charactor_lexer.h
src/lexer/delimiters.h
src/lexer/identifier_lexer.h [new file with mode: 0755]
src/lexer/string_lexer.h
src/reader_interface.h
src/string_reader.cpp
src/test/OMakefile [deleted file]
src/transcoder_interface.h
src/unicode.cpp
test/Makefile [moved from src/test/Makefile with 92% similarity]
test/Makefile.am [moved from src/test/Makefile.am with 64% similarity]
test/Makefile.in [moved from src/test/Makefile.in with 95% similarity]
test/OMakefile [new file with mode: 0644]
test/bignum_test.cpp [moved from src/test/bignum_test.cpp with 100% similarity]
test/charactor_lexer_test.cpp [new file with mode: 0755]
test/encoding_reader_test.cpp [moved from src/test/encoding_reader_test.cpp with 100% similarity]
test/environment_test.cpp [moved from src/test/environment_test.cpp with 100% similarity]
test/file_reader_test.cpp [moved from src/test/file_reader_test.cpp with 100% similarity]
test/gtest/Makefile [moved from src/test/gtest/Makefile with 100% similarity]
test/gtest/gtest-all.cc [moved from src/test/gtest/gtest-all.cc with 100% similarity]
test/gtest/gtest.h [moved from src/test/gtest/gtest.h with 100% similarity]
test/lexer_dispatcher_test.cpp [moved from src/test/lexer_dispatcher_test.cpp with 100% similarity]
test/lexer_test.cpp [moved from src/test/lexer_test.cpp with 100% similarity]
test/parser_test.cpp [moved from src/test/parser_test.cpp with 100% similarity]
test/string_reader_test.cpp [moved from src/test/string_reader_test.cpp with 100% similarity]
test/sublexer_test.cpp [moved from src/test/sublexer_test.cpp with 100% similarity]
test/textarrayformat_test.cpp [moved from src/test/textarrayformat_test.cpp with 61% similarity]
test/type_test.cpp [moved from src/test/type_test.cpp with 100% similarity]
test/unicode_test.cpp [moved from src/test/unicode_test.cpp with 100% similarity]
test/utf8_transcoder_test.cpp [moved from src/test/utf8_transcoder_test.cpp with 100% similarity]

index 92b5a20..ebd14ea 100644 (file)
@@ -45,3 +45,8 @@ utakata
 /src/test/encoding_reader_test
 /src/test/file_reader_test
 /src/test/test.txt
+/src/common/OMakefile.omc
+/src/lexer/OMakefile.omc
+/src/string_reader.a
+/test/file_reader_test
+/test/string_reader_test
diff --git a/INSTALL b/INSTALL
deleted file mode 100644 (file)
index e69de29..0000000
index 8dd1130..9c5395e 100644 (file)
--- a/OMakefile
+++ b/OMakefile
 # You will usually need to modify this file for your project.
 
 # Delete this line once you have configured this file
-eprintln($(CWD)/OMakefile is not configured)
 
 ########################################################################
 # Phony targets are scoped, so you probably want to declare them first.
 #
 
-# .PHONY: all install clean
-
-########################################################################
-# Subdirectories.
-# You may want to include some subdirectories in this project.
-# If so, define the subdirectory targets and uncomment this section.
-#
-
-.SUBDIRS: src src/test
+.PHONY: all install clean test
 
 ########################################################################
 # C configuration.
@@ -45,11 +36,6 @@ eprintln($(CWD)/OMakefile is not configured)
 # configuration variables.
 #
 
-# CFLAGS +=
-# ASFLAGS +=
-# LDFLAGS +=
-# INCLUDES +=
-
 ################################################
 # Uncomment the following section if you want
 # to build a C program in the current directory.
@@ -77,84 +63,9 @@ eprintln($(CWD)/OMakefile is not configured)
 # .DEFAULT: $(StaticCLibrary $(LIB), $(LIBFILES))
 
 ########################################################################
-# OCaml configuration.
-# Delete this section if you are not building OCaml files.
-#
-
-################################################
-# Configuration.  You may want to modify any of these configuration
-# variables.
-#
-
-#
-# This project requires ocamlfind (default - false).
-#
-# USE_OCAMLFIND = true
-#
-# OCAMLPACKS[] =
-#    pack1
-#    pack2
-#
-# if $(not $(OCAMLFIND_EXISTS))
-#    eprintln(This project requires ocamlfind, but is was not found.)
-#    eprintln(You need to install ocamlfind and run "omake --configure".)
-#    exit 1
-
-#
-# Include path
-#
-# OCAMLINCLUDES +=
-
-#
-# Compile native or byte code? 
-#
-# The default values are defined as follows:
-#
-# NATIVE_ENABLED = $(OCAMLOPT_EXISTS)
-# BYTE_ENABLED = $(not $(OCAMLOPT_EXISTS))
-
-#
-# Various options
-#
-# OCAMLFLAGS    +=
-# OCAMLCFLAGS   +=
-# OCAMLOPTFLAGS +=
-# OCAML_LINK_FLAGS +=
-# OCAML_BYTE_LINK_FLAGS +=
-# OCAML_NATIVE_LINK_FLAGS +=
-
-################################################
-# Generated files
-#
-# Workaround for the fact that ocamldep does not pay attention to .mll
-# and .mly files.
-#
-# OCamlGeneratedFiles(parser.ml lexer.ml)
-
-################################################
-# Build an OCaml library
-#
-
-# FILES[] =
-#    file1
-#    file2
-#
-# LIB = main
-#
-# .DEFAULT: $(OCamlLibrary $(LIB), $(FILES))
-
-################################################
-# Build an OCaml program
+# Subdirectories.
+# You may want to include some subdirectories in this project.
+# If so, define the subdirectory targets and uncomment this section.
 #
 
-# FILES[] =
-#    file1
-#    file2
-#
-# PROGRAM =
-# OCAML_LIBS +=
-# OCAML_CLIBS +=
-# OCAML_OTHER_LIBS +=
-# OCAML_LIB_FLAGS +=
-#
-# .DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+.SUBDIRS: src test
index f548275..ae47585 100644 (file)
--- a/OMakeroot
+++ b/OMakeroot
@@ -23,7 +23,7 @@
 # If you decide to modify this file, note that it uses exactly
 # the same syntax as the OMakefile.
 #
-
+# OMAKEPATH[] += "/cygdrive/d/Program Files/OMake/lib/omake"
 #
 # Include the standard installed configuration files.
 # Any of these can be deleted if you are not using them,
@@ -39,7 +39,14 @@ open build/LaTeX
 #
 DefineCommandVars()
 
+ROOTDIR = $(dir .)
+SRCDIR = $(dir src)
+CXXFLAGS = -Wall -fno-default-inline -g
+ASFLAGS +=
+LDFLAGS +=
+INCLUDES += $(ROOTDIR)
+
 #
 # Include the OMakefile in this directory.
 #
-.SUBDIRS: src src/test
+.SUBDIRS: src test src/common src/lexer
index 02bca84..e9c9fae 100644 (file)
                         'configure.in'
                       ],
                       {
-                        'AM_PROG_F77_C_O' => 1,
                         '_LT_AC_TAGCONFIG' => 1,
-                        'm4_pattern_forbid' => 1,
+                        'AM_PROG_F77_C_O' => 1,
                         'AC_INIT' => 1,
-                        '_AM_COND_IF' => 1,
+                        'm4_pattern_forbid' => 1,
                         'AC_CANONICAL_TARGET' => 1,
-                        'AC_SUBST' => 1,
+                        '_AM_COND_IF' => 1,
                         'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_FC_SRCEXT' => 1,
+                        'AC_SUBST' => 1,
                         'AC_CANONICAL_HOST' => 1,
+                        'AC_FC_SRCEXT' => 1,
                         'AC_PROG_LIBTOOL' => 1,
                         'AM_INIT_AUTOMAKE' => 1,
                         'AC_CONFIG_SUBDIRS' => 1,
                         'AM_AUTOMAKE_VERSION' => 1,
                         'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_CONFIG_LINKS' => 1,
                         'AC_REQUIRE_AUX_FILE' => 1,
-                        'm4_sinclude' => 1,
+                        'AC_CONFIG_LINKS' => 1,
                         'LT_SUPPORTED_TAG' => 1,
+                        'm4_sinclude' => 1,
                         'AM_MAINTAINER_MODE' => 1,
                         'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
                         '_m4_warn' => 1,
                         'AC_CANONICAL_BUILD' => 1,
                         'AC_FC_FREEFORM' => 1,
                         'AH_OUTPUT' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
                         'AC_CONFIG_AUX_DIR' => 1,
-                        'sinclude' => 1,
-                        'AM_PROG_CC_C_O' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
                         'm4_pattern_allow' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'sinclude' => 1,
                         'AM_CONDITIONAL' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
                         'AC_CONFIG_HEADERS' => 1,
                         'AC_DEFINE_TRACE_LITERAL' => 1,
                         'm4_include' => 1,
                         'configure.in'
                       ],
                       {
-                        'AM_PROG_F77_C_O' => 1,
                         '_LT_AC_TAGCONFIG' => 1,
-                        'm4_pattern_forbid' => 1,
+                        'AM_PROG_F77_C_O' => 1,
                         'AC_INIT' => 1,
-                        'AC_CANONICAL_TARGET' => 1,
+                        'm4_pattern_forbid' => 1,
                         '_AM_COND_IF' => 1,
-                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        'AC_CANONICAL_TARGET' => 1,
                         'AC_SUBST' => 1,
-                        'AC_CANONICAL_HOST' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
                         'AC_FC_SRCEXT' => 1,
+                        'AC_CANONICAL_HOST' => 1,
                         'AC_PROG_LIBTOOL' => 1,
                         'AM_INIT_AUTOMAKE' => 1,
                         'AC_CONFIG_SUBDIRS' => 1,
                         'AM_AUTOMAKE_VERSION' => 1,
                         'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_CONFIG_LINKS' => 1,
                         'AC_REQUIRE_AUX_FILE' => 1,
-                        'LT_SUPPORTED_TAG' => 1,
+                        'AC_CONFIG_LINKS' => 1,
                         'm4_sinclude' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
                         'AM_MAINTAINER_MODE' => 1,
                         'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
                         '_m4_warn' => 1,
                         'AC_CANONICAL_BUILD' => 1,
                         'AC_FC_FREEFORM' => 1,
                         'AH_OUTPUT' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
                         '_AM_SUBST_NOTMAKE' => 1,
-                        'AM_PROG_CC_C_O' => 1,
-                        'm4_pattern_allow' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
                         'sinclude' => 1,
-                        'AM_CONDITIONAL' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AM_PROG_CC_C_O' => 1,
                         'AC_CANONICAL_SYSTEM' => 1,
+                        'AM_CONDITIONAL' => 1,
                         'AC_CONFIG_HEADERS' => 1,
                         'AC_DEFINE_TRACE_LITERAL' => 1,
                         'm4_include' => 1,
index 1fd65c4..edceceb 100644 (file)
@@ -579,3 +579,91 @@ on vaio_z
 
 config.status:777: creating src/test/Makefile
 config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/Makefile
+
+on vaio_z
+
+config.status:777: creating src/Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status Makefile
+
+on vaio_z
+
+config.status:777: creating Makefile
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by utakata config.status 0.0.1, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status src/test/Makefile depfiles
+
+on vaio_z
+
+config.status:777: creating src/test/Makefile
+config.status:1051: executing depfiles commands
diff --git a/COPYING b/log.log
similarity index 100%
rename from COPYING
rename to log.log
index d5eed76..f7129fc 100644 (file)
@@ -93,7 +93,6 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 SET_MAKE = @SET_MAKE@
index 4c30a29..30c45c8 100644 (file)
@@ -1,160 +1,6 @@
-########################################################################
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this file, to deal in the File without
-# restriction, including without limitation the rights to use,
-# copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the File, and to permit persons to whom the
-# File is furnished to do so, subject to the following condition:
-#
-# THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE FILE OR
-# THE USE OR OTHER DEALINGS IN THE FILE.
+INCLUDES += $(ROOTDIR)
 
-########################################################################
-# The standard OMakefile.
-# You will usually need to modify this file for your project.
+.DEFAULT: $(StaticCLibrary string_reader, string_reader)
+       $(StaticCLibrary file_reader, file_reader)
 
-# Delete this line once you have configured this file
-eprintln($(CWD)/OMakefile is not configured)
-
-########################################################################
-# Phony targets are scoped, so you probably want to declare them first.
-#
-
-# .PHONY: all install clean
-
-########################################################################
-# Subdirectories.
-# You may want to include some subdirectories in this project.
-# If so, define the subdirectory targets and uncomment this section.
-#
-
-.SUBDIRS: test
-
-########################################################################
-# C configuration.
-# Delete this section if you are not building C files.
-#
-
-################################################
-# Configuration.  You might want to modify any of these
-# configuration variables.
-#
-
-# CFLAGS +=
-# ASFLAGS +=
-# LDFLAGS +=
-# INCLUDES +=
-
-################################################
-# Uncomment the following section if you want
-# to build a C program in the current directory.
-#
-
-# CFILES[] =
-#    file1
-#    main
-#
-# MAIN = main
-#
-# .DEFAULT: $(CProgram $(MAIN), $(CFILES))
-
-################################################
-# Uncomment the following section if you want to build a C library
-# in the current directory.
-#
-
-# LIBFILES[] =
-#    file1
-#    file2
-#
-# LIB = libxxx
-#
-# .DEFAULT: $(StaticCLibrary $(LIB), $(LIBFILES))
-
-########################################################################
-# OCaml configuration.
-# Delete this section if you are not building OCaml files.
-#
-
-################################################
-# Configuration.  You may want to modify any of these configuration
-# variables.
-#
-
-#
-# This project requires ocamlfind (default - false).
-#
-# USE_OCAMLFIND = true
-#
-# OCAMLPACKS[] =
-#    pack1
-#    pack2
-#
-# if $(not $(OCAMLFIND_EXISTS))
-#    eprintln(This project requires ocamlfind, but is was not found.)
-#    eprintln(You need to install ocamlfind and run "omake --configure".)
-#    exit 1
-
-#
-# Include path
-#
-# OCAMLINCLUDES +=
-
-#
-# Compile native or byte code? 
-#
-# The default values are defined as follows:
-#
-# NATIVE_ENABLED = $(OCAMLOPT_EXISTS)
-# BYTE_ENABLED = $(not $(OCAMLOPT_EXISTS))
-
-#
-# Various options
-#
-# OCAMLFLAGS    +=
-# OCAMLCFLAGS   +=
-# OCAMLOPTFLAGS +=
-# OCAML_LINK_FLAGS +=
-# OCAML_BYTE_LINK_FLAGS +=
-# OCAML_NATIVE_LINK_FLAGS +=
-
-################################################
-# Generated files
-#
-# Workaround for the fact that ocamldep does not pay attention to .mll
-# and .mly files.
-#
-# OCamlGeneratedFiles(parser.ml lexer.ml)
-
-################################################
-# Build an OCaml library
-#
-
-# FILES[] =
-#    file1
-#    file2
-#
-# LIB = main
-#
-# .DEFAULT: $(OCamlLibrary $(LIB), $(FILES))
-
-################################################
-# Build an OCaml program
-#
-
-# FILES[] =
-#    file1
-#    file2
-#
-# PROGRAM =
-# OCAML_LIBS +=
-# OCAML_CLIBS +=
-# OCAML_OTHER_LIBS +=
-# OCAML_LIB_FLAGS +=
-#
-# .DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+.SUBDIR: common lexer
\ No newline at end of file
diff --git a/src/common/OMakefile b/src/common/OMakefile
new file mode 100644 (file)
index 0000000..b3ddceb
--- /dev/null
@@ -0,0 +1,4 @@
+INCLUDES += $(ROOTDIR)
+
+.DEFAULT: $(StaticCLibrary string_reader, string_reader)
+       $(StaticCLibrary file_reader, file_reader)
index dc3d31f..0ab1f9d 100755 (executable)
@@ -5,8 +5,8 @@
 // を離れた時点で、解体を行うことを保証するものです。
 // scoped_ptrはコピー不可能であるため、スコープが限定されており、
 // 初期化以外は行われないデータにおいて利用されるべきです。
-#ifndef _UTAKATA_SRC_COMMON_PROXY_PTR_H_
-#define _UTAKATA_SRC_COMMON_PROXY_PTR_H_
+#ifndef _UTAKATA_SRC_COMMON_SCOPED_PTR_H_
+#define _UTAKATA_SRC_COMMON_SCOPED_PTR_H_
 
 #include "src/common/uncopyable.h"
 
@@ -52,4 +52,4 @@ class scoped_ptr : private Uncopyable {
 };
 }; // end of namespace utility
 
-#endif /* _HOME_DERUI_DEVELOP_UTAKATA_SRC_COMMON_SCOPED_PTR_H_ */
+#endif /* _UTAKATA_SRC_COMMON_SCOPED_PTR_H_ */
index dcbfe83..335df6f 100644 (file)
@@ -21,20 +21,27 @@ void textarrayformat::TextArrayGenerator::Punctuate() {
 }
 
 // 宣言のコメントを参照してください。
+void textarrayformat::TextArrayGenerator::Punctuate(const std::string& block) {
+  if (block != separator_) {
+    if (!now_block_.empty()) {
+      Punctuate();
+    }
+    Append(block);
+    Punctuate();
+  }
+}
+
+// 宣言のコメントを参照してください。
 void textarrayformat::TextArrayReader::SplitBlock(
     const textarrayformat::TextArrayGenerator& generator) {
   std::string separator = generator.separator();
-  const std::string& all_text = generator.construct_text().substr(
+  const std::string all_text = generator.construct_text().substr(
       separator.size());
 
   size_t pos = std::string::npos;
   size_t begin = 0;
-  while ((pos = all_text.find(separator, begin + 1)) != std::string::npos) {
+  while ((pos = all_text.find(separator, begin)) != std::string::npos) {
     text_blocks_.push_back(all_text.substr(begin, pos - begin));
-    begin += pos + separator.size();
-  }
-
-  if (begin < all_text.size()) {
-    text_blocks_.push_back(all_text.substr(begin));
+    begin = pos + separator.size();
   }
 }
index 32b39e2..ba1ee4e 100644 (file)
@@ -47,6 +47,12 @@ class TextArrayGenerator {
   // 空文字のブロックとして登録が行われます。
   void Punctuate();
 
+  // 渡されたブロックを一つのブロックとして登録します。
+  // まだPunctuateが実行されていないブロックがあった場合、そのブロックを
+  // 先にPunctuateしてから、blockの登録が行われます。
+  // ただし、渡されたブロックがseparatorと同一である場合、何も行いません。
+  void Punctuate(const std::string& block);
+
   // 構築済の文字列を返します。ここで返される文字列は、
   // 先頭行がseparatorであり、それ以降の各ブロックがseparator行で
   // 区切られたブロックとなっています。
@@ -91,6 +97,7 @@ class TextArrayReader {
   // Generatorから取得した構築済ブロック文字列を、それぞれのブロック文字列に
   // 分解します。Generatorが変化しない限り、何度実行しても同一の結果が
   // 得られます。
+  // 実行後、以前の結果は破棄されます。
   void SplitBlock(const TextArrayGenerator& generator);
 
  private:
index ff9e290..0124641 100755 (executable)
@@ -3,9 +3,11 @@
 #include "src/exception_std.h"
 #include "src/exception_macro.h"
 #include "src/transcoder_interface.h"
+#include "src/unicode.h"
 
 namespace reader = utakata::reader;
 namespace exception = utakata::exception;
+namespace unicode = utakata::unicode;
 
 // 1文字に相当するバイト数は、現在保持しているITranscoderに依存します。
 unsigned int reader::EncodingReader::Read() {
@@ -72,11 +74,12 @@ bool reader::EncodingReader::IsEof() const {
 void reader::EncodingReader::CheckInternal() const {
   if (reader_ == NULL) {
     THROW_EXCEPTION_(exception::NullException,
-                     "reader is must to set valid pointer");
+                     unicode::Convert("reader is must to set valid pointer"));
   }
 
   if (transcoder_.get() == NULL) {
     THROW_EXCEPTION_(exception::NullException,
-                     "transcoder is must to set valid pointer");
+                     unicode::Convert(
+                         "transcoder is must to set valid pointer"));
   }
 }
index f2f1150..018c9e4 100755 (executable)
@@ -37,6 +37,7 @@
 #include <exception>
 #include <string>
 #include "src/common/smart_ptr.h"
+#include "src/unicode.h"
 
 namespace utakata {
 
@@ -91,7 +92,8 @@ class Exception : public std::exception {
   // 前回送出された例外が存在しない場合のコンストラクタです。
   // すべての値が指定されることが必須となります。
   Exception(const unicode::UniString& message, const ExceptionInfo& info) :
-      previous_exception_(), message_(message), info_(info) {}
+      previous_exception_(),
+      message_(new unicode::UniString(message)), info_(info) {}
 
   // 前回送出された例外を記録します。
   Exception(const Exception& prev, const unicode::UniString& message,
index f96065b..388c789 100755 (executable)
 #include <algorithm>
 
 #include "src/file_reader.h"
-
 #include "src/exception_macro.h"
 
 namespace reader = utakata::reader;
+namespace unicode = utakata::unicode;
 
 reader::FileReader::~FileReader() {
   if (file_pointer_ != NULL) {
@@ -64,7 +64,7 @@ unsigned int reader::FileReader::Read() {
   unsigned int byte = 0;
   if (::fread(&byte, 1, 1, file_pointer_) != 1) {
     THROW_EXCEPTION_(reader::IOException,
-                     "file read error `" + filename_ + "`");
+                     unicode::Convert("file read error `" + filename_ + "`"));
   }
 
   ++pos_;
@@ -195,7 +195,7 @@ bool reader::FileReader::IsEof() const {
 void reader::FileReader::CheckOpened() {
   if (!IsOpened()) {
     THROW_EXCEPTION_(reader::IOException,
-                     "file isn't open yet! `" + filename_ + "`");
+                     unicode::Convert("file isn't open yet! `" + filename_ + "`"));
   }
 }
 
@@ -203,7 +203,7 @@ void reader::FileReader::CheckOpened() {
 void reader::FileReader::CheckEOF() {
   if (IsEof()) {
     THROW_EXCEPTION_(reader::EndOfDeviceException,
-                     "end of File `" + filename_ + "`");
+                     unicode::Convert("end of File `" + filename_ + "`"));
   }
 }
 
diff --git a/src/lexer/OMakefile b/src/lexer/OMakefile
new file mode 100644 (file)
index 0000000..b3ddceb
--- /dev/null
@@ -0,0 +1,4 @@
+INCLUDES += $(ROOTDIR)
+
+.DEFAULT: $(StaticCLibrary string_reader, string_reader)
+       $(StaticCLibrary file_reader, file_reader)
index 7475198..8201acb 100755 (executable)
@@ -17,14 +17,63 @@ bool lexer::CharactorDispatchTerm::IsDispatch(
   return false;
 }
 
-// 宣言のコメントを参照してください。
+
+#define DEFINE_CHARACTOR_SPEC_(VALUE, NAME, CODE)                       \
+  const std::pair<unicode::UniString, int> lexer::CharactorNames::VALUE( \
+      std::pair<unicode::UniString, int>(unicode::Convert(NAME), CODE))
+
+DEFINE_CHARACTOR_SPEC_(kNul, "nul", 0x0000);
+DEFINE_CHARACTOR_SPEC_(kAlarm, "alarm", 0x0007);
+DEFINE_CHARACTOR_SPEC_(kBackspace, "backspace", 0x0008);
+DEFINE_CHARACTOR_SPEC_(kTab, "tab", 0x0009);
+DEFINE_CHARACTOR_SPEC_(kLinefeed, "linefeed", 0x000A);
+DEFINE_CHARACTOR_SPEC_(kNewline, "newline", 0x000A);
+DEFINE_CHARACTOR_SPEC_(kVTab, "vtab", 0x000B);
+DEFINE_CHARACTOR_SPEC_(kPage, "page", 0x000C);
+DEFINE_CHARACTOR_SPEC_(kReturn, "return", 0x000D);
+DEFINE_CHARACTOR_SPEC_(kEsc, "esc", 0x001B);
+DEFINE_CHARACTOR_SPEC_(kSpace, "space", 0x0020);
+DEFINE_CHARACTOR_SPEC_(kDelete, "delete", 0x007F);
+
+#undef DEFINE_CHARACTOR_SPEC_
+
+// 関数内部のみで有効な検索用のmapを定義しています。
+// 初回のみ、各定数を登録します。
 bool lexer::CharactorNames::IsCharactorName(const unicode::UniString& string) {
-  
+  InitializeCharactorMap();
+  std::map<unicode::UniString, int>::iterator find_result =
+      charactor_map_.find(string);
+  return find_result == charactor_map.end();
 }
 
-unsigned int lexer::CharactorNames::GetCodeFromCharactorName(
+// 宣言のコメントを参照してください。
+bool lexer::CharactorNames::GetCodeFromCharactorName(
     const unicode::UniString& string) {
+  InitializeCharactorMap();
+  std::map<unicode::UniString, int>::iterator find_result =
+      charactor_map_.find(string);
+  if (find_result != charactor_map_.end()) {
+    return find_result;
+  }
+  return unicode::UniChar::kOutOfUnicode;
+}
 
+// 文字とunicodeのmapを初期化します。
+void lexer::CharactorNames::InitializeCharactorMap() {
+  if (charactor_map_.empty()) {
+    charactor_map_.insert(kNul);
+    charactor_map_.insert(kAlarm);
+    charactor_map_.insert(kBackspace);
+    charactor_map_.insert(kTab);
+    charactor_map_.insert(kLinefeed);
+    charactor_map_.insert(kNewline);
+    charactor_map_.insert(kVTab);
+    charactor_map_.insert(kPage);
+    charactor_map_.insert(kReturn);
+    charactor_map_.insert(kEsc);
+    charactor_map_.insert(kSpace);
+    charactor_map_.insert(kDelete);
+  }
 }
 
 // 宣言のコメントを参照してください。
@@ -70,6 +119,11 @@ lexeme::ILexeme* lexer::CharactorLexer::Lex(const unicode::UniString& string.
 }
 
 // 宣言のコメントを参照してください。
+lexer::ILexerDispatchTerm* lexer::CharactorLexer::GetTerm() const {
+  return new lexer::CharactorDispatchTerm();
+}
+
+// 宣言のコメントを参照してください。
 void lexer::CharactorLexer::ConvertCharactorNameToCode(
     const unicode::UniString& string, unicode::UniChar* code) {
   if (!lexer::CharactorNames::IsCharactorName(string)) {
index 5538ab2..dc3b610 100755 (executable)
@@ -31,21 +31,23 @@ class CharactorDispatchTerm {
   virtual bool IsDispatch(const unicode::UniString& string) const;
 };
 
-struct CharactorNames {
-  // charactor name の固定値です。それぞれ固有の値ですので、
-  // 定数として定義しています。
-  static const std::string kNUL       = "nul";
-  static const std::string kALARM     = "alarm";
-  static const std::string kBACKSPACE = "backspace";
-  static const std::string kTAB       = "tab";
-  static const std::string kLINEFEED  = "linefeed";
-  static const std::string kNEWLINE   = "newline";
-  static const std::string kVTAB      = "vtab";
-  static const std::string kPAGE      = "page";
-  static const std::string kRETURN    = "return";
-  static const std::string kESC       = "esc";
-  static const std::string kSPACE     = "space";
-  static const std::string kDELETE    = "delete";
+class CharactorNames {
+  // Schemeの文字名に関係する処理及び定数をまとめたクラスです。
+  // このクラスはstaticのみが存在しています。
+ public:
+  // charactor nameと対応するUnicode値の固定値を列挙します。
+  static const std::pair<unicode::UniString, int> kNul;
+  static const std::pair<unicode::UniString, int> kAlarm;
+  static const std::pair<unicode::UniString, int> kBackspace;
+  static const std::pair<unicode::UniString, int> kTab;
+  static const std::pair<unicode::UniString, int> kLinefeed;
+  static const std::pair<unicode::UniString, int> kNewline;
+  static const std::pair<unicode::UniString, int> kVTab;
+  static const std::pair<unicode::UniString, int> kPage;
+  static const std::pair<unicode::UniString, int> kReturn;
+  static const std::pair<unicode::UniString, int> kEsc;
+  static const std::pair<unicode::UniString, int> kSpace;
+  static const std::pair<unicode::UniString, int> kDelete;
 
   // 渡されたstringがCharctor Nameであるかどうかを判別します。
   // ここで許可されるCharactor Nameは次の通りです。
@@ -67,8 +69,17 @@ struct CharactorNames {
   // 渡されたunicodeの内容と一致するunicodeを返します。
   // CharactorNameに該当しない場合、0x11ffffが返されます。
   // 0x11ffffは、unicode:UniChar::kOutOfUnicodeとして定義されています。
-  static unsigned int GetCodeFromCharactorName(
-      const unicode::UniString& string);
+  static int GetCodeFromCharactorName(const unicode::UniString& string);
+
+ private:
+
+  // 検索用mapを初期化します。この初期化の際には、このクラスで宣言されている
+  // 定数を利用します。
+  static void InitializeCharactorMap();
+
+  // 文字名と文字に対応するunicodeを保持するmapです。
+  // いずれかの関数が実行された際に一度だけ初期化が行われます。
+  static std::map<unicode::UniString, int> charactor_map_;
 };
 
 class CharactorLexer : public IPartsOfLexer {
@@ -110,6 +121,17 @@ class CharactorLexer : public IPartsOfLexer {
   void ConvertHexValueToCode(const unicode::UniString& string,
                              unicode::UniChar* code);
 };
+
+class CharactorLexerFactory : public ILexerFactory {
+  // CharactorLexerをIPartsOfLexerとして生成するファクトリです。
+ public:
+  CharactorLexerFactory() {}
+  virtual ~CharactorLexerFactory() {}
+
+  // ChractorLexerを新たに割り当てて返します。
+  // 返されたインスタンスは、取得側で開放する必要があります。
+  virtual IPartsOfLexer* Create() const {return new CharactorLexer();}
+};
 }
 }
 
index ed5008a..90397e9 100755 (executable)
@@ -1,10 +1,10 @@
-// lexer内部で利用されるデリミタ
+// lexer内部で利用されるデリミタ
 //
 // lexer::Lexer内部で利用される、各非終端記号及び終端記号を定義
 // しています。
 // 各デリミタは、unicode::UniCharを渡すことで、各非終端記号、及び
 // 終端記号であるかを表すような関数オブジェクトとしてのみ振舞います。
-// 判定のために複数文字列が必要であるデータについては、StreamReader
+// 判定のために複数文字列が必要であるデータについては、例外的にStreamReader
 // へのconstではないポインタを渡す必要があります。
 // (これはsmart_ptrによって隠蔽されます。)
 //
diff --git a/src/lexer/identifier_lexer.h b/src/lexer/identifier_lexer.h
new file mode 100755 (executable)
index 0000000..ab6090f
--- /dev/null
@@ -0,0 +1,75 @@
+// Scheme構文におけるidentityの解釈を行うlexerを定義します。
+// ここで定義されるLexerは、IPartsOfLexerから派生しており、以下の条件
+// をもってLexerDispatcherからディスパッチします。
+// :検索対象文字列の先頭 = <identifier> の場合:
+#ifndef _UTAKATA_SRC_LEXER_IDENTIFIER_LEXER_H_
+#define _UTAKATA_SRC_LEXER_IDENTIFIER_LEXER_H_
+
+#include "src/lexer/lexer_interface.h"
+
+namespace utakata {
+namespace unicode {
+class UniString;
+class UniChar;
+};
+
+namespace lexeme {
+class ILexeme;
+}
+
+namespace reader {
+class EncodingReader;
+}
+
+namespace lexer {
+class IdentifierDispatchTerm {
+ public:
+  IdentifierDispatchTerm() {}
+  virtual ~IdentifierDispatchTerm() {}
+
+  // ディスパッチを行うかどうかを判定します。
+  virtual bool IsDispatch(const unicode::UniString& string) const;
+};
+
+class IdentifierLexer : public IPartsOfLexer {
+  // Scheme構文における識別子のチェックを行います。
+  // Scheme構文における識別子は、以下の形式を取ります。
+  // ・先頭が次のいずれかである。
+  //   !  $  %  &  *  /  :  <  =  >  ?  ^  _  ~ ->
+  // ・識別子全体が以下である。
+  //   + - ...
+  // ・先頭に続けた、デリミタ以外のunicode及びinline hex escapeを含めた
+  //   文字。
+  // inline hex escape は \x<hex>;の形式を取ります。
+  // inline hex escapeについては、inline_hex_escape_lexer.h において定義
+  // されているInlineHexEscapeLexerを参照してください。
+ public:
+
+  IdentifierLexer() {}
+  virtual ~IdentifierLexer() {}
+
+  // 読出しストリームへのポインタを受け取って、結果として生成した
+  // ILexemeインターフェースの派生クラスを返します。
+  virtual lexeme::ILexeme* Lex(const unicode::UniString& string,
+                               reader::EncodingReader* reader);
+
+  // このIPartOfLexerへとDispatchする条件を記載したDispatchTermを作成して
+  // 返します。返されたポインタは、取得側で削除する必要があります。
+  // 返された値の保持については、utility::scoped_ptrの利用を推奨します。
+  virtual ILexerDispatchTerm* GetTerm() const;
+};
+
+class IdentifierLexerFactory : public ILexerFactory {
+  // IdentifierLexerをIPartsOfLexerとして生成するファクトリです。
+ public:
+  IdentifierLexerFactory() {}
+  virtual ~IdentifierLexerFactory() {}
+
+  // ChractorLexerを新たに割り当てて返します。
+  // 返されたインスタンスは、取得側で開放する必要があります。
+  virtual IPartsOfLexer* Create() const {return new IdentifierLexer();}
+};
+}
+}
+
+#endif /* _UTAKATA_SRC_LEXER_IDENTIFIER_LEXER_H_ */
index df377db..d1ebda6 100755 (executable)
@@ -51,6 +51,16 @@ class StringLexer : public IPartsOfLexer {
   // 返された値の保持については、utility::scoped_ptrの利用を推奨します。
   virtual ILexerDispatchTerm* GetTerm() const;
 };
+
+class StringLexerFactory : public ILexerFactory {
+  // StringLexerをIPartOfLexerのポインタで返すファクトリです。
+  // このファクトリは、Lexerから利用されることが想定されています。
+ public:
+  // StringLexerを生成して返します。
+  // 返されたインスタンスは、取得側で開放する必要があります。
+  virtual IPartsOfLexer* Create() const {return new StringLexer();}
+};
 }
 }
 
index 796aba5..c571a25 100644 (file)
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 #include "src/exception.h"
-#include "src/unicode,h"
+#include "src/unicode.h"
 
 namespace utakata {
 
index d563e48..70fad5c 100755 (executable)
@@ -13,6 +13,7 @@
 #include <vector>
 #include "src/string_reader.h"
 #include "src/exception_macro.h"
+#include "src/unicode.h"
 
 namespace reader = utakata::reader;
 
@@ -142,6 +143,6 @@ bool reader::StringReader::IsEof() const {
 void reader::StringReader::CheckInternal() {
   if (iterator_ == buffer_.end()) {
     THROW_EXCEPTION_(reader::EndOfDeviceException,
-                     "end of String `" + buffer_ + "`");
+                     unicode::Convert("end of String `" + buffer_ + "`"));
   }
 }
diff --git a/src/test/OMakefile b/src/test/OMakefile
deleted file mode 100644 (file)
index 9579e11..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-SRCS = utf8_string_test ../utf8_string ../simpletest ../utf8
-TARGET = utf8_string_test
-
-CXXFLAGS += -g -I../common -I.. -Igtest -lgtest -Wall
-LDFLAGS += 
-
-.DEFAULT: $(CXXProgram string_reader_test, ../string_reader)
-
index 7942fa0..16cbc85 100755 (executable)
@@ -15,6 +15,10 @@ namespace reader {
 class IReader;
 }
 
+namespace unicode {
+class UniString;
+}
+
 namespace transcoder {
 
 class EncodeException : public exception::Exception {
@@ -22,11 +26,11 @@ class EncodeException : public exception::Exception {
   // 例外が発生した場合に返すことが想定されている例外です。
  public:
   // 表示する文字列と、例外が発生した位置を設定します。
-  EncodeException(const std::string& message,
+  EncodeException(const unicode::UniString& message,
                   const utakata::exception::ExceptionInfo& info) :
       Exception(message, info) {}
   EncodeException(const utakata::exception::Exception& exception,
-                  const std::string& message,
+                  const unicode::UniString& message,
                   const utakata::exception::ExceptionInfo& info) :
       Exception(exception, message, info) {}
 
@@ -38,16 +42,16 @@ class DecodeException : public exception::Exception {
   // 例外が発生した場合に返すことが想定されている例外です。
  public:
   // 表示する文字列と、例外が発生した位置を設定します。
-  DecodeException(const std::string& message,
+  DecodeException(const unicode::UniString& message,
                   const utakata::exception::ExceptionInfo& info) :
       Exception(message, info) {}
 
   DecodeException(const utakata::exception::Exception& exception,
-                  const std::string& message,
+                  const unicode::UniString& message,
                   const utakata::exception::ExceptionInfo& info) :
       Exception(exception, message, info) {}
 
-  virtual const char* what() const throw() {reutrn "DecodeException";}
+  virtual const char* what() const throw() {return "DecodeException";}
 };
 
 class ITranscoder {
index b6983aa..30345fa 100755 (executable)
@@ -99,7 +99,7 @@ unicode::UniString unicode::Convert(
 unicode::UniString unicode::Convert(const std::string& target) {
   unicode::UniString s;
   std::string::const_iterator it = target.begin(), end = target.end();
-  for (; it != end; ++it) {
+  for (; it != end;) {
     s.Append(UniChar(*it++));
   }
   return s;
similarity index 92%
rename from src/test/Makefile
rename to test/Makefile
index 2f34bcb..8bc2f97 100644 (file)
@@ -33,7 +33,7 @@ POST_UNINSTALL = :
 bin_PROGRAMS = string_reader_test$(EXEEXT) file_reader_test$(EXEEXT) \
        utf8_transcoder_test$(EXEEXT) unicode_test$(EXEEXT) \
        encoding_reader_test$(EXEEXT) type_test$(EXEEXT) \
-       textarrayformat_test$(EXEEXT)
+       textarrayformat_test$(EXEEXT) charactor_lexer_test$(EXEEXT)
 subdir = src/test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -46,17 +46,22 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
+am_charactor_lexer_test_OBJECTS = textarrayformat.$(OBJEXT) \
+       charactor_lexer_test.$(OBJEXT) gtest-all.$(OBJEXT)
+charactor_lexer_test_OBJECTS = $(am_charactor_lexer_test_OBJECTS)
+charactor_lexer_test_LDADD = $(LDADD)
 am_encoding_reader_test_OBJECTS = encoding_reader.$(OBJEXT) \
        string_reader.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       encoding_reader_test.$(OBJEXT) gtest-all.$(OBJEXT)
+       encoding_reader_test.$(OBJEXT) gtest-all.$(OBJEXT) \
+       unicode.$(OBJEXT)
 encoding_reader_test_OBJECTS = $(am_encoding_reader_test_OBJECTS)
 encoding_reader_test_LDADD = $(LDADD)
 am_file_reader_test_OBJECTS = file_reader_test.$(OBJEXT) \
-       file_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+       file_reader.$(OBJEXT) gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 file_reader_test_OBJECTS = $(am_file_reader_test_OBJECTS)
 file_reader_test_LDADD = $(LDADD)
 am_string_reader_test_OBJECTS = string_reader_test.$(OBJEXT) \
-       string_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+       string_reader.$(OBJEXT) gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 string_reader_test_OBJECTS = $(am_string_reader_test_OBJECTS)
 string_reader_test_LDADD = $(LDADD)
 am_textarrayformat_test_OBJECTS = textarrayformat.$(OBJEXT) \
@@ -74,7 +79,7 @@ unicode_test_OBJECTS = $(am_unicode_test_OBJECTS)
 unicode_test_LDADD = $(LDADD)
 am_utf8_transcoder_test_OBJECTS = utf8_transcoder.$(OBJEXT) \
        utf8_transcoder_test.$(OBJEXT) string_reader.$(OBJEXT) \
-       gtest-all.$(OBJEXT)
+       gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 utf8_transcoder_test_OBJECTS = $(am_utf8_transcoder_test_OBJECTS)
 utf8_transcoder_test_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I. -I$(top_builddir)
@@ -85,22 +90,24 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
        -o $@
-SOURCES = $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
+SOURCES = $(charactor_lexer_test_SOURCES) \
+       $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
+       $(string_reader_test_SOURCES) $(textarrayformat_test_SOURCES) \
+       $(type_test_SOURCES) $(unicode_test_SOURCES) \
+       $(utf8_transcoder_test_SOURCES)
+DIST_SOURCES = $(charactor_lexer_test_SOURCES) \
+       $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
        $(string_reader_test_SOURCES) $(textarrayformat_test_SOURCES) \
        $(type_test_SOURCES) $(unicode_test_SOURCES) \
        $(utf8_transcoder_test_SOURCES)
-DIST_SOURCES = $(encoding_reader_test_SOURCES) \
-       $(file_reader_test_SOURCES) $(string_reader_test_SOURCES) \
-       $(textarrayformat_test_SOURCES) $(type_test_SOURCES) \
-       $(unicode_test_SOURCES) $(utf8_transcoder_test_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run aclocal-1.10
-AMTAR = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run tar
-AUTOCONF = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoconf
-AUTOHEADER = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoheader
-AUTOMAKE = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run automake-1.10
+ACLOCAL = ${SHELL} /home/derui/develop/utakata/missing --run aclocal-1.10
+AMTAR = ${SHELL} /home/derui/develop/utakata/missing --run tar
+AUTOCONF = ${SHELL} /home/derui/develop/utakata/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/derui/develop/utakata/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/derui/develop/utakata/missing --run automake-1.10
 AWK = gawk
 CC = gcc
 CCDEPMODE = depmode=gcc3
@@ -110,16 +117,16 @@ CPPFLAGS =
 CXX = g++
 CXXDEPMODE = depmode=gcc3
 CXXFLAGS = -g -O2
-CYGPATH_W = cygpath -w
+CYGPATH_W = echo
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
 ECHO_N = -n
 ECHO_T = 
 EGREP = /bin/grep -E
-EXEEXT = .exe
+EXEEXT = 
 GREP = /bin/grep
-INSTALL = /bin/install -c
+INSTALL = /usr/bin/install -c
 INSTALL_DATA = ${INSTALL} -m 644
 INSTALL_PROGRAM = ${INSTALL}
 INSTALL_SCRIPT = ${INSTALL}
@@ -128,7 +135,7 @@ LDFLAGS =
 LIBOBJS = 
 LIBS = 
 LTLIBOBJS = 
-MAKEINFO = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run makeinfo
+MAKEINFO = ${SHELL} /home/derui/develop/utakata/missing --run makeinfo
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = utakata
@@ -136,17 +143,16 @@ PACKAGE_BUGREPORT = BUG-REPORT-ADDRESS
 PACKAGE_NAME = utakata
 PACKAGE_STRING = utakata 0.0.1
 PACKAGE_TARNAME = utakata
-PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = 0.0.1
 PATH_SEPARATOR = :
 SET_MAKE = 
 SHELL = /bin/sh
 STRIP = 
 VERSION = 0.0.1
-abs_builddir = /cygdrive/c/meadow/develop/utakata/src/test
-abs_srcdir = /cygdrive/c/meadow/develop/utakata/src/test
-abs_top_builddir = /cygdrive/c/meadow/develop/utakata
-abs_top_srcdir = /cygdrive/c/meadow/develop/utakata
+abs_builddir = /home/derui/develop/utakata/src/test
+abs_srcdir = /home/derui/develop/utakata/src/test
+abs_top_builddir = /home/derui/develop/utakata
+abs_top_srcdir = /home/derui/develop/utakata
 ac_ct_CC = gcc
 ac_ct_CXX = g++
 am__include = include
@@ -166,7 +172,7 @@ host_alias =
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = $(SHELL) /cygdrive/c/meadow/develop/utakata/install-sh
+install_sh = $(SHELL) /home/derui/develop/utakata/install-sh
 libdir = ${exec_prefix}/lib
 libexecdir = ${exec_prefix}/libexec
 localedir = ${datarootdir}/locale
@@ -194,15 +200,22 @@ SRC_DIR = ..
 LC_ALL = C
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
-string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
-file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc
-utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
+file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
+utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
 unicode_test_SOURCES = unicode_test.cpp ../unicode.cpp ../utf8_transcoder.cpp  ../string_reader.cpp gtest/gtest-all.cc
 encoding_reader_test_SOURCES = ../encoding_reader.cpp ../string_reader.cpp ../utf8_transcoder.cpp \
-       encoding_reader_test.cpp  gtest/gtest-all.cc
+       encoding_reader_test.cpp  gtest/gtest-all.cc ../unicode.cpp
 
 type_test_SOURCES = ../type.cpp type_test.cpp gtest/gtest-all.cc
 textarrayformat_test_SOURCES = ../common/textarrayformat.cpp  textarrayformat_test.cpp gtest/gtest-all.cc
+charactor_lexer_test_SOURCES = ../common/textarrayformat.cpp charactor_lexer_test.cpp gtest/gtest-all.cc
 all: all-am
 
 .SUFFIXES:
@@ -259,6 +272,9 @@ uninstall-binPROGRAMS:
 
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+charactor_lexer_test$(EXEEXT): $(charactor_lexer_test_OBJECTS) $(charactor_lexer_test_DEPENDENCIES) 
+       @rm -f charactor_lexer_test$(EXEEXT)
+       $(CXXLINK) $(charactor_lexer_test_OBJECTS) $(charactor_lexer_test_LDADD) $(LIBS)
 encoding_reader_test$(EXEEXT): $(encoding_reader_test_OBJECTS) $(encoding_reader_test_DEPENDENCIES) 
        @rm -f encoding_reader_test$(EXEEXT)
        $(CXXLINK) $(encoding_reader_test_OBJECTS) $(encoding_reader_test_LDADD) $(LIBS)
@@ -287,6 +303,7 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+include ./$(DEPDIR)/charactor_lexer_test.Po
 include ./$(DEPDIR)/encoding_reader.Po
 include ./$(DEPDIR)/encoding_reader_test.Po
 include ./$(DEPDIR)/file_reader.Po
@@ -317,6 +334,34 @@ include ./$(DEPDIR)/utf8_transcoder_test.Po
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
+textarrayformat.o: ../common/textarrayformat.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
+       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
+#      source='../common/textarrayformat.cpp' object='textarrayformat.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
+
+textarrayformat.obj: ../common/textarrayformat.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
+       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
+#      source='../common/textarrayformat.cpp' object='textarrayformat.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
+
+gtest-all.o: gtest/gtest-all.cc
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+#      source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+
+gtest-all.obj: gtest/gtest-all.cc
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+#      source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+
 encoding_reader.o: ../encoding_reader.cpp
        $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT encoding_reader.o -MD -MP -MF $(DEPDIR)/encoding_reader.Tpo -c -o encoding_reader.o `test -f '../encoding_reader.cpp' || echo '$(srcdir)/'`../encoding_reader.cpp
        mv -f $(DEPDIR)/encoding_reader.Tpo $(DEPDIR)/encoding_reader.Po
@@ -359,19 +404,19 @@ utf8_transcoder.obj: ../utf8_transcoder.cpp
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.obj `if test -f '../utf8_transcoder.cpp'; then $(CYGPATH_W) '../utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/../utf8_transcoder.cpp'; fi`
 
-gtest-all.o: gtest/gtest-all.cc
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
-       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
-#      source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no \
+unicode.o: ../unicode.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
+       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
+#      source='../unicode.cpp' object='unicode.o' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
 
-gtest-all.obj: gtest/gtest-all.cc
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
-       mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
-#      source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no \
+unicode.obj: ../unicode.cpp
+       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
+       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
+#      source='../unicode.cpp' object='unicode.obj' libtool=no \
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
 
 file_reader.o: ../file_reader.cpp
        $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT file_reader.o -MD -MP -MF $(DEPDIR)/file_reader.Tpo -c -o file_reader.o `test -f '../file_reader.cpp' || echo '$(srcdir)/'`../file_reader.cpp
@@ -387,20 +432,6 @@ file_reader.obj: ../file_reader.cpp
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o file_reader.obj `if test -f '../file_reader.cpp'; then $(CYGPATH_W) '../file_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../file_reader.cpp'; fi`
 
-textarrayformat.o: ../common/textarrayformat.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
-       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-#      source='../common/textarrayformat.cpp' object='textarrayformat.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
-
-textarrayformat.obj: ../common/textarrayformat.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
-       mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-#      source='../common/textarrayformat.cpp' object='textarrayformat.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
-
 type.o: ../type.cpp
        $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.o -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.o `test -f '../type.cpp' || echo '$(srcdir)/'`../type.cpp
        mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
@@ -415,20 +446,6 @@ type.obj: ../type.cpp
 #      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
 #      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.obj `if test -f '../type.cpp'; then $(CYGPATH_W) '../type.cpp'; else $(CYGPATH_W) '$(srcdir)/../type.cpp'; fi`
 
-unicode.o: ../unicode.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
-       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-#      source='../unicode.cpp' object='unicode.o' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
-
-unicode.obj: ../unicode.cpp
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
-       mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-#      source='../unicode.cpp' object='unicode.obj' libtool=no \
-#      DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
-#      $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
-
 .cpp.o:
        $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
        mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@@ -706,6 +723,7 @@ uninstall-am: uninstall-binPROGRAMS
        mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
        tags uninstall uninstall-am uninstall-binPROGRAMS
 
+       ../encoding_reader.cpp ../string_reader.cpp ../unicode.cpp ../lexer/charactor_lexer.cpp ../utf8_transcoder.h
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
similarity index 64%
rename from src/test/Makefile.am
rename to test/Makefile.am
index 30d8ba4..30add16 100755 (executable)
@@ -6,16 +6,21 @@ LC_ALL=C
 # SIBDIRS = . 
 
 bin_PROGRAMS = string_reader_test file_reader_test utf8_transcoder_test unicode_test \
-       encoding_reader_test type_test textarrayformat_test
+       encoding_reader_test type_test textarrayformat_test charactor_lexer_test
 
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
 
-string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
-file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc
-utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
 unicode_test_SOURCES = unicode_test.cpp ../unicode.cpp ../utf8_transcoder.cpp  ../string_reader.cpp gtest/gtest-all.cc
 encoding_reader_test_SOURCES = ../encoding_reader.cpp ../string_reader.cpp ../utf8_transcoder.cpp \
-       encoding_reader_test.cpp  gtest/gtest-all.cc
+       encoding_reader_test.cpp  gtest/gtest-all.cc ../unicode.cpp
 type_test_SOURCES =  ../type.cpp type_test.cpp gtest/gtest-all.cc
 textarrayformat_test_SOURCES = ../common/textarrayformat.cpp  textarrayformat_test.cpp gtest/gtest-all.cc
+charactor_lexer_test_SOURCES = ../common/textarrayformat.cpp charactor_lexer_test.cpp gtest/gtest-all.cc \
+       ../encoding_reader.cpp ../string_reader.cpp ../unicode.cpp ../lexer/charactor_lexer.cpp ../utf8_transcoder.h
similarity index 95%
rename from src/test/Makefile.in
rename to test/Makefile.in
index 6dc51a9..f8bf69b 100644 (file)
@@ -33,7 +33,7 @@ POST_UNINSTALL = :
 bin_PROGRAMS = string_reader_test$(EXEEXT) file_reader_test$(EXEEXT) \
        utf8_transcoder_test$(EXEEXT) unicode_test$(EXEEXT) \
        encoding_reader_test$(EXEEXT) type_test$(EXEEXT) \
-       textarrayformat_test$(EXEEXT)
+       textarrayformat_test$(EXEEXT) charactor_lexer_test$(EXEEXT)
 subdir = src/test
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -46,17 +46,22 @@ CONFIG_CLEAN_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
+am_charactor_lexer_test_OBJECTS = textarrayformat.$(OBJEXT) \
+       charactor_lexer_test.$(OBJEXT) gtest-all.$(OBJEXT)
+charactor_lexer_test_OBJECTS = $(am_charactor_lexer_test_OBJECTS)
+charactor_lexer_test_LDADD = $(LDADD)
 am_encoding_reader_test_OBJECTS = encoding_reader.$(OBJEXT) \
        string_reader.$(OBJEXT) utf8_transcoder.$(OBJEXT) \
-       encoding_reader_test.$(OBJEXT) gtest-all.$(OBJEXT)
+       encoding_reader_test.$(OBJEXT) gtest-all.$(OBJEXT) \
+       unicode.$(OBJEXT)
 encoding_reader_test_OBJECTS = $(am_encoding_reader_test_OBJECTS)
 encoding_reader_test_LDADD = $(LDADD)
 am_file_reader_test_OBJECTS = file_reader_test.$(OBJEXT) \
-       file_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+       file_reader.$(OBJEXT) gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 file_reader_test_OBJECTS = $(am_file_reader_test_OBJECTS)
 file_reader_test_LDADD = $(LDADD)
 am_string_reader_test_OBJECTS = string_reader_test.$(OBJEXT) \
-       string_reader.$(OBJEXT) gtest-all.$(OBJEXT)
+       string_reader.$(OBJEXT) gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 string_reader_test_OBJECTS = $(am_string_reader_test_OBJECTS)
 string_reader_test_LDADD = $(LDADD)
 am_textarrayformat_test_OBJECTS = textarrayformat.$(OBJEXT) \
@@ -74,7 +79,7 @@ unicode_test_OBJECTS = $(am_unicode_test_OBJECTS)
 unicode_test_LDADD = $(LDADD)
 am_utf8_transcoder_test_OBJECTS = utf8_transcoder.$(OBJEXT) \
        utf8_transcoder_test.$(OBJEXT) string_reader.$(OBJEXT) \
-       gtest-all.$(OBJEXT)
+       gtest-all.$(OBJEXT) unicode.$(OBJEXT)
 utf8_transcoder_test_OBJECTS = $(am_utf8_transcoder_test_OBJECTS)
 utf8_transcoder_test_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
@@ -85,14 +90,16 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
        -o $@
-SOURCES = $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
+SOURCES = $(charactor_lexer_test_SOURCES) \
+       $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
+       $(string_reader_test_SOURCES) $(textarrayformat_test_SOURCES) \
+       $(type_test_SOURCES) $(unicode_test_SOURCES) \
+       $(utf8_transcoder_test_SOURCES)
+DIST_SOURCES = $(charactor_lexer_test_SOURCES) \
+       $(encoding_reader_test_SOURCES) $(file_reader_test_SOURCES) \
        $(string_reader_test_SOURCES) $(textarrayformat_test_SOURCES) \
        $(type_test_SOURCES) $(unicode_test_SOURCES) \
        $(utf8_transcoder_test_SOURCES)
-DIST_SOURCES = $(encoding_reader_test_SOURCES) \
-       $(file_reader_test_SOURCES) $(string_reader_test_SOURCES) \
-       $(textarrayformat_test_SOURCES) $(type_test_SOURCES) \
-       $(unicode_test_SOURCES) $(utf8_transcoder_test_SOURCES)
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -136,7 +143,6 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 SET_MAKE = @SET_MAKE@
@@ -194,15 +200,22 @@ SRC_DIR = ..
 LC_ALL = C
 check_PROGRANS = $(bin_PROGRAMS)
 TESTS = $(bin_PROGRAMS)
-string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc
-file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc
-utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc
+string_reader_test_SOURCES = string_reader_test.cpp ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
+file_reader_test_SOURCES = file_reader_test.cpp ../file_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
+utf8_transcoder_test_SOURCES = ../utf8_transcoder.cpp utf8_transcoder_test.cpp  ../string_reader.cpp gtest/gtest-all.cc \
+       ../unicode.cpp
+
 unicode_test_SOURCES = unicode_test.cpp ../unicode.cpp ../utf8_transcoder.cpp  ../string_reader.cpp gtest/gtest-all.cc
 encoding_reader_test_SOURCES = ../encoding_reader.cpp ../string_reader.cpp ../utf8_transcoder.cpp \
-       encoding_reader_test.cpp  gtest/gtest-all.cc
+       encoding_reader_test.cpp  gtest/gtest-all.cc ../unicode.cpp
 
 type_test_SOURCES = ../type.cpp type_test.cpp gtest/gtest-all.cc
 textarrayformat_test_SOURCES = ../common/textarrayformat.cpp  textarrayformat_test.cpp gtest/gtest-all.cc
+charactor_lexer_test_SOURCES = ../common/textarrayformat.cpp charactor_lexer_test.cpp gtest/gtest-all.cc
 all: all-am
 
 .SUFFIXES:
@@ -259,6 +272,9 @@ uninstall-binPROGRAMS:
 
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+charactor_lexer_test$(EXEEXT): $(charactor_lexer_test_OBJECTS) $(charactor_lexer_test_DEPENDENCIES) 
+       @rm -f charactor_lexer_test$(EXEEXT)
+       $(CXXLINK) $(charactor_lexer_test_OBJECTS) $(charactor_lexer_test_LDADD) $(LIBS)
 encoding_reader_test$(EXEEXT): $(encoding_reader_test_OBJECTS) $(encoding_reader_test_DEPENDENCIES) 
        @rm -f encoding_reader_test$(EXEEXT)
        $(CXXLINK) $(encoding_reader_test_OBJECTS) $(encoding_reader_test_LDADD) $(LIBS)
@@ -287,6 +303,7 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charactor_lexer_test.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding_reader.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding_reader_test.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_reader.Po@am__quote@
@@ -317,6 +334,34 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
+textarrayformat.o: ../common/textarrayformat.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../common/textarrayformat.cpp' object='textarrayformat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
+
+textarrayformat.obj: ../common/textarrayformat.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../common/textarrayformat.cpp' object='textarrayformat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
+
+gtest-all.o: gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+
+gtest-all.obj: gtest/gtest-all.cc
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+
 encoding_reader.o: ../encoding_reader.cpp
 @am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT encoding_reader.o -MD -MP -MF $(DEPDIR)/encoding_reader.Tpo -c -o encoding_reader.o `test -f '../encoding_reader.cpp' || echo '$(srcdir)/'`../encoding_reader.cpp
 @am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/encoding_reader.Tpo $(DEPDIR)/encoding_reader.Po
@@ -359,19 +404,19 @@ utf8_transcoder.obj: ../utf8_transcoder.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o utf8_transcoder.obj `if test -f '../utf8_transcoder.cpp'; then $(CYGPATH_W) '../utf8_transcoder.cpp'; else $(CYGPATH_W) '$(srcdir)/../utf8_transcoder.cpp'; fi`
 
-gtest-all.o: gtest/gtest-all.cc
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.o -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.o' libtool=no @AMDEPBACKSLASH@
+unicode.o: ../unicode.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../unicode.cpp' object='unicode.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.o `test -f 'gtest/gtest-all.cc' || echo '$(srcdir)/'`gtest/gtest-all.cc
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
 
-gtest-all.obj: gtest/gtest-all.cc
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT gtest-all.obj -MD -MP -MF $(DEPDIR)/gtest-all.Tpo -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/gtest-all.Tpo $(DEPDIR)/gtest-all.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='gtest/gtest-all.cc' object='gtest-all.obj' libtool=no @AMDEPBACKSLASH@
+unicode.obj: ../unicode.cpp
+@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
+@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../unicode.cpp' object='unicode.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o gtest-all.obj `if test -f 'gtest/gtest-all.cc'; then $(CYGPATH_W) 'gtest/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/gtest/gtest-all.cc'; fi`
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
 
 file_reader.o: ../file_reader.cpp
 @am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT file_reader.o -MD -MP -MF $(DEPDIR)/file_reader.Tpo -c -o file_reader.o `test -f '../file_reader.cpp' || echo '$(srcdir)/'`../file_reader.cpp
@@ -387,20 +432,6 @@ file_reader.obj: ../file_reader.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o file_reader.obj `if test -f '../file_reader.cpp'; then $(CYGPATH_W) '../file_reader.cpp'; else $(CYGPATH_W) '$(srcdir)/../file_reader.cpp'; fi`
 
-textarrayformat.o: ../common/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.o -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../common/textarrayformat.cpp' object='textarrayformat.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.o `test -f '../common/textarrayformat.cpp' || echo '$(srcdir)/'`../common/textarrayformat.cpp
-
-textarrayformat.obj: ../common/textarrayformat.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT textarrayformat.obj -MD -MP -MF $(DEPDIR)/textarrayformat.Tpo -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/textarrayformat.Tpo $(DEPDIR)/textarrayformat.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../common/textarrayformat.cpp' object='textarrayformat.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o textarrayformat.obj `if test -f '../common/textarrayformat.cpp'; then $(CYGPATH_W) '../common/textarrayformat.cpp'; else $(CYGPATH_W) '$(srcdir)/../common/textarrayformat.cpp'; fi`
-
 type.o: ../type.cpp
 @am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type.o -MD -MP -MF $(DEPDIR)/type.Tpo -c -o type.o `test -f '../type.cpp' || echo '$(srcdir)/'`../type.cpp
 @am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/type.Tpo $(DEPDIR)/type.Po
@@ -415,20 +446,6 @@ type.obj: ../type.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type.obj `if test -f '../type.cpp'; then $(CYGPATH_W) '../type.cpp'; else $(CYGPATH_W) '$(srcdir)/../type.cpp'; fi`
 
-unicode.o: ../unicode.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.o -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../unicode.cpp' object='unicode.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.o `test -f '../unicode.cpp' || echo '$(srcdir)/'`../unicode.cpp
-
-unicode.obj: ../unicode.cpp
-@am__fastdepCXX_TRUE@  $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unicode.obj -MD -MP -MF $(DEPDIR)/unicode.Tpo -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
-@am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/unicode.Tpo $(DEPDIR)/unicode.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='../unicode.cpp' object='unicode.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unicode.obj `if test -f '../unicode.cpp'; then $(CYGPATH_W) '../unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/../unicode.cpp'; fi`
-
 .cpp.o:
 @am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCXX_TRUE@  mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@@ -706,6 +723,7 @@ uninstall-am: uninstall-binPROGRAMS
        mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
        tags uninstall uninstall-am uninstall-binPROGRAMS
 
+       ../encoding_reader.cpp ../string_reader.cpp ../unicode.cpp ../lexer/charactor_lexer.cpp ../utf8_transcoder.h
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/test/OMakefile b/test/OMakefile
new file mode 100644 (file)
index 0000000..35f9dbd
--- /dev/null
@@ -0,0 +1,25 @@
+.PHONY: test
+
+# SRCS = utf8_string_test ../utf8_string ../simpletest ../utf8
+# TARGET = utf8_string_test
+
+INCLUDES += test/gtest/gtest.h $(SRCDIR)
+LDFLAGS += -L$(ROOTDIR)/src -L$(ROOTDIR)/src/common -L$(ROOTDIR)/src/lexer -Ltest/gtest
+INCLUDE_SRCS = $(removesuffix $(ls R,$(ROOTDIR)/src/*cpp))
+
+# enumeration test program names
+TEST_PROGRAMS[] =
+       string_reader_test
+       file_reader_test
+       encoding_reader_test
+       textarrayformat_test
+
+.DEFAULT: $(CXXProgram string_reader_test, string_reader_test ../src/unicode ../src/string_reader gtest/gtest-all)
+.DEFAULT: $(CXXProgram file_reader_test, file_reader_test ../src/unicode ../src/file_reader gtest/gtest-all)
+.DEFAULT: $(CXXProgram encoding_reader_test, encoding_reader_test ../src/unicode ../src/string_reader ../src/encoding_reader ../src/utf8_transcoder gtest/gtest-all)
+.DEFAULT: $(CXXProgram textarrayformat_test, textarrayformat_test ../src/common/textarrayformat gtest/gtest-all)
+
+# executing test that enumeration test program from `TEST_PROGRAMS`
+test: .DEFAULT
+       foreach(i, $(TEST_PROGRAMS)):
+               ./$(i) --gtest_color=yes
diff --git a/test/charactor_lexer_test.cpp b/test/charactor_lexer_test.cpp
new file mode 100755 (executable)
index 0000000..e30f3ad
--- /dev/null
@@ -0,0 +1,310 @@
+#include <gtest/gtest.h>
+#include "src/common/textarrayformat.h"
+#include "src/lexer/charactor_lexer.h"
+#include "src/encoding_reader.h"
+#include "src/string_reader.h"
+#include "src/unicode.h"
+#include "src/common/scoped_ptr.h"
+#include "src/utf8_transcoder.h"
+
+namespace textarrayformat = utility::textarrayformat;
+namespace lexer = utakata::lexer;
+namespace unicode = utakata::unicode;
+namespace reader = utakata::reader;
+namespace transcoder = utakata::transcoder;
+
+class CharactorLexerTest : public ::testing::Test {
+ protected:
+  virtual void SetUp() {
+    gen.reset(new textarrayformat::TextArrayGenerator("========="));
+    gen->Punctuate('#\a #\z #\x( #\xo');
+    gen->Punctuate('#\x001 #\x7f8f');
+    gen->Punctuate('#\nul');
+    gen->Punctuate('#\alarm');
+    gen->Punctuate('#\backspace');
+    gen->Punctuate('#\tab #\linefeed');
+    gen->Punctuate('#\newline #\vtab #\page');
+    gen->Punctuate('#\return #\esc' + "\n" + '#\space');
+    gen->Punctuate('#\delete');
+  }
+
+ private:
+  utility::scoped_ptr<textarrayformat::TextArrayGenerator> gen;
+};
+
+TEST_F(CharactorLexerTest, SingleCharactorLex) {
+  textarrayformat::TextArrayReader textarray(*gen);
+
+  reader::StringReader sr(textarray.GetBlockAt(0));
+  reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+
+  lexer::CharactorLexer lexer;
+
+  utility::scoped_ptr<lexer::ILexerDispatchTerm> term(lexer.GetTerm());
+
+  EXPECT_TRUE(term->IsDispatch(unicode::Convert("#\\")));
+
+  reader->Read(2);
+  utility::scoped_ptr<lexeme::ILexeme> l(lexer.Lex(unicode::UniString(),
+                                                   &reader));
+  EXPECT_EQ(l->content.At(0).rawcode(), 'a');
+  EXPECT_EQ(l->content.GetSize(), 1);
+
+  reader->Read(3);
+  l.reset(lexer.Lex(unicode::UniString(), &reader));
+  EXPECT_EQ(l->content.At(0).rawcode(), 'z');
+  EXPECT_EQ(l->content.GetSize(), 1);
+
+  reader->Read(3);
+  l.reset(lexer.Lex(unicode::UniString(), &reader));
+  EXPECT_EQ(l->content.At(0).rawcode(), 'x');
+  EXPECT_EQ(l->content.GetSize(), 1);
+
+  EXPECT_THROW(l.reset(lexer.lex(unicode::UniString(), &reader)),
+               lexer::LexException);
+}
+
+TEST_F(CharactorLexerTest, HexCharactorTest) {
+  textarrayformat::TextArrayReader textarray(*gen);
+
+  reader::StringReader sr(textarray.GetBlockAt(1));
+  reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+
+  lexer::CharactorLexer lexer;
+
+  reader->Read(2);
+  utility::scoped_ptr<lexeme::ILexeme> l(lexer.Lex(unicode::UniString(),
+                                                   &reader));
+  EXPECT_EQ(l->content.At(0).rawcode(), 0x01);
+  EXPECT_EQ(l->content.GetSize(), 1);
+
+  reader->Read(3);
+  l.reset(lexer.Lex(unicode::UniString(), &reader));
+  EXPECT_EQ(l->content.At(0).rawcode(), 0x7f8f);
+  EXPECT_EQ(l->content.GetSize(), 1);
+}
+
+TEST_F(CharactorLexerTest, NameLexingNul) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(2));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr("null");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+
+  {
+    reader::StringReader sr("nu");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+}
+
+TEST_F(CharactorLexerTest, NameLexingAlarm) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(3));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x07);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr("alar");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+
+  {
+    reader::StringReader sr("alarms");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+}
+
+TEST_F(CharactorLexerTest, NameLexingBackspace) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(4));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x08);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr("Backspace");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+
+  {
+    reader::StringReader sr("backspa");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+}
+
+TEST_F(CharactorLexerTest, NameLexingTabAndLinefeed) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(5));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x09);
+    EXPECT_EQ(l->content.GetSize(), 1);
+
+    reader->Read(3);
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0a);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr("Tab");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+
+  {
+    reader::StringReader sr("line");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+}
+
+TEST_F(CharactorLexerTest, NameLexing) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(6));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0A);
+    EXPECT_EQ(l->content.GetSize(), 1);
+
+    reader->Read(3);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0B);
+    EXPECT_EQ(l->content.GetSize(), 1);
+
+    reader->Read(3);
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0C);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr(textarray.GetBlockAt(7));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x0D);
+    EXPECT_EQ(l->content.GetSize(), 1);
+
+    reader->Read(3);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x1B);
+    EXPECT_EQ(l->content.GetSize(), 1);
+
+    reader->Read(3);
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x20);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+}
+
+TEST_F(CharactorLexerTest, NameLexingDelete) {
+  textarrayformat::TextArrayReader textarray(*gen);
+  utility::scoped_ptr<lexeme::ILexeme> l;
+  {
+    reader::StringReader sr(textarray.GetBlockAt(8));
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    reader->Read(2);
+
+    EXPECT_NO_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)));
+    EXPECT_EQ(l->content.At(0).rawcode(), 0x7f);
+    EXPECT_EQ(l->content.GetSize(), 1);
+  }
+
+  {
+    reader::StringReader sr("del");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+
+  {
+    reader::StringReader sr("Delete");
+    reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+    lexer::CharactorLexer lexer;
+    EXPECT_THROW(l.reset(lexer.Lex(unicode::UniString(), &reader)),
+                 lexer::LexException);
+  }
+}
+
+int main(int argc, char** argv) {
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
similarity index 100%
rename from src/test/gtest/Makefile
rename to test/gtest/Makefile
similarity index 100%
rename from src/test/gtest/gtest.h
rename to test/gtest/gtest.h
similarity index 100%
rename from src/test/lexer_test.cpp
rename to test/lexer_test.cpp
similarity index 61%
rename from src/test/textarrayformat_test.cpp
rename to test/textarrayformat_test.cpp
index 58470b6..b2458ea 100644 (file)
@@ -33,6 +33,31 @@ TEST(TextArrayFormatTest, GenAndReadTest) {
   EXPECT_EQ(s.size(), static_cast<unsigned int>(2));
 }
 
+TEST(TextArrayFormatTest, FastConstructBlock) {
+  textarrayformat::TextArrayGenerator gen("======");
+
+  gen.Append("test");
+  gen.Append("test");
+  EXPECT_EQ(gen.construct_text(), "======\n");
+
+  gen.Punctuate();
+  EXPECT_EQ(gen.construct_text(), gen.separator() +
+            "test\ntest\n" + gen.separator());
+
+  gen.Append("hoge");
+  gen.Punctuate("huga");
+
+  gen.Punctuate(gen.separator());
+
+  textarrayformat::TextArrayReader reader(gen);
+  EXPECT_EQ(reader.GetBlockAt(0), "test\ntest\n");
+  EXPECT_EQ(reader.GetBlockAt(1), "hoge\n");
+  EXPECT_EQ(reader.GetBlockAt(2), "huga\n");
+
+  std::vector<std::string> s = reader.text_blocks();
+  EXPECT_EQ(s.size(), static_cast<unsigned int>(3));
+}
+
 int main(int argc, char** argv) {
   testing::InitGoogleTest(&argc, argv);
 
similarity index 100%
rename from src/test/type_test.cpp
rename to test/type_test.cpp