Merge remote-tracking branch 'remotes/origin/master' into dvb

This commit is contained in:
Matthias Koefferlein 2019-04-04 07:35:43 +02:00
commit 52fb8b0f65
1437 changed files with 35338 additions and 31290 deletions

View File

@ -265,7 +265,7 @@ matrix:
packages:
- ccache
env:
- MATRIX_EVAL="brew update; brew install sashkab/python/python36; brew link --force --overwrite python36; shopt -s expand_aliases; alias python='/usr/local/opt/python36/bin/python3.6'; alias pip='/usr/local/opt/python36/bin/pip3.6';"
- MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python36; brew link --force --overwrite python36; shopt -s expand_aliases; alias python='/usr/local/opt/python36/bin/python3.6'; alias pip='/usr/local/opt/python36/bin/pip3.6';"
- ARCHFLAGS="-std=c++11"
- PIP_UPDATE="1"
- PYTHON_BUILD=true
@ -280,25 +280,25 @@ matrix:
packages:
- ccache
env:
- MATRIX_EVAL="brew update; brew install sashkab/python/python35; brew link --force --overwrite python35; shopt -s expand_aliases; alias python='/usr/local/opt/python35/bin/python3.5'; alias pip='/usr/local/opt/python35/bin/pip3.5';"
- MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python35; brew link --force --overwrite python35; shopt -s expand_aliases; alias python='/usr/local/opt/python35/bin/python3.5'; alias pip='/usr/local/opt/python35/bin/pip3.5';"
- ARCHFLAGS="-std=c++11"
- PIP_UPDATE="1"
- PYTHON_BUILD=true
# - name: "klayout python3.4.9 osx10.13"
- name: "cp34-cp34m-macosx_10_13_x86_64.whl"
os: osx
osx_image: xcode9.4 # macOS 10.13
cache: ccache
addons:
homebrew:
packages:
- ccache
env:
- MATRIX_EVAL="brew update; brew install sashkab/python/python34; brew link --force --overwrite python34; shopt -s expand_aliases; alias python='/usr/local/opt/python34/bin/python3.4'; alias pip='/usr/local/opt/python34/bin/pip3.4';"
- ARCHFLAGS="-std=c++11"
- PIP_UPDATE="1"
- PYTHON_BUILD=true
# # - name: "klayout python3.4.9 osx10.13"
# - name: "cp34-cp34m-macosx_10_13_x86_64.whl"
# os: osx
# osx_image: xcode9.4 # macOS 10.13
# cache: ccache
# addons:
# homebrew:
# packages:
# - ccache
# env:
# - MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python34; brew link --force --overwrite python34; shopt -s expand_aliases; alias python='/usr/local/opt/python34/bin/python3.4'; alias pip='/usr/local/opt/python34/bin/pip3.4';"
# - ARCHFLAGS="-std=c++11"
# - PIP_UPDATE="1"
# - PYTHON_BUILD=true
# - name: "klayout python3 osx10.12"
- name: "cp37-cp37m-macosx_10_12_x86_64.whl"
@ -555,6 +555,7 @@ script:
python testdata/pymod/import_db.py;
python testdata/pymod/import_rdb.py;
python testdata/pymod/import_tl.py;
python testdata/pymod/import_lib.py;
python testdata/pymod/pya_tests.py;
fi
fi
@ -565,6 +566,7 @@ script:
python testdata/pymod/import_db.py;
python testdata/pymod/import_rdb.py;
python testdata/pymod/import_tl.py;
python testdata/pymod/import_lib.py;
python testdata/pymod/pya_tests.py;
klayout_version=$(python -c 'import setup; print(setup.Config().version())');
mkdir -p deploy/dist-pymod/$klayout_version;
@ -578,4 +580,13 @@ script:
fi
after_success:
# upload to dropbox
# need DROPBOX_OAUTH_BEARER environment variable
- dropbox-deployment
# uploading to pypi using twine
# need TWINE_USERNAME, TWINE_PASSWORD and TWINE_REPOSITORY_URL env variable
- if [ "$PYTHON_BUILD" = true ] || [ "$DOCKER_BUILD" = true ]; then
pip install -U twine || sudo pip install -U twine;
twine upload --skip-existing deploy/dist-pymod/$klayout_version/*;
fi

View File

@ -1315,7 +1315,7 @@
* The net tracer now allows to use layer combinations (derived by boolean operations)
for the conductive and via layers. See The Net Tracing Feature for details.
* A technology management is integrated into Klayout.
That allows to switch various settings depending on the choosen technology.
That allows to switch various settings depending on the chosen technology.
See About Technology Management for details about this feature.
* The drawing can now be rotated or flipped without having to modify the layout.
This function can be found in the "Display" menu under "Global Transformation".
@ -1865,7 +1865,7 @@
* The instance browser now has a "Choose cell" button where the cell can be
chosen whose instances will be presented.
* For most editing operations, the status bar will now indicate more detailed
informations such as move distance.
information such as move distance.
* Pasted shapes and instances now are selected initially.
* Enhanced OASIS compression mode (can be chosen from the options dialog on
saving). Reduces file size considerably by creating regular shape arrays if

View File

@ -84,6 +84,7 @@ jobs:
python testdata/pymod/import_db.py
python testdata/pymod/import_rdb.py
python testdata/pymod/import_tl.py
python testdata/pymod/import_lib.py
python testdata/pymod/pya_tests.py
displayName: 'Test KLayout pymod'
@ -101,7 +102,7 @@ jobs:
artifactName: 'wheel-$(python.version).$(python.architecture)'
- job: 'Deploy'
displayName: 'Combine Windows wheels'
displayName: 'Combine Windows wheels and deploy to PyPI'
dependsOn: Build
pool:
vmImage: 'vs2017-win2016' # other options: 'macOS-10.13', 'ubuntu-16.04'
@ -149,4 +150,12 @@ jobs:
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'windows_wheels'
- bash: |
pip install -U twine
twine upload --skip-existing $BUILD_ARTIFACTSTAGINGDIRECTORY/*
env:
TWINE_USERNAME: $(TWINE_USERNAME)
TWINE_PASSWORD: $(TWINE_PASSWORD)
TWINE_REPOSITORY_URL: $(TWINE_REPOSITORY_URL)
displayName: 'Uploading to PyPI'

View File

@ -41,5 +41,7 @@
<string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>NSRequiresAquaSystemAppearance</key>
<true/>
</dict>
</plist>

71
scripts/compile_glyphs.rb Executable file
View File

@ -0,0 +1,71 @@
#!/usr/bin/ruby
files = []
glyph_dir = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs")
Dir::new(glyph_dir).each do |file|
if file !~ /^\./
files << file
end
end
ccfile = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs.cc")
File.open(ccfile, "w") do |out|
out.puts <<"END"
/**
* THIS FILE HAS BEEN CREATED AUTOMATICALLY BY "compile_glyphs.rb"
* DO NOT EDIT!
*/
END
nfile = 0
files.each do |f|
nfile += 1
name = f.sub(/\..*$/, "")
out.puts("\n// File: #{f}")
out.puts("static const char *name_#{nfile} = \"#{name}\";")
out.puts("static const char *description_#{nfile} = \"#{f}\";")
out.puts("static const uint8_t data_#{nfile}[] = {");
File.open(File.join(glyph_dir, f), "rb") do |ly|
bytes = ly.read
hex = ""
bytes.size.times do |i|
hex += "0x%02x, " % bytes[i].ord
if i % 8 == 7
out.puts " " + hex
i = 0
hex = ""
end
end
if hex != ""
out.puts " " + hex
end
end
out.puts(" 0xff // dummy")
out.puts("};")
end
out.puts("\nstatic void load_glyphs (std::vector<db::TextGenerator> &generators)\n{\n")
nfile.times do |n|
out.puts(" generators.push_back (db::TextGenerator ());")
out.puts(" generators.back ().load_from_data ((const char *) data_#{n + 1}, sizeof (data_#{n + 1}) - 1, name_#{n + 1}, description_#{n + 1});\n")
end
out.puts("}")
end

Binary file not shown.

View File

@ -1693,7 +1693,7 @@ END
if ia < n_min_args || !t.init
ofile.puts(" #{tn} = args.read<#{ta} > (heap);")
ofile.puts(" #{tn} = gsi::arg_reader<#{ta} >() (args, heap);")
else
@ -1704,7 +1704,7 @@ END
init_expr = init_expr.gsub("%HEAP%", "heap")
end
ofile.puts(" #{tn} = args ? args.read<#{ta} > (heap) : (#{ta})(#{init_expr});")
ofile.puts(" #{tn} = args ? gsi::arg_reader<#{ta} >() (args, heap) : gsi::arg_maker<#{ta} >() (#{init_expr}, heap);")
end

View File

