diff --git a/README b/README.markdown
similarity index 100%
rename from README
rename to README.markdown
diff --git a/gae-app/igo-morp/build.xml b/gae-app/igo-morp/build.xml
new file mode 100644
index 0000000..b4e1cb2
--- /dev/null
+++ b/gae-app/igo-morp/build.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gae-app/igo-morp/src/Igo.java b/gae-app/igo-morp/src/Igo.java
new file mode 100644
index 0000000..cfc17dd
--- /dev/null
+++ b/gae-app/igo-morp/src/Igo.java
@@ -0,0 +1,36 @@
+/**
+ * Igoのラッパークラス。
+ * クラスのロード時にバイナリ辞書の読み込みを行う。
+ */
+
+import java.util.List;
+import net.reduls.igo.Tagger;
+import net.reduls.igo.Morpheme;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.IdentityType;
+import javax.jdo.annotations.PersistenceCapable;
+import javax.jdo.annotations.Persistent;
+import javax.jdo.annotations.PrimaryKey;
+
+@PersistenceCapable(identityType = IdentityType.APPLICATION)
+public class Igo {
+ @PrimaryKey
+ @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
+ private Long id;
+
+ private static Tagger tagger;
+ static {
+ try {
+ tagger = new Tagger("ipadic/"); // XXX: 辞書のパスはハードこーG品具ハードコーディング
+ } catch (Exception e) {}
+ }
+
+ public static List wakati(String text) {
+ return tagger.wakati(text);
+ }
+
+ public static List parse(String text) {
+ return tagger.parse(text);
+ }
+}
+
\ No newline at end of file
diff --git a/gae-app/igo-morp/src/ParseJSONPServlet.java b/gae-app/igo-morp/src/ParseJSONPServlet.java
new file mode 100644
index 0000000..81ba76b
--- /dev/null
+++ b/gae-app/igo-morp/src/ParseJSONPServlet.java
@@ -0,0 +1,52 @@
+import java.io.IOException;
+import javax.servlet.http.*;
+import net.reduls.igo.Morpheme;
+
+public class ParseJSONPServlet extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String text = req.getParameter("text");
+ String callback = req.getParameter("callback");
+
+ if(text==null)
+ text = "";
+
+ if(callback==null)
+ callback="callback";
+
+ resp.setContentType("Content-type: text/javascript; charset=UTF-8");
+
+ boolean first=true;
+ resp.getWriter().print(callback+"([");
+ for(Morpheme m : Igo.parse(text)) {
+ if(first==false)
+ resp.getWriter().print(",");
+ first=false;
+ resp.getWriter().print("[\""+encode(m.surface)+"\",\""+encode(m.feature)+"\"]");
+ }
+ resp.getWriter().println("]);");
+ }
+
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ doGet(req,resp);
+ }
+
+ private String encode(String src) {
+ StringBuilder sb = new StringBuilder(src.length());
+ for(int i=0; i < src.length(); i++) {
+ char c = src.charAt(i);
+ if(c < 0x80)
+ sb.append(c);
+ else
+ appendHex(sb, c);
+ }
+ return sb.toString();
+ }
+
+ private void appendHex(StringBuilder sb, char c) {
+ final String h = "0123456789ABCDEF";
+
+ sb.append("\\u");
+ for(int i=3; i >= 0; i--)
+ sb.append(h.charAt((c>>(4*i))&0xF));
+ }
+}
diff --git a/gae-app/igo-morp/src/ParseServlet.java b/gae-app/igo-morp/src/ParseServlet.java
new file mode 100644
index 0000000..e1d22b3
--- /dev/null
+++ b/gae-app/igo-morp/src/ParseServlet.java
@@ -0,0 +1,20 @@
+import java.io.IOException;
+import javax.servlet.http.*;
+import net.reduls.igo.Morpheme;
+
+public class ParseServlet extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String text = req.getParameter("text");
+ if(text==null)
+ text = "";
+
+ resp.setContentType("text/plain; charset=UTF-8");
+ for(Morpheme m : Igo.parse(text))
+ resp.getWriter().println(m.surface+"\t"+m.feature);
+ resp.getWriter().println("EOS");
+ }
+
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ doGet(req,resp);
+ }
+}
diff --git a/gae-app/igo-morp/src/WakatiJSONPServlet.java b/gae-app/igo-morp/src/WakatiJSONPServlet.java
new file mode 100644
index 0000000..c128ebc
--- /dev/null
+++ b/gae-app/igo-morp/src/WakatiJSONPServlet.java
@@ -0,0 +1,49 @@
+import java.io.IOException;
+import javax.servlet.http.*;
+
+public class WakatiJSONPServlet extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String text = req.getParameter("text");
+ String callback = req.getParameter("callback");
+ if(text==null)
+ text = "";
+
+ if(callback==null)
+ callback="callback";
+
+ boolean first=true;
+ resp.setContentType("Content-type: text/javascript; charset=UTF-8");
+ resp.getWriter().print(callback+"([");
+ for(String w : Igo.wakati(text)) {
+ if(first==false)
+ resp.getWriter().print(",");
+ first=false;
+ resp.getWriter().print("\""+encode(w)+"\"");
+ }
+ resp.getWriter().println("]);");
+ }
+
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ doGet(req,resp);
+ }
+
+ private String encode(String src) {
+ StringBuilder sb = new StringBuilder(src.length());
+ for(int i=0; i < src.length(); i++) {
+ char c = src.charAt(i);
+ if(c < 0x80)
+ sb.append(c);
+ else
+ appendHex(sb, c);
+ }
+ return sb.toString();
+ }
+
+ private void appendHex(StringBuilder sb, char c) {
+ final String h = "0123456789ABCDEF";
+
+ sb.append("\\u");
+ for(int i=3; i >= 0; i--)
+ sb.append(h.charAt((c>>(4*i))&0xF));
+ }
+}
diff --git a/gae-app/igo-morp/src/WakatiServlet.java b/gae-app/igo-morp/src/WakatiServlet.java
new file mode 100644
index 0000000..3b02083
--- /dev/null
+++ b/gae-app/igo-morp/src/WakatiServlet.java
@@ -0,0 +1,24 @@
+import java.io.IOException;
+import javax.servlet.http.*;
+
+public class WakatiServlet extends HttpServlet {
+ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ String text = req.getParameter("text");
+ if(text==null)
+ text = "";
+
+ boolean first = true;
+ resp.setContentType("text/plain; charset=UTF-8");
+ for(String s : Igo.wakati(text)) {
+ if(!first)
+ resp.getWriter().print(" ");
+ first = false;
+ resp.getWriter().print(s);
+ }
+ resp.getWriter().println("");
+ }
+
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ doGet(req,resp);
+ }
+}
diff --git a/gae-app/igo-morp/war/WEB-INF/appengine-web.xml b/gae-app/igo-morp/war/WEB-INF/appengine-web.xml
new file mode 100644
index 0000000..7f6516c
--- /dev/null
+++ b/gae-app/igo-morp/war/WEB-INF/appengine-web.xml
@@ -0,0 +1,9 @@
+
+
+ igo-morp
+ 1
+
+
+
+
+
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar
new file mode 100644
index 0000000..ac8f0b5
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-1.0-sdk-1.3.7.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar
new file mode 100644
index 0000000..fe72b05
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-api-labs-1.3.7.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar b/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar
new file mode 100644
index 0000000..688256a
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/appengine-jsr107cache-1.3.7.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar
new file mode 100644
index 0000000..738246a
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-appengine-1.0.7.final.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar
new file mode 100644
index 0000000..c450ab9
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-core-1.1.5.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar
new file mode 100644
index 0000000..c326e0b
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/datanucleus-jpa-1.1.5.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar
new file mode 100644
index 0000000..12d4ab0
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jpa_3.0_spec-1.1.1.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar
new file mode 100644
index 0000000..ee9963d
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/geronimo-jta_1.1_spec-1.1.1.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar b/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar
new file mode 100644
index 0000000..dc75d08
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/igo-0.4.2-gae.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar b/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar
new file mode 100644
index 0000000..2547a0b
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/jdo2-api-2.3-eb.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar b/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar
new file mode 100644
index 0000000..a94aa31
Binary files /dev/null and b/gae-app/igo-morp/war/WEB-INF/lib/jsr107cache-1.1.jar differ
diff --git a/gae-app/igo-morp/war/WEB-INF/logging.properties b/gae-app/igo-morp/war/WEB-INF/logging.properties
new file mode 100644
index 0000000..4a78b7f
--- /dev/null
+++ b/gae-app/igo-morp/war/WEB-INF/logging.properties
@@ -0,0 +1,28 @@
+# A default java.util.logging configuration.
+# (All App Engine logging is through java.util.logging by default).
+#
+# To use this configuration, copy it into your application's WEB-INF
+# folder and add the following to your appengine-web.xml:
+#
+#
+#
+#
+#
+
+# Set the default logging level for all loggers to WARNING
+.level = WARNING
+
+# Set the default logging level for ORM, specifically, to WARNING
+DataNucleus.JDO.level=WARNING
+DataNucleus.Persistence.level=WARNING
+DataNucleus.Cache.level=WARNING
+DataNucleus.MetaData.level=WARNING
+DataNucleus.General.level=WARNING
+DataNucleus.Utility.level=WARNING
+DataNucleus.Transaction.level=WARNING
+DataNucleus.Datastore.level=WARNING
+DataNucleus.ClassLoading.level=WARNING
+DataNucleus.Plugin.level=WARNING
+DataNucleus.ValueGeneration.level=WARNING
+DataNucleus.Enhancer.level=WARNING
+DataNucleus.SchemaTool.level=WARNING
diff --git a/gae-app/igo-morp/war/WEB-INF/web.xml b/gae-app/igo-morp/war/WEB-INF/web.xml
new file mode 100644
index 0000000..57cf51c
--- /dev/null
+++ b/gae-app/igo-morp/war/WEB-INF/web.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+ wakati
+ WakatiServlet
+
+
+
+ wakati
+ /wakati
+
+
+
+ parse
+ ParseServlet
+
+
+
+ parse
+ /parse
+
+
+
+ wakati_jsonp
+ WakatiJSONPServlet
+
+
+
+ wakati_jsonp
+ /wakati_jsonp
+
+
+
+ parse_jsonp
+ ParseJSONPServlet
+
+
+
+ parse_jsonp
+ /parse_jsonp
+
+
+
+ igo.jsp
+
+
diff --git a/gae-app/igo-morp/war/igo.js b/gae-app/igo-morp/war/igo.js
new file mode 100644
index 0000000..38fa10f
--- /dev/null
+++ b/gae-app/igo-morp/war/igo.js
@@ -0,0 +1,18 @@
+function igo_common(method, text, callback_name) {
+ var enc_text = encodeURIComponent(text);
+ var query = "text="+enc_text+"&callback="+callback_name;
+ var url = "http://igo-morp.appspot.com/"+method+"_jsonp?"+query;
+
+ var elem = document.createElement('div');
+ elem.innerHTML = "
+
+
+
+
+ 形態素解析サンプル
+
+
+
+
+
+
+
+
+
+