Diffs
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/sb_dec.yml
@@ -0,0 +1,256 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+dec:
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "●"
+ "": "●"
+ "": "●"
+ "": "●"
+ "": "○"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "⇔"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "Y!"
+ "": "Y!"
+ "": ""
+ "": "D"
+ "": "D"
+ "": "¥"
+ "": "FREE"
+ "": "ID"
+ "": ""
+ "": ""
+ "": "CL"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "Q"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "♪"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "!?"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "~"
+ "": "~"
+ "": ""
+ "": "S!"
+ "": "S!"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "禁"
+ "": ""
+ "": "合"
+ "": ""
+ "": "⇔"
+ "": "↑↓"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/au_dec.yml
@@ -0,0 +1,256 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+dec:
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "○"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "D"
+ "": "D"
+ "": "¥"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": "合"
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+ "": ""
+
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/dc_dec.yml
@@ -0,0 +1,3 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+dec: []
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/sb_enc.yml
@@ -0,0 +1,231 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+enc:
+ "ee818a": ""
+ "ee8189": ""
+ "ee818b": ""
+ "ee8188": ""
+ "ee84bd": ""
+ "ee9183": ""
+ "ee818b": ""
+ "ee90bc": ""
+ "ee88bf": ""
+ "ee8980": ""
+ "ee8981": ""
+ "ee8982": ""
+ "ee8983": ""
+ "ee8984": ""
+ "ee8985": ""
+ "ee8986": ""
+ "ee8987": ""
+ "ee8988": ""
+ "ee8989": ""
+ "ee898a": ""
+ "ee8899": ""
+ "ee8096": ""
+ "ee8094": ""
+ "ee8095": ""
+ "ee8098": ""
+ "ee8093": ""
+ "ee90aa": ""
+ "ee84b2": ""
+ "ee8089": ""
+ "ee809e": ""
+ "ee90b4": ""
+ "ee809f": ""
+ "ee809b": ""
+ "ee90ae": ""
+ "ee809e": ""
+ "ee8882": ""
+ "ee809d": ""
+ "ee80b6": ""
+ "ee80b8": ""
+ "ee8593": ""
+ "ee8595": ""
+ "ee858d": ""
+ "ee8594": ""
+ "ee8598": ""
+ "ee8596": ""
+ "ee80ba": ""
+ "ee858f": ""
+ "ee858e": ""
+ "ee90a8": ""
+ "ee8183": ""
+ "ee8185": ""
+ "ee8184": ""
+ "ee8187": ""
+ "ee84a0": ""
+ "ee84be": ""
+ "ee8c93": ""
+ "ee80bc": ""
+ "ee80bd": ""
+ "ee88b6": ""
+ "ee84a4": ""
+ "ee8c8a": ""
+ "ee9482": ""
+ "ee9483": ""
+ "ee80b7": ""
+ "ee84a5": ""
+ "ee8c8e": ""
+ "ee8888": ""
+ "ee8088": ""
+ "ee8ca3": ""
+ "ee8588": ""
+ "ee8c94": ""
+ "ee8492": ""
+ "ee8d8b": ""
+ "ee8089": ""
+ "ee808a": ""
+ "ee8c81": ""
+ "ee808c": ""
+ "ee84ab": ""
+ "ee84a6": ""
+ "ee888c": ""
+ "ee888e": ""
+ "ee888d": ""
+ "ee888f": ""
+ "ee9099": ""
+ "ee909b": ""
+ "ee8090": ""
+ "ee8091": ""
+ "ee8092": ""
+ "ee88b8": ""
+ "ee88b7": ""
+ "ee94b6": ""
+ "ee8087": ""
+ "ee8494": ""
+ "ee888a": ""
+ "ee8192": ""
+ "ee818f": ""
+ "ee809c": ""
+ "ee80b3": ""
+ "ee88b9": ""
+ "ee8ca4": ""
+ "ee8c8b": ""
+ "ee8c81": ""
+ "ee8081": ""
+ "ee849b": ""
+ "ee8586": ""
+ "ee88b4": ""
+ "ee88b5": ""
+ "ee80a5": ""
+ "ee8484": ""
+ "ee8483": ""
+ "ee808b": ""
+ "ee8483": ""
+ "ee80bf": ""
+ "ee88bd": ""
+ "ee8494": ""
+ "ee8892": ""
+ "ee84b2": ""
+ "ee8891": ""
+ "ee8890": ""
+ "ee889c": ""
+ "ee889d": ""
+ "ee889e": ""
+ "ee889f": ""
+ "ee88a0": ""
+ "ee88a1": ""
+ "ee88a2": ""
+ "ee88a3": ""
+ "ee88a4": ""
+ "ee88a5": ""
+ "ee80a2": ""
+ "ee8ca7": ""
+ "ee80a3": ""
+ "ee8ca7": ""
+ "ee9095": ""
+ "ee8199": ""
+ "ee8198": ""
+ "ee9087": ""
+ "ee9086": ""
+ "ee88b6": ""
+ "ee84a3": ""
+ "ee8c86": ""
+ "ee8083": ""
+ "ee8cae": ""
+ "ee848f": ""
+ "ee8cb4": ""
+ "ee808d": ""
+ "ee8c91": ""
+ "ee8ca6": ""
+ "ee88b8": ""
+ "ee84bc": ""
+ "ee80a1": ""
+ "ee8cb7": ""
+ "ee8cb5": ""
+ "ee8cb1": ""
+ "ee8cb1": ""
+ "ee8cb0": ""
+ "ee8cb2": ""
+ "ee8c99": ""
+ "ee8ca3": ""
+ "ee8c9c": ""
+ "ee8c9b": ""
+ "ee8093": ""
+ "ee8ca5": ""
+ "ee80b6": ""
+ "ee84af": ""
+ "ee808c": ""
+ "ee8ca9": ""
+ "ee8496": ""
+ "ee8c81": ""
+ "ee848e": ""
+ "ee80b4": ""
+ "ee80a9": ""
+ "ee84b6": ""
+ "ee8cb8": ""
+ "ee80a5": ""
+ "ee9083": ""
+ "ee9094": ""
+ "ee9081": ""
+ "ee908f": ""
+ "ee9096": ""
+ "ee908e": ""
+ "ee8486": ""
+ "ee808e": ""
+ "ee9089": ""
+ "ee9085": ""
+ "ee9095": ""
+ "ee9086": ""
+ "ee9082": ""
+ "ee9091": ""
+ "ee9093": ""
+ "ee8cb3": ""
+ "ee8c81": ""
+ "ee898e": ""
+ "ee94b7": ""
+ "ee8495": ""
+ "ee8c95": ""
+ "ee8cb2": ""
+ "ee898f": ""
+ "ee84b7": ""
+ "ee88ab": ""
+ "ee88aa": ""
+ "ee8597": ""
+ "ee90be": ""
+ "ee84ac": ""
+ "ee8490": ""
+ "ee8ca7": ""
+ "ee8c84": ""
+ "ee8d8a": ""
+ "ee8d85": ""
+ "ee8490": ""
+ "ee8498": ""
+ "ee80b0": ""
+ "ee8d82": ""
+ "ee8186": ""
+ "ee8c8b": ""
+ "ee8d80": ""
+ "ee8cb9": ""
+ "ee9181": ""
+ "ee94a3": ""
+ "ee8195": ""
+ "ee8099": ""
+ "ee8196": ""
+ "ee9084": ""
+ "ee809a": ""
+ "ee848b": ""
+ "ee8184": ""
+ "ee908b": ""
+
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/au_enc.yml
@@ -0,0 +1,251 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+enc:
+ "ee9288": ""
+ "ee928d": ""
+ "ee928c": ""
+ "ee9285": ""
+ "ee9287": ""
+ "ee91a9": ""
+ "ee9698": ""
+ "ee8aaf": ""
+ "ee928f": ""
+ "ee9290": ""
+ "ee9291": ""
+ "ee9292": ""
+ "ee9293": ""
+ "ee9294": ""
+ "ee9295": ""
+ "ee9296": ""
+ "ee9297": ""
+ "ee9298": ""
+ "ee9299": ""
+ "ee929a": ""
+ "ee91ab": ""
+ "ee92ba": ""
+ "ee9699": ""
+ "ee92b7": ""
+ "ee92b6": ""
+ "ee89b3": ""
+ "ee969a": ""
+ "ee92b9": ""
+ "ee969b": ""
+ "ee92b5": ""
+ "ee96bc": ""
+ "ee92b0": ""
+ "ee92b1": ""
+ "ee92b1": ""
+ "ee92af": ""
+ "ee8989": ""
+ "ee92b3": ""
+ "ee92ab": ""
+ "ee92ad": ""
+ "ee979e": ""
+ "ee979f": ""
+ "ee92aa": ""
+ "ee92a3": ""
+ "ee8988": ""
+ "ee92a4": ""
+ "ee95b1": ""
+ "ee92a6": ""
+ "ee91aa": ""
+ "ee92a5": ""
+ "ee92ac": ""
+ "ee9697": ""
+ "ee9382": ""
+ "ee9383": ""
+ "ee9396": ""
+ "ee949a": ""
+ "ee9496": ""
+ "ee9483": ""
+ "ee9497": ""
+ "ee9595": ""
+ "ee8aa9": ""
+ "ee9488": ""
+ "ee969c": ""
+ "ee8abc": ""
+ "ee969e": ""
+ "ee929e": ""
+ "ee91bd": ""
+ "ee91be": ""
+ "ee9495": ""
+ "ee929c": ""
+ "ee929f": ""
+ "ee969f": ""
+ "ee938f": ""
+ "ee96a0": ""
+ "ee9696": ""
+ "ee9688": ""
+ "ee8999": ""
+ "ee9482": ""
+ "ee9386": ""
+ "ee948c": ""
+ "ee89ac": ""
+ "ee96a1": ""
+ "ee96a2": ""
+ "ee96a3": ""
+ "ee96a4": ""
+ "ee96a5": ""
+ "ee8cb7": ""
+ "ee96a6": ""
+ "ee96a7": ""
+ "ee958d": ""
+ "ee958c": ""
+ "ee8b9e": ""
+ "ee8b9f": ""
+ "ee93be": ""
+ "ee91bf": ""
+ "ee96a8": ""
+ "ee96a9": ""
+ "ee96aa": ""
+ "ee9286": ""
+ "ee93a1": ""
+ "ee939b": ""
+ "ee92b4": ""
+ "ee9389": ""
+ "ee9596": ""
+ "ee92be": ""
+ "ee929c": ""
+ "eeac83": ""
+ "ee93bc": ""
+ "ee92ab": ""
+ "ee8ab8": ""
+ "ee9592": ""
+ "eeadba": ""
+ "ee9593": ""
+ "ee9694": ""
+ "ee9782": ""
+ "ee8c96": ""
+ "ee94a0": ""
+ "ee95b7": ""
+ "ee95b7": ""
+ "ee94a1": ""
+ "ee95b8": ""
+ "ee898f": ""
+ "ee9499": ""
+ "ee959d": ""
+ "ee96ab": ""
+ "ee9498": ""
+ "ee96b5": ""
+ "ee8ba0": ""
+ "ee95b8": ""
+ "ee8cb8": ""
+ "ee94ac": ""
+ "ee94a2": ""
+ "ee94a3": ""
+ "ee94a4": ""
+ "ee94a5": ""
+ "ee94a6": ""
+ "ee94a7": ""
+ "ee94a8": ""
+ "ee94a9": ""
+ "ee94aa": ""
+ "ee96ac": ""
+ "ee9695": ""
+ "ee8ca9": ""
+ "ee91b7": ""
+ "ee91b8": ""
+ "ee91b1": ""
+ "ee91b2": ""
+ "ee8a8a": ""
+ "eeab83": ""
+ "ee96ae": ""
+ "ee8ba1": ""
+ "ee96be": ""
+ "ee92bc": ""
+ "ee899c": ""
+ "ee93ab": ""
+ "ee89b2": ""
+ "ee91b6": ""
+ "ee93a5": ""
+ "ee93b3": ""
+ "ee91ba": ""
+ "ee9485": ""
+ "ee8ba2": ""
+ "ee91b5": ""
+ "ee9282": ""
+ "ee8ba3": ""
+ "ee8ba4": ""
+ "ee96b0": ""
+ "ee96b1": ""
+ "ee93a6": ""
+ "ee93b4": ""
+ "ee968c": ""
+ "ee8ba5": ""
+ "ee8a9f": ""
+ "ee96b2": ""
+ "ee96b2": ""
+ "ee96b6": ""
+ "ee9484": ""
+ "ee9489": ""
+ "ee8cab": ""
+ "ee92b8": ""
+ "ee9492": ""
+ "ee92ab": ""
+ "ee9387": ""
+ "ee96b8": ""
+ "ee8cac": ""
+ "ee9687": ""
+ "ee92a1": ""
+ "ee9789": ""
+ "ee9494": ""
+ "ee91bc": ""
+ "ee92ae": ""
+ "ee89b5": ""
+ "ee95ba": ""
+ "ee8a87": ""
+ "eeab85": ""
+ "ee96b1": ""
+ "ee9786": ""
+ "ee8c91": ""
+ "ee8a90": ""
+ "ee9784": ""
+ "ee93b9": ""
+ "ee93a7": ""
+ "ee9783": ""
+ "ee8a8c": ""
+ "ee8a89": ""
+ "ee8a86": ""
+ "ee91b3": ""
+ "ee8c9d": ""
+ "ee8a9e": ""
+ "ee92a0": ""
+ "ee9598": ""
+ "ee958e": ""
+ "ee91ab": ""
+ "ee93b1": ""
+ "ee8cad": ""
+ "ee9599": ""
+ "ee9281": ""
+ "ee9284": ""
+ "ee8991": ""
+ "ee8990": ""
+ "ee8cae": ""
+ "ee8caf": ""
+ "ee8987": ""
+ "ee8cb0": ""
+ "ee96bd": ""
+ "ee9493": ""
+ "ee9392": ""
+ "ee93aa": ""
+ "ee8ba9": ""
+ "ee8a80": ""
+ "ee8cb1": ""
+ "ee938e": ""
+ "ee938a": ""
+ "ee9395": ""
+ "ee9390": ""
+ "ee899e": ""
+ "ee96b4": ""
+ "ee89b6": ""
+ "ee8cb2": ""
+ "ee93a0": ""
+ "ee939c": ""
+ "ee929a": ""
+ "ee8a94": ""
+ "ee8cb4": ""
+ "ee9398": ""
+ "ee939e": ""
+ "ee9381": ""
+ "ee9785": ""
+
sfJpMobilePlugin/tags/0.0.1-beta/config/jpmobile/emoji/dc_enc.yml
@@ -0,0 +1,240 @@
+# vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2:
+# $Id$
+enc:
+ "ee98be": ""
+ "ee98bf": ""
+ "ee9980": ""
+ "ee9981": ""
+ "ee9982": ""
+ "ee9983": ""
+ "ee9984": ""
+ "ee9985": ""
+ "ee9986": ""
+ "ee9987": ""
+ "ee9988": ""
+ "ee9989": ""
+ "ee998a": ""
+ "ee998b": ""
+ "ee998c": ""
+ "ee998d": ""
+ "ee998e": ""
+ "ee998f": ""
+ "ee9990": ""
+ "ee9993": ""
+ "ee9994": ""
+ "ee9995": ""
+ "ee9996": ""
+ "ee9997": ""
+ "ee9998": ""
+ "ee9999": ""
+ "ee999a": ""
+ "ee999b": ""
+ "ee999c": ""
+ "ee999d": ""
+ "ee999f": ""
+ "ee99a0": ""
+ "ee99a1": ""
+ "ee99a2": ""
+ "ee99a4": ""
+ "ee99a5": ""
+ "ee99a6": ""
+ "ee99a7": ""
+ "ee99a8": ""
+ "ee99a9": ""
+ "ee99aa": ""
+ "ee99ab": ""
+ "ee99ac": ""
+ "ee99ad": ""
+ "ee99ae": ""
+ "ee99af": ""
+ "ee99b0": ""
+ "ee99b1": ""
+ "ee99b2": ""
+ "ee99b3": ""
+ "ee99b4": ""
+ "ee99b5": ""
+ "ee99b6": ""
+ "ee99b7": ""
+ "ee99b8": ""
+ "ee99b9": ""
+ "ee99ba": ""
+ "ee99bb": ""
+ "ee99bc": ""
+ "ee99bd": ""
+ "ee99be": ""
+ "ee99bf": ""
+ "ee9a80": ""
+ "ee9a81": ""
+ "ee9a83": ""
+ "ee9a84": ""
+ "ee9a85": ""
+ "ee9a86": ""
+ "ee9a87": ""
+ "ee9a88": ""
+ "ee9a89": ""
+ "ee9a8a": ""
+ "ee9a8b": ""
+ "ee9a8c": ""
+ "ee9a8d": ""
+ "ee9a8e": ""
+ "ee9a8f": ""
+ "ee9a90": ""
+ "ee9a91": ""
+ "ee9a92": ""
+ "ee9a93": ""
+ "ee9a94": ""
+ "ee9a95": ""
+ "ee9a96": ""
+ "ee9a97": ""
+ "ee9a98": ""
+ "ee9a99": ""
+ "ee9a9a": ""
+ "ee9a9b": ""
+ "ee9a9c": ""
+ "ee9a9d": ""
+ "ee9a9e": ""
+ "ee9a9f": ""
+ "ee9aa0": ""
+ "ee9aa1": ""
+ "ee9aa2": ""
+ "ee9aa3": ""
+ "ee9aa4": ""
+ "ee9aa5": ""
+ "ee9aac": ""
+ "ee9aad": ""
+ "ee9ab1": ""
+ "ee9ab3": ""
+ "ee9ab7": ""
+ "ee9ab9": ""
+ "ee9aba": ""
+ "ee9b8e": ""
+ "ee9b8f": ""
+ "ee9b90": ""
+ "ee9b92": ""
+ "ee9b93": ""
+ "ee9b95": ""
+ "ee9b96": ""
+ "ee9b98": ""
+ "ee9b99": ""
+ "ee9b9a": ""
+ "ee9b9b": ""
+ "ee9b9c": ""
+ "ee9b9d": ""
+ "ee9b9e": ""
+ "ee9b9f": ""
+ "ee9ba0": ""
+ "ee9ba1": ""
+ "ee9ba2": ""
+ "ee9ba3": ""
+ "ee9ba4": ""
+ "ee9ba5": ""
+ "ee9ba6": ""
+ "ee9ba7": ""
+ "ee9ba8": ""
+ "ee9ba9": ""
+ "ee9baa": ""
+ "ee9bab": ""
+ "ee9bac": ""
+ "ee9bad": ""
+ "ee9bae": ""
+ "ee9baf": ""
+ "ee9bb0": ""
+ "ee9bb1": ""
+ "ee9bb3": ""
+ "ee9bb4": ""
+ "ee9bb5": ""
+ "ee9bb6": ""
+ "ee9bb7": ""
+ "ee9bb8": ""
+ "ee9bb9": ""
+ "ee9bba": ""
+ "ee9bbb": ""
+ "ee9bbc": ""
+ "ee9bbd": ""
+ "ee9bbe": ""
+ "ee9bbf": ""
+ "ee9c80": ""
+ "ee9c81": ""
+ "ee9c82": ""
+ "ee9c83": ""
+ "ee9c84": ""
+ "ee9c85": ""
+ "ee9c87": ""
+ "ee9c88": ""
+ "ee9c8a": ""
+ "ee9c8b": ""
+ "ee9c8d": ""
+ "ee9c8e": ""
+ "ee9c8f": ""
+ "ee9c90": ""
+ "ee9c91": ""
+ "ee9c92": ""
+ "ee9c93": ""
+ "ee9c94": ""
+ "ee9c95": ""
+ "ee9c96": ""
+ "ee9c97": ""
+ "ee9c98": ""
+ "ee9c99": ""
+ "ee9c9a": ""
+ "ee9c9b": ""
+ "ee9c9c": ""
+ "ee9c9d": ""
+ "ee9c9e": ""
+ "ee9c9f": ""
+ "ee9ca0": ""
+ "ee9ca2": ""
+ "ee9ca3": ""
+ "ee9ca4": ""
+ "ee9ca5": ""
+ "ee9ca6": ""
+ "ee9ca7": ""
+ "ee9ca8": ""
+ "ee9ca9": ""
+ "ee9caa": ""
+ "ee9cab": ""
+ "ee9cac": ""
+ "ee9cad": ""
+ "ee9cae": ""
+ "ee9caf": ""
+ "ee9cb0": ""
+ "ee9cb1": ""
+ "ee9cb2": ""
+ "ee9cb3": ""
+ "ee9cb4": ""
+ "ee9cb5": ""
+ "ee9cb6": ""
+ "ee9cb7": ""
+ "ee9cb8": ""
+ "ee9cb9": ""
+ "ee9cba": ""
+ "ee9cbb": ""
+ "ee9cbc": ""
+ "ee9cbd": ""
+ "ee9cbe": ""
+ "ee9cbf": ""
+ "ee9d80": ""
+ "ee9d81": ""
+ "ee9d82": ""
+ "ee9d83": ""
+ "ee9d84": ""
+ "ee9d85": ""
+ "ee9d86": ""
+ "ee9d87": ""
+ "ee9d88": ""
+ "ee9d89": ""
+ "ee9d8a": ""
+ "ee9d8b": ""
+ "ee9d8c": ""
+ "ee9d8d": ""
+ "ee9d8e": ""
+ "ee9d8f": ""
+ "ee9d90": ""
+ "ee9d91": ""
+ "ee9d92": ""
+ "ee9d93": ""
+ "ee9d94": ""
+ "ee9d95": ""
+ "ee9d96": ""
+ "ee9d97": ""
+
sfJpMobilePlugin/tags/0.0.1-beta/config/config_handlers.yml
@@ -0,0 +1,2 @@
+config/jpmobile/emoji/*.yml:
+ class: sfJpMobileEmojiConfigHandler
sfJpMobilePlugin/tags/0.0.1-beta/config/sfJpMobilePluginConfiguration.class.php
@@ -0,0 +1,19 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * sfJpMobilePlugin configuration.
+ *
+ * @package sfJpMobilePlugin
+ * @subpackage config
+ * @version $Id$
+ */
+class sfJpMobilePluginConfiguration extends sfPluginConfiguration
+{
+ /**
+ * @see sfPluginConfiguration
+ */
+ public function initialize()
+ {
+ sfJpMobile::initialize();
+ }
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/device/sfJpMobileDeviceKddi.class.php
@@ -0,0 +1,28 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * KDDI用端末オブジェクト
+ *
+ * @package sfJpMobilePlugin
+ * @subpackage device
+ * @version $Id: 3ec9d2ff32ea2e10093131dca1f29b940f2ef230 $
+ */
+class sfJpMobileDeviceKddi extends sfJpMobileDevice
+{
+ protected $_emojiClass = 'sfJpMobileEmojiKddi';
+ protected function _initialize()
+ {
+ $this->_uid = getenv('HTTP_X_UP_SUBNO');
+ }
+ public function parse()
+ {
+ if ($ua = getenv('HTTP_USER_AGENT')) {
+ if (preg_match('/^.+?-([^\s]+)/', $ua, $matches)) {
+ $this->_deviceId = $matches[1];
+ }
+ return null;
+ }
+ throw new sfMobileNotDetermineException('May be access from PC browser');
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/device/sfJpMobileDevice.class.php
@@ -0,0 +1,86 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * sfDevice abstract class
+ * キャリア毎の実装をする際には、このクラスを継承する
+ *
+ * @package sfJpMobile
+ * @subpackage device
+ * @version $Id: 54197c2f015b7e40ff9ef92466479819b5ef72af $
+ */
+abstract class sfJpMobileDevice
+{
+ /**
+ * @var string uid
+ */
+ protected $_uid;
+ /**
+ * @var string model name
+ */
+ protected $_deviceId;
+ /**
+ * @var string emoji class name
+ */
+ protected $_emojiClass = null;
+ /**
+ * @var sfJpMobileEmoji
+ */
+ protected static $_emoji = null;
+ /**
+ * constructor
+ */
+ public function __construct()
+ {
+ $this->parse();
+ $this->_initialize();
+ }
+ /**
+ * initialize
+ * @return null
+ */
+ protected function _initialize(){}
+ /**
+ * parse UserAgent
+ * @throws sfMobilenotDetermineException
+ * @return null
+ */
+ public abstract function parse();
+ /**
+ * set emoji object
+ * @param string $class
+ * @return null
+ */
+ public function setEmojiClass($class)
+ {
+ $this->_emojiClass = $class;
+ }
+ /**
+ * get UID
+ * @return string
+ */
+ public function getUid()
+ {
+ return $this->_uid;
+ }
+ /**
+ * get device id
+ * @return string
+ */
+ public function getDeviceId()
+ {
+ return $this->_deviceId;
+ }
+
+ /**
+ * get emoji obuject
+ * @return sfJpMobileEmoji
+ */
+ public function getEmoji()
+ {
+ if (!(self::$_emoji instanceof $this->_emojiClass)) {
+ self::$_emoji = new $this->_emojiClass();
+ }
+ return self::$_emoji;
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/device/sfJpMobileDeviceDocomo.class.php
@@ -0,0 +1,34 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * DoCoMo用端末オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage device
+ * @version $Id$
+ */
+class sfJpMobileDeviceDocomo extends sfJpMobileDevice
+{
+ protected $_emojiClass = 'sfJpMobileEmojiDocomo';
+ protected function _initialize()
+ {
+ if ($uid = getenv('HTTP_X_DCMGUID')) {
+ $this->_uid = $uid;
+ } else if (array_key_exists('uid', $_GET) && $_GET['uid'] != 'NULLGWDOCOMO') {
+ $this->_uid = $_GET['uid'];
+ } else if (array_key_exists('uid', $_POST) && $_POST['uid'] != 'NULLGWDOCOMO') {
+ $this->_uid = $_POST['uid'];
+ }
+ }
+ public function parse()
+ {
+ if ($ua = getenv('HTTP_USER_AGENT')) {
+ if (preg_match('#^DoCoMo/[12]\.0[/\s]([^/(]+)#', $ua, $matches)) {
+ $this->_deviceId = $matches[1];
+ return null;
+ }
+ }
+ throw new sfMobileNotDetermineException('May be access from PC browser');
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/device/sfJpMobileDevicePc.class.php
@@ -0,0 +1,22 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * PC用端末オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage device
+ * @version $Id$
+ */
+class sfJpMobileDevicePc extends sfJpMobileDevice
+{
+ protected $_emojiClass = 'sfJpMobileEmojiPc';
+ protected function _initialize()
+ {
+ $uid = getenv('REMOTE_ADDR');
+ }
+ public function parse()
+ {
+ $this->_deviceId = "PC";
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/device/sfJpMobileDeviceSoftbank.class.php
@@ -0,0 +1,32 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * SoftBank用端末オブジェクト
+ *
+ * @package sfJpMobilePlugin
+ * @subpackage device
+ * @version $Id: e5d7ce4a97e9c6bbc88e82dcf199c81f3bec26cb $
+ */
+class sfJpMobileDeviceSoftbank extends sfJpMobileDevice
+{
+ protected $_emojiClass = 'sfJpMobileEmojiSoftbank';
+ protected function _initialize()
+ {
+ if ($this->_uid = getenv('HTTP_X_JPHONE_UID')) {
+ $this->_uid = substr($this->_uid, 2);
+ };
+ }
+ public function parse()
+ {
+ if ($ua = getenv('HTTP_USER_AGENT')) {
+ if (preg_match('!^MOT-([^/]+)!', $ua, $matches)) {
+ $this->_deviceId = $matches[1];
+ } else if (preg_match('!^.+?/.+?/([^/]+)!', $ua, $matches)) {
+ $this->_deviceId = $matches[1];
+ }
+ return null;
+ }
+ throw new sfMobileNotDetermineException('May be access from PC browser');
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/helper/JpMobileUrlHelper.php
@@ -0,0 +1,35 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 携帯ページ用ヘルパ
+ *
+ * @package sfJpMobile
+ * @subpackage helper
+ * @version $Id$
+ */
+
+/**
+ * generate URI
+ * @param string|array $param
+ * @param bool $absolute
+ * @return string
+ */
+function jpmobile_url_for($param, $absolute = false)
+{
+ $url = url_for($param, $absolute);
+ if (sfJpMobile::isDocomo()) {
+ $url .= "?guid=ON";
+ }
+ return $url;
+}
+/**
+ * a tag
+ * @param string $name name of the link, i.e. string to appear between the <a> tags
+ * @param string $internal_uri 'module/action' or '@rule' of the action
+ * @param array $options additional HTML compliant <a> tag parameters
+ */
+function jpmobile_link_to($name, $internal_uri = '', $options = array())
+{
+ $url = jpmobile_url_for($internal_uri);
+ return link_to($name, $url, $options);
+}
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/lib/controller/sfJpMobileController.class.php
@@ -0,0 +1,39 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 携帯ページ用コントローラ
+ *
+ * @package sfJpMobilePlugin
+ * @subpackage controller
+ * @version $Id$
+ */
+class sfJpMobileController extends sfFrontWebController
+{
+ public function getView($moduleName, $actionName, $viewName)
+ {
+ // user view exists?
+ $file = sfConfig::get('sf_app_module_dir') . '/' . $moduleName . '/view/'
+ . $actionName . $viewName . 'View.class.php';
+
+ if (is_readable($file)) {
+ require_once($file);
+
+ $class = $actionName.$viewName.'View';
+
+ // fix for same name classes
+ $moduleClass = $moduleName.'_'.$class;
+
+ if (class_exists($moduleClass, false)) {
+ $class = $moduleClass;
+ }
+ } else {
+ // view class (as configured in module.yml or defined in action)
+ $class = sfConfig::get('app_view_class', 'sfJpMobile').'View';
+ if (!class_exists($class)) {
+ $class = sfConfig::get('mod_'.strtolower($moduleName).'_view_class', 'sfPHP').'View';
+ }
+ }
+
+ return new $class($this->context, $moduleName, $actionName, $viewName);
+ }
+}
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/lib/emoji/sfJpMobileEmojiSoftbank.class.php
@@ -0,0 +1,13 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * SoftBank絵文字オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage emoji
+ * @version $Id: cc34213571e627a190f4758e2ab03b0574131ba0 $
+ */
+class sfJpMobileEmojiSoftbank extends sfJpMobileEmoji
+{
+ protected $_binCodeRegex = '/\xEE[\x80\x81\x84\x85\x88\x89\x8C\x8D\x90\x91\x94][\x80-\xBF]/';
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/emoji/sfJpMobileEmojiKddi.class.php
@@ -0,0 +1,13 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * KDDI絵文字オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage emoji
+ * @version $Id: 2bb0147bc2c5d74e3fa9a042ae2cde838ee9c8f3 $
+ */
+class sfJpMobileEmojiKddi extends sfJpMobileEmoji
+{
+ protected $_binCodeRegex = '/\xEE(?:\x88[\xB4-\xBF]|\x8D[\x80-\x82]|\x91[\xA8-\xBF]|\x97[\x80-\x9F]|[\x89-\x8C\x92-\x96][\x80-\xBF])/';
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/emoji/sfJpMobileEmoji.class.php
@@ -0,0 +1,105 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 基本絵文字クラス
+ *
+ * @package sfJpMobile
+ * @subpackage emoji
+ * @version $Id: c91f5e46986310dd91ad9a92cda78305fa3ebd03 $
+ */
+abstract class sfJpMobileEmoji
+{
+ /**
+ * 変換テーブル
+ * @var array
+ */
+ protected $_decTable;
+ /**
+ * エンコードテーブル
+ * @var array
+ */
+ protected $_encTable;
+ /**
+ * Webコード検出パターン
+ * @var string
+ */
+ protected $_webCodeRegex = '/((?:6|7)[A-F0-9]{2};)/i';
+ /**
+ * バイナリコード検出パターン
+ * @var string
+ */
+ protected $_binCodeRegex;
+
+ /**
+ * constructor
+ */
+ public function __construct()
+ {
+ // 絵文字変換テーブルの読み込み
+ include sfContext::getInstance()->getConfigCache()->checkConfig('config/jpmobile/emoji/' . strtolower(sfJpMobile::getShortCarrierName()) . '_dec.yml');
+ include sfContext::getInstance()->getConfigCache()->checkConfig('config/jpmobile/emoji/' . strtolower(sfJpMobile::getShortCarrierName()) . '_enc.yml');
+ $this->_decTable = sfConfig::get('jpmobile_emoji_dec', array());
+ $this->_encTable = sfConfig::get('jpmobile_emoji_enc', array());
+ $this->initialize();
+ }
+ /**
+ * initialize
+ * @return null
+ */
+ public function initialize(){}
+ /**
+ * 変換
+ * @param string $str 変換対象
+ * @return string
+ */
+ public function convert($str)
+ {
+ foreach ($this->findTextCode($str) as $key) {
+ if (array_key_exists($key, $this->_decTable)) {
+ $str = str_replace($key, $this->_decTable[$key], $str);
+ }
+ }
+ return $str;
+ }
+ /**
+ * DoCoMo用16進数コードへのエンコード
+ * @param string $str 対象
+ * @return string
+ */
+ public function encode($str)
+ {
+ foreach ($this->findBin($str) as $bin) {
+ $hex = bin2hex($bin);
+ $replace = array_key_exists($hex, $this->_encTable) ? $this->_encTable[$hex] : '';
+ $str = str_replace($bin, $replace, $str);
+ }
+ return $str;
+ }
+ /**
+ * DoCoMo絵文字テキストコード検出
+ * @param string $str 検索対象文字列
+ * @return array
+ */
+ public function findTextCode($str)
+ {
+ $result = array();
+ if (preg_match_all($this->_webCodeRegex, $str, $matches)) {
+ $matches = array_unique($matches[0]);
+ }
+ return $result;
+ }
+ /**
+ * バイナリ絵文字検出
+ * @param string $str 検索対象文字列
+ * @return array
+ */
+ public function findBin($str)
+ {
+ $result = array();
+ if (preg_match_all($this->_binCodeRegex, $str, $matches)) {
+ $result = array_unique($matches[0]);
+ }
+ return $result;
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/emoji/sfJpMobileEmojiDocomo.class.php
@@ -0,0 +1,28 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * DoCoMo絵文字オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage emoji
+ * @version $Id: 4abd1936fb25c82d327150c8a509d6aa86fe9bd9 $
+ */
+class sfJpMobileEmojiDocomo extends sfJpMobileEmoji
+{
+ public function initialize()
+ {
+ $this->_binCodeRegex = '/\xEE(?:'
+ . '\x98[\xBE-\xBF]'
+ . '|\x99[\x80-\xBF]'
+ . '|\x9A[\x80-\xBA]'
+ . '|\x9B[\x8E-\xBF]'
+ . '|\x9C[\x80-\xBF]'
+ . '|\x9D[\x80-\x97]'
+ . ')/';
+ }
+ public function convert($str)
+ {
+ return $str;
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/emoji/sfJpMobileEmojiPc.class.php
@@ -0,0 +1,22 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * PC用絵文字オブジェクト
+ *
+ * @package sfJpMobile
+ * @subpackage emoji
+ * @version $Id: 5d337a9f05d194c88d800baa2a5d76448fb0fcd4 $
+ */
+class sfJpMobileEmojiPc extends sfJpMobileEmoji
+{
+ public function convert($str)
+ {
+ return $str;
+ }
+ public function findBin($str)
+ {
+ $result = array();
+ return $result;
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/sfJpMobile.class.php
@@ -0,0 +1,213 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * Net_UserAgent_Mobileでは少々腰が重たいので、Railsのjpmobile風な判別方法で
+ *
+ * @package sfJpMobile
+ * @subpackage lib
+ * @version $Id$
+ */
+class sfJpMobile
+{
+ /**
+ * @var sfDevice
+ */
+ private static $_device = null;
+ /**
+ * @var stdClass
+ */
+ private static $_carrier = null;
+ /**
+ * initialize
+ * @return null
+ */
+ public static function initialize()
+ {
+ self::$_carrier = new stdClass();
+ }
+ /**
+ * ドライバの生成
+ * @return sfJpMobileDevice
+ */
+ public static function getDevice()
+ {
+ try {
+ $term = '';
+ switch (true) {
+ case self::isDocomo():
+ $term = 'Docomo';
+ break;
+ case self::isKddi():
+ $term = 'Kddi';
+ break;
+ case self::isSoftbank():
+ $term = 'Softbank';
+ break;
+ /*
+ case self::isWillcom():
+ $term = 'Willcom';
+ break;
+ */
+ default:
+ $term = 'Pc';
+ break;
+ }
+ return self::_termFactory($term);
+ } catch (sfMobileNotDetermineException $e) {
+ return self::_termFactory('Pc');
+ }
+ }
+
+ /**
+ * Deviceクラスのファクトリメソッド
+ * @param string
+ * @return sfJpMobileDevice
+ */
+ private static function _termFactory($term)
+ {
+ $class = "sfJpMobileDevice{$term}";
+ if (!(self::$_device instanceof sfDevice)) {
+ self::$_device = new $class;
+ }
+ return self::$_device;
+ }
+
+ /**
+ * UserAgentによるパターン検索
+ * @param array|string
+ * @return boolean
+ * @throws sfMobileNotDetermineException
+ */
+ private static function _checkCarrier($patterns)
+ {
+ if (!($ua = getenv('HTTP_USER_AGENT'))) {
+ throw new sfMobileNotDetermineException('May be access from PC Browser.');
+ }
+ if (!is_array($patterns)) {
+ $patterns = array($patterns);
+ }
+ foreach ($patterns as $pattern) {
+ if (preg_match($pattern, $ua)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 携帯かどうか
+ * @return boolean
+ */
+ public static function isMobile()
+ {
+ return self::isDocomo() || self::isKddi() || self::isSoftbank() || self::isWillcom();
+ }
+
+ /**
+ * DoCoMoかどうか
+ * @return boolean
+ */
+ public static function isDocomo()
+ {
+ if (!isset(self::$_carrier->docomo)) {
+ self::$_carrier->docomo = self::_checkCarrier('/^DoCoMo/');
+ }
+ return self::$_carrier->docomo;
+ }
+
+ /**
+ * KDDIかどうか
+ * @return boolean
+ */
+ public static function isKddi()
+ {
+ if (!isset(self::$_carrier->kddi)) {
+ $patterns = array(
+ '/^KDDI-/',
+ '/^UP\.Browser/',
+ );
+ self::$_carrier->kddi = self::_checkCarrier($patterns);
+ }
+ return self::$_carrier->kddi;
+ }
+
+ /**
+ * SoftBankかどうか
+ * @return boolean
+ */
+ public static function isSoftbank()
+ {
+ if (!isset(self::$_carrier->softbank)) {
+ $patterns = array(
+ '/^SoftBank/',
+ '/^Semulator/',
+ '/^Vodafone/',
+ '/^Vemulator/',
+ '/^MOT-/',
+ '/^MOTEMULATOR/',
+ '/^J-PHONE/',
+ '/^J-EMULATOR/',
+ );
+ self::$_carrier->softbank = self::_checkCarrier($patterns);
+ }
+ return self::$_carrier->softbank;
+ }
+
+ /**
+ * WILLCOMかどうか
+ * @return boolean
+ */
+ public static function isWillcom()
+ {
+ if (!isset(self::$_carrier->willcom)) {
+ self::$_carrier->willcom = self::_checkCarrier('#^Mozilla/3\.0\((?:DDIPOCKET|WILLCOM);#');
+ }
+ return self::$_carrier->willcom;
+ }
+
+ /**
+ * キャリア名の取得
+ * @return string
+ */
+ public static function getCarrierName()
+ {
+ if (self::isDocomo()) {
+ return 'DoCoMo';
+ } else if (self::isKddi()) {
+ return 'KDDI';
+ } else if (self::isSoftbank()) {
+ return 'SoftBank';
+ } else if (self::isWillcom()) {
+ return 'willcom';
+ }
+ return 'PC';
+ }
+
+ /**
+ * 短いキャリア名の取得
+ * @return string
+ */
+ public static function getShortCarrierName()
+ {
+ if (self::isDocomo()) {
+ return 'dc';
+ } else if (self::isKddi()) {
+ return 'au';
+ } else if (self::isSoftbank()) {
+ return 'sb';
+ } else if (self::isWillcom()) {
+ return 'wm';
+ }
+ return 'pc';
+ }
+
+ /**
+ * 絵文字オブジェクトの取得
+ * @return sfJpMobileEmoji
+ */
+ public static function getEmoji()
+ {
+ return self::getDevice()->getEmoji();
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/storage/sfJpMobileSessionStorage.class.php
@@ -0,0 +1,27 @@
+<?php
+/* vim: set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 携帯用セッションストレージ
+ *
+ * @package sfJpMobile
+ * @subpackage storage
+ * @version $Id$
+ */
+class sfJpMobileSessionStorage extends sfSessionStorage
+{
+ /**
+ * @return null
+ */
+ public function initialize($options = null)
+ {
+ if (sfJpMobile::isMobile()) {
+ ini_set("session.use_trans_sid", 1);
+ ini_set("session.use_cookies", 0);
+ ini_set("session.use_only_cookies", 0);
+ } else {
+ ini_set("session.use_trans_sid", 0);
+ ini_set("session.use_cookies", 1);
+ }
+ parent::initialize($options);
+ }
+}
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/lib/config/sfJpMobileEmojiConfigHandler.class.php
@@ -0,0 +1,22 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 絵文字変換テーブルファイル用パーサー
+ *
+ * @package sfJpMobile
+ * @subpackage config
+ * @version $Id$
+ */
+class sfJpMobileEmojiConfigHandler extends sfYamlConfigHandler
+{
+ public function execute($configFiles)
+ {
+ $config = $this->parseYamls($configFiles);
+ $format = "<?php\n"
+ . "// auto-generated by %s\n"
+ . "// date: %s\n"
+ . "sfConfig::add(array('jpmobile_emoji_%s' => %s));"
+ . "";
+ return sprintf($format, __CLASS__, date('Y/m/d H:i:s'), key($config), var_export(current($config), true));
+ }
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/filter/sfJpMobileFilter.class.php
@@ -0,0 +1,118 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * モバイルページ用フィルタ
+ *
+ * @package sfJpMobile
+ * @subpackage filter
+ * @version $Id: bf86adb0f9c5084636a3ffea792b5fbf279a8e4a $
+ */
+class sfJpMobileFilter extends sfFilter
+{
+ /**
+ * @param sfFilter $filterChain
+ */
+ public function execute($filterChain)
+ {
+ if (sfJpMobile::isMobile()) {
+ if ($this->isFirstCall()) {
+ // UIDの取得
+ $this->_canGetUid();
+ // パラメータのUTF-8化
+ $this->_paramConvertToUtf8();
+ // キャッシュ制御設定
+ $this->_setCacheControl();
+ // Content-Typeの設定
+ $this->_setContentType();
+ }
+
+ $filterChain->execute();
+
+ // 出力データの加工
+ $this->_convertContent();
+ } else {
+ $filterChain->execute();
+ }
+ }
+ /**
+ * UIDが取得できる状態かどうか
+ * 取得のためのパラメータが設定されていなかったら、パラメータを付けてリダイレクトする
+ *
+ * @return null
+ */
+ private function _canGetUid()
+ {
+ $context = $this->getContext();
+ $req = $context->getRequest();
+ if ($req->isMethod('get') && sfJpMobile::isDocomo() && $req->getParameter('guid') == null) {
+ $uri = getenv('REQUEST_URI');
+ $uri .= strpos($uri, '?') === false ? '?' : '&';
+ $context->getController()
+ ->getAction($context->getModuleName(), $context->getActionName())
+ ->redirect("{$uri}guid=ON");
+ }
+ }
+ /**
+ * パラメータのUTF-8化
+ * @return null
+ */
+ private function _paramConvertToUtf8()
+ {
+ if (sfJpMobile::isDocomo() || sfJpMobile::isKddi()) {
+ foreach ($this->getContext()->getRequest()->getParameterHolder()->getAll() as $key => $val) {
+ mb_convert_variables('UTF-8', 'SJIS-win,UTF-8', $val);
+ $this->getContext()->getRequest()->setParameter($key, $val);
+ }
+ }
+ }
+ /**
+ * Content-Typeの設定
+ * @return null
+ */
+ private function _setContentType()
+ {
+ $response = $this->getContext()->getResponse();
+ if (sfJpMobile::isDocomo()) {
+ // TODO XHTML対応機種かどうかの判別を入れる
+ $response->setHttpHeader("Content-Type", "application/xhtml+xml; charset=Shift_JIS");
+ $response->setContentType("application/xhtml+xml; charset=Shift_JIS");
+ } else if (sfJpMobile::isKddi()) {
+ $response->setHttpHeader("Content-Type", "text/html; charset=Shift_JIS");
+ $response->setContentType("text/html; charset=Shift_JIS");
+ } else {
+ $response->setHttpHeader("Content-Type", "text/html; charset=UTF-8");
+ $response->setContentType("text/html; charset=UTF-8");
+ }
+ }
+ /**
+ * キャッシュ制御
+ * @return null
+ */
+ private function _setCacheControl()
+ {
+ $response = $this->getContext()->getResponse();
+ $response->setHttpHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
+ $response->setHttpHeader("Last-Modified", gmdate("D, d M Y H:i:s")." GMT");
+ $response->setHttpHeader("Cache-Control", "no-cache,must-revalidate");
+ $response->setHttpHeader("Cache-Control", "post-check=0,pre-check=0", false);
+ $response->setHttpHeader("Pragma", "no-cache");
+ }
+ /**
+ * 出力コンテンツの変換
+ * @return null
+ */
+ private function _convertContent()
+ {
+ $content = $this->getContext()->getResponse()->getContent();
+ // 絵文字変換
+ if (!sfJpMobile::isDocomo()) {
+ $content = sfJpMobile::getEmoji()->convert($content);
+ }
+ // 出力文字コードの変更
+ if (!sfJpMobile::isMobile() || (!sfJpMobile::isSoftbank() && !sfJpMobile::isWillcom())) {
+ $content = mb_convert_encoding($content, 'SJIS-win', 'UTF-8');
+ }
+ $this->getContext()->getResponse()->setContent($content);
+ }
+
+}
sfJpMobilePlugin/tags/0.0.1-beta/lib/view/sfJpMobileView.class.php
@@ -0,0 +1,26 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 携帯用標準ビュー
+ *
+ * @package sfJpMobileView
+ * @subpackage view
+ * @version $Id$
+ */
+class sfJpMobileView extends sfPHPView
+{
+ protected function renderFile($_sfFile)
+ {
+ $info = pathinfo($_sfFile);
+ $base = "{$info['dirname']}/{$info['filename']}";
+ $filename = $base . ucfirst(strtolower(sfJpMobile::getCarrierName())) . '.' . $info['extension'];
+ if (!is_readable($filename)) {
+ $filename = "{$base}Mobile.{$info['extension']}";
+ if (!sfJpMobile::isMobile() || !is_readable($filename)) {
+ $filename = $_sfFile;
+ }
+ }
+ return parent::renderFile($filename);
+ }
+
+}
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/lib/view/sfJpMobilePartialView.class.php
@@ -0,0 +1,26 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * 携帯用パーシャルビュー
+ *
+ * @package sfJpMobileView
+ * @subpackage view
+ * @version $Id: 5bbff10933284560e81f720f8647e68ad4033288 $
+ */
+class sfJpMobilePartialView extends sfPartialView
+{
+ protected function renderFile($_sfFile)
+ {
+ $info = pathinfo($_sfFile);
+ $base = "{$info['dirname']}/{$info['filename']}";
+ $filename = $base . ucfirst(strtolower(sfJpMobile::getCarrierName())) . '.' . $info['extension'];
+ if (!is_readable($filename)) {
+ $filename = "{$base}Mobile.{$info['extension']}";
+ if (!sfJpMobile::isMobile() || !is_readable($filename)) {
+ $filename = $_sfFile;
+ }
+ }
+ return parent::renderFile($filename);
+ }
+
+}
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/lib/exception/sfMobileNotDetermineException.class.php
@@ -0,0 +1,12 @@
+<?php
+/* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */
+/**
+ * sfMobileNotDetermineException
+ *
+ * @package sfJpMobilePlugin
+ * @subpackage exception
+ * @version $Id$
+ */
+class sfMobileNotDetermineException extends sfException
+{
+}
sfJpMobilePlugin/tags/0.0.1-beta/modules/jpmobile/templates/_dtd.php
@@ -0,0 +1,13 @@
+<?php echo '<?xml version="1.0" encoding="Shift_JIS"?>' ?>
+<?php if (sfJpMobile::isDocomo()): ?>
+<!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd">
+<?php elseif (sfJpMobile::isKddi()): ?>
+<!DOCTYPE html PUBLIC "-//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml-basic.dtd">
+<?php elseif (sfJpMobile::isSoftbank()): ?>
+<!DOCTYPE html PUBLIC "-//JPHONE//DTD XHTML Basic 1.0 Plus//EN" "xhtml-basic10-plus.dtd">
+<?php else: ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php endif; ?>
+
+<?php /* $Id$ */ ?>
+<?php /* vim:set expandtab tabstop=2 softtabstop=2 shiftwidth=2: */ ?>
\ No newline at end of file
sfJpMobilePlugin/tags/0.0.1-beta/README
@@ -0,0 +1,69 @@
+= sfJpMobilePlugin: 携帯サイト作成支援のsymfony用プラグイン
+
+== こんなもの
+symfonyで携帯サイトを作った際に作ったものをプラグインとして抜き出したもの。
+自分の仕事で利用しているので、下位機種はもとより、中位機種の対応すら考慮されてません。
+キャリア判別にはファイアーウォール側でIP判別を行っているので、IPによる判別機能はもっていません。
+
+== 実装機能
+* UserAgentによるキャリア判別
+* 端末IDの取得
+* 契約者番号の取得
+* セッションへの対応
+* 絵文字の相互変換
+* テンプレートの自動振り分け
+
+== 設置方法
+
+=== 利用するコントローラの変更
+apps/*/config/factories.yml
+ all:
+ controlelr:
+ class: sfJpMobileController
+
+=== フィルタの追加
+apps/*/config/filters.ymlの"insert your own filters here"の下
+ jpmobile:
+ class: sfJpMobileFilter
+
+=== ビュー関連の設定
+
+==== クラスの指定
+apps/*/config/app.yml(app/*/modules/*/config/module.yml でもOK)
+ all:
+ view:
+ class: sfJpMobile
+
+==== ヘルパーの利用
+apps/*/config/settings.yml
+ all:
+ standard_helpers: [Partial, Cache, Form, JpMobileUrl]
+
+==== レイアウトの変更
+自分で宣言してもいいけど、一応DOCTYPEの切り替えパーシャルがプリセットされている。
+
+apps/*/templates/layout.phpのDOCTYPE宣言のところをごっそり
+ <?php include_partial('jpmobile/dtd') ?>
+
+=== セッションの利用
+apps/*/config/factories.yml
+ all:
+ storage:
+ class: sfJpMobileSessionStorage
+ param:
+ session_name: symfony # ここはお好きな名前で
+
+== テンプレートの振り分けについて
+下記の様にテンプレートファイル名を付けることで、振り分けることが可能です。
+
+* 通常: indexSuccess.php
+* 携帯共通: indexSuccessMobile.php
+* DoCoMo: indexSuccessDocomo.php
+* KDDI: indexSuccessKddi.php
+* SoftBank: indexSuccessSoftbank.php
+* PC: indexSuccessPc.php
+
+DoCoMoでアクセスした場合、***Docomo -> ***Mobile -> 通常 の順でテンプレートを探します。
+
+=== 副作用
+レイアウトも同様に振り分けられちゃいます。