@ -310,6 +310,10 @@ class Config(object):
else:
loader_path = '$ORIGIN/..'
args += ['-Wl,-rpath,' + loader_path]
# default linux shared object compilation uses the '-g' flag,
# which generates unnecessary debug information
# removing with strip-all during the linking stage
args += ['-Wl,--strip-all']
return args
def macros(self):
@ -322,7 +326,7 @@ class Config(object):
"""
Gets the version string
"""
return "0.26.0.dev11"
return "0.26.0.dev14"
config = Config()
@ -389,11 +393,6 @@ config.add_extension(_pya)
_db_path = os.path.join("src", "db", "db")
_db_sources = set(glob.glob(os.path.join(_db_path, "*.cc")))
# Not a real source:
# Caveat, in source distribution tarballs from pypi, these files will
# not exist. So we need an error-free discard method instead of list's remove.
_db_sources.discard(os.path.join(_db_path, "fonts.cc"))
_db = Library(config.root + '._db',
define_macros=config.macros() + [('MAKE_DB_LIBRARY', 1)],
include_dirs=[_tl_path, _gsi_path, _db_path],
@ -404,6 +403,22 @@ _db = Library(config.root + '._db',
sources=list(_db_sources))
config.add_extension(_db)
# ------------------------------------------------------------------
# _lib dependency library
_lib_path = os.path.join("src", "lib", "lib")
_lib_sources = set(glob.glob(os.path.join(_lib_path, "*.cc")))
_lib = Library(config.root + '._lib',
define_macros=config.macros() + [('MAKE_LIB_LIBRARY', 1)],
include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
language='c++',
extra_link_args=config.link_args('_lib'),
extra_compile_args=config.compile_args('_lib'),
sources=list(_lib_sources))
config.add_extension(_lib)
# ------------------------------------------------------------------
# _rdb dependency library
@ -473,6 +488,19 @@ db = Extension(config.root + '.dbcore',
extra_link_args=config.link_args('dbcore'),
sources=list(db_sources))
# ------------------------------------------------------------------
# lib extension library
lib_path = os.path.join("src", "pymod", "lib")
lib_sources = set(glob.glob(os.path.join(lib_path, "*.cc")))
lib = Extension(config.root + '.libcore',
define_macros=config.macros(),
include_dirs=[_lib_path, _tl_path, _gsi_path, _pya_path],
extra_objects=[config.path_of('_lib', _lib_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
extra_link_args=config.link_args('libcore'),
sources=list(lib_sources))
# ------------------------------------------------------------------
# rdb extension library
@ -482,7 +510,7 @@ rdb_sources = set(glob.glob(os.path.join(rdb_path, "*.cc")))
rdb = Extension(config.root + '.rdbcore',
define_macros=config.macros(),
include_dirs=[_rdb_path, _db_path, _tl_path, _gsi_path, _pya_path],
include_dirs=[_rdb_path, _tl_path, _gsi_path, _pya_path],
extra_objects=[config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
extra_link_args=config.link_args('rdbcore'),
sources=list(rdb_sources))
@ -512,4 +540,4 @@ if __name__ == '__main__':
url='https://github.com/klayoutmatthias/klayout',
packages=find_packages('src/pymod/distutils_src'),
package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
ext_modules=[_tl, _gsi, _pya, _db, _rdb] + db_plugins + [tl, db, rdb])
ext_modules=[_tl, _gsi, _pya, _db, _lib, _rdb] + db_plugins + [tl, db, lib, rdb])

View File

@ -892,16 +892,18 @@ void
Service::drag_cancel ()
{
if (m_drawing) {
widget ()->ungrab_mouse (this);
if (mp_active_ruler) {
delete mp_active_ruler;
mp_active_ruler = 0;
}
m_drawing = false;
}
if (mp_active_ruler) {
delete mp_active_ruler;
mp_active_ruler = 0;
}
if (mp_transient_ruler) {
delete mp_transient_ruler;
mp_transient_ruler = 0;
}
}
@ -1047,7 +1049,7 @@ Service::begin_move (lay::Editable::MoveMode mode, const db::DPoint &p, lay::ang
double l = double (search_range) / widget ()->mouse_event_trans ().mag ();
db::DBox search_dbox = db::DBox (p, p).enlarged (db::DVector (l, l));
// test, wether we are moving a handle of one selected object
// test, whether we are moving a handle of one selected object
for (std::map<obj_iterator, unsigned int>::const_iterator r = m_selected.begin (); r != m_selected.end (); ++r) {
obj_iterator ri = r->first;

View File

@ -897,7 +897,7 @@ gsi::Class<AnnotationRef> decl_Annotation (decl_BasicAnnotation, "lay", "Annotat
),
"@brief A layout annotation (i.e. ruler)\n"
"\n"
"Annotation objects provide a way to attach measurements or descriptive informations to a layout view. "
"Annotation objects provide a way to attach measurements or descriptive information to a layout view. "
"Annotation objects can appear as rulers for example. Annotation objects can be configured in "
"different ways using the styles provided. By configuring an annotation object properly, it can appear "
"as a rectangle or a plain line for example.\n"

View File

@ -145,7 +145,7 @@ GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::strin
)
<< tl::arg (group +
"#--multi-xy-records", &m_gds2_multi_xy_records, "Allows unlimited number of points",
"If this option is given, multiple XY records will be written to accomodate an unlimited number "
"If this option is given, multiple XY records will be written to accommodate an unlimited number "
"of points per polygon or path. However, such files may not be compatible with some consumers."
)
<< tl::arg (group +
@ -169,7 +169,7 @@ GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::strin
<< tl::arg (group +
"#!--no-timestamps", &m_gds2_write_timestamps, "Don't write timestamps",
"Writes a dummy time stamp instead of the actual time. With this option, GDS2 files become "
"bytewise indentical even if written at different times. This option is useful if binary "
"bytewise identical even if written at different times. This option is useful if binary "
"identity is important (i.e. in regression scenarios)."
)
<< tl::arg (group +

View File

@ -624,7 +624,7 @@ struct DB_PUBLIC_TEMPLATE box
* @brief Conversion to string
*
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
* micron units. In addition, a micron format is choosen for output of these coordinates.
* micron units. In addition, a micron format is chosen for output of these coordinates.
*/
std::string to_string (double dbu) const
{

View File

@ -960,7 +960,7 @@ private:
*
* Whenever the cluster receiver gets noticed of an interaction, it will
* create new clusters or extend or join existing clusters. When a cluster
* is finished, it's finish method is called. That allows to take any
* is finished, it's finish method is called. That allows one to take some
* final actions on the cluster.
*/
template <class Obj, class Prop, class Cluster>

View File

@ -60,7 +60,7 @@ class ImportLayerMapping;
* @brief The cell object
*
* A cell object consists of a set of shape containers (called layers),
* a set of child cell instances and auxiliary informations such as
* a set of child cell instances and auxiliary information such as
* the parent instance list.
* A cell is identified through an index given to the cell upon instantiation.
* The cell index is valid in the context of a cell graph object which
@ -126,7 +126,7 @@ public:
/**
* @brief Return the const shapes list of the given layer
*
* This method allows to access the shapes list on a certain layer.
* This method allows one to access the shapes list on a certain layer.
* If the layer does not exist yet, a reference to an empty list is
* returned.
*
@ -139,7 +139,7 @@ public:
/**
* @brief Return the shapes list of the given layer
*
* This method allows to access the shapes list on a certain layer.
* This method allows one to access the shapes list on a certain layer.
* If the layer does not exist yet, it is created.
*
* @param index The layer index of the shapes list to retrieve
@ -601,7 +601,7 @@ public:
/**
* @brief The parent instance list begin iterator
*
* The begin_parent_insts() allows to access to the parent instance list.
* The begin_parent_insts() allows one to access to the parent instance list.
*/
parent_inst_iterator begin_parent_insts () const;
@ -725,7 +725,7 @@ public:
* call this cell to the set given. It is assumed that the if the set contains a cell, it
* will also contain all called cells, so it may act as a cache.
*
* This version allows to restrict the search to a cone of the hierarchy tree, that is
* This version allows one to restrict the search to a cone of the hierarchy tree, that is
* a set of cells which are collected from another call of "collect_called_cells" with another initial cell.
*
* @param callers The set of called cells (used as cache)
@ -1007,7 +1007,7 @@ private:
* @brief Sort the child instance list
*
* The child instances are first sorted by cell index, then by raw transformation
* (excluding displacement). This allows to simplify the bbox computation by
* (excluding displacement). This allows one to simplify the bbox computation by
* convolution of the displacements bboxes with the object bboxes.
*/
void sort_child_insts ();

View File

@ -59,7 +59,7 @@ public:
/**
* @brief Instantiate a counter object with a reference to the given cell graph
*
* This version allows to specify a initial (starting) cell where only the cell tree below the
* This version allows one to specify a initial (starting) cell where only the cell tree below the
* staring cell is considered. Multiplicity refers to the number of instances below the
* initial cell.
*/
@ -159,7 +159,7 @@ public:
/**
* @brief Instantiate a counter object with a reference to the given cell graph
*
* This version allows to specify a initial (starting) cell where only the cell tree below the
* This version allows one to specify a initial (starting) cell where only the cell tree below the
* staring cell is considered. Multiplicity refers to the number of instances below the
* initial cell.
*/

View File

@ -52,7 +52,7 @@ public:
}
/**
* @brief The dtor is virtual to allow to exploit RTTI
* @brief The dtor is virtual to exploit RTTI
*/
virtual ~ClipboardObject ()
{
@ -114,7 +114,7 @@ private:
/**
* @brief The clipboard class
*
* The clipboard allows to store objects from the ClipboardObject
* The clipboard allows one to store objects from the ClipboardObject
* class. These objects are owned by the clipboard class and must
* be passed after have being newed to the += operator.
* There is a static instance of the clipboard that should be used

View File

@ -598,7 +598,7 @@ public:
* @brief Conversion to a string.
*
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
* micron units. In addition, a micron format is choosen for output of these coordinates.
* micron units. In addition, a micron format is chosen for output of these coordinates.
*/
std::string to_string (double dbu) const
{

View File

@ -306,7 +306,7 @@ public:
* @brief Conversion to a string.
*
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
* micron units. In addition, a micron format is choosen for output of these coordinates.
* micron units. In addition, a micron format is chosen for output of these coordinates.
*/
std::string to_string (double dbu) const
{

View File

@ -312,7 +312,7 @@ public:
/**
* @brief Constructor from a RecursiveShapeIterator
*
* Creates an edge pair set from a recursive shape iterator. This allows to feed an edge pair set
* Creates an edge pair set from a recursive shape iterator. This allows one to feed an edge pair set
* from a hierarchy of cells.
*/
explicit EdgePairs (const RecursiveShapeIterator &si);
@ -320,7 +320,7 @@ public:
/**
* @brief Constructor from a RecursiveShapeIterator with a transformation
*
* Creates an edge pair set from a recursive shape iterator. This allows to feed an edge pair set
* Creates an edge pair set from a recursive shape iterator. This allows one to feed an edge pair set
* from a hierarchy of cells. The transformation is useful to scale to a specific
* DBU for example.
*/

View File

@ -513,7 +513,7 @@ private:
* @brief Boolean operations
*
* This class implements a boolean operation similar to BooleanOp, but
* in addition it allows to specify the merge mode for the two inputs.
* in addition it allows one to specify the merge mode for the two inputs.
* See "SimpleMergeOp" for the definition of the merge modes.
* This operator is especially useful to implement boolean operations
* with sized polygons which required a >0 interpretation.
@ -540,8 +540,8 @@ private:
* @brief Merge operation
*
* This incarnation of the evaluator class implements a merge operation
* which allows to distinguish polygons (through edge properties) and
* allows to specify a overlap value. Default is 0 which means that the
* which allows one to distinguish polygons (through edge properties) and
* allows one to specify a overlap value. Default is 0 which means that the
* merge is equivalent to producing all polygins. A overlap value of 1 means
* that at least two polygons must overlap to produce a result.
*/
@ -695,7 +695,7 @@ public:
* The other merge operation provided for this purpose is "merge" which normalizes each polygon individually before
* merging them. "simple_merge" is somewhat faster and consumes less memory.
*
* This method produces polygons and allows to fine-tune the parameters for that purpose.
* This method produces polygons and allows fine-tuning the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a SimpleMerge operator and puts the result into an output vector.
@ -711,7 +711,7 @@ public:
/**
* @brief Merge the given edges in a simple "non-zero wrapcount" fashion
*
* The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other.
* The edges provided must form valid closed contours. Contours oriented differently "cancel" each other.
* Overlapping contours are merged when the orientation is the same.
*
* The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while
@ -729,10 +729,10 @@ public:
/**
* @brief Merge the given edges in a simple "non-zero wrapcount" fashion into polygons
*
* The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other.
* The edges provided must form valid closed contours. Contours oriented differently "cancel" each other.
* Overlapping contours are merged when the orientation is the same.
*
* This method produces polygons and allows to fine-tune the parameters for that purpose.
* This method produces polygons and allows fine-tuning the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a SimpleMerge operator and puts the result into an output vector.
@ -750,7 +750,7 @@ public:
*
* In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them.
* Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the
* hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps
* hull. In addition, this method allows one to select areas with a higher wrap count which allows one to compute overlaps
* of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping
* polygons do not contribute to higher wrap count areas.
*
@ -771,11 +771,11 @@ public:
*
* In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them.
* Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the
* hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps
* hull. In addition, this method allows one to select areas with a higher wrap count which allows one to compute overlaps
* of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping
* polygons do not contribute to higher wrap count areas.
*
* This method produces polygons and allows to fine-tune the parameters for that purpose.
* This method produces polygons and allows one to fine-tune the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a Merge operator and puts the result into an output vector.
@ -795,7 +795,7 @@ public:
* on the individual result polygons of the merge step. The result may contain overlapping contours, but no self-overlaps.
*
* dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).
* The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both
* The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both
* dx and dy.
*
* The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while
@ -820,10 +820,10 @@ public:
* Polygon overlap occures if the polygons are close enough, so a positive sizing makes polygons overlap.
*
* dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).
* The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both
* The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both
* dx and dy.
*
* This method produces polygons and allows to fine-tune the parameters for that purpose.
* This method produces polygons and allows one to fine-tune the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a SimpleMerge operator and puts the result into an output vector.
@ -891,7 +891,7 @@ public:
* @brief Boolean operation for a set of given polygons, creating polygons
*
* This method computes the result for the given boolean operation on two sets of polygons.
* This method produces polygons on output and allows to fine-tune the parameters for that purpose.
* This method produces polygons on output and allows one to fine-tune the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a Boolean operator and puts the result into an output vector.
@ -932,7 +932,7 @@ public:
* The input edges must form closed contours where holes and hulls must be oriented differently.
* The input edges are processed with a simple non-zero wrap count rule as a whole.
*
* This method produces polygons on output and allows to fine-tune the parameters for that purpose.
* This method produces polygons on output and allows one to fine-tune the parameters for that purpose.
*
* This is a convenience method that bundles filling of the edges, processing with
* a Boolean operator and puts the result into an output vector.

View File

@ -332,7 +332,7 @@ public:
/**
* @brief Constructor from a RecursiveShapeIterator
*
* Creates an edge set from a recursive shape iterator. This allows to feed an edge set
* Creates an edge set from a recursive shape iterator. This allows feeding an edge set
* from a hierarchy of cells.
*/
explicit Edges (const RecursiveShapeIterator &si, bool as_edges = true);
@ -340,7 +340,7 @@ public:
/**
* @brief Constructor from a RecursiveShapeIterator with a transformation
*
* Creates an edge set from a recursive shape iterator. This allows to feed an edge set
* Creates an edge set from a recursive shape iterator. This allows feeding an edge set
* from a hierarchy of cells. The transformation is useful to scale to a specific
* DBU for example.
*/
@ -976,7 +976,7 @@ public:
/**
* @brief Returns edges (point-like) representing the start part of the edges
*
* The length of the part can be choosen by length or a fraction of the original length.
* The length of the part can be chosen by length or a fraction of the original length.
* If length and fraction are 0, a point at the beginning of the edge will be created.
* If length is non-zero and fraction is 0, a segment in the direction of the edge
* with the given length is created, even if the length is larger than the original

View File

@ -37,7 +37,7 @@ class PolygonSink;
*
* This filter has two parameters: lmin and lmax.
* It will filter all edges for which the length is >= lmin and < lmax.
* There is an "invert" flag which allows to select all edges not
* There is an "invert" flag which allows selecting all edges not
* matching the criterion.
*/
@ -108,7 +108,7 @@ private:
* This filter has two parameters: amin and amax.
* It will filter all edges for which the orientation angle is >= amin and < amax.
* The orientation angle is measured in degree against the x axis in the mathematical sense.
* There is an "invert" flag which allows to select all edges not
* There is an "invert" flag which allows selecting all edges not
* matching the criterion.
*/

View File

@ -36,6 +36,9 @@
#include <cctype>
// compiled with "scripts/compile_glyphs.rb":
#include "glyphs.cc_gen"
namespace db
{
@ -155,13 +158,21 @@ TextGenerator::load_from_resource (const std::string &name)
QByteArray data = qUncompress (QByteArray ((const char *) res.data (), int (res.size ())));
load_from_data (data.constData (), data.size (), tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ()), name);
}
#endif
void
TextGenerator::load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description)
{
db::Layout layout;
tl::InputMemoryStream memory_stream (data.constData (), data.size ());
tl::InputMemoryStream memory_stream (data, ndata);
tl::InputStream stream (memory_stream);
db::Reader reader (stream);
db::LayerMap map = reader.read (layout);
m_description = name;
m_description = description;
m_name = name;
std::pair<bool, unsigned int> l1 = map.logical (db::LDPair (1, 0));
std::pair<bool, unsigned int> l2 = map.logical (db::LDPair (2, 0));
@ -170,10 +181,7 @@ TextGenerator::load_from_resource (const std::string &name)
if (l1.first && l2.first) {
read_from_layout (layout, l1.second, l2.second, l3.second);
}
m_name = tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ());
}
#endif
void
TextGenerator::load_from_file (const std::string &filename)
@ -323,22 +331,8 @@ TextGenerator::generators ()
s_fonts.clear ();
#if defined(HAVE_QT)
const char *resources[] = {
":/fonts/std_font.gds"
};
for (size_t i = 0 ; i < sizeof (resources) / sizeof (resources [0]); ++i) {
try {
tl::log << "Loading font from resource " << resources [i] << " ..";
s_fonts.push_back (TextGenerator ());
s_fonts.back ().load_from_resource (resources [i]);
} catch (tl::Exception &ex) {
tl::error << ex.msg ();
s_fonts.pop_back ();
}
}
#endif
// load the compiled-in glyphs
load_glyphs (s_fonts);
// scan for font files
for (std::vector<std::string>::const_iterator p = s_font_paths.begin (); p != s_font_paths.end (); ++p) {

View File

@ -83,6 +83,11 @@ public:
void load_from_resource (const std::string &name);
#endif
/**
* @brief Loads from the given binary data
*/
void load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description);
/**
* @brief Loads the font from the given file
*/

View File

@ -67,7 +67,7 @@ struct HersheyFont
int width, height;
};
#include "fonts.cc"
#include "fonts.cc_gen"
const int line_spacing = 4;

View File

@ -306,7 +306,7 @@ public:
/**
* @brief Adds the given attribute to the attribute set
*
* Attributes are arbitary IDs attached to clusters.
* Attributes are arbitrary IDs attached to clusters.
* The attribute value 0 is reserved for "no attribute" and is not
* put into the set.
*/

View File

@ -138,7 +138,7 @@ template <>
class shape_reference_translator<db::Edge>
{
public:
typedef typename db::Edge shape_type;
typedef db::Edge shape_type;
shape_reference_translator (db::Layout * /*target_layout*/)
{
@ -476,7 +476,13 @@ local_processor_cell_contexts<TS, TI, TR>::compute_results (const local_processo
CRONOLOGY_COMPUTE_BRACKET(event_propagate)
c->second->propagate (res);
// gcc 4.4.7 (at least) doesn't have an operator== in std::unordered_set, so we skip this
// optimization
#if defined(__GNUC__) && __GNUC__ == 4
} else {
#else
} else if (res != common) {
#endif
CRONOLOGY_COMPUTE_BRACKET(event_propagate)

View File

@ -1262,7 +1262,7 @@ private:
* The generic iterators are used to access these
*
* Internally, the instance list uses a box tree which treats empty cells as single point boxes when a all-layer search is performed.
* That allows to retrieve such instances with a search.
* That allows retrieving such instances with a search.
*/
class DB_PUBLIC Instances
@ -1655,7 +1655,7 @@ public:
/**
* @brief The parent instance list begin iterator
*
* The begin_ParentInsts() allows to access to the parent instance list.
* The begin_parent_insts() method gives access to the parent instance list.
*/
ParentInstIterator begin_parent_insts (const layout_type *g) const
{

View File

@ -138,7 +138,7 @@ struct LPLogicalLessFunc
* @brief A layer offset
*
* This struct defines a layer offset which can be "added" to a LayerProperties object
* If the layer offset is defined with a name, any occurance of '*' in the string
* If the layer offset is defined with a name, any occurrence of '*' in the string
* is replaced with the original name. This way, applying "*_A" with "+" yields a
* postfix "_A" to the original layer name (if it is named).
*/

View File

@ -1304,7 +1304,7 @@ Layout::do_update ()
try {
// if the hierarchy has been changed so far, update
// the hierarchy management informations
// the hierarchy management information
if (hier_dirty ()) {
{
tl::SelfTimer timer (tl::verbosity () > layout_base_verbosity + 10, "Updating relations");
@ -1324,7 +1324,7 @@ Layout::do_update ()
// if something on the bboxes (either on shape level or on
// cell bbox level - i.e. by child instances) has been changed,
// update the bbox informations. In addition sort the shapes
// update the bbox information. In addition sort the shapes
// lists of region queries, since they might have changed once
// the bboxes are dirty.
if (bboxes_dirty ()) {

View File

@ -512,7 +512,7 @@ public:
Layout (db::Manager *manager = 0);
/**
* @brief Standard constructor which allows to specify the editable mode
* @brief Standard constructor which allows one to specify editable mode
*/
Layout (bool editable, db::Manager *manager = 0);
@ -1433,7 +1433,7 @@ public:
* @brief Forces an update even if the layout is under construction
*
* This method behaves like "update" but forces and update even if the
* "under_construction" state is active. This allows to do the update
* "under_construction" state is active. This allows one to do the update
* in certain stages without triggering the update automatically and
* too frequently.
*/

View File

@ -187,7 +187,7 @@ bool DB_PUBLIC compare_layouts (const db::Layout &a, const db::Layout &b, unsign
/**
* @brief Compare two layouts using the specified top cells
*
* This function basically works like the previous one but allows to specify top cells which
* This function basically works like the previous one but allows one to specify top cells which
* are compared hierarchically.
*/
bool DB_PUBLIC compare_layouts (const db::Layout &a, db::cell_index_type top_a, const db::Layout &b, db::cell_index_type top_b, unsigned int flags, db::Coord tolerance, DifferenceReceiver &r);

View File

@ -551,7 +551,7 @@ public:
/**
* @brief Increment the iterator: deliver the next state
*
* This method is equivalent to operator++, but it allows to specify
* This method is equivalent to operator++, but it allows one to specify
* a boolean parameter telling whether the operation requested shall be
* skipped. This only applies to queries with an action like "delete" or "with".
*/

View File

@ -95,7 +95,7 @@ public:
* @brief Invalidate the bounding boxes
*
* This method is supposed to be called by shape containers for example if
* some event has occured that changed the bounding boxes.
* some event has occurred that changed the bounding boxes.
*
* If the index is std::numeric_limits<unsigned int>::max, this method
* applies to all layers.

View File

@ -471,7 +471,7 @@ public:
* * No connection indicated (circuit_cell_name_prefix == 0: the net shapes are simply put into their
* respective circuits. The connections are not indicated.
* * Subnet hierarchy (circuit_cell_name_prefix != 0): for each root net, a full hierarchy is built
* to accomodate the subnets (see build_net in recursive mode).
* to accommodate the subnets (see build_net in recursive mode).
*
* If a device cell name prefix is given, cells will be produced for each device abstract
* using a name like device_cell_name_prefix + device name.

View File

@ -66,7 +66,7 @@ private:
};
/**
* @brief A property mapper based on a dynamic propery id generation
* @brief A property mapper based on a dynamic property id generation
*
* This class can be used as property mapper for certain "insert" flavors of
* the Instance and Shapes class.

View File

@ -49,7 +49,7 @@ BoolAndOrNotLocalOperation::BoolAndOrNotLocalOperation (bool is_and)
local_operation<db::PolygonRef, db::PolygonRef, db::PolygonRef>::on_empty_intruder_mode
BoolAndOrNotLocalOperation::on_empty_intruder_hint () const
{
return m_is_and ? local_operation::Drop : local_operation::Copy;
return m_is_and ? Drop : Copy;
}
std::string
@ -166,7 +166,7 @@ void SelfOverlapMergeLocalOperation::compute_local (db::Layout *layout, const sh
SelfOverlapMergeLocalOperation::on_empty_intruder_mode SelfOverlapMergeLocalOperation::on_empty_intruder_hint () const
{
return m_wrap_count > 1 ? local_operation::Drop : local_operation::Copy;
return m_wrap_count > 1 ? Drop : Copy;
}
std::string SelfOverlapMergeLocalOperation::description () const
@ -186,7 +186,7 @@ EdgeBoolAndOrNotLocalOperation::EdgeBoolAndOrNotLocalOperation (bool is_and)
local_operation<db::Edge, db::Edge, db::Edge>::on_empty_intruder_mode
EdgeBoolAndOrNotLocalOperation::on_empty_intruder_hint () const
{
return m_is_and ? local_operation::Drop : local_operation::Copy;
return m_is_and ? Drop : Copy;
}
std::string
@ -253,7 +253,7 @@ EdgeToPolygonLocalOperation::EdgeToPolygonLocalOperation (bool outside, bool inc
local_operation<db::Edge, db::PolygonRef, db::Edge>::on_empty_intruder_mode
EdgeToPolygonLocalOperation::on_empty_intruder_hint () const
{
return m_outside ? local_operation::Copy : local_operation::Drop;
return m_outside ? Copy : Drop;
}
std::string

View File

@ -144,7 +144,7 @@ public:
* @brief Undo the current transaction
*
* The current transaction is undone with this method.
* The 'available_undo' method can be used to determine wether
* The 'available_undo' method can be used to determine whether
* there are transactions to undo.
*/
void undo ();
@ -153,7 +153,7 @@ public:
* @brief Redo the next available transaction
*
* The next transaction is redone with this method.
* The 'available_redo' method can be used to determine wether
* The 'available_redo' method can be used to determine whether
* there are transactions to undo.
*/
void redo ();
@ -204,7 +204,7 @@ public:
/**
* @brief Get the last queued db::Op object
*
* This method allows to fetch and modify the last queued operation for the given object in order
* This method allows one to fetch and modify the last queued operation for the given object in order
* to allow some optimisation, i.e. joining two ops. It can be modified but must not
* be deleted. The returned object is guaranteed to be inside same transaction.
*

View File

@ -845,7 +845,7 @@ public:
/**
* @brief Get the x perspective tilt angle in degree
*
* To achieve the same visual effect, a different tilt angle has to be choosen for
* To achieve the same visual effect, a different tilt angle has to be chosen for
* a given observer distance z. This method computes the tilt angle for the given observer
* distance.
*/
@ -854,7 +854,7 @@ public:
/**
* @brief Get the y perspective tilt angle in degree
*
* To achieve the same visual effect, a different tilt angle has to be choosen for
* To achieve the same visual effect, a different tilt angle has to be chosen for
* a given observer distance z. This method computes the tilt angle for the given observer
* distance.
*/
@ -868,7 +868,7 @@ public:
/**
* @brief Returns the matrix for perspective transformation
*
* To achieve the same visual effect, a different tilt angle has to be choosen for
* To achieve the same visual effect, a different tilt angle has to be chosen for
* a given observer distance z. This method computes the tilt angle for the given observer
* distance.
*
@ -970,7 +970,7 @@ struct MatrixAdjustFlags
* @param landmarks_before The points before the transformation.
* @param landmarks_after The points after the transformation.
* @param flags Selects the properties to adjust.
* @param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none
* @param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none
*/
void DB_PUBLIC adjust_matrix (Matrix2d &matrix, db::DVector &disp, const std::vector <db::DPoint> &landmarks_before, const std::vector <db::DPoint> &landmarks_after, MatrixAdjustFlags::Flags flags, int fixed_point = -1);
@ -986,7 +986,7 @@ void DB_PUBLIC adjust_matrix (Matrix2d &matrix, db::DVector &disp, const std::ve
* @param landmarks_before The points before the transformation.
* @param landmarks_after The points after the transformation.
* @param flags Selects the properties to adjust.
* @param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none
* @param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none
*/
void DB_PUBLIC adjust_matrix (Matrix3d &matrix, const std::vector <db::DPoint> &landmarks_before, const std::vector <db::DPoint> &landmarks_after, MatrixAdjustFlags::Flags flags, int fixed_point = -1);

View File

@ -34,7 +34,7 @@ namespace db
/**
* @brief A structure describing the meta information from the reader
*
* In the meta information block, the reader provides additional informations
* In the meta information block, the reader provides additional information
* about the file and content etc.
* "name" is a unique name that can be used to identify the information.
* "description" is a "speaking" description of the information.

View File

@ -446,7 +446,7 @@ public:
/**
* @brief Gets the qualified name
*
* The qualified name is like the expanded name, but preceeded with the
* The qualified name is like the expanded name, but preceded with the
* Circuit name if known (e.g. "CIRCUIT:NET")
*/
std::string qname () const;

View File

@ -173,6 +173,16 @@ void NetlistDeviceExtractor::extract (db::Layout &layout, db::Cell &cell, const
extract_without_initialize (layout, cell, clusters, layers);
}
namespace {
struct ExtractorCacheValueType {
ExtractorCacheValueType () { }
db::Vector disp;
tl::vector<db::Device *> devices;
};
}
void NetlistDeviceExtractor::extract_without_initialize (db::Layout &layout, db::Cell &cell, hier_clusters_type &clusters, const std::vector<unsigned int> &layers)
{
tl_assert (layers.size () == m_layer_definitions.size ());
@ -233,12 +243,6 @@ void NetlistDeviceExtractor::extract_without_initialize (db::Layout &layout, db:
tl::RelativeProgress progress (tl::to_string (tr ("Extracting devices")), n, 1);
struct ExtractorCacheValueType {
ExtractorCacheValueType () { }
db::Vector disp;
tl::vector<db::Device *> devices;
};
typedef std::map<std::vector<db::Region>, ExtractorCacheValueType> extractor_cache_type;
extractor_cache_type extractor_cache;

View File

@ -123,7 +123,7 @@ public:
}
/**
* @brief Gets the cell name the error occured in
* @brief Gets the cell name the error occurred in
*/
const std::string &cell_name () const
{

View File

@ -194,7 +194,7 @@ std::string NetlistSpiceWriterDelegate::format_params (const db::Device &dev) co
// --------------------------------------------------------------------------------
NetlistSpiceWriter::NetlistSpiceWriter (NetlistSpiceWriterDelegate *delegate)
: mp_netlist (0), mp_stream (0), mp_delegate (delegate)
: mp_netlist (0), mp_stream (0), mp_delegate (delegate), m_use_net_names (false)
{
static NetlistSpiceWriterDelegate std_delegate;
if (! delegate) {
@ -207,6 +207,11 @@ NetlistSpiceWriter::~NetlistSpiceWriter ()
// .. nothing yet ..
}
void NetlistSpiceWriter::set_use_net_names (bool use_net_names)
{
m_use_net_names = use_net_names;
}
void NetlistSpiceWriter::write (tl::OutputStream &stream, const db::Netlist &netlist, const std::string &description)
{
mp_stream = &stream;
@ -233,12 +238,48 @@ void NetlistSpiceWriter::write (tl::OutputStream &stream, const db::Netlist &net
std::string NetlistSpiceWriter::net_to_string (const db::Net *net) const
{
std::map<const db::Net *, size_t>::const_iterator n = m_net_to_spice_id.find (net);
if (! net || n == m_net_to_spice_id.end ()) {
// TODO: this should assert or similar
return "0";
if (m_use_net_names) {
if (! net) {
return "0";
} else {
// Tested with ngspice: this tool likes in net names: . $ ! & \ # + : | (but not at beginning)
// It does not like: , ;
// We translate , to | for the net separator
std::string n = net->expanded_name ();
std::string nn;
nn.reserve (n.size () + 1);
if (!isalnum (*n.c_str ())) {
nn += "\\";
}
for (const char *cp = n.c_str (); *cp; ++cp) {
if (! isalnum (*cp) && strchr (".$!&\\#+:,", *cp) == 0) {
nn += tl::sprintf ("\\x%02x", (unsigned char) *cp);
} else if (*cp == ',') {
nn += "|";
} else {
nn += *cp;
}
}
return nn;
}
} else {
return tl::to_string (n->second);
std::map<const db::Net *, size_t>::const_iterator n = m_net_to_spice_id.find (net);
if (! net || n == m_net_to_spice_id.end ()) {
// TODO: this should assert or similar
return "0";
} else {
return tl::to_string (n->second);
}
}
}
@ -389,9 +430,11 @@ void NetlistSpiceWriter::write_circuit_header (const db::Circuit &circuit) const
emit_line (os.str ());
for (db::Circuit::const_net_iterator n = circuit.begin_nets (); n != circuit.end_nets (); ++n) {
if (! n->name ().empty ()) {
emit_comment ("net " + net_to_string (n.operator-> ()) + " " + n->name ());
if (! m_use_net_names) {
for (db::Circuit::const_net_iterator n = circuit.begin_nets (); n != circuit.end_nets (); ++n) {
if (! n->name ().empty ()) {
emit_comment ("net " + net_to_string (n.operator-> ()) + " " + n->name ());
}
}
}
}

View File

@ -86,6 +86,12 @@ public:
virtual void write (tl::OutputStream &stream, const db::Netlist &netlist, const std::string &description);
void set_use_net_names (bool use_net_names);
bool use_net_names () const
{
return m_use_net_names;
}
private:
friend class NetlistSpiceWriterDelegate;
@ -93,6 +99,7 @@ private:
tl::OutputStream *mp_stream;
tl::weak_ptr<NetlistSpiceWriterDelegate> mp_delegate;
std::map<const db::Net *, size_t> m_net_to_spice_id;
bool m_use_net_names;
void do_write (const std::string &description);

View File

@ -255,7 +255,7 @@ public:
/**
* @brief Constructor that provides conversion and transformation
*
* This constructor allows to convert a path from any type to this one.
* This constructor allows converting a path from any type to this one.
* In addition, transformation operators can be provided that specify
* how to transform points and lengths.
*
@ -278,7 +278,7 @@ public:
/**
* @brief Constructor that provides conversion from another coordinate type
*
* This constructor allows to convert a path from any type to this one.
* This constructor allows converting a path from any type to this one.
*
* @param p The source path
*/
@ -738,7 +738,7 @@ public:
* hull polygon. The resulting pointlist is not guaranteed not to
* be self-overlapping.
*
* This version allows to override the left and right side's width hence creating
* This version allows one to override the left and right side's width hence creating
* asymmetric paths. dleft is the shift to the left (as seen in the direction of the
* path) and dright the shift to the right. The default path is created if dleft+dright=width.
*/
@ -1011,7 +1011,7 @@ struct path_ref
/**
* @brief The translation constructor.
*
* This constructor allows to copy a path reference from one
* This constructor allows one to copy a path reference from one
* repository to another
*/
path_ref (const path_ref &ref, repository_type &rep)
@ -1023,7 +1023,7 @@ struct path_ref
/**
* @brief The transformation translation constructor
*
* This constructor allows to copy a path reference with a certain transformation
* This constructor allows one to copy a path reference with a certain transformation
* to one with another transformation
*/
template <class TransIn>

View File

@ -86,7 +86,7 @@ public:
/**
* @brief The copy constructor that also converts
*
* The copy constructor allows to convert between different
* The copy constructor allows one to convert between different
* coordinate types, if possible.
*
* @param d The source from which to copy
@ -270,7 +270,7 @@ public:
* @brief String conversion
*
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
* micron units. In addition, a micron format is choosen for output of these coordinates.
* micron units. In addition, a micron format is chosen for output of these coordinates.
*/
std::string
to_string (double dbu) const

View File

@ -3051,7 +3051,7 @@ public:
/**
* @brief The translation constructor.
*
* This constructor allows to copy a polygon reference from one
* This constructor allows one to copy a polygon reference from one
* repository to another
*/
polygon_ref (const polygon_ref &ref, repository_type &rep)
@ -3063,7 +3063,7 @@ public:
/**
* @brief The transformation translation constructor
*
* This constructor allows to copy a polygon reference with a certain transformation
* This constructor allows one to copy a polygon reference with a certain transformation
* to one with another transformation
*/
template <class TransIn>

View File

@ -63,7 +63,7 @@ public:
* @brief Constructor
*
* This constructor takes the polygon receiver (of which is keeps a reference).
* It allows to specify how holes are resolved and how touching corners are resolved.
* It allows one to specify how holes are resolved and how touching corners are resolved.
*
* @param psink The polygon receiver
* @param resolve_holes true, if holes should be resolved into the hull using stich lines
@ -75,7 +75,7 @@ public:
* @brief Constructor
*
* This constructor takes the simple polygon receiver (of which is keeps a reference).
* It allows to specify how touching corners are resolved. Holes are always resolved since this is
* It allows one to specify how touching corners are resolved. Holes are always resolved since this is
* the only way to create a simple polygon.
*
* @param spsink The simple polygon receiver

View File

@ -39,7 +39,7 @@ class SimplePolygonSink;
/**
* @brief An inside test operator
*
* This class allows to efficiently test whether multiple points are inside a given polygon.
* This class allows an efficient test whether multiple points are inside a given polygon.
* Since the test is efficiently implemented when the polygon edges are sorted, the sorting
* and memory allocation step is performed once in the test operator's constructor while
* each individual test is performed efficiently.
@ -118,7 +118,7 @@ void cut_polygon (const PolygonType &input, const typename PolygonType::edge_typ
* @brief Split a polygon into two or more parts
*
* This function splits a polygon into parts using some heuristics to determine a "suitable" cut line.
* The cut line is choosen through a vertex close to a center (either horizontal or vertical). The splitting
* The cut line is chosen through a vertex close to a center (either horizontal or vertical). The splitting
* is supposed to create smaller parts with less vertices or a better area ratio of polygon to bounding box area.
*
* @param polygon The input polygon

View File

@ -834,7 +834,7 @@ public:
/**
* @brief Returns an edge set containing all edges of the polygons in this region
*
* This version allows to specify a filter by which the edges are filtered before they are
* This version allows one to specify a filter by which the edges are filtered before they are
* returned.
*
* Merged semantics applies. In merged semantics, only full, outer edges are delivered.
@ -1574,7 +1574,7 @@ public:
* @brief Constructor specifying the region where to store the polygons
*
* If "clear" is set to true, the region will be cleared before the
* inserting of polygons starts. This allows to use the region as input and
* inserting of polygons starts. This allows using the region as input and
* output for any operation.
*/
RegionPolygonSink (Region &region, bool clear = false)

View File

@ -36,7 +36,7 @@ namespace db {
*
* This filter has two parameters: pmin and pmax.
* It will filter all polygons for which the perimeter is >= pmin and < pmax.
* There is an "invert" flag which allows to select all polygons not
* There is an "invert" flag which allows selecting all polygons not
* matching the criterion.
*/
@ -104,7 +104,7 @@ private:
*
* This filter has two parameters: amin and amax.
* It will filter all polygons for which the area is >= amin and < amax.
* There is an "invert" flag which allows to select all polygons not
* There is an "invert" flag which allows selecting all polygons not
* matching the criterion.
*/
@ -266,7 +266,7 @@ private:
*
* This filter has two parameters: vmin and vmax.
* It will filter all polygons for which the selected bounding box parameter is >= vmin and < vmax.
* There is an "invert" flag which allows to select all polygons not
* There is an "invert" flag which allows selecting all polygons not
* matching the criterion.
*
* For bounding box parameters the following choices are available:

View File

@ -1,11 +1,8 @@
<RCC>
<qresource prefix="/fonts">
<file>std_font.gds</file>
</qresource>
<qresource prefix="/built-in-macros" >
<qresource prefix="/built-in-macros">
<file alias="pcell_declaration_helper.lym">built-in-macros/pcell_declaration_helper.lym</file>
</qresource>
<qresource prefix="/built-in-pymacros" >
<qresource prefix="/built-in-pymacros">
<file alias="pcell_declaration_helper.lym">built-in-pymacros/pcell_declaration_helper.lym</file>
</qresource>
</RCC>

View File

@ -257,7 +257,7 @@ struct shape_ref
/**
* @brief The translation constructor.
*
* This constructor allows to copy a shape reference from one
* This constructor allows one to copy a shape reference from one
* repository to another
*/
shape_ref (const shape_ref<Sh, Trans> &ref, repository_type &rep)
@ -272,7 +272,7 @@ struct shape_ref
/**
* @brief The translation operator.
*
* This assignment allows to assign a reference in one repository
* This assignment allows assigning a reference in one repository
* to a reference in another repository
*/
void translate (const shape_ref<Sh, Trans> &ref, repository_type &rep, db::ArrayRepository &)
@ -288,7 +288,7 @@ struct shape_ref
/**
* @brief The translation operator with transformation.
*
* This assignment allows to assign a reference in one repository
* This assignment allows assigning a reference in one repository
* to a reference in another repository
*/
template <class T>
@ -309,7 +309,7 @@ struct shape_ref
/**
* @brief The translation operator.
*
* This operator allows to change a reference to another repository.
* This operator allows changing a reference to another repository.
*/
void translate (repository_type &rep)
{

View File

@ -53,7 +53,7 @@ class ArrayRepository;
* @brief A generic shape iterator
*
* This iterator can iterate any kind of shape from a "shapes" container.
* It allows to select certain kind of shapes. The dereferecing operator
* It allows selecting certain kind of shapes. The dereferecing operator
* returns a shape proxy object that can be used to access the actual shape.
* It can iterator over all shapes and over a region selected.
* If the iterator is constructed, it always points to the beginning of the
@ -208,7 +208,7 @@ public:
* @param box The region to select
* @param mode See above
* @param flags The kind of shapes to iterate over (or-ed constants of flags_type)
* @param prop_sel The propery selection
* @param prop_sel The property selection
* @param inv_prop_sel True, if shapes not matching the property selection shall be reported
*/
ShapeIterator (const shapes_type &shapes, const box_type &box, region_mode mode, unsigned int flags = All, const property_selector *prop_sel = 0, bool inv_prop_sel = false);
@ -514,7 +514,7 @@ public:
* @brief Default ctor: create an empty collection of shapes without external references
*
* Such shape containers can be used for example to store temporary shape sets
* This version allows to specify whether the container should be created in editable mode
* This version allows one to specify whether the container should be created in editable mode
* or insert-once mode.
*/
Shapes (bool editable)
@ -607,7 +607,7 @@ public:
/**
* @brief Assignment operator with transformation and property id mapping
*
* This version allows to specify a property mapping function. That way, shapes can be copied from
* This version allows one to specify a property mapping function. That way, shapes can be copied from
* one layout space to another.
*/
template <class T, class PropIdMap>
@ -620,7 +620,7 @@ public:
/**
* @brief Assignment operator with property id mapping
*
* In contrast to the operator= version allows to specify a property mapping function. That way, shapes can be copied from
* In contrast to the operator= version allows one to specify a property mapping function. That way, shapes can be copied from
* one layout space to another.
*/
template <class PropIdMap>
@ -676,7 +676,7 @@ public:
*
* This method insert all shapes from the given shape container using the specified transformation.
*
* This version allows to specify a property mapping function. That way, shapes can be copied from
* This version allows one to specify a property mapping function. That way, shapes can be copied from
* one layout space to another.
*/
template <class T, class PropIdMap>
@ -715,7 +715,7 @@ public:
*
* This method insert all shapes from the given shape container using the specified transformation.
*
* In contrast to the operator= version allows to specify a property mapping function. That way, shapes can be copied from
* In contrast to the operator= version allows one to specify a property mapping function. That way, shapes can be copied from
* one layout space to another.
*/
template <class PropIdMap>

View File

@ -33,10 +33,10 @@ namespace db
/**
* @brief A traits class for the various shape types
*
* This class provides informations about various properties of the shape class, i.e.
* - wether the objects must be dereferenced into standanlone containers
* - wether the objects are arrays, potentially using the array repository
* - wether the objects have properties
* This class provides information about various properties of the shape class, i.e.
* - whether the objects must be dereferenced into standanlone containers
* - whether the objects are arrays, potentially using the array repository
* - whether the objects have properties
*/
template <class Sh>
struct shape_traits

View File

@ -99,12 +99,12 @@ struct DB_PUBLIC LDPair
*
* The mapping object provides a lookup for a given input layer
* (called "physical layer") to a logical layer specified as
* a layer index used inside db::Layout. The object allows to
* look up a layer index for a given layer/datatype/name.
* a layer index used inside db::Layout. The object allows
* looking up a layer index for a given layer/datatype/name.
*
* It also allows to specify a target layer per logical layer. That
* It also allows one to specify a target layer per logical layer. That
* is the information attached to the layer when it is actually created.
* This allows to map an input layer to another layer specification
* This allows mapping an input layer to another layer specification
* and effectively rename a layer or add layer name information to
* a GDS layer/datatype layer.
*

View File

@ -154,7 +154,7 @@ inline void mem_stat (MemStatistics *stat, MemStatistics::purpose_t purpose, int
* @brief A string repository class
*
* A string repository holds StringRef objects.
* It acts as a factory for StringRef objects and allows to rename strings.
* It acts as a factory for StringRef objects and allows one to rename strings.
*/
class DB_PUBLIC StringRepository
{
@ -987,7 +987,7 @@ struct text_ref
/**
* @brief The translation constructor.
*
* This constructor allows to copy a text reference from one
* This constructor allows one to copy a text reference from one
* repository to another
*/
text_ref (const text_ref &ref, repository_type &rep)
@ -999,7 +999,7 @@ struct text_ref
/**
* @brief The transformation translation constructor
*
* This constructor allows to copy a text reference with a certain transformation
* This constructor allows one to copy a text reference with a certain transformation
* to one with another transformation
*/
template <class TransIn>

View File

@ -910,7 +910,7 @@ TilingProcessor::execute (const std::string &desc)
}
if (job.has_error ()) {
throw tl::Exception (tl::to_string (tr ("Errors occured during processing. First error message says:\n")) + job.error_messages ().front ());
throw tl::Exception (tl::to_string (tr ("Errors occurred during processing. First error message says:\n")) + job.error_messages ().front ());
}
}

View File

@ -739,7 +739,7 @@ public:
/**
* @brief The copy constructor that converts also
*
* The copy constructor allows to convert between different
* The copy constructor allows converting between different
* coordinate types, if possible.
*
* @param d The source from which to copy
@ -1093,7 +1093,7 @@ public:
/**
* @brief The copy constructor that converts to a different coordinate type also
*
* The copy constructor allows to convert between different
* The copy constructor allows converting between different
* coordinate types, if possible.
*
* @param d The source from which to copy
@ -1433,7 +1433,7 @@ operator<< (std::ostream &os, const simple_trans<C> &t)
/**
* @brief A complex transformation
*
* A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary
* A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary
* angle and a displacement. The template parameters for this transformation are
* I (the input coordinate type), F (the output coordinate type) and R (the representation
* type used internally for representing the floating-point members).
@ -1625,7 +1625,7 @@ public:
/**
* @brief The copy constructor that converts also
*
* The copy constructor allows to convert between different
* The copy constructor allows converting between different
* coordinate types, if possible.
*
* @param d The source from which to copy
@ -2134,7 +2134,7 @@ public:
/**
* @brief String conversion
*
* The lazy and micron flags allow to customize the output somewhat.
* The lazy and micron flags allow customization of the output to some degree.
* When lazy is set to true, output that is not required (i.e. magnification when 1)
* is dropped. If dbu is set, the coordinates are multiplied with this factor to render micron units.
*/

View File

@ -382,7 +382,7 @@ struct coord_traits<int64_t>
/**
* @brief Coord_traits specialisation for double coordinates
*
* The precision is choosen such that the double coordinate
* The precision is chosen such that the double coordinate
* can represent "micrometers" with a physical resolution limit of 0.01 nm.
* The area precision will render reliable vector product signs for vectors
* of roughly up to 60 mm length.

View File

@ -435,7 +435,7 @@ public:
/**
* @brief The generic factory
*
* This factory allows to create a user object from a given string and class name.
* This factory creates an user object from a given string and class name.
*/
template <class C>
class user_object_factory

View File

@ -129,7 +129,7 @@ public:
/**
* @brief The copy constructor that converts also
*
* The copy constructor allows to convert between different
* The copy constructor allows converting between different
* coordinate types, if possible.
*
* @param d The source from which to copy
@ -312,7 +312,7 @@ public:
* @brief String conversion
*
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
* micron units. In addition, a micron format is choosen for output of these coordinates.
* micron units. In addition, a micron format is chosen for output of these coordinates.
*/
std::string
to_string (double dbu) const

3616
src/db/db/glyphs.cc_gen Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1805,7 +1805,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"@args file_name, options\n"
"The format of the file will be determined from the file name. Only the cell and "
"it's subtree below will be saved.\n"
"In contrast to the other 'write' method, this version allows to specify save options, i.e. "
"In contrast to the other 'write' method, this version allows one to specify save options, i.e. "
"scaling etc.\n"
"\n"
"This method has been introduced in version 0.23.\n"
@ -1814,7 +1814,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"@brief Returns the shapes list of the given layer\n"
"@args layer_index\n"
"\n"
"This method allows to access the shapes list on a certain layer.\n"
"This method gives access to the shapes list on a certain layer.\n"
"If the layer does not exist yet, it is created.\n"
"\n"
"@param index The layer index of the shapes list to retrieve\n"
@ -1926,7 +1926,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"\n"
"This deletes all sub cells of the cell which are not used otherwise.\n"
"All instances of the deleted cells are deleted as well.\n"
"A version of this method exists which allows to specify the number of hierarchy levels "
"A version of this method exists which allows one to specify the number of hierarchy levels "
"to which subcells are considered.\n"
"\n"
"This method has been introduced in version 0.23.\n"
@ -1948,7 +1948,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"\n"
"This deletes the cell and also all sub cells of the cell which are not used otherwise.\n"
"All instances of this cell are deleted as well.\n"
"A version of this method exists which allows to specify the number of hierarchy levels "
"A version of this method exists which allows one to specify the number of hierarchy levels "
"to which subcells are considered.\n"
"\n"
"After the cell has been deleted, the Cell object becomes invalid. Do "
@ -1980,7 +1980,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"It also removes the instances of the cells from which the shapes came from, but does not remove the cells themselves if prune is set to false.\n"
"If prune is set to true, these cells are removed if not used otherwise.\n"
"\n"
"A version of this method exists which allows to specify the number of hierarchy levels "
"A version of this method exists which allows one to specify the number of hierarchy levels "
"to which subcells are considered.\n"
"\n"
"@param prune Set to true to remove orphan cells.\n"
@ -2016,7 +2016,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"The algorithm supports a global fill raster as well as local (per-polygon) origin optimization. In the latter case "
"the origin of the regular raster is optimized per individual polygon of the fill region.\n"
"\n"
"A more elaborate version of this method is available which also returns informations about the non-filled parts.\n"
"A more elaborate version of this method is available which also returns information about the non-filled parts.\n"
"\n"
"This method has been introduced in version 0.23.\n"
) +
@ -2045,7 +2045,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"'remaining_parts' and 'remaining_polygons' can be identical with the input. In that case the input will be overwritten with "
"the respective output. Otherwise, the respective polygons are added to these regions.\n"
"\n"
"This allows to set up a more elaborate fill scheme using multiple iterations and local origin-optimization ('origin' is nil):\n"
"This allows setting up a more elaborate fill scheme using multiple iterations and local origin-optimization ('origin' is nil):\n"
"\n"
"@code\n"
"r = ... # region to fill\n"
@ -2493,7 +2493,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
gsi::method ("insert", (db::Instance (db::Cell::*)(const db::Instance &)) &db::Cell::insert, gsi::arg ("inst"),
"@brief Inserts a cell instance given by another reference\n"
"@return An Instance object representing the new instance\n"
"This method allows to copy instances taken from a reference (an \\Instance object).\n"
"This method allows one to copy instances taken from a reference (an \\Instance object).\n"
"This method is not suited to inserting instances from other Layouts into this cell. For this "
"purpose, the hierarchical copy methods of \\Layout have to be used.\n"
"\n"
@ -2914,7 +2914,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"@brief Returns a reference to the PCell declaration\n"
"If this cell is not a PCell variant, this method returns nil.\n"
"PCell variants are proxy cells which are PCell incarnations for a specific parameter set.\n"
"The \\PCellDeclaration object allows to retrieve PCell parameter definitions for example.\n"
"The \\PCellDeclaration object allows one to retrieve PCell parameter definitions for example.\n"
"\n"
"This method has been introduced in version 0.22.\n"
) +
@ -2922,7 +2922,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"@brief Returns the PCell declaration of a pcell instance\n"
"@args instance\n"
"If the instance is not a PCell instance, this method returns nil.\n"
"The \\PCellDeclaration object allows to retrieve PCell parameter definitions for example.\n"
"The \\PCellDeclaration object allows one to retrieve PCell parameter definitions for example.\n"
"\n"
"This method has been introduced in version 0.22.\n"
) +
@ -3060,7 +3060,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
"@brief A cell\n"
"\n"
"A cell object consists of a set of shape containers (called layers),\n"
"a set of child cell instances and auxiliary informations such as\n"
"a set of child cell instances and auxiliary information such as\n"
"the parent instance list.\n"
"A cell is identified through an index given to the cell upon instantiation.\n"
"Cell instances refer to single instances or array instances. Both are encapsulated in the\n"

View File

@ -630,7 +630,7 @@ Class<db::Edge> decl_Edge ("db", "Edge",
"An edge is a connection between points, usually participating in a larger context "
"such as a polygon. An edge has a defined direction (from p1 to p2). "
"Edges play a role in the database as parts of polygons and to describe a line through both points.\n"
"Altough supported, edges are rarely used as individual database objects.\n"
"Although supported, edges are rarely used as individual database objects.\n"
"\n"
"See @<a href=\"/programming/database_api.xml\">The Database API@</a> for more details about the "
"database objects like the Edge class."
@ -678,7 +678,7 @@ Class<db::DEdge> decl_DEdge ("db", "DEdge",
"such as a polygon. An edge has a defined direction (from p1 to p2). "
"Edges play a role in the database as parts of polygons and to describe a line through both points.\n"
"The \\Edge object is also used inside the boolean processor (\\EdgeProcessor).\n"
"Altough supported, edges are rarely used as individual database objects.\n"
"Although supported, edges are rarely used as individual database objects.\n"
"\n"
"See @<a href=\"/programming/database_api.xml\">The Database API@</a> for more details about the "
"database objects like the Edge class."

View File

@ -106,7 +106,7 @@ struct edge_pair_defs
"The polygon is formed by connecting the end and start points of the edges. It is recommended to "
"use \\normalized before converting the edge pair to a polygon.\n"
"\n"
"The enlargement parameter allows to apply the specified enlargement parallel and perpendicular to the "
"The enlargement parameter applies the specified enlargement parallel and perpendicular to the "
"edges. Basically this introduces a bias which blows up edge pairs by the specified amount. That parameter "
"is useful to convert degenerated edge pairs to valid polygons, i.e. edge pairs with coincident edges and "
"edge pairs consisting of two point-like edges.\n"
@ -119,7 +119,7 @@ struct edge_pair_defs
"The polygon is formed by connecting the end and start points of the edges. It is recommended to "
"use \\normalized before converting the edge pair to a polygon.\n"
"\n"
"The enlargement parameter allows to apply the specified enlargement parallel and perpendicular to the "
"The enlargement parameter applies the specified enlargement parallel and perpendicular to the "
"edges. Basically this introduces a bias which blows up edge pairs by the specified amount. That parameter "
"is useful to convert degenerated edge pairs to valid polygons, i.e. edge pairs with coincident edges and "
"edge pairs consisting of two point-like edges.\n"

View File

@ -485,7 +485,7 @@ Class<db::EdgePairs> decl_EdgePairs ("db", "EdgePairs",
"@args e\n"
"This method creates polygons from the edge pairs. Each polygon will be a triangle or quadrangle "
"which connects the start and end points of the edges forming the edge pair. "
"This version allows to specify an enlargement which is applied to the edges. The length of the edges is "
"This version allows one to specify an enlargement which is applied to the edges. The length of the edges is "
"modified by applying the enlargement and the edges are shifted by the enlargement. By specifying an "
"enlargement it is possible to give edge pairs an area which otherwise would not have one (coincident edges, "
"two point-like edges)."

View File

@ -222,7 +222,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"This method has been added in version 0.22.\n"
"\n"
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
"\n"
"@param mode See description\n"
@ -238,7 +238,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"The other merge operation provided for this purpose is \"merge\" which normalizes each polygon individually before\n"
"merging them. \"simple_merge\" is somewhat faster and consumes less memory.\n"
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"This is a convenience method that bundles filling of the edges, processing with\n"
"a SimpleMerge operator and puts the result into an output vector.\n"
@ -260,7 +260,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"The other merge operation provided for this purpose is \"merge\" which normalizes each polygon individually before\n"
"merging them. \"simple_merge\" is somewhat faster and consumes less memory.\n"
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"This is a convenience method that bundles filling of the edges, processing with\n"
"a SimpleMerge operator and puts the result into an output vector.\n"
@ -268,7 +268,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"This method has been added in version 0.22.\n"
"\n"
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
"\n"
"@param mode See description\n"
@ -281,7 +281,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"@brief Merge the given edges in a simple \"non-zero wrapcount\" fashion\n"
"@args in\n"
"\n"
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"Overlapping contours are merged when the orientation is the same.\n"
"\n"
"The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while\n"
@ -300,7 +300,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"@brief Merge the given polygons and specify the merge mode\n"
"@args in, mode\n"
"\n"
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"Overlapping contours are merged when the orientation is the same.\n"
"\n"
"The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while\n"
@ -312,7 +312,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"This method has been added in version 0.22.\n"
"\n"
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
"\n"
"@param mode See description\n"
@ -323,10 +323,10 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"@brief Merge the given edges in a simple \"non-zero wrapcount\" fashion into polygons\n"
"@args in, resolve_holes, min_coherence\n"
"\n"
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"Overlapping contours are merged when the orientation is the same.\n"
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"This is a convenience method that bundles filling of the edges, processing with\n"
"a SimpleMerge operator and puts the result into an output vector.\n"
@ -343,10 +343,10 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"@brief Merge the given polygons and specify the merge mode\n"
"@args in, resolve_holes, min_coherence, mode\n"
"\n"
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
"Overlapping contours are merged when the orientation is the same.\n"
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"This is a convenience method that bundles filling of the edges, processing with\n"
"a SimpleMerge operator and puts the result into an output vector.\n"
@ -354,7 +354,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"This method has been added in version 0.22.\n"
"\n"
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
"\n"
"@param mode See description\n"
@ -369,7 +369,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"\n"
"In contrast to \"simple_merge\", this merge implementation considers each polygon individually before merging them.\n"
"Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the\n"
"hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps\n"
"hull. In addition, this method allows selecting areas with a higher wrap count which in turn allows computing overlaps\n"
"of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping\n"
"polygons do not contribute to higher wrap count areas.\n"
"\n"
@ -389,11 +389,11 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"\n"
"In contrast to \"simple_merge\", this merge implementation considers each polygon individually before merging them.\n"
"Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the\n"
"hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps\n"
"hull. In addition, this method allows selecting areas with a higher wrap count which in turn allows computing overlaps\n"
"of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping\n"
"polygons do not contribute to higher wrap count areas.\n"
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"Prior to version 0.21 this method was called 'merge_to_polygon'. Is was renamed to avoid ambiguities "
"for empty input arrays. The old version is still available but deprecated.\n"
@ -412,7 +412,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"on the individual result polygons of the merge step. The result may contain overlapping contours, but no self-overlaps. \n"
"\n"
"dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).\n"
"The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both\n"
"The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both\n"
"dx and dy.\n"
"\n"
"The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which "
@ -441,7 +441,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"Polygon overlap occures if the polygons are close enough, so a positive sizing makes polygons overlap.\n"
"\n"
"dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).\n"
"The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both\n"
"The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both\n"
"dx and dy.\n"
"\n"
"The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which "
@ -449,7 +449,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"edges form a sharp bend with an angle of more than 90 degree. In that case, the corners are cut off. In Mode 3, no cutoff occures up to a bending angle of 135 degree. "
"Mode 4 and 5 are even more aggressive and allow very sharp bends without cutoff. This strategy may produce long spikes on sharply bending corners. "
"\n"
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"Prior to version 0.21 this method was called 'size_to_polygon'. Is was renamed to avoid ambiguities "
"for empty input arrays. The old version is still available but deprecated.\n"
@ -516,7 +516,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"@args a, b, mode, resolve_holes, min_coherence\n"
"\n"
"This method computes the result for the given boolean operation on two sets of polygons.\n"
"This method produces polygons on output and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons on output and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"This is a convenience method that bundles filling of the edges, processing with\n"
"a Boolean operator and puts the result into an output vector.\n"
@ -558,7 +558,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
"The input edges must form closed contours where holes and hulls must be oriented differently. \n"
"The input edges are processed with a simple non-zero wrap count rule as a whole.\n"
"\n"
"This method produces polygons on output and allows to fine-tune the parameters for that purpose.\n"
"This method produces polygons on output and allows fine-tuning of the parameters for that purpose.\n"
"\n"
"Prior to version 0.21 this method was called 'boolean_to_polygon'. Is was renamed to avoid ambiguities "
"for empty input arrays. The old version is still available but deprecated.\n"

View File

@ -423,7 +423,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"The edges form the contours of the polygons.\n"
) +
constructor ("new", &new_a2, gsi::arg ("array"),
"@brief Constructor from an egde array\n"
"@brief Constructor from an edge array\n"
"\n"
"This constructor creates a region from an array of edges.\n"
) +
@ -500,7 +500,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"\n"
"This constructor creates an edge collection from the shapes delivered by the given recursive shape iterator.\n"
"It feeds the shapes from a hierarchy of cells into the hierarchical edge set.\n"
"The edges remain within their original hierachy unless other operations require the edges to be moved in the hierarchy.\n"
"The edges remain within their original hierarchy unless other operations require the edges to be moved in the hierarchy.\n"
"\n"
"Text objects are not inserted, because they cannot be converted to edges.\n"
"Edge objects are inserted as such. If \"as_edges\" is true, \"solid\" objects (boxes, polygons, paths) are converted to edges which "
@ -519,7 +519,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"\n"
"This constructor creates an edge collection from the shapes delivered by the given recursive shape iterator.\n"
"It feeds the shapes from a hierarchy of cells into the hierarchical edge set.\n"
"The edges remain within their original hierachy unless other operations require the edges to be moved in the hierarchy.\n"
"The edges remain within their original hierarchy unless other operations require the edges to be moved in the hierarchy.\n"
"The transformation is useful to scale to a specific database unit for example.\n"
"\n"
"Text objects are not inserted, because they cannot be converted to edges.\n"
@ -550,7 +550,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"@code\n"
"dots = RBA::Edges::new(iter, \"*\") # all texts\n"
"dots = RBA::Edges::new(iter, \"A*\") # all texts starting with an 'A'\n"
"dots = RBA::Edges::new(iter, \"A*\", false) # all texts exactly matchin 'A*'\n"
"dots = RBA::Edges::new(iter, \"A*\", false) # all texts exactly matching 'A*'\n"
"@/code\n"
"\n"
"This method has been introduced in version 0.26.\n"
@ -571,7 +571,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"@code\n"
"region = RBA::Region::new(iter, dss, \"*\") # all texts\n"
"region = RBA::Region::new(iter, dss, \"A*\") # all texts starting with an 'A'\n"
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matchin 'A*'\n"
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matching 'A*'\n"
"@/code\n"
"\n"
"This method has been introduced in version 0.26.\n"
@ -1062,7 +1062,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"To understand the overlap check for edges, one has to be familiar with the concept of the inside and outside "
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"In that sense, width means that another edge is anti-parallel and left to the edge under test with a distance of less than the given "
"threshold."
"\n"
@ -1096,7 +1096,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1107,7 +1107,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"To understand the space check for edges, one has to be familiar with the concept of the inside and outside "
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"In that sense, space means that another edge is anti-parallel and right to the edge under test with a distance of less than the given "
"threshold."
"\n"
@ -1141,7 +1141,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1153,7 +1153,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"To understand the inside check for edges, one has to be familiar with the concept of the inside and outside "
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"In that sense, inside means that another edge is parallel and right to the edge under test with a distance of less than the given "
"threshold."
"\n"
@ -1188,7 +1188,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1200,7 +1200,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"To understand the enclosing check for edges, one has to be familiar with the concept of the inside and outside "
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
"In that sense, enclosing means that another edge is parallel and left to the edge under test with a distance of less than the given "
"threshold."
"\n"
@ -1235,7 +1235,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1280,7 +1280,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1325,7 +1325,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one threshold, pass nil to the respective value.\n"
@ -1378,7 +1378,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
"@param i the perpendicular extension to the \"inside\" (right side as seen in the dleftirection of the edge)\n"
"@param join If true, connected edges are joined before the extension is applied\n"
"@return A region containing the polygons representing these extended edges\n"
"This is a generic version of \\extended_in and \\extended_out. It allows to specify extensions for all four "
"This is a generic version of \\extended_in and \\extended_out. It allows one to specify extensions for all four "
"directions of an edge and to join the edges before the extension is applied.\n"
"\n"
"For degenerated edges forming a point, a rectangle with the b, e, o and i used as left, right, top and bottom distance to the "
@ -1390,7 +1390,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
method ("start_segments", &db::Edges::start_segments, gsi::arg ("length"), gsi::arg ("fraction"),
"@brief Returns edges representing a part of the edge after the start point\n"
"@return A new collection of edges representing the start part\n"
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
"by specifying a fraction of the original length:\n"
"\n"
"@code\n"
@ -1407,7 +1407,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
method ("end_segments", &db::Edges::end_segments, gsi::arg ("length"), gsi::arg ("fraction"),
"@brief Returns edges representing a part of the edge before the end point\n"
"@return A new collection of edges representing the end part\n"
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
"by specifying a fraction of the original length:\n"
"\n"
"@code\n"
@ -1424,7 +1424,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
method ("centers", &db::Edges::centers, gsi::arg ("length"), gsi::arg ("fraction"),
"@brief Returns edges representing the center part of the edges\n"
"@return A new collection of edges representing the part around the center\n"
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
"by specifying a fraction of the original length:\n"
"\n"
"@code\n"

View File

@ -887,7 +887,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
"@args editable,manager\n"
"\n"
"This constructor specifies a manager object which is used to "
"store undo information for example. It also allows to specify whether "
"store undo information for example. It also allows one to specify whether "
"the layout is editable. In editable mode, some optimisations are disabled "
"and the layout can be manipulated through a variety of methods.\n"
"\n"
@ -1840,7 +1840,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
"@return The cell index of the pcell variant proxy cell\n"
"This method will create a PCell variant proxy for a local PCell definition.\n"
"It will create the PCell variant for the given parameters. Note that this method \n"
"does not allow to create PCell instances for PCell's located in a library. Use\n"
"does not allow one to create PCell instances for PCell's located in a library. Use\n"
"\\add_pcell_variant with the library parameter for that purpose.\n"
"Unlike the variant using a list of parameters, this version allows specification\n"
"of the parameters with a key/value dictionary. The keys are the parameter names\n"
@ -1860,7 +1860,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
"@return The cell index of the pcell variant proxy cell\n"
"This method will create a PCell variant proxy for a local PCell definition.\n"
"It will create the PCell variant for the given parameters. Note that this method \n"
"does not allow to create PCell instances for PCell's located in a library. Use\n"
"does not allow one to create PCell instances for PCell's located in a library. Use\n"
"\\add_pcell_variant with the library parameter for that purpose.\n"
"\n"
"The parameters are a sequence of variants which correspond to the parameters declared "
@ -1956,7 +1956,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
"@brief Registers a PCell declaration under the given name\n"
"@args name, declaration\n"
"Registers a local PCell in the current layout. If a declaration with that name\n"
"alreay exists, it is replaced with the new declaration.\n"
"already exists, it is replaced with the new declaration.\n"
"\n"
"This method has been introduced in version 0.22.\n"
) +
@ -2171,7 +2171,7 @@ Class<db::SaveLayoutOptions> decl_SaveLayoutOptions ("db", "SaveLayoutOptions",
"@brief Set the database unit to be used in the stream file\n"
"@args dbu\n"
"\n"
"By default, the database unit of the layout is used. This method allows to explicitly use a different\n"
"By default, the database unit of the layout is used. This method allows one to explicitly use a different\n"
"database unit. A scale factor is introduced automatically which scales all layout objects accordingly so their physical dimensions remain the same. "
"When scaling to a larger database unit or one that is not an integer fraction of the original one, rounding errors may occur and the "
"layout may become slightly distorted."

View File

@ -376,7 +376,7 @@ Class<db::LayoutToNetlist> decl_dbLayoutToNetlist ("db", "LayoutToNetlist",
"@li No connection indicated (circuit_cell_name_prefix == 0: the net shapes are simply put into their\n"
" respective circuits. The connections are not indicated. @/li\n"
"@li Subnet hierarchy (circuit_cell_name_prefix != 0): for each root net, a full hierarchy is built\n"
" to accomodate the subnets (see build_net in recursive mode). @/li\n"
" to accommodate the subnets (see build_net in recursive mode). @/li\n"
"@/ul\n"
"\n"
"If a device name prefix is given, device shapes will be output on device cells named\n"

View File

@ -93,14 +93,14 @@ Class<db::Manager> decl_Manager ("db", "Manager",
"@brief Undo the current transaction\n"
"\n"
"The current transaction is undone with this method.\n"
"The 'has_undo' method can be used to determine wether\n"
"The 'has_undo' method can be used to determine whether\n"
"there are transactions to undo.\n"
) +
gsi::method ("redo", &db::Manager::redo,
"@brief Redo the next available transaction\n"
"\n"
"The next transaction is redone with this method.\n"
"The 'has_redo' method can be used to determine wether\n"
"The 'has_redo' method can be used to determine whether\n"
"there are transactions to undo.\n"
) +
gsi::method_ext ("has_undo?", &has_undo,
@ -122,7 +122,7 @@ Class<db::Manager> decl_Manager ("db", "Manager",
"@brief A transaction manager class\n"
"\n"
"Manager objects control layout and potentially other objects in the layout database "
"and allow to queue operations to form transactions. A transaction is a sequence of "
"and queue operations to form transactions. A transaction is a sequence of "
"operations that can be undone or redone.\n"
"\n"
"In order to equip a layout object with undo/redo support, instantiate the layout object "

View File

@ -557,7 +557,7 @@ gsi::Class<db::Matrix3d> decl_Matrix3d ("db", "Matrix3d",
"@param landmarks_before The points before the transformation.\n"
"@param landmarks_after The points after the transformation.\n"
"@param mode Selects the adjustment mode. Must be one of the Adjust... constants.\n"
"@param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none\n"
"@param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none\n"
) +
gsi::method ("AdjustNone", &adjust_none,
"@brief Mode for \\adjust: adjust nothing\n"

View File

@ -333,7 +333,7 @@ Class<db::Net> decl_dbNet ("db", "Net",
) +
gsi::method ("qname|to_s", &db::Net::qname,
"@brief Gets the qualified name.\n"
"The qualified name is like the expanded name, but the circuit's name is preceeded\n"
"The qualified name is like the expanded name, but the circuit's name is preceded\n"
"(i.e. 'CIRCUIT:NET') if available.\n"
) +
gsi::method ("expanded_name", &db::Net::expanded_name,
@ -901,7 +901,7 @@ Class<db::Circuit> decl_dbCircuit ("db", "Circuit",
"A circuit has pins by which it can connect to the outside. Pins are "
"created using \\create_pin and are represented by the \\Pin class.\n"
"\n"
"Futhermore, a circuit manages the components of the netlist. "
"Furthermore, a circuit manages the components of the netlist. "
"Components are devices (class \\Device) and subcircuits (class \\SubCircuit). "
"Devices are basic devices such as resistors or transistors. Subcircuits "
"are other circuits to which nets from this circuit connect. "
@ -1206,6 +1206,13 @@ Class<db::NetlistSpiceWriter> db_NetlistSpiceWriter (db_NetlistWriter, "db", "Ne
) +
gsi::constructor ("new", &new_spice_writer2,
"@brief Creates a new writer with a delegate.\n"
) +
gsi::method ("use_net_names=", &db::NetlistSpiceWriter::set_use_net_names, gsi::arg ("f"),
"@brief Sets a value indicating whether to use net names (true) or net numbers (false).\n"
"The default is to use net numbers."
) +
gsi::method ("use_net_names", &db::NetlistSpiceWriter::use_net_names,
"@brief Gets a value indicating whether to use net names (true) or net numbers (false).\n"
),
"@brief Implements a netlist writer for the SPICE format.\n"
"Provide a delegate for customizing the way devices are written.\n"

View File

@ -154,8 +154,8 @@ Class<db::NetlistDeviceExtractorError> decl_dbNetlistDeviceExtractorError ("db",
"@brief Sets the category description.\n"
"See \\category_name= for details about categories."
),
"@brief An error that occured during device extraction\n"
"The device extractor will keep errors that occured during extraction of the devices. "
"@brief An error that occurred during device extraction\n"
"The device extractor will keep errors that occurred during extraction of the devices. "
"It does not by using this error class.\n"
"\n"
"An error is basically described by the cell/circuit it occures in and the message. "

View File

@ -1328,7 +1328,7 @@ struct polygon_defs
"@brief Iterate over the edges that make up the polygon\n"
"\n"
"This iterator will deliver all edges, including those of the holes. "
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
) +
iterator ("each_edge", (typename C::polygon_edge_iterator (C::*)(unsigned int) const) (&C::begin_edge),
"@brief Iterate over the edges of one contour of the polygon\n"
@ -1338,7 +1338,7 @@ struct polygon_defs
"\n"
"This iterator will deliver all edges of the contour specified by the contour parameter. "
"The hull has contour number 0, the first hole has contour 1 etc.\n"
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
"\n"
"This method was introduced in version 0.24."
) +

View File

@ -654,7 +654,7 @@ Class<db::Region> decl_Region ("db", "Region",
"\n"
"This constructor creates a region from the shapes delivered by the given recursive shape iterator.\n"
"Text objects and edges are not inserted, because they cannot be converted to polygons.\n"
"This method allows to feed the shapes from a hierarchy of cells into the region.\n"
"This method allows feeding the shapes from a hierarchy of cells into the region.\n"
"\n"
"@code\n"
"layout = ... # a layout\n"
@ -669,7 +669,7 @@ Class<db::Region> decl_Region ("db", "Region",
"This constructor creates a region from the shapes delivered by the given recursive shape iterator.\n"
"Text objects and edges are not inserted, because they cannot be converted to polygons.\n"
"On the delivered shapes it applies the given transformation.\n"
"This method allows to feed the shapes from a hierarchy of cells into the region.\n"
"This method allows feeding the shapes from a hierarchy of cells into the region.\n"
"The transformation is useful to scale to a specific database unit for example.\n"
"\n"
"@code\n"
@ -729,7 +729,7 @@ Class<db::Region> decl_Region ("db", "Region",
"@code\n"
"region = RBA::Region::new(iter, \"*\") # all texts\n"
"region = RBA::Region::new(iter, \"A*\") # all texts starting with an 'A'\n"
"region = RBA::Region::new(iter, \"A*\", false) # all texts exactly matchin 'A*'\n"
"region = RBA::Region::new(iter, \"A*\", false) # all texts exactly matching 'A*'\n"
"@/code\n"
"\n"
"This method has been introduced in version 0.25. The enlargement parameter has been added in version 0.26.\n"
@ -751,7 +751,7 @@ Class<db::Region> decl_Region ("db", "Region",
"@code\n"
"region = RBA::Region::new(iter, dss, \"*\") # all texts\n"
"region = RBA::Region::new(iter, dss, \"A*\") # all texts starting with an 'A'\n"
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matchin 'A*'\n"
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matching 'A*'\n"
"@/code\n"
"\n"
"This variant has been introduced in version 0.26.\n"
@ -1898,7 +1898,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -1943,7 +1943,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -1990,7 +1990,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -2037,7 +2037,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -2080,7 +2080,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -2121,7 +2121,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -2162,7 +2162,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"
@ -2203,7 +2203,7 @@ Class<db::Region> decl_Region ("db", "Region",
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
"Use nil for this value to select the default.\n"
"\n"
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
"It is sufficient if the projection of one edge on the other matches the specified condition. "
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
"If you don't want to specify one limit, pass nil to the respective value.\n"

View File

@ -1365,7 +1365,7 @@ Class<db::Shape> decl_Shape ("db", "Shape",
"@brief Iterates over the edges of the object\n"
"\n"
"This method applies to polygons and simple polygons and delivers all edges that form the polygon's contours. "
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
"\n"
"It will throw an exception if the object is not a polygon.\n"
) +
@ -1383,7 +1383,7 @@ Class<db::Shape> decl_Shape ("db", "Shape",
"\n"
"This method applies to polygons and simple polygons and delivers all edges that form the given contour of the polygon. "
"The hull has contour number 0, the first hole has contour 1 etc.\n"
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
"\n"
"It will throw an exception if the object is not a polygon.\n"
"\n"

View File

@ -235,7 +235,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"\n"
"See the \\EdgeProcessor for a description of the sizing operation. This implementation takes shapes\n"
"from a layout cell (optionally all in hierarchy) and produces new shapes in a shapes container. "
"This is the isotropic version which does not allow to specify different sizing values in x and y-direction. "
"This is the isotropic version which does not allow specification of different sizing values in x and y-direction. "
"\n"
"@param layout The layout from which to take the shapes\n"
"@param cell The cell (in 'layout') from which to take the shapes\n"
@ -278,7 +278,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the merge method. This implementation takes shapes\n"
"rather than polygons for input and produces an edge set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to merge\n"
"@param min_wc The minimum wrap count for output (0: all polygons, 1: at least two overlapping)\n"
@ -290,7 +290,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the merge method. This implementation takes shapes\n"
"rather than polygons for input and produces a polygon set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to merge\n"
"@param min_wc The minimum wrap count for output (0: all polygons, 1: at least two overlapping)\n"
@ -332,7 +332,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the boolean operations. This implementation takes shapes\n"
"rather than polygons for input and produces an edge set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in_a The set of shapes to use for input A\n"
"@param in_b The set of shapes to use for input A\n"
@ -345,7 +345,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the boolean operations. This implementation takes shapes\n"
"rather than polygons for input and produces a polygon set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in_a The set of shapes to use for input A\n"
"@param in_b The set of shapes to use for input A\n"
@ -417,7 +417,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"rather than polygons for input and produces an edge set. This is isotropic version that does not allow\n"
"to specify different values in x and y direction. "
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to size\n"
"@param d The sizing value\n"
@ -430,7 +430,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the sizing method. This implementation takes shapes\n"
"rather than polygons for input and produces an edge set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to size\n"
"@param dx The sizing value in x-direction\n"
@ -445,7 +445,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"rather than polygons for input and produces a polygon set. This is isotropic version that does not allow\n"
"to specify different values in x and y direction. "
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to size\n"
"@param d The sizing value\n"
@ -460,7 +460,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
"See the \\EdgeProcessor for a description of the sizing method. This implementation takes shapes\n"
"rather than polygons for input and produces a polygon set.\n"
"\n"
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
"This version does not feature a transformation for each shape (unity is assumed).\n"
"\n"
"@param in The set of shapes to size\n"
"@param dx The sizing value in x-direction\n"

View File

@ -412,7 +412,7 @@ Class<db::Text> decl_Text ("db", "Text",
"A text object has a point (location), a text, a text transformation,\n"
"a text size and a font id. Text size and font id are provided to be\n"
"be able to render the text correctly.\n"
"Text objects are used as labels (i.e. for pins) or to indiciate a particular position.\n"
"Text objects are used as labels (i.e. for pins) or to indicate a particular position.\n"
"\n"
"The \\Text class uses integer coordinates. A class that operates with floating-point coordinates "
"is \\DText.\n"
@ -462,7 +462,7 @@ Class<db::DText> decl_DText ("db", "DText",
"A text object has a point (location), a text, a text transformation,\n"
"a text size and a font id. Text size and font id are provided to be\n"
"be able to render the text correctly.\n"
"Text objects are used as labels (i.e. for pins) or to indiciate a particular position.\n"
"Text objects are used as labels (i.e. for pins) or to indicate a particular position.\n"
"\n"
"The \\DText class uses floating-point coordinates. A class that operates with integer coordinates "
"is \\Text.\n"

View File

@ -408,7 +408,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
"\n"
"The name specifies the variable under which the input can be used in the scripts."
"\n"
"This variant allows to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
"This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
) +
method_ext ("input", &tp_input10,
"@brief Specifies input for the tiling processor\n"
@ -428,7 +428,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
"\n"
"The name specifies the variable under which the input can be used in the scripts."
"\n"
"This variant allows to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
"This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
"\n"
) +
method ("var", &db::TilingProcessor::var,
@ -651,7 +651,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
"\n"
"The tiling processor executes one or several scripts on one or multiple layouts providing "
"a tiling scheme. In that scheme, the processor divides the original layout into rectangular tiles "
"and executes the scripts on each tile separately. The tiling processor allows to specify multiple, "
"and executes the scripts on each tile separately. The tiling processor allows one to specify multiple, "
"independent scripts which are run separately on each tile. It can make use of multi-core CPU's by "
"supporting multiple threads running the tasks in parallel (with respect to tiles and scripts).\n"
"\n"

View File

@ -1040,7 +1040,7 @@ Class<db::DCplxTrans> decl_DCplxTrans ("db", "DCplxTrans",
cplx_trans_defs<db::DCplxTrans>::methods (),
"@brief A complex transformation\n"
"\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
"angle and a displacement. This is also the order, the operations are applied.\n"
"\n"
"A complex transformation provides a superset of the simple transformation.\n"
@ -1129,7 +1129,7 @@ Class<db::CplxTrans> decl_CplxTrans ("db", "CplxTrans",
cplx_trans_defs<db::CplxTrans>::methods (),
"@brief A complex transformation\n"
"\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
"angle and a displacement. This is also the order, the operations are applied.\n"
"This version can transform integer-coordinate objects into floating-point coordinate objects. "
"This is the generic and exact case, for example for non-integer magnifications.\n"
@ -1212,7 +1212,7 @@ Class<db::ICplxTrans> decl_ICplxTrans ("db", "ICplxTrans",
cplx_trans_defs<db::ICplxTrans>::methods (),
"@brief A complex transformation\n"
"\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
"angle and a displacement. This is also the order, the operations are applied.\n"
"This version can transform integer-coordinate objects into the same, which may involve rounding and can be inexact.\n"
"\n"
@ -1294,7 +1294,7 @@ Class<db::VCplxTrans> decl_VCplxTrans ("db", "VCplxTrans",
cplx_trans_defs<db::VCplxTrans>::methods (),
"@brief A complex transformation\n"
"\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
"angle and a displacement. This is also the order, the operations are applied.\n"
"This version can transform floating point coordinate objects into integer coordinate objects, which may involve rounding and can be inexact.\n"
"\n"

View File

@ -469,11 +469,11 @@ TEST(9_SizingSimple)
db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss);
db::Region r6_sized = r6.sized (-50);
EXPECT_EQ (r6_sized.is_merged (), true);
db::Region r6_sized_aniso = r6.sized (-20, -100);
db::Region r6_sized_aniso = r6.sized (-20, -100, 2);
EXPECT_EQ (r6_sized_aniso.is_merged (), true);
db::Region r6_sized_plus = r6.sized (50);
EXPECT_EQ (r6_sized_plus.is_merged (), false);
db::Region r6_sized_aniso_plus = r6.sized (20, 100);
db::Region r6_sized_aniso_plus = r6.sized (20, 100, 2);
EXPECT_EQ (r6_sized_aniso_plus.is_merged (), false);
db::Layout target;
@ -550,7 +550,7 @@ TEST(9_SizingWithScaleAndXYVariants)
db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss);
db::Region r1_sized = r1.sized (-2000);
db::Region r1_sized_aniso = r1.sized (-1000, -2000);
db::Region r1_sized_aniso = r1.sized (-1000, -2000, 2);
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
@ -600,7 +600,7 @@ TEST(9_SizingWithBoolean)
db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss);
db::Region r1_sized = r1.sized (2000);
r1_sized -= r1;
db::Region r1_sized_aniso = r1.sized (1000, 2000);
db::Region r1_sized_aniso = r1.sized (1000, 2000, 2);
r1_sized_aniso -= r1;
EXPECT_EQ (r1_sized_aniso.is_merged (), false);

View File

@ -87,7 +87,7 @@ TEST(1)
}
EXPECT_EQ (m, (unsigned int) 0x04231); // c1,c5,c3,c4,c2
// check relation informations ..
// check relation information ..
db::Cell::child_cell_iterator ch;
db::Cell::const_iterator chi;
db::Cell::parent_cell_iterator pa;

View File

@ -29,6 +29,27 @@
#include "tlStream.h"
#include "tlFileUtils.h"
static void compare_netlists (tl::TestBase *_this, const std::string &path, const std::string &au_path)
{
tl::InputStream is (path);
tl::InputStream is_au (au_path);
std::string netlist = is.read_all ();
std::string netlist_au = is_au.read_all ();
// normalize "1.0e-005" to "1.0e-05" for compatibility
netlist = tl::replaced (netlist, "e-00", "e-0");
netlist = tl::replaced (netlist, "e-0", "e-");
netlist_au = tl::replaced (netlist_au, "e-00", "e-0");
netlist_au = tl::replaced (netlist_au, "e-0", "e-");
if (netlist != netlist_au) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
}
TEST(1_WriterResistorDevices)
{
db::Netlist nl;
@ -98,14 +119,7 @@ TEST(1_WriterResistorDevices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter1_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(2_WriterCapacitorDevices)
@ -177,14 +191,7 @@ TEST(2_WriterCapacitorDevices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter2_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(3_WriterInductorDevices)
@ -256,14 +263,7 @@ TEST(3_WriterInductorDevices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter3_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(4_WriterDiodeDevices)
@ -335,14 +335,7 @@ TEST(4_WriterDiodeDevices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter4_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(5_WriterMOS3Devices)
@ -431,14 +424,7 @@ TEST(5_WriterMOS3Devices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter5_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(6_WriterMOS4Devices)
@ -534,14 +520,7 @@ TEST(6_WriterMOS4Devices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter6_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(7_WriterAnyDevices)
@ -603,14 +582,7 @@ TEST(7_WriterAnyDevices)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter7_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
TEST(8_WriterSubcircuits)
@ -753,14 +725,97 @@ TEST(8_WriterSubcircuits)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter8_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
compare_netlists (_this, path, au_path);
}
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
TEST(9_WriterNetNamesInsteadOfNumbers)
{
db::Netlist nl;
db::DeviceClass *cls = new db::DeviceClass ();
cls->add_terminal_definition (db::DeviceTerminalDefinition ("A", "a"));
cls->add_terminal_definition (db::DeviceTerminalDefinition ("B", "b"));
cls->add_parameter_definition (db::DeviceParameterDefinition ("U", "u"));
cls->add_parameter_definition (db::DeviceParameterDefinition ("V", "v"));
cls->set_name ("XCLS");
nl.add_device_class (cls);
db::Circuit *circuit1 = new db::Circuit ();
circuit1->set_name ("C1");
nl.add_circuit (circuit1);
{
db::Net *n1, *n2, *n3;
n1 = new db::Net ();
n1->set_name ("N1");
circuit1->add_net (n1);
n2 = new db::Net ();
n2->set_name ("N 2");
circuit1->add_net (n2);
n3 = new db::Net ();
n3->set_name ("n3");
circuit1->add_net (n3);
db::Device *ddev1 = new db::Device (cls);
ddev1->set_parameter_value (0, -17);
ddev1->set_parameter_value (1, 42);
db::Device *ddev2 = new db::Device (cls);
ddev2->set_parameter_value (0, 17);
ddev2->set_parameter_value (1, -42);
circuit1->add_device (ddev1);
circuit1->add_device (ddev2);
size_t pid1 = circuit1->add_pin ("p1").id ();
size_t pid2 = circuit1->add_pin ("p2").id ();
circuit1->connect_pin (pid1, n1);
circuit1->connect_pin (pid2, n2);
ddev1->connect_terminal (ddev1->device_class ()->terminal_id_for_name ("A"), n1);
ddev1->connect_terminal (ddev1->device_class ()->terminal_id_for_name ("B"), n3);
ddev2->connect_terminal (ddev2->device_class ()->terminal_id_for_name ("A"), n3);
ddev2->connect_terminal (ddev2->device_class ()->terminal_id_for_name ("B"), n2);
}
db::Circuit *circuit2 = new db::Circuit ();
circuit2->set_name ("C2");
nl.add_circuit (circuit2);
{
db::Net *n1, *n2;
n1 = new db::Net ();
n1->set_name ("n1");
circuit2->add_net (n1);
n2 = new db::Net ();
n2->set_name ("n2");
circuit2->add_net (n2);
db::SubCircuit *sc1 = new db::SubCircuit (circuit1, "SC1");
circuit2->add_subcircuit (sc1);
sc1->connect_pin (0, n1);
sc1->connect_pin (1, n2);
size_t pid1 = circuit2->add_pin ("p1").id ();
size_t pid2 = circuit2->add_pin ("p2").id ();
circuit2->connect_pin (pid1, n1);
circuit2->connect_pin (pid2, n2);
}
// verify against the input
std::string path = tmp_file ("tmp_nwriter9.txt");
{
tl::OutputStream stream (path);
db::NetlistSpiceWriter writer;
writer.set_use_net_names (true);
writer.write (stream, nl, "written by unit test");
}
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter9_au.txt");
compare_netlists (_this, path, au_path);
}
TEST(10_WriterLongLines)
@ -809,14 +864,7 @@ TEST(10_WriterLongLines)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter10_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}
namespace {
@ -919,13 +967,5 @@ TEST(20_Delegate)
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter20_au.txt");
tl::InputStream is (path);
tl::InputStream is_au (au_path);
if (is.read_all () != is_au.read_all ()) {
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
tl::absolute_file_path (path),
tl::absolute_file_path (au_path)));
}
compare_netlists (_this, path, au_path);
}

View File

@ -46,7 +46,7 @@ TEST(1)
c1.push_back (db::Point (200, 0));
p1.assign_hull (c1.begin (), c1.end ());
// insert two references to indentical but shifted polygons
// insert two references to identical but shifted polygons
db::PolygonRef pref1 (p1, rep);
db::Polygon p2;
@ -115,7 +115,7 @@ TEST(2)
c1.push_back (db::Point (200, 0));
p1.assign_hull (c1.begin (), c1.end ());
// insert two references to indentical but shifted polygons
// insert two references to identical but shifted polygons
db::PolygonRef pr1 (p1, *rep);
db::Polygon p2;
@ -156,7 +156,7 @@ TEST(1SIMPLE)
c1.push_back (db::Point (200, 0));
p1.assign_hull (c1.begin (), c1.end ());
// insert two references to indentical but shifted polygons
// insert two references to identical but shifted polygons
db::SimplePolygonRef pref1 (p1, rep);
db::SimplePolygon p2;
@ -225,7 +225,7 @@ TEST(2SIMPLE)
c1.push_back (db::Point (200, 0));
p1.assign_hull (c1.begin (), c1.end ());
// insert two references to indentical but shifted polygons
// insert two references to identical but shifted polygons
db::SimplePolygonRef pr1 (p1, *rep);
db::SimplePolygon p2;

View File

@ -1365,7 +1365,7 @@ CODE
# borders of the polygons of the second operand.
#
# The following images show the effect of the "and" method
# on polygons and egdes (layer1: red, layer2: blue):
# on polygons and edges (layer1: red, layer2: blue):
#
# @table
# @tr
@ -1392,7 +1392,7 @@ CODE
# of the second operand.
#
# The following images show the effect of the "not" method
# on polygons and egdes (layer1: red, layer2: blue):
# on polygons and edges (layer1: red, layer2: blue):
#
# @table
# @tr
@ -1416,7 +1416,7 @@ CODE
# This method is available for polygon and edge layers.
#
# The following images show the effect of the "xor" method
# on polygons and egdes (layer1: red, layer2: blue):
# on polygons and edges (layer1: red, layer2: blue):
#
# @table
# @tr
@ -1439,7 +1439,7 @@ CODE
# This method is available for polygon and edge layers.
#
# The following images show the effect of the "or" method
# on polygons and egdes (layer1: red, layer2: blue):
# on polygons and edges (layer1: red, layer2: blue):
#
# @table
# @tr
@ -1462,7 +1462,7 @@ CODE
# This method is available for polygon, edge and edge pair layers.
#
# The following images show the effect of the "join" method
# on polygons and egdes (layer1: red, layer2: blue):
# on polygons and edges (layer1: red, layer2: blue):
#
# @table
# @tr

View File

@ -54,7 +54,7 @@
<widget class="QLabel" name="label_4" >
<property name="text" >
<string>Radius to apply on polygon corners
(Radius for inner corners can be specified seperately.
(Radius for inner corners can be specified separately.
Leave empty to get the same radius than for outer corners)</string>
</property>
</widget>

View File

@ -228,7 +228,7 @@ MainService::cm_descend ()
throw tl::Exception (tl::to_string (QObject::tr ("Select an object to determine into which instance to descend")));
}
if (! common_inst.valid () || common_inst.ambigous ()) {
throw tl::Exception (tl::to_string (QObject::tr ("Selection is ambigous - cannot determine into which instance to descend")));
throw tl::Exception (tl::to_string (QObject::tr ("Selection is ambiguous - cannot determine into which instance to descend")));
}
// remove the common path and create a new set of selections

View File

@ -37,7 +37,7 @@ namespace edt
{
/**
* @brief A QScrollArea that displays and allows to edit PCell parameters
* @brief A QScrollArea that displays and allows editing PCell parameters
*/
class PCellParametersPage
: public QScrollArea

View File

@ -1647,7 +1647,7 @@ PartialService::mouse_press_event (const db::DPoint &p, unsigned int buttons, bo
if (is_single_point_selection ()) {
// for a single selected point we use the original point as the start location which
// allows to bring a to grid
// allows bringing a to grid
m_current = m_start = single_selected_point ();
} else {
m_current = m_start = p;
@ -1842,7 +1842,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
if (is_single_point_selection ()) {
// for a single selected point we use the original point as the start location which
// allows to bring a to grid
// allows bringing a to grid
m_current = m_start = single_selected_point ();
} else {
m_current = m_start = p;

View File

@ -185,7 +185,7 @@ public:
/**
* @brief "transform" operation with a transformation vector
*
* This version of the transformation operation allows to specify a transformation per selected object.
* This version of the transformation operation allows one to specify a transformation per selected object.
* The transformations in the vector must be ordered in the order the selection is delivered by
* the selection iterator.
* Either global or per-object transformations can be specified. If a per-object transformation is

View File

@ -47,7 +47,7 @@ struct GSI_PUBLIC Callee
/**
* @brief Callback connector object
*
* This object holds informations about the actual implementation of the callback
* This object holds information about the actual implementation of the callback
* on the scripting client's side.
*/
struct Callback

View File

@ -390,6 +390,30 @@ sm_assign (const char *name, const gsi::ClassBase *cls)
return sm;
}
static const std::set<std::pair<std::string, bool> > &name_map_for_class (const gsi::ClassBase *cls, std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > > &cache)
{
if (! cls) {
static std::set<std::pair<std::string, bool> > empty;
return empty;
}
std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > >::iterator cc = cache.find (cls);
if (cc != cache.end ()) {
return cc->second;
}
cc = cache.insert (std::make_pair ((const gsi::ClassBase *) 0, std::set<std::pair<std::string, bool> > ())).first;
cc->second = name_map_for_class (cls->base (), cache);
for (gsi::ClassBase::method_iterator m = cls->begin_methods (); m != cls->end_methods (); ++m) {
for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
cc->second.insert (std::make_pair (syn->name, (*m)->is_static ()));
}
}
return cc->second;
}
void
ClassBase::merge_declarations ()
{
@ -433,6 +457,8 @@ ClassBase::merge_declarations ()
}
}
std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > > name_maps;
// Add to the classes the special methods and clean up the method table
for (gsi::ClassBase::class_iterator c = gsi::ClassBase::begin_new_classes (); c != gsi::ClassBase::end_new_classes (); ++c) {
@ -441,12 +467,7 @@ ClassBase::merge_declarations ()
continue;
}
std::set<std::pair<std::string, bool> > name_map;
for (gsi::ClassBase::method_iterator m = c->begin_methods (); m != c->end_methods (); ++m) {
for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
name_map.insert (std::make_pair (syn->name, (*m)->is_static ()));
}
}
const std::set<std::pair<std::string, bool> > &name_map = name_map_for_class (c.operator-> (), name_maps);
// We don't want the declaration object to be non-const except for this case. So
// we const_cast here.

View File

@ -29,7 +29,7 @@ namespace gsi
// ---------------------------------------------------------------------------------
// A generic value wrapper that allows to wrap a plain data type into an object
// A generic value wrapper that allows wrapping a plain data type into an object
static gsi::Value *new_vv (const tl::Variant &v)
{

View File

@ -42,7 +42,7 @@ namespace gsi
{
// ---------------------------------------------------------------
// Access to the internal informations of GSI
// Access to the internal information of GSI
static int t_void () { return T_void; }
static int t_bool () { return T_bool; }

View File

@ -128,7 +128,7 @@ Class<Logger> decl_Logger ("tl", "Logger",
),
"@brief A logger\n"
"\n"
"The logger allows to output messages to the log channels. If the log viewer is open, the "
"The logger outputs messages to the log channels. If the log viewer is open, the "
"log messages will be shown in the logger view. Otherwise they will be printed to the terminal "
"on Linux for example.\n"
"\n"
@ -238,7 +238,7 @@ Class<tl::Progress> decl_Progress ("tl", "Progress",
"@brief A progress reporter\n"
"\n"
"This is the base class for all progress reporter objects. Progress reporter objects are used "
"to report the progress of some operation and to allow to abort an operation. "
"to report the progress of some operation and to allow aborting an operation. "
"Progress reporter objects must be triggered periodically, i.e. a value must be set. "
"On the display side, a progress bar usually is used to represent the progress of an operation.\n"
"\n"
@ -300,7 +300,7 @@ Class<tl::RelativeProgress> decl_RelativeProgress (decl_Progress, "tl", "Relativ
"@brief Sets the progress value\n"
"@args value, force_yield\n"
"\n"
"This method is equivalent to \\value=, but it allows to force the event loop to be triggered.\n"
"This method is equivalent to \\value=, but it allows forcing the event loop to be triggered.\n"
"If \"force_yield\" is true, the event loop will be triggered always, irregardless of the yield interval specified in the constructor.\n"
),
"@brief A progress reporter counting progress in relative units\n"
@ -394,7 +394,7 @@ Class<tl::AbsoluteProgress> decl_AbsoluteProgress (decl_Progress, "tl", "Absolut
"@brief Sets the progress value\n"
"@args value, force_yield\n"
"\n"
"This method is equivalent to \\value=, but it allows to force the event loop to be triggered.\n"
"This method is equivalent to \\value=, but it allows forcing the event loop to be triggered.\n"
"If \"force_yield\" is true, the event loop will be triggered always, irregardless of the yield interval specified in the constructor.\n"
),
"@brief A progress reporter counting progress in absolute units\n"

Some files were not shown because too many files have changed in this diff Show More