2 * Copyright (C) 2009 by Aiwota Programmer
3 * aiwotaprog@tetteke.tk
5 * This file is part of Dialektos.
7 * Dialektos is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * Dialektos is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Dialektos. If not, see <http://www.gnu.org/licenses/>.
21 #include "bbs_detail_2ch.hxx"
23 #include <boost/filesystem.hpp>
24 #include <boost/xpressive/xpressive.hpp>
30 namespace bbs_detail {
33 const std::string CH2::bbs_name = "2ch";
35 CH2* CH2::judge(const std::string& uri) {
36 if (CH2* bbs = judge_thread(uri)) return bbs;
37 if (CH2* bbs = judge_board(uri)) return bbs;
41 CH2* CH2::judge_thread(const std::string& uri) {
42 using namespace boost::xpressive;
44 sregex regex = "http://" >> (s1=+(_w|'-') >> ".2ch.net")
45 >> as_xpr("/test/read.cgi/")
47 >> '/' >> (s3=+_d) >> '/' >> -*(_d|'-');
50 if (!regex_match(uri, what, regex))
53 const std::string host = what[1];
54 const std::string board = what[2];
55 const std::string thread = what[3];
57 return new CH2(uri, host, board, thread);
60 CH2* CH2::judge_board(const std::string& uri) {
61 using namespace boost::xpressive;
63 sregex regex = "http://" >> (s1=+(_w|'-') >> ".2ch.net") >> as_xpr('/')
64 >> (s2=+_w) >> '/' >> -*_w;
67 if (!regex_match(uri, what, regex))
70 const std::string host = what[1];
71 const std::string board = what[2];
73 return new CH2(uri, host, board, "");
77 CH2::CH2(const std::string& uri, const std::string& host,
78 const std::string& board, const std::string& thread) :
79 Base(uri, host, board, thread) {}
81 CH2::CH2(const CH2& rhs) : Base(rhs) {}
85 CH2* CH2::do_clone() const {
86 return new CH2(*this);
89 std::string CH2::get_board_dir_path() const {
90 std::string homedir = std::getenv("HOME");
91 boost::filesystem::path dir(homedir);
92 dir = dir / ".dialektos" / "logs" / get_bbs_name() / board_;
93 return dir.file_string();
96 const std::string& CH2::get_bbs_name() const {
100 } // namespace bbs_detail
102 } // namespace dialektos