OSDN Git Service

Support yy kakiko.
[fukui-no-namari/dialektos.git] / src / bbs_detail_2ch.cxx
1 /*
2  * Copyright (C) 2009 by Aiwota Programmer
3  * aiwotaprog@tetteke.tk
4  *
5  * This file is part of Dialektos.
6  *
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.
11  *
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.
16  *
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/>.
19  */
20
21 #include "bbs_detail_2ch.hxx"
22
23 #include <boost/filesystem.hpp>
24 #include <boost/xpressive/xpressive.hpp>
25 #include <string>
26 #include <iostream>
27
28 namespace dialektos {
29
30 namespace bbs_detail {
31
32
33 const std::string CH2::bbs_name = "2ch";
34
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;
38   return 0;
39 }
40
41 CH2* CH2::judge_thread(const std::string& uri) {
42   using namespace boost::xpressive;
43
44   sregex regex = "http://" >> (s1=+(_w|'-') >> ".2ch.net")
45   >> as_xpr("/test/read.cgi/")
46   >> (s2=+_w)
47   >> '/' >> (s3=+_d) >> '/' >> -*(_d|'-');
48
49   smatch what;
50   if (!regex_match(uri, what, regex))
51     return 0;
52
53   const std::string host = what[1];
54   const std::string board = what[2];
55   const std::string thread = what[3];
56
57   return new CH2(uri, host, board, thread);
58 }
59
60 CH2* CH2::judge_board(const std::string& uri) {
61   using namespace boost::xpressive;
62
63   sregex regex = "http://" >> (s1=+(_w|'-') >> ".2ch.net") >> as_xpr('/')
64   >> (s2=+_w) >> '/' >> -*_w;
65
66   smatch what;
67   if (!regex_match(uri, what, regex))
68     return 0;
69
70   const std::string host = what[1];
71   const std::string board = what[2];
72
73   return new CH2(uri, host, board, "");
74 }
75
76
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) {}
80
81 CH2::CH2(const CH2& rhs) : Base(rhs) {}
82
83 CH2::~CH2() {}
84
85 CH2* CH2::do_clone() const {
86   return new CH2(*this);
87 }
88
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();
94 }
95
96 const std::string& CH2::get_bbs_name() const {
97   return bbs_name;
98 }
99
100 } // namespace bbs_detail
101
102 } // namespace dialektos