4 changed files with 1 additions and 859 deletions
-
23d-viewer/3d_canvas.cpp
-
198common/page_layout_default_description.cpp
-
623common/page_layout_reader.cpp
-
37common/page_layout_reader.keywords
@ -1,198 +0,0 @@ |
|||
/**
|
|||
* @file common/page_layout_default_description.cpp |
|||
*/ |
|||
|
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>. |
|||
* Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors. |
|||
* |
|||
* |
|||
* 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 this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
/* keyword used in page layout description are (see page_layout_reader.keywords)
|
|||
* page_layout |
|||
* setup |
|||
* linewidth |
|||
* textlinewidth |
|||
* textsize |
|||
* comment |
|||
* line |
|||
* rect |
|||
* polygon |
|||
* tbtext |
|||
* ltcorner |
|||
* lbcorner |
|||
* rbcorner |
|||
* rtcorner |
|||
* name |
|||
* pos |
|||
* start |
|||
* end |
|||
* pts |
|||
* xy |
|||
* maxlen |
|||
* maxheight |
|||
* font |
|||
* bold |
|||
* italic |
|||
* size |
|||
* justify |
|||
* left |
|||
* center |
|||
* right |
|||
* top |
|||
* bottom |
|||
* rotate |
|||
* repeat |
|||
* incrx |
|||
* incry |
|||
* incrlabel |
|||
*/ |
|||
/*
|
|||
* Items use coordinates. |
|||
* A coordinate is defined relative to a page corner |
|||
* A coordinate is the X pos, the Y pos, and the corner which is the coordinate origin |
|||
* the default is the bottom right corner |
|||
* example: (start 10 0 ltcorner) or (start 20 10) |
|||
* The direction depends on the corner: a positive coordinate define a point |
|||
* from the corner origin, to the opposite corner. |
|||
* |
|||
* Items are defined by a name, coordinates in mm and some attributes, |
|||
* and can be repeated. |
|||
* for instance (repeat 2) (incrx 2) (incry 2) repeat the item 2 times, |
|||
* and coordinates are incremented by 2 on X direction, and 2 on Y direction |
|||
* Comments are allowed. they are inside (), and start by the keyword comment |
|||
* example: |
|||
* (comment rect around the title block) |
|||
* |
|||
* Lines and rect are defined by 2 coordinates start and end, and attributes. |
|||
* Attributes are linewidth and repeat parameters. |
|||
* example: |
|||
* (line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) ) |
|||
* (rect (comment rect around the title block) (linewidth 0.15) (start 110 34) (end 2 2) ) |
|||
* |
|||
* Texts are defined by the text (between quotes), the position, and attributes |
|||
* example |
|||
* "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )" |
|||
* the text can be rotated by (rotation <value>) with value = rot angle in degrees |
|||
* (font (size 1.3 1.3) bold italic) defines a specific size, |
|||
* with bold and italic options |
|||
* (justify <justif keyword>) controls the text justification (the default is left) |
|||
* justif keyword is center, left, right, top and bottom |
|||
* (justify center top) is a text centered on X axis and top aligned on vertical axis |
|||
* The text size can be constrained: |
|||
* (maxlen <value>) and (maxheight <value>) force the actual text x and/or y size to be |
|||
* reduced to limit the text height to the maxheight value, |
|||
* and the full text x size to the maxlen value. |
|||
* If the actual text size is smaller than limits, its size is not modified. |
|||
* |
|||
* Texts can include a format symbol, a la printf. |
|||
* At run time these format symbols will be replaced by their actual value. |
|||
* |
|||
* format symbols are: |
|||
* |
|||
* %% = replaced by % |
|||
* %K = Kicad version |
|||
* %Z = paper format name (A4, USLetter ...) |
|||
* %Y = company name |
|||
* %D = date |
|||
* %R = revision |
|||
* %S = sheet number |
|||
* %N = number of sheets |
|||
* %Cx = comment (x = 0 to 9 to identify the comment) |
|||
* %F = filename |
|||
* %P = sheet path (sheet full name) |
|||
* %T = title |
|||
* |
|||
* example: |
|||
* (tbtext \"Size: %Z\" ...) displays "Size A4" or Size USLetter" |
|||
* |
|||
* Poly Polygons |
|||
* Set of filled polygons are supported. |
|||
* |
|||
* The main purpose is to allow logos, or complex shapes |
|||
* They support the repeat and rotation options |
|||
* They are defined by |
|||
* (polygon (position ..) <rotation> <linewidth> |
|||
* the parameter linewidth defines the pen size used to draw/plot |
|||
* the polygon outlines (default = 0) |
|||
* example: |
|||
* (polygon (pos 134 18 rbcorner) (rotate 20) (linewidth 0.00254) |
|||
* |
|||
* and a list of corners like |
|||
* (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) |
|||
* .... ) |
|||
* |
|||
* each sequence like |
|||
* (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) |
|||
* .... ) |
|||
* defines a polygon. |
|||
* Each coordinate is relative to the polygon position. |
|||
* Therefore a "polygon" is in fact a set of polygons, of a poly polygon |
|||
* |
|||
*/ |
|||
|
|||
#include <worksheet.h> // defaultPageLayout
|
|||
|
|||
|
|||
// height of the band reference grid 2.0 mm
|
|||
// worksheet frame reference text size 1.3 mm
|
|||
// default text size 1.5 mm
|
|||
// default line width 0.15 mm
|
|||
// frame ref pitch 50 mm
|
|||
|
|||
// export defaultPageLayout:
|
|||
extern const char defaultPageLayout[]; |
|||
|
|||
// Default page layout (sizes are in mm)
|
|||
const char defaultPageLayout[] = "( page_layout\n" |
|||
"(setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15) )" |
|||
"(rect (comment \"rect around the title block\") (linewidth 0.15) (start 110 34) (end 2 2) )\n" |
|||
"(rect (start 0 0 ltcorner) (end 0 0 rbcorner) (repeat 2) (incrx 2) (incry 2) )\n" |
|||
"(line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )\n" |
|||
"(tbtext \"1\" (pos 25 1 ltcorner) (font (size 1.3 1.3))(repeat 100) (incrx 50) )\n" |
|||
"(line (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50) )\n" |
|||
"(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )\n" |
|||
"(line (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50) )\n" |
|||
"(tbtext \"A\" (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center)(repeat 100) (incry 50) )\n" |
|||
"(line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )\n" |
|||
"(tbtext \"A\" (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) )\n" |
|||
"(tbtext \"Date: %D\" (pos 87 6.9) )\n" |
|||
"(line (start 110 5.5) end 2 5.5) )\n" |
|||
"(tbtext \"%K\" (pos 109 4.1) (comment \"Kicad version\" ) )\n" |
|||
"(line (start 110 8.5) end 2 8.5) )\n" |
|||
"(tbtext \"Rev: %R\" (pos 24 6.9)(font bold)(justify left) )\n" |
|||
"(tbtext \"Size: %Z\" (comment \"Paper format name\")(pos 109 6.9) )\n" |
|||
"(tbtext \"Id: %S/%N\" (comment \"Sheet id\")(pos 24 4.1) )\n" |
|||
"(line (start 110 12.5) end 2 12.5) )\n" |
|||
"(tbtext \"Title: %T\" (pos 109 10.7)(font bold italic (size 2 2)) )\n" |
|||
"(tbtext \"File: %F\" (pos 109 14.3) )\n" |
|||
"(line (start 110 18.5) end 2 18.5) )\n" |
|||
"(tbtext \"Sheet: %P\" (pos 109 17) )\n" |
|||
"(tbtext \"%Y\" (comment \"Company name\") (pos 109 20)(font bold) )\n" |
|||
"(tbtext \"%C0\" (comment \"Comment 0\") (pos 109 23) )\n" |
|||
"(tbtext \"%C1\" (comment \"Comment 1\") (pos 109 26) )\n" |
|||
"(tbtext \"%C2\" (comment \"Comment 2\") (pos 109 29) )\n" |
|||
"(tbtext \"%C3\" (comment \"Comment 3\") (pos 109 32) )\n" |
|||
"(line (start 90 8.5) end 90 5.5) )\n" |
|||
"(line (start 26 8.5) end 26 2) )\n" |
|||
")\n" |
|||
; |
|||
@ -1,623 +0,0 @@ |
|||
/**
|
|||
* @file common/page_layout_reader.cpp |
|||
* @brief read an S expression of description of graphic items and texts |
|||
* to build a title block and page layout |
|||
*/ |
|||
|
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>. |
|||
* Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors. |
|||
* |
|||
* |
|||
* 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 this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
#include <fctsys.h>
|
|||
#include <base_struct.h>
|
|||
#include <worksheet.h>
|
|||
#include <worksheet_shape_builder.h>
|
|||
#include <vector2d.h>
|
|||
#include <page_layout_reader_lexer.h>
|
|||
|
|||
|
|||
using namespace TB_READER_T; |
|||
|
|||
/**
|
|||
* Class PAGE_LAYOUT_READER_PARSER |
|||
* holds data and functions pertinent to parsing a S-expression file |
|||
* for a WORKSHEET_LAYOUT. |
|||
*/ |
|||
class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER |
|||
{ |
|||
DSIZE m_defaultTextSize; // Default text size, when not defined inside a tbtext
|
|||
double m_defaultLineWidth; |
|||
double m_defaulTextLineWidth; |
|||
|
|||
public: |
|||
PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ); |
|||
void Parse( WORKSHEET_LAYOUT* aLayout ) |
|||
throw( PARSE_ERROR, IO_ERROR ); |
|||
|
|||
private: |
|||
|
|||
/**
|
|||
* Function parseInt |
|||
* parses an integer and constrains it between two values. |
|||
* @param aMin is the smallest return value. |
|||
* @param aMax is the largest return value. |
|||
* @return int - the parsed integer. |
|||
*/ |
|||
int parseInt( int aMin, int aMax ); |
|||
|
|||
/**
|
|||
* Function parseDouble |
|||
* parses a double |
|||
* @return double - the parsed double. |
|||
*/ |
|||
double parseDouble(); |
|||
|
|||
void parseSetup() throw( IO_ERROR, PARSE_ERROR ); |
|||
void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR ); |
|||
void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR ); |
|||
void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ); |
|||
void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ); |
|||
void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR ); |
|||
}; |
|||
|
|||
// PCB_PLOT_PARAMS_PARSER
|
|||
|
|||
PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ) : |
|||
PAGE_LAYOUT_READER_LEXER( aLine, aSource ) |
|||
{ |
|||
m_defaultTextSize.x = m_defaultTextSize.y = TB_DEFAULT_TEXTSIZE; |
|||
m_defaultLineWidth = 0.0; |
|||
m_defaulTextLineWidth = 0.0; |
|||
} |
|||
|
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::Parse( WORKSHEET_LAYOUT* aLayout ) |
|||
throw( PARSE_ERROR, IO_ERROR ) |
|||
{ |
|||
T token; |
|||
WORKSHEET_DATAITEM * item; |
|||
|
|||
LOCALE_IO toggle; |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
if( token == T_LEFT ) |
|||
token = NextTok(); |
|||
|
|||
if( token == T_page_layout ) |
|||
continue; |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_setup: // Defines default values for graphic items
|
|||
parseSetup(); |
|||
break; |
|||
|
|||
case T_line: |
|||
item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_SEGMENT ); |
|||
parseGraphic( item ); |
|||
aLayout->Append( item ); |
|||
break; |
|||
|
|||
case T_rect: |
|||
item = new WORKSHEET_DATAITEM( WORKSHEET_DATAITEM::WS_RECT ); |
|||
parseGraphic( item ); |
|||
aLayout->Append( item ); |
|||
break; |
|||
|
|||
case T_polygon: |
|||
item = new WORKSHEET_DATAITEM_POLYPOLYGON(); |
|||
parsePolygon( (WORKSHEET_DATAITEM_POLYPOLYGON*) item ); |
|||
aLayout->Append( item ); |
|||
break; |
|||
|
|||
case T_tbtext: |
|||
NeedSYMBOLorNUMBER(); |
|||
item = new WORKSHEET_DATAITEM_TEXT( FromUTF8() ); |
|||
parseText( (WORKSHEET_DATAITEM_TEXT*) item ); |
|||
aLayout->Append( item ); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
T token; |
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_LEFT: |
|||
break; |
|||
|
|||
case T_linewidth: |
|||
m_defaultLineWidth = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_textsize: |
|||
m_defaultTextSize.x = parseDouble(); |
|||
m_defaultTextSize.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_textlinewidth: |
|||
m_defaulTextLineWidth = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
aItem->m_LineWidth = 0; |
|||
|
|||
T token; |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
if( token == T_LEFT ) |
|||
token = NextTok(); |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_comment: // Comment, search the closing ')'
|
|||
while( ( token = NextTok() ) != T_RIGHT && token != T_EOF ); |
|||
break; |
|||
|
|||
case T_pos: |
|||
parseCoordinate( aItem->m_Pos ); |
|||
break; |
|||
|
|||
case T_pts: |
|||
parsePolyOutline( aItem ); |
|||
aItem->CloseContour(); |
|||
break; |
|||
|
|||
case T_rotate: |
|||
aItem->m_Orient = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_repeat: |
|||
aItem->m_RepeatCount = parseInt( -1, 100 ); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incrx: |
|||
aItem->m_IncrementVector.x = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incry: |
|||
aItem->m_IncrementVector.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_linewidth: |
|||
aItem->m_LineWidth = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
aItem->SetBoundingBox(); |
|||
} |
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
DPOINT corner; |
|||
T token; |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
if( token == T_LEFT ) |
|||
token = NextTok(); |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_xy: |
|||
corner.x = parseDouble(); |
|||
corner.y = parseDouble(); |
|||
aItem->AppendCorner( corner ); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
T token; |
|||
|
|||
aItem->m_LineWidth = m_defaultLineWidth; |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
if( token == T_LEFT ) |
|||
token = NextTok(); |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_comment: // Comment, search the closing ')'
|
|||
while( ( token = NextTok() ) != T_RIGHT && token != T_EOF ); |
|||
break; |
|||
|
|||
case T_start: |
|||
parseCoordinate( aItem->m_Pos ); |
|||
break; |
|||
|
|||
case T_end: |
|||
parseCoordinate( aItem->m_End ); |
|||
break; |
|||
|
|||
case T_repeat: |
|||
aItem->m_RepeatCount = parseInt( -1, 100 ); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incrx: |
|||
aItem->m_IncrementVector.x = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incry: |
|||
aItem->m_IncrementVector.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_linewidth: |
|||
aItem->m_LineWidth = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
void PAGE_LAYOUT_READER_PARSER::parseText( WORKSHEET_DATAITEM_TEXT* aItem ) |
|||
throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
T token; |
|||
|
|||
aItem->m_TextSize = m_defaultTextSize; |
|||
aItem->m_LineWidth = m_defaulTextLineWidth; |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
if( token == T_LEFT ) |
|||
token = NextTok(); |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_comment: // Comment, search the closing ')'
|
|||
while( ( token = NextTok() ) != T_RIGHT && token != T_EOF ); |
|||
break; |
|||
|
|||
case T_pos: |
|||
parseCoordinate( aItem->m_Pos ); |
|||
break; |
|||
|
|||
case T_repeat: |
|||
aItem->m_RepeatCount = parseInt( -1, 100 ); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incrx: |
|||
aItem->m_IncrementVector.x = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incry: |
|||
aItem->m_IncrementVector.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_incrlabel: |
|||
aItem->m_IncrementLabel = parseInt(INT_MIN, INT_MAX); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_maxlen: |
|||
aItem->m_BoundingBoxSize.x = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_maxheight: |
|||
aItem->m_BoundingBoxSize.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_font: |
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_LEFT: |
|||
break; |
|||
|
|||
case T_bold: |
|||
aItem->m_Flags |= USE_BOLD; |
|||
break; |
|||
|
|||
case T_italic: |
|||
aItem->m_Flags |= USE_ITALIC; |
|||
break; |
|||
|
|||
case T_size: |
|||
aItem->m_TextSize.x = parseDouble(); |
|||
aItem->m_TextSize.y = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
case T_linewidth: |
|||
aItem->m_LineWidth = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
break; |
|||
|
|||
case T_justify: |
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
if( token == T_EOF) |
|||
break; |
|||
|
|||
switch( token ) |
|||
{ |
|||
case T_center: |
|||
aItem->m_Hjustify = GR_TEXT_HJUSTIFY_CENTER; |
|||
aItem->m_Vjustify = GR_TEXT_VJUSTIFY_CENTER; |
|||
break; |
|||
|
|||
case T_left: |
|||
aItem->m_Hjustify = GR_TEXT_HJUSTIFY_LEFT; |
|||
break; |
|||
|
|||
case T_right: |
|||
aItem->m_Hjustify = GR_TEXT_HJUSTIFY_RIGHT; |
|||
break; |
|||
|
|||
case T_top: |
|||
aItem->m_Vjustify = GR_TEXT_VJUSTIFY_TOP; |
|||
break; |
|||
|
|||
case T_bottom: |
|||
aItem->m_Vjustify = GR_TEXT_VJUSTIFY_BOTTOM; |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
break; |
|||
|
|||
case T_rotate: |
|||
aItem->m_Orient = parseDouble(); |
|||
NeedRIGHT(); |
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// parse an expression like " 25 1 ltcorner)"
|
|||
void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord) |
|||
throw( IO_ERROR, PARSE_ERROR ) |
|||
{ |
|||
T token; |
|||
|
|||
aCoord.m_Pos.x = parseDouble(); |
|||
aCoord.m_Pos.y = parseDouble(); |
|||
|
|||
while( ( token = NextTok() ) != T_RIGHT ) |
|||
{ |
|||
switch( token ) |
|||
{ |
|||
case T_ltcorner: |
|||
aCoord.m_Anchor = LT_CORNER; // left top corner
|
|||
break; |
|||
|
|||
case T_lbcorner: |
|||
aCoord.m_Anchor = LB_CORNER; // left bottom corner
|
|||
break; |
|||
|
|||
case T_rbcorner: |
|||
aCoord.m_Anchor = RB_CORNER; // right bottom corner
|
|||
break; |
|||
|
|||
case T_rtcorner: |
|||
aCoord.m_Anchor = RT_CORNER; // right top corner
|
|||
break; |
|||
|
|||
default: |
|||
Unexpected( CurText() ); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
int PAGE_LAYOUT_READER_PARSER::parseInt( int aMin, int aMax ) |
|||
{ |
|||
T token = NextTok(); |
|||
|
|||
if( token != T_NUMBER ) |
|||
Expecting( T_NUMBER ); |
|||
|
|||
int val = atoi( CurText() ); |
|||
|
|||
if( val < aMin ) |
|||
val = aMin; |
|||
else if( val > aMax ) |
|||
val = aMax; |
|||
|
|||
return val; |
|||
} |
|||
|
|||
|
|||
double PAGE_LAYOUT_READER_PARSER::parseDouble() |
|||
{ |
|||
T token = NextTok(); |
|||
|
|||
if( token != T_NUMBER ) |
|||
Expecting( T_NUMBER ); |
|||
|
|||
double val = strtod( CurText(), NULL ); |
|||
|
|||
return val; |
|||
} |
|||
|
|||
// defaultPageLayout is the default page layout description
|
|||
// using the S expr.
|
|||
// see page_layout_default_shape.cpp
|
|||
extern const char defaultPageLayout[]; |
|||
|
|||
void WORKSHEET_LAYOUT::SetDefaultLayout() |
|||
{ |
|||
ClearList(); |
|||
PAGE_LAYOUT_READER_PARSER lp_parser( defaultPageLayout, wxT( "default page" ) ); |
|||
|
|||
try |
|||
{ |
|||
lp_parser.Parse( this ); |
|||
} |
|||
catch( IO_ERROR ioe ) |
|||
{ |
|||
wxLogMessage( ioe.errorText ); |
|||
} |
|||
} |
|||
|
|||
#include <wx/file.h>
|
|||
|
|||
// SetLayout() try to load a custom layout file,
|
|||
// currently defined by the environment variable KICAD_WKSFILE
|
|||
// (a *.kicad_wks file).
|
|||
// if does not exists, loads the default page layout.
|
|||
void WORKSHEET_LAYOUT::SetLayout() |
|||
{ |
|||
wxString fullFileName; |
|||
wxGetEnv( wxT( "KICAD_WKSFILE" ), &fullFileName ); |
|||
|
|||
if( fullFileName.IsEmpty() || !wxFileExists( fullFileName ) ) |
|||
{ |
|||
#if 0
|
|||
if( !fullFileName.IsEmpty() ) |
|||
{ |
|||
wxLogMessage( wxT("Page layout file <%s> not found"), |
|||
fullFileName.GetData() ); |
|||
} |
|||
#endif
|
|||
SetDefaultLayout(); |
|||
return; |
|||
} |
|||
|
|||
wxFile wksFile( fullFileName ); |
|||
|
|||
if( ! wksFile.IsOpened() ) |
|||
{ |
|||
SetDefaultLayout(); |
|||
return; |
|||
} |
|||
|
|||
int filelen = wksFile.Length(); |
|||
char * buffer = new char[filelen+10]; |
|||
|
|||
if( wksFile.Read( buffer, filelen ) != filelen ) |
|||
wxLogMessage( _("The file <%s> was not fully read"), |
|||
fullFileName.GetData() ); |
|||
else |
|||
{ |
|||
buffer[filelen]=0; |
|||
ClearList(); |
|||
PAGE_LAYOUT_READER_PARSER lp_parser( buffer, fullFileName ); |
|||
|
|||
try |
|||
{ |
|||
lp_parser.Parse( this ); |
|||
} |
|||
catch( IO_ERROR ioe ) |
|||
{ |
|||
wxLogMessage( ioe.errorText ); |
|||
} |
|||
} |
|||
|
|||
delete[] buffer; |
|||
} |
|||
@ -1,37 +0,0 @@ |
|||
page_layout |
|||
setup |
|||
linewidth |
|||
textlinewidth |
|||
textsize |
|||
comment |
|||
line |
|||
rect |
|||
polygon |
|||
tbtext |
|||
ltcorner |
|||
lbcorner |
|||
rbcorner |
|||
rtcorner |
|||
name |
|||
pos |
|||
start |
|||
end |
|||
pts |
|||
xy |
|||
maxlen |
|||
maxheight |
|||
font |
|||
bold |
|||
italic |
|||
size |
|||
justify |
|||
left |
|||
center |
|||
right |
|||
top |
|||
bottom |
|||
rotate |
|||
repeat |
|||
incrx |
|||
incry |
|||
incrlabel |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue