Commit cf62149e authored by Christoffer Ackelman's avatar Christoffer Ackelman

Generate documentation pdf files by default in addition to postscript.

parent cb2469f5
......@@ -46,7 +46,7 @@ extern "C" {
#include "cnv_ctx.h"
#include "co_string.h"
CnvCtx::CnvCtx() : generate_html(0), generate_xtthelp(0), generate_src(0), generate_struct(0), generate_ps(0), generate_cdp(0), common_structfile_only(0), hpp(0), verbose(0), first_class(1), setup(0), wblto(0), rw(0), rx(0)
CnvCtx::CnvCtx() : generate_html(0), generate_xtthelp(0), generate_src(0), generate_struct(0), generate_ps(0), generate_pdf(0), generate_cdp(0), common_structfile_only(0), hpp(0), verbose(0), first_class(1), setup(0), wblto(0), rw(0), rx(0)
{
strcpy(dir, "");
strcpy(setup_filename, "");
......
......@@ -60,6 +60,7 @@ class CnvCtx {
int generate_src;
int generate_struct;
int generate_ps;
int generate_pdf;
int generate_cdp;
int common_structfile_only;
int hpp;
......
This diff is collapsed.
......@@ -41,43 +41,12 @@
#include <fstream>
#include "cnv_content.h"
#include "cnv_tops.h"
#define pdf_cMaxLevel 4
#define pdf_cPageHeight 842
#define pdf_cPageWidth 595
#define pdf_cPageNumX (pdf_cPageWidth - 10)
#define pdf_cPageNumY (pdf_cPageHeight - 13)
#define pdf_cLeftMargin 100
#define pdf_cTopMargin 100
#define pdf_cBottomMargin 50
#define pdf_cCellSize 110
#define pdf_cTmpFile "/tmp/ptmp.ps"
typedef enum {
pdf_mPrintMode_Pos = 1 << 0,
pdf_mPrintMode_Start = 1 << 1,
pdf_mPrintMode_Continue = 1 << 2,
pdf_mPrintMode_End = 1 << 3,
pdf_mPrintMode_KeepY = 1 << 4,
pdf_mPrintMode_FixX = 1 << 5
} pdf_mPrintMode;
typedef enum { pdf_eFile_Body, pdf_eFile__ } pdf_eFile;
typedef enum {
pdf_eId_TitlePage,
pdf_eId_InfoPage,
pdf_eId_Content,
pdf_eId_Chapter,
pdf_eId_TopicL1,
pdf_eId_TopicL2,
pdf_eId_TopicL3,
pdf_eId_Function,
pdf_eId_Class,
pdf_eId_Report,
pdf_eId__
} pdf_eId;
#undef ps_cPageHeight
#define ps_cPageHeight 842
#undef ps_cPageWidth
#define ps_cPageWidth 595
typedef enum {
pdf_eObjType_Catalog,
......@@ -129,67 +98,14 @@ class CnvPdfObj {
int xobject[40];
};
class CnvToPdf {
class CnvToPdf : public CnvToPs {
public:
CnvToPdf()
: cf(0), ci(0), prev_ci(0), conf_pass(false), xref_offset(0), im_cnt(0),
use_outlines(1)
{
for (int i = 0; i < pdf_cMaxLevel; i++)
header_number[i] = 0;
for (int i = 0; i < pdf_eFile__; i++)
page_number[i] = 0;
strcpy(previous_chapter, "");
strcpy(current_chapter, "");
style[pdf_eId_TitlePage].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 35, 0, 0,
0, cnv_eAlignment_Center, 0, 0, 0);
style[pdf_eId_TitlePage].h2 = CnvStyle("Helvetica-Bold-ISOLatin1", 25, 0,
50, 20, cnv_eAlignment_Center, 0, 0, 0);
style[pdf_eId_TitlePage].h3 = CnvStyle("Helvetica-Bold-ISOLatin1", 15, 0,
25, 10, cnv_eAlignment_Center, 0, 0, 0);
style[pdf_eId_TitlePage].text = CnvStyle(
"Helvetica-ISOLatin1", 8, 0, 9, 1, cnv_eAlignment_Center, 0, 0, 0);
style[pdf_eId_TitlePage].boldtext = CnvStyle(
"Helvetica-Bold-ISOLatin1", 8, 0, 9, 1, cnv_eAlignment_Center, 0, 0, 0);
style[pdf_eId_InfoPage].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 24, 0,
100, 20, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Chapter].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 24, 0, 24,
40, cnv_eAlignment_Left, 0, 1, 1);
style[pdf_eId_TopicL2].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 12, 0, 20,
10, cnv_eAlignment_Left, 0, 0, 1);
style[pdf_eId_TopicL2].h2 = CnvStyle(
"Helvetica-Bold-ISOLatin1", 10, 0, 16, 8, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_TopicL3].h1 = CnvStyle(
"Helvetica-Bold-ISOLatin1", 10, 0, 16, 8, cnv_eAlignment_Left, 0, 0, 1);
style[pdf_eId_TopicL3].h2 = CnvStyle(
"Helvetica-Bold-ISOLatin1", 8, 0, 16, 5, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Function].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 24, 0, 24,
20, cnv_eAlignment_Left, 1, 0, 1);
style[pdf_eId_Class].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 24, 0, 24,
20, cnv_eAlignment_Left, 1, 0, 1);
style[pdf_eId_Class].h2 = CnvStyle(
"Helvetica-Bold-ISOLatin1", 20, 0, 24, 8, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Class].h3 = CnvStyle("Helvetica-Bold-ISOLatin1", 16, -40, 24,
6, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Content].boldtext = CnvStyle(
"Helvetica-Bold-ISOLatin1", 10, 0, 11, 1, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Chapter].text = CnvStyle(
"TimesNewRoman-ISOLatin1", 10, 0, 11, 1, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_TopicL1].text = CnvStyle(
"TimesNewRoman-ISOLatin1", 10, 0, 11, 1, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_TopicL2].text = CnvStyle(
"TimesNewRoman-ISOLatin1", 10, 0, 11, 1, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_TopicL3].text = CnvStyle(
"TimesNewRoman-ISOLatin1", 10, 0, 11, 1, cnv_eAlignment_Left, 0, 0, 0);
style[pdf_eId_Report].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 20, 0, 14,
20, cnv_eAlignment_Left, 0, 0, 0);
}
CnvToPdf() : CnvToPs(), prev_ci(0), xref_offset(0), im_cnt(0), use_outlines(1) {}
~CnvToPdf();
void close();
void print_text(
const char* text, CnvStyle& style, int mode = pdf_mPrintMode_Pos);
const char* text, CnvStyle& style, int mode = ps_mPrintMode_Pos);
void draw_rect(double lw, double x, double y, double w, double h);
void draw_arc(double lw, double x, double y, double w, double h, int angle1,
int angle2);
......@@ -200,44 +116,18 @@ class CnvToPdf {
double y3, int gray);
void print_pagebreak(int print_num);
void print_content();
void print_h1(const char* text, int hlevel, char* subject);
void print_h2(const char* text);
void print_h3(const char* text);
void print_horizontal_line();
int print_image(const char* filename);
int print_image_inline(const char* filename);
void cnv_text(char* to, const char* from);
void set_confpass(bool conf)
void set_cf(int val)
{
conf_pass = conf;
if (!conf) {
// Reset
for (int i = 0; i < pdf_cMaxLevel; i++)
header_number[i] = 0;
for (int i = 0; i < pdf_eFile__; i++)
page_number[i] = 0;
cf = 0;
ci = 0;
}
}
void set_ci(int val)
{
prev_ci = ci;
ci = val;
}
void set_cf(int val)
{
cf = val;
}
void set_filename(int idx, char* name)
{
strcpy(filename[idx], name);
}
void open();
void incr_headerlevel();
void decr_headerlevel();
void reset_headernumbers(int level);
void set_pageheader(const char* text);
void set_useoutlines(int u)
{
use_outlines = u;
......@@ -250,20 +140,7 @@ class CnvToPdf {
std::vector<CnvPdfObj> v_font;
std::vector<CnvPdfObj> v_resource;
std::vector<CnvPdfObj> v_image;
CnvContent content;
CnvIdStyle style[pdf_eId__];
std::ofstream fp[pdf_eFile__];
pwr_tFileName filename[pdf_eFile__];
int cf;
int ci;
int prev_ci;
double x;
double y;
int page_number[pdf_eFile__];
int header_number[pdf_cMaxLevel];
bool conf_pass;
char current_chapter[160];
char previous_chapter[160];
int start_offset;
int xref_offset;
int im_cnt;
......
......@@ -131,18 +131,18 @@ class CnvToPs {
style[ps_eId_Report].h1 = CnvStyle("Helvetica-Bold-ISOLatin1", 24, 0, 24,
20, cnv_eAlignment_Left, 0, 0, 0);
}
~CnvToPs();
virtual ~CnvToPs();
void close();
void print_text(
virtual void close();
virtual void print_text(
const char* text, CnvStyle& style, int mode = ps_mPrintMode_Pos);
void print_pagebreak(int print_num);
void print_content();
virtual void print_pagebreak(int print_num);
virtual void print_content();
void print_h1(const char* text, int hlevel, char* subject);
void print_h2(const char* text);
void print_h3(const char* text);
void print_horizontal_line();
int print_image(const char* filename);
virtual void print_horizontal_line();
virtual int print_image(const char* filename);
void cnv_text(char* to, const char* from);
void set_confpass(bool conf)
{
......@@ -157,11 +157,11 @@ class CnvToPs {
ci = 0;
}
}
void set_ci(int val)
virtual void set_ci(int val)
{
ci = val;
}
void set_cf(int val)
virtual void set_cf(int val)
{
cf = val;
}
......@@ -169,7 +169,7 @@ class CnvToPs {
{
strcpy(filename[idx], name);
}
void open();
virtual void open();
void incr_headerlevel();
void decr_headerlevel();
void reset_headernumbers(int level);
......
This diff is collapsed.
......@@ -38,6 +38,7 @@
#define cnv_wbltops_h
#include "cnv_wblto.h"
#include "cnv_topdf.h"
#include "cnv_tops.h"
class CnvReadWbl;
......@@ -46,11 +47,16 @@ class CnvWblToPs : public CnvWblTo {
public:
CnvWblToPs(CnvCtx* cnv_ctx) : ctx(cnv_ctx), conf_pass(false)
{
if (ctx->generate_pdf) {
tops = new CnvToPdf();
} else {
tops = new CnvToPs();
}
}
virtual ~CnvWblToPs();
CnvCtx* ctx;
CnvToPs tops;
CnvToPs *tops;
bool conf_pass;
int init(char* first);
......@@ -71,7 +77,7 @@ class CnvWblToPs : public CnvWblTo {
}
void set_confpass(bool conf)
{
tops.set_confpass(conf);
tops->set_confpass(conf);
conf_pass = conf;
}
bool confpass()
......
This diff is collapsed.
/*
* ProviewR Open Source Process Control.
* Copyright (C) 2005-2018 SSAB EMEA AB.
*
* This file is part of ProviewR.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ProviewR. If not, see <http://www.gnu.org/licenses/>
*
* Linking ProviewR statically or dynamically with other modules is
* making a combined work based on ProviewR. Thus, the terms and
* conditions of the GNU General Public License cover the whole
* combination.
*
* In addition, as a special exception, the copyright holders of
* ProviewR give you permission to, from the build function in the
* ProviewR Configurator, combine ProviewR with modules generated by the
* ProviewR PLC Editor to a PLC program, regardless of the license
* terms of these modules. You may copy and distribute the resulting
* combined work under the terms of your choice, provided that every
* copy of the combined work is accompanied by a complete copy of
* the source code of ProviewR (the version used to produce the
* combined work), being distributed under the terms of the GNU
* General Public License plus this exception.
*/
#ifndef cnv_xtthelptopdf_h
#define cnv_xtthelptopdf_h
#include "cnv_xtthelpto.h"
#include "cnv_topdf.h"
class CnvCtx;
typedef enum {
pdf_mStatus_xtthelp = 1 << 0,
pdf_mStatus_paragraph = 1 << 1,
pdf_mStatus_table = 1 << 2,
pdf_mStatus_topic = 1 << 3
} pdf_mStatus;
typedef enum { pdf_mOption_printDisable = 1 << 0 } pdf_mOption;
class CnvXtthelpToPdf : public CnvXtthelpTo {
public:
CnvXtthelpToPdf(CnvCtx* cnv_ctx)
: ctx(cnv_ctx), base_ci(0), first_topic(1), user_style(0), status(0),
conf_pass(false), option(0)
{
strcpy(current_subject, "");
}
virtual ~CnvXtthelpToPdf();
Cnv_eXtthelpToType type()
{
return Cnv_eXtthelpToType_Ps;
}
void* insert(navh_eItemType item_type, const char* text1, const char* text2,
const char* text3, const char* link, const char* link_bookmark,
const char* file_name, navh_eHelpFile file_type, int help_index,
const char* bookmark, int coding);
void subject_to_fname(char* fname, const char* subject, int path);
bool confpass()
{
return true;
}
void set_confpass(bool conf)
{
topdf.set_confpass(conf);
conf_pass = conf;
if (!conf) {
// Reset
base_ci = 0;
user_style = 0;
first_topic = 1;
status = 0;
}
}
CnvCtx* ctx;
CnvToPdf topdf;
int base_ci;
int first_topic;
int first_chaptertopic;
int user_style;
unsigned int status;
bool conf_pass;
char current_subject[80];
unsigned int option;
};
#endif
This diff is collapsed.
......@@ -38,6 +38,7 @@
#define cnv_xtthelptops_h
#include "cnv_xtthelpto.h"
#include "cnv_topdf.h"
#include "cnv_tops.h"
class CnvCtx;
......@@ -58,6 +59,11 @@ class CnvXtthelpToPs : public CnvXtthelpTo {
conf_pass(false), option(0)
{
strcpy(current_subject, "");
if (ctx->generate_pdf) {
tops = new CnvToPdf();
} else {
tops = new CnvToPs();
}
}
virtual ~CnvXtthelpToPs();
......@@ -69,14 +75,14 @@ class CnvXtthelpToPs : public CnvXtthelpTo {
const char* text3, const char* link, const char* link_bookmark,
const char* file_name, navh_eHelpFile file_type, int help_index,
const char* bookmark, int coding);
void subject_to_fname(char* fname, const char* subject, int path);
virtual void subject_to_fname(char* fname, const char* subject, int path);
bool confpass()
{
return true;
}
void set_confpass(bool conf)
{
tops.set_confpass(conf);
tops->set_confpass(conf);
conf_pass = conf;
if (!conf) {
// Reset
......@@ -88,7 +94,7 @@ class CnvXtthelpToPs : public CnvXtthelpTo {
}
CnvCtx* ctx;
CnvToPs tops;
CnvToPs *tops;
int base_ci;
int first_topic;
int first_chaptertopic;
......
......@@ -49,7 +49,6 @@ extern "C" {
#include "cnv_xtthelptohtml.h"
#include "cnv_xtthelptoxml.h"
#include "cnv_xtthelptops.h"
#include "cnv_xtthelptopdf.h"
#include "cnv_xtthelptotext.h"
#include "cnv_pwgtoxtthelp.h"
#include "cnv_classdep.h"
......@@ -108,7 +107,6 @@ int main(int argc, char* argv[])
int xtthelp_to_html = 0;
int xtthelp_to_xml = 0;
int xtthelp_to_ps = 0;
int xtthelp_to_pdf = 0;
int xtthelp_to_text = 0;
int pwg_to_xtthelp = 0;
int changelog = 0;
......@@ -177,6 +175,10 @@ int main(int argc, char* argv[])
ctx->generate_ps = 1;
ctx->common_structfile_only = 1;
break;
case 'Q':
ctx->generate_pdf = 1;
ctx->common_structfile_only = 1;
break;
case 'p':
ctx->generate_struct = 1;
ctx->hpp = 1;
......@@ -198,9 +200,11 @@ int main(int argc, char* argv[])
break;
case 'n':
xtthelp_to_ps = 1;
ctx->generate_ps = 1;
break;
case 'f':
xtthelp_to_pdf = 1;
xtthelp_to_ps = 1;
ctx->generate_pdf = 1;
break;
case 'j':
xtthelp_to_text = 1;
......@@ -272,14 +276,6 @@ int main(int argc, char* argv[])
delete xtthelpto;
exit(0);
}
if (xtthelp_to_pdf) {
CnvXtthelpToPdf* xtthelpto = new CnvXtthelpToPdf(ctx);
ctx->rx = new CnvReadXtthelp(files, ctx->dir, xtthelpto);
ctx->rx->read_xtthelp();
delete ctx->rx;
delete xtthelpto;
exit(0);
}
if (xtthelp_to_text) {
CnvXtthelpToText* xtthelpto = new CnvXtthelpToText(ctx);
ctx->rx = new CnvReadXtthelp(files, ctx->dir, xtthelpto);
......@@ -341,7 +337,7 @@ int main(int argc, char* argv[])
ctx->wblto = new CnvWblToH(ctx);
else if (ctx->generate_xtthelp)
ctx->wblto = new CnvWblToXtthelp(ctx);
else if (ctx->generate_ps)
else if (ctx->generate_ps || ctx->generate_pdf)
ctx->wblto = new CnvWblToPs(ctx);
ctx->rw = new CnvReadWbl(ctx, ctx->wblto);
......
......@@ -72,6 +72,8 @@ export_wbl_html_en_us := $(patsubst %.wb_load,$(doc_dir)/en_us/orm/%_allclasses.
export_wbl_html_sv_se := $(patsubst %.wb_load,$(doc_dir)/sv_se/orm/%_allclasses.html,$(wbl_sources))
export_wbl_ps_en_us := $(patsubst %.wb_load,$(doc_dir)/en_us/%.ps,$(wbl_sources))
export_wbl_ps_sv_se := $(patsubst %.wb_load,$(doc_dir)/sv_se/%.ps,$(wbl_sources))
export_wbl_pdf_en_us := $(patsubst %.wb_load,$(doc_dir)/en_us/%.pdf,$(wbl_sources))
export_wbl_pdf_sv_se := $(patsubst %.wb_load,$(doc_dir)/sv_se/%.pdf,$(wbl_sources))
bld_dir := $(addprefix $(release_root)/bld/$(type_name)/, $(patsubst %.wb_load,%,$(wbl_sources)))
dbs_dependencies := $(bld_dir)/mcomp.d_wbl
......@@ -134,6 +136,14 @@ $(doc_dir)/sv_se/%.ps : ../../%.wb_load
@ echo "Generating postscript file for $(source) classes sv_se..."
@ $(co_convert) -q -l sv_se -d $(doc_dir)/sv_se "$(source)"
$(doc_dir)/en_us/%.pdf : ../../%.wb_load
@ echo "Generating pdf file for $(source) classes en_us..."
@ $(co_convert) -Q -l en_us -d $(doc_dir)/en_us "$(source)"
$(doc_dir)/sv_se/%.pdf : ../../%.wb_load
@ echo "Generating pdf file for $(source) classes sv_se..."
@ $(co_convert) -Q -l sv_se -d $(doc_dir)/sv_se "$(source)"
$(exe_dir)/en_us/%_xtthelp.dat : ../../%.wb_load
@ echo "Generating xtt help files for $(source) classes en_us"
@ $(co_convert) -x -d $(exe_dir)/en_us "$(source)"
......@@ -176,6 +186,8 @@ exe: $(export_wbl_xtthelp_en_us) \
$(export_wbl_html_sv_se) \
$(export_wbl_ps_en_us) \
$(export_wbl_ps_sv_se) \
$(export_wbl_pdf_en_us) \
$(export_wbl_pdf_sv_se) \
$(export_pdf_en_us) \
$(export_pdf_sv_se) \
| silent
......
......@@ -54,6 +54,8 @@ exe : $(doc_dir)/en_us/orm/pwrb_allclasses.html \
$(doc_dir)/sv_se/orm/rt_csup_c.html \
$(doc_dir)/en_us/pwrb.ps \
$(doc_dir)/sv_se/pwrb.ps \
$(doc_dir)/en_us/pwrb.pdf \
$(doc_dir)/sv_se/pwrb.pdf \
$(exe_dir)/en_us/pwrb_xtthelp.dat \
$(exe_dir)/sv_se/pwrb_xtthelp.dat \
| silent
......@@ -144,6 +146,14 @@ $(doc_dir)/sv_se/pwrb.ps :
@ echo "Generating postscript file for pwrb classes..."
@ $(co_convert) -q -l sv_se -d $(doc_dir)/sv_se "$(pwre_sroot)/wbl/pwrb/src/pwrb_*.wb_load"
$(doc_dir)/en_us/pwrb.pdf :
@ echo "Generating pdf file for pwrb classes..."
@ $(co_convert) -Q -d $(doc_dir)/en_us "$(pwre_sroot)/wbl/pwrb/src/pwrb_*.wb_load"
$(doc_dir)/sv_se/pwrb.pdf :
@ echo "Generating pdf file for pwrb classes..."
@ $(co_convert) -Q -l sv_se -d $(doc_dir)/sv_se "$(pwre_sroot)/wbl/pwrb/src/pwrb_*.wb_load"
$(exe_dir)/en_us/pwrb_xtthelp.dat :
@ echo "Generating xtt help files for pwrb classes en_us"
@ $(co_convert) -x -d $(exe_dir)/en_us -y $(bld_dir)/pwrb.d_en_us_xtthelp_wbl "$(pwre_sroot)/wbl/pwrb/src/pwrb_c_*.wb_load"
......
......@@ -46,6 +46,8 @@ exe : $(doc_dir)/en_us/orm/pwrs_allclasses.html \
$(doc_dir)/sv_se/orm/pwr_class_h.html \
$(doc_dir)/en_us/pwrs.ps \
$(doc_dir)/sv_se/pwrs.ps \
$(doc_dir)/en_us/pwrs.pdf \
$(doc_dir)/sv_se/pwrs.pdf \
$(exe_dir)/en_us/pwrs_xtthelp.dat \
$(exe_dir)/sv_se/pwrs_xtthelp.dat \
| silent
......@@ -112,6 +114,14 @@ $(doc_dir)/sv_se/pwrs.ps :
@ echo "Generating postscript file for pwrs classes..."
@ $(co_convert) -q -l sv_se -d $(doc_dir)/sv_se "$(pwre_sroot)/wbl/pwrs/src/pwrs_*.wb_load"
$(doc_dir)/en_us/pwrs.pdf :
@ echo "Generating pdf file for pwrs classes..."
@ $(co_convert) -Q -d $(doc_dir)/en_us "$(pwre_sroot)/wbl/pwrs/src/pwrs_*.wb_load"
$(doc_dir)/sv_se/pwrs.pdf :
@ echo "Generating pdf file for pwrs classes..."
@ $(co_convert) -Q -l sv_se -d $(doc_dir)/sv_se "$(pwre_sroot)/wbl/pwrs/src/pwrs_*.wb_load"
$(exe_dir)/en_us/pwrs_xtthelp.dat :
@ echo "Generating xtt help files for pwrs classes en_us"
@ $(co_convert) -x -d $(exe_dir)/en_us -y $(bld_dir)/pwrs.d_en_us_xtthelp_wbl "$(pwre_sroot)/wbl/pwrs/src/pwrs_*.wb_load"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment