version 0.3.17
[fms.git] / src / freenet / captcha / alternatecaptchafonts.cpp
1 #ifdef ALTERNATE_CAPTCHA\r
2 \r
3 #include "../../../include/freenet/captcha/alternatecaptchafonts.h"\r
4 \r
5 #include <Poco/Path.h>\r
6 #include <Poco/DirectoryIterator.h>\r
7 #include <Poco/Exception.h>\r
8 \r
9 bool AlternateCaptchaFonts::m_fontsloaded(false);\r
10 std::vector<FreeImage::Font> AlternateCaptchaFonts::m_fonts;\r
11 \r
12 AlternateCaptchaFonts::AlternateCaptchaFonts()\r
13 {\r
14         if(m_fontsloaded==false)\r
15         {\r
16                 FreeImage_Initialise(true);\r
17                 LoadFonts();\r
18                 m_fontsloaded=true;\r
19         }\r
20 }\r
21 \r
22 void AlternateCaptchaFonts::LoadFonts()\r
23 {\r
24 \r
25         try\r
26         {\r
27                 FreeImage::Bitmap bmp;\r
28                 Poco::Path path("fonts");\r
29                 Poco::DirectoryIterator di(path);\r
30                 Poco::DirectoryIterator end;\r
31 \r
32                 while(di!=end)\r
33                 {\r
34                         if(di.name().find("bmp")!=std::string::npos)\r
35                         {\r
36                                 bmp.Load("bmp",di.path().toString());\r
37                                 m_fonts.push_back(FreeImage::Font(bmp));\r
38                         }\r
39                         ++di;\r
40                 }\r
41                 if(m_fonts.size()==0)\r
42                 {\r
43                         m_log->fatal("AlternateCaptchaFonts::LoadFonts You have no loadable fonts in the font directory!");\r
44                 }\r
45         }\r
46         catch(Poco::Exception &e)\r
47         {\r
48                 m_log->error("AlternateCaptchaFonts::LoadFonts caught "+e.displayText());\r
49         }\r
50         catch(...)\r
51         {\r
52                 m_log->error("AlternateCaptchaFonts::LoadFonts caught unknown exception");\r
53         }\r
54 \r
55 }\r
56 \r
57 #endif  // ALTERNATE_CAPTCHA\r