Merge branch 'master' of https://github.com/mapnik/mapnik into geobuf
This commit is contained in:
commit
7e642481af
743 changed files with 17851 additions and 21210 deletions
5
.gitmodules
vendored
5
.gitmodules
vendored
|
@ -5,4 +5,7 @@
|
|||
[submodule "test/data-visual"]
|
||||
path = test/data-visual
|
||||
url = https://github.com/mapnik/test-data-visual.git
|
||||
branch = master
|
||||
branch = master
|
||||
[submodule "deps/mapbox/variant"]
|
||||
path = deps/mapbox/variant
|
||||
url = https://github.com/mapbox/variant.git
|
||||
|
|
129
.travis.yml
129
.travis.yml
|
@ -1,23 +1,20 @@
|
|||
language: cpp
|
||||
|
||||
sudo: false
|
||||
|
||||
git:
|
||||
depth: 10
|
||||
submodules: true
|
||||
submodules: false
|
||||
|
||||
env:
|
||||
global:
|
||||
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
||||
- CCACHE_COMPRESS=1
|
||||
- HEAVY_JOBS="2"
|
||||
- PREFIX=/tmp/mapnik
|
||||
- secure: "N3a5nzzsgpuu45k8qWdYsHNxrSnqeAGLTOYpfYoAH7B94vuf7pa7XV1tQjXbxrnx2D6ryTdtUtyRKwy7zXbwXxGt4DpczWEo8f6DUd6+obAp3kdnXABg2Sj4oA7KMs0F0CmoADy0jdUZD5YyOJHu64LCIIgzEQ9q49PFMNbU3IE="
|
||||
- secure: "iQYPNpMtejcgYeUkWZGIWz1msIco5qydJrhZTSCQOYahAQerdT7q5WZEpEo3G6IWOGgO1eo7GFuY8DvqQjw1+jC9b9mhkRNdo3LhGTKS9Gsbl5Q27k0rjlaFZmmQHrfPlQJwhfAIp+KLugHtQw5bCoLh+95E3j0F0DayF1tuJ3s="
|
||||
- secure: "F6ivqDNMBQQnrDGA9+7IX+GDswuIqQQd7YPJdQqa2Ked9jddAQDeJClb05ig3JlwfOlYLGZOd43ZX0pKuMtI2Gbkwz211agGP9S3YunwlRg8iWtJlO5kYFUdKCmJNhjg4icfkGELCgwXn+zuEWFSLpkPcjqAFKFlQrIJeAJJgKM="
|
||||
addons:
|
||||
postgresql: "9.4"
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-precise-3.5
|
||||
packages:
|
||||
- clang-3.5
|
||||
|
||||
cache:
|
||||
directories:
|
||||
|
@ -26,66 +23,86 @@ cache:
|
|||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env: JOBS=8 MASON_PUBLISH=true
|
||||
sudo: false
|
||||
compiler: ": clang"
|
||||
env: JOBS=8 MASON_PUBLISH=true _CXX="ccache clang++-3.8 -Qunused-arguments" _CC="clang-3.8" TRIGGER=true
|
||||
addons:
|
||||
apt:
|
||||
sources: [ 'ubuntu-toolchain-r-test']
|
||||
packages: [ 'libstdc++-5-dev', 'xutils']
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: JOBS=6
|
||||
sudo: false
|
||||
compiler: ": clang-coverage"
|
||||
env: JOBS=8 COVERAGE=true _CXX="ccache clang++-3.8 -Qunused-arguments" _CC="clang-3.8"
|
||||
addons:
|
||||
apt:
|
||||
sources: [ 'ubuntu-toolchain-r-test']
|
||||
packages: ['libstdc++-5-dev', 'xutils' ]
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: JOBS=8 MASON_PUBLISH=true
|
||||
- os: osx
|
||||
compiler: clang
|
||||
env: JOBS=8 COVERAGE=true
|
||||
compiler: ": clang-osx"
|
||||
# https://docs.travis-ci.com/user/languages/objective-c/#Supported-OS-X-iOS-SDK-versions
|
||||
osx_image: xcode7.3 # upgrades clang from 6 -> 7
|
||||
env: JOBS=4 MASON_PUBLISH=true _CXX="ccache clang++ -Qunused-arguments"
|
||||
|
||||
before_install:
|
||||
# workaround travis rvm bug
|
||||
# http://superuser.com/questions/1044130/why-am-i-having-how-can-i-fix-this-error-shell-session-update-command-not-f
|
||||
- |
|
||||
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
|
||||
rvm get head || true
|
||||
fi
|
||||
- if [[ ${_CXX:-false} != false ]]; then export CXX=${_CXX}; fi
|
||||
- if [[ ${_CC:-false} != false ]]; then export CC=${_CC}; fi
|
||||
- source scripts/travis-common.sh
|
||||
- export PYTHONUSERBASE=$(pwd)/mason_packages/.link
|
||||
- export PATH=${PREFIX}/bin:$(pwd)/mason_packages/.link/bin:${PYTHONUSERBASE}/bin:${PATH}
|
||||
- export COVERAGE=${COVERAGE:-false}
|
||||
- export MASON_PUBLISH=${MASON_PUBLISH:-false}
|
||||
- export BENCH=${BENCH:-false}
|
||||
- if [[ ${TRAVIS_BRANCH} != 'master' ]]; then export MASON_PUBLISH=false; fi
|
||||
- if [[ ${TRAVIS_PULL_REQUEST} != 'false' ]]; then export MASON_PUBLISH=false; fi
|
||||
- git_submodule_update --init --depth=10
|
||||
|
||||
install:
|
||||
- if [[ $(uname -s) == 'Linux' ]]; then
|
||||
export CXX="ccache clang++-3.5 -Qunused-arguments";
|
||||
export CC="ccache clang-3.5 -Qunused-arguments";
|
||||
export PYTHONPATH=$(pwd)/mason_packages/.link/lib/python2.7/site-packages;
|
||||
else
|
||||
brew rm postgis --force;
|
||||
brew install postgis --force;
|
||||
pg_ctl -w start -l postgres.log --pgdata /usr/local/var/postgres;
|
||||
createuser -s postgres;
|
||||
export PYTHONPATH=$(pwd)/mason_packages/.link/lib/python/site-packages;
|
||||
fi
|
||||
- psql -c 'create database template_postgis;' -U postgres;
|
||||
- psql -c 'create extension postgis;' -d template_postgis -U postgres;
|
||||
- if [[ ${COVERAGE} == true ]]; then
|
||||
PYTHONUSERBASE=$(pwd)/mason_packages/.link pip install --user cpp-coveralls;
|
||||
- on 'linux' export PYTHONPATH=${PYTHONUSERBASE}/lib/python2.7/site-packages
|
||||
- on 'osx' export PYTHONPATH=${PYTHONUSERBASE}/lib/python/site-packages
|
||||
- on 'osx' export DATA_PATH=$(brew --prefix)/var/postgres
|
||||
- on 'osx' rm -rf ${DATA_PATH}
|
||||
- on 'osx' initdb ${DATA_PATH} -E utf8
|
||||
- on 'osx' pg_ctl -w start -l postgres.log --pgdata ${DATA_PATH};
|
||||
- on 'osx' cat postgres.log;
|
||||
- on 'osx' createuser -s postgres
|
||||
- psql -c 'create database template_postgis;' -U postgres
|
||||
- psql -c 'create extension postgis;' -d template_postgis -U postgres
|
||||
- enabled ${COVERAGE} pip install --user cpp-coveralls
|
||||
|
||||
before_script:
|
||||
- source bootstrap.sh
|
||||
- |
|
||||
if [[ $(uname -s) == 'Linux' ]]; then
|
||||
mason install clang 3.8.0
|
||||
export PATH=$(mason prefix clang 3.8.0)/bin:${PATH}
|
||||
which clang++
|
||||
export LLVM_COV="$(mason prefix clang 3.8.0)/bin/llvm-cov"
|
||||
fi
|
||||
- ccache --version
|
||||
- ccache -p || true
|
||||
- ccache --show-stats || true
|
||||
- commit_message_parse
|
||||
|
||||
script:
|
||||
- source bootstrap.sh
|
||||
- if [[ ${COVERAGE} == true ]]; then
|
||||
./configure CUSTOM_LDFLAGS='--coverage' CUSTOM_CXXFLAGS='--coverage' CUSTOM_CFLAGS='--coverage' DEBUG=True;
|
||||
elif [[ ${MASON_PUBLISH} == true ]]; then
|
||||
export MASON_NAME=mapnik;
|
||||
export MASON_VERSION=latest;
|
||||
export MASON_LIB_FILE=lib/libmapnik-wkt.a;
|
||||
source ./.mason/mason.sh;
|
||||
./configure PREFIX=${MASON_PREFIX} PATH_REPLACE='' MAPNIK_BUNDLED_SHARE_DIRECTORY=True RUNTIME_LINK='static';
|
||||
else
|
||||
./configure;
|
||||
fi
|
||||
- export SCONSFLAGS='--debug=time'
|
||||
- configure BENCHMARK=${BENCH}
|
||||
- cat config.log
|
||||
- make
|
||||
- make test || TEST_RESULT=$?
|
||||
- if [[ ${COVERAGE} == true ]]; then
|
||||
./mason_packages/.link/bin/cpp-coveralls --build-root . --gcov-options '\-lp' --exclude mason_packages --exclude .sconf_temp --exclude benchmark --exclude deps --exclude scons --exclude test --exclude demo --exclude docs --exclude fonts --exclude utils > /dev/null;
|
||||
fi
|
||||
- if [[ ${COVERAGE} != true ]]; then
|
||||
make bench;
|
||||
fi
|
||||
- if [[ ${TEST_RESULT} != 0 ]]; then exit $TEST_RESULT ; fi;
|
||||
- if [[ ${MASON_PUBLISH} == true ]]; then
|
||||
./mason_latest.sh build;
|
||||
./mason_latest.sh link;
|
||||
- make test
|
||||
- enabled ${COVERAGE} coverage
|
||||
- enabled ${BENCH} make bench
|
||||
|
||||
after_success:
|
||||
- enabled ${TRIGGER} trigger_downstream
|
||||
- if enabled ${MASON_PUBLISH}; then
|
||||
source ./.mason/mason.sh &&
|
||||
./mason_latest.sh build &&
|
||||
./mason_latest.sh publish;
|
||||
fi
|
||||
|
|
119
CHANGELOG.md
119
CHANGELOG.md
|
@ -6,6 +6,83 @@ Developers: Please commit along with changes.
|
|||
|
||||
For a complete change history, see the git log.
|
||||
|
||||
## 3.0.12
|
||||
|
||||
Released: xx-xx-xx
|
||||
|
||||
(Packaged from xxxxxx)
|
||||
|
||||
#### Summary
|
||||
|
||||
- Ensured gdal.input is registered once (refs #3093 #3339 #3340)
|
||||
- Fixed `mapnik::util::is_clockwise` implementation to use coordinates relative to the origin and avoid numeric precision issues
|
||||
- `mapnik-index` is updated to fail on first error in input (csv)
|
||||
- Added `guard` to `get_object_severity` method (ref #3322)
|
||||
- Improved `hash` calculation for `mapnik::value` (ref #3406)
|
||||
- AGG - made cover `unsigned` to avoid left shift of negative values (ref #3406)
|
||||
- Fixed using `scale_factor` in `evaluate_transform(..)`
|
||||
- Fixed line spacing logic by applying `scale factor`
|
||||
- ~~Fixed `stringify_object/stringify_array` implementations by disabling white space skipping (ref #3419)~~
|
||||
- Added geojson unit test for property types/values
|
||||
- JSON - added support for object and array type in `json_value` and update `stringifier`
|
||||
- GDAL.input - fallback to using `overviews` if present (8e8482803bb435726534c3b686a56037b7d3e8ad)
|
||||
- TopoJSON.input - improved and simplified grammer/parser implementation (https://github.com/mapnik/mapnik/pull/3429)
|
||||
- GDAL.input - Added support for non-alpha mask band
|
||||
- TopoJSON.input - fixed order of ellements limitation (ref #3434)
|
||||
- Fixed stroke-width size not included in markers ellipse bounding box (ref #3445)
|
||||
- Implemented `char_array_buffer` and removed `boost::iostreams` dependency (2e8c0d36c2237f2815d8004c1b96bad909056eb9)
|
||||
- JSON.input - `extract_bounding_box_grammar` - make features optional (ref #3463)
|
||||
- Ensure input plugins return `empty_featureset` rather than `nullptr` (feature_ptr())
|
||||
- Added support for quantising small (less than 3 pixel) images (ref #3466)
|
||||
- Added support for natural logarithm function in expressions (ref #3475)
|
||||
- Improved logic determining if certain compiler features are available e.g `inheriting constructors` (MSVC)
|
||||
- GeoJSON - corrected quoting in `stringgifird` objects (ref #3491)
|
||||
|
||||
## 3.0.11
|
||||
|
||||
Released: April 1, 2016
|
||||
|
||||
(Packaged from 8d9dc27)
|
||||
|
||||
#### Summary
|
||||
|
||||
- Raster scaling: fixed crash and clipping negative pixel values of floating point rasters (https://github.com/mapnik/mapnik/pull/3349)
|
||||
- Restored support for unquoted strings in expressions (https://github.com/mapnik/mapnik/pull/3390)
|
||||
- [TWKB](https://github.com/TWKB/) support via https://github.com/mapnik/mapnik/pull/3356 (#3355)
|
||||
- Visual test runner can render SVG, PDF and Postscript with Cairo renderer (https://github.com/mapnik/mapnik/pull/3418)
|
||||
- Scale factor is now applied also to `text-line-spacing` and transforms (https://github.com/mapnik/mapnik/pull/3416)
|
||||
|
||||
## 3.0.10
|
||||
|
||||
Released: February 25, 2016
|
||||
|
||||
(Packaged from 5c0d496)
|
||||
|
||||
#### Summary
|
||||
|
||||
- The `shapeindex` command now has a `--index-parts` option. When used the index will be bigger
|
||||
but will allow the Shapefile datasource to only parse polygon parts within the query bounds.
|
||||
- WARNING: index files generated with this newer Mapnik are invalid for older versions of Mapnik.
|
||||
- Any `.index` files accompanying a `.shp` must now be regenerated otherwise
|
||||
it will be skipped. To avoid this problem you can delete the existing `.index` files, or ideally run `shapeindex` to recreate the `.index`. (https://github.com/mapnik/mapnik/pull/3300)
|
||||
The trigger for this change was an optimization that required a new binary format for the shapefile indexes (https://github.com/mapnik/mapnik/pull/3217).
|
||||
- Shapeindex - another fix for skipping `null` shapes (#3288)
|
||||
- Fixed support for filter expressions starting with `not` (https://github.com/mapnik/mapnik/issues/3017)
|
||||
- Ensure `mapped_memory_cache` acts as singleton across shared objects (#3306)
|
||||
- Removed miniz support in PNG encoder (#3281)
|
||||
- Added `-fvisibility=hidden -fvisibility-inlines-hidden` to default compiler flags
|
||||
- Fixed parsing of SVG `PathElement` (https://github.com/mapnik/mapnik/issues/3225)
|
||||
- JSON parsing now supports arbitrary (nested) attributes in `geometry`
|
||||
- Support for rendering `dash-array` in SVGs
|
||||
- SVG parser is now stricter (fails is all input is not parsable) (#3251)
|
||||
- SVG parser now correctly handles optional separator `(,)` between multiple command parts
|
||||
- Optimized parsing of `png` format string
|
||||
- The `memory_datasource` now dynamically reports correct datasource type (vector or raster)
|
||||
- Upgraded `mapbox::variant v1.1.0`
|
||||
- Compare: https://github.com/mapnik/mapnik/compare/v3.0.9...v3.0.10
|
||||
|
||||
|
||||
|
||||
## 3.0.9
|
||||
|
||||
Released: November 26, 2015
|
||||
|
@ -18,12 +95,12 @@ Released: November 26, 2015
|
|||
- Fixed mapnik.util.variant issue when compiling with gcc-5.x and SSO enabled by default (https://github.com/mapnik/mapnik/issues/3103) (via @nkovacs)
|
||||
- Fixed issue with complex scripts where some character sequences weren't rendered correctly (https://github.com/mapnik/mapnik/issues/3050) (via @jkroll20)
|
||||
- Revived postgis.input tests
|
||||
- JSON: geometry grammar has been refactored and optimized to have expectation points
|
||||
- JSON: geometry grammar has been re-factored and optimized to have expectation points
|
||||
- Filled missing specializations for value_bool in `mapnik::value` comparison operators
|
||||
- `mapnik.Image` - fixed copy semantics implementation for internal buffer
|
||||
- JSON parsing: unified error_handler across all grammars
|
||||
- Improved unit test coverage
|
||||
- Raster scaling: fixed nodata handling, acurracy when working with small floats and clipping floats by \[0; 255\] (https://github.com/mapnik/mapnik/pull/3147)
|
||||
- Raster scaling: fixed nodata handling, accuracy when working with small floats and clipping floats by \[0; 255\] (https://github.com/mapnik/mapnik/pull/3147)
|
||||
- Added [`code of conduct`](http://contributor-covenant.org)
|
||||
- GeoJSON plug-in is updated to skip feature with empty geometries
|
||||
- GeoJSON plug-in : ensure original order of features is preserved (fixed) (https://github.com/mapnik/mapnik/issues/3182)
|
||||
|
@ -41,9 +118,9 @@ Released: October 23, 2015
|
|||
|
||||
- Renamed `SHAPE_MEMORY_MAPPED_FILE` define to `MAPNIK_MEMORY_MAPPED_FILE`. Pass `./configure MEMORY_MAPPED_FILE=True|False` to request
|
||||
support for memory mapped files across Mapnik plugins (currently shape, csv, and geojson).
|
||||
- Unified `mapnik-index` utility supporing GeoJSON and CSV formats
|
||||
- Unified `mapnik-index` utility supporting GeoJSON and CSV formats
|
||||
- Increased unit test coverage for GeoJSON and CSV plugins
|
||||
- shape.input - refactor to support *.shx and improve handling various bogus shapefiles
|
||||
- shape.input - re-factor to support *.shx and improve handling various bogus shapefiles
|
||||
- geojson.input - make JSON parser stricter + support single Feature/Geometry as well as FeatureCollection
|
||||
- maintain 'FT_LOAD_NO_HINTING' + support >= harfbuzz 1.0.5
|
||||
- geojson.input - implement on-disk-index support
|
||||
|
@ -109,7 +186,7 @@ Released: August 26, 2015
|
|||
|
||||
#### Summary
|
||||
|
||||
- CSV.input: plug-in has been refactored to minimise memory usage and to improve handling of larger input.
|
||||
- CSV.input: plug-in has been re-factored to minimise memory usage and to improve handling of larger input.
|
||||
(NOTE: [large_csv](https://github.com/mapnik/mapnik/tree/large_csv) branch adds experimental trunsduction parser with deferred string initialisation)
|
||||
- CSV.input: added internal spatial index (boost::geometry::index::tree) for fast `bounding box` queries (https://github.com/mapnik/mapnik/pull/3010)
|
||||
- Fixed deadlock in recursive datasource registration via @zerebubuth (https://github.com/mapnik/mapnik/pull/3038)
|
||||
|
@ -499,8 +576,8 @@ Summary: The 2.2.0 release is primarily a performance and stability release. The
|
|||
|
||||
- Enabled default input plugin directory and fonts path to be set inherited from environment settings in
|
||||
python bindings to make it easier to run tests locally (#1594). New environment settings are:
|
||||
- MAPNIK_INPUT_PLUGINS_DIRECTORY
|
||||
- MAPNIK_FONT_DIRECTORY
|
||||
- MAPNIK_INPUT_PLUGINS_DIRECTORY
|
||||
- MAPNIK_FONT_DIRECTORY
|
||||
|
||||
- Added support for controlling rendering behavior of markers on multi-geometries `marker-multi-policy` (#1555,#1573)
|
||||
|
||||
|
@ -892,7 +969,7 @@ Released January, 19 2010
|
|||
|
||||
- Gdal Plugin: Added support for Gdal overviews, enabling fast loading of > 1GB rasters (#54)
|
||||
|
||||
* Use the gdaladdo utility to add overviews to existing GDAL datasets
|
||||
* Use the gdaladdo utility to add overviews to existing GDAL datasets
|
||||
|
||||
- PostGIS: Added an optional `geometry_table` parameter. The `geometry_table` used by Mapnik to look up
|
||||
metadata in the geometry_columns and calculate extents (when the `geometry_field` and `srid` parameters
|
||||
|
@ -917,23 +994,23 @@ Released January, 19 2010
|
|||
complex queries that may aggregate geometries to be kept fast by allowing proper placement of the bbox
|
||||
query to be used by indexes. (#415)
|
||||
|
||||
* Pass the bbox token inside a subquery like: !bbox!
|
||||
* Pass the bbox token inside a subquery like: !bbox!
|
||||
|
||||
* Valid Usages include:
|
||||
* Valid Usages include:
|
||||
|
||||
<Parameter name="table">
|
||||
(Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map
|
||||
</Parameter>
|
||||
<Parameter name="table">
|
||||
(Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map
|
||||
</Parameter>
|
||||
|
||||
<Parameter name="table">
|
||||
(Select * from table where geom && !bbox!) as map
|
||||
</Parameter>
|
||||
<Parameter name="table">
|
||||
(Select * from table where geom && !bbox!) as map
|
||||
</Parameter>
|
||||
|
||||
- PostGIS Plugin: Added `scale_denominator` substitution ability in sql query string (#415/#465)
|
||||
|
||||
* Pass the scale_denominator token inside a subquery like: !scale_denominator!
|
||||
* Pass the scale_denominator token inside a subquery like: !scale_denominator!
|
||||
|
||||
* e.g. (Select * from table where field_value > !scale_denominator!) as map
|
||||
* e.g. (Select * from table where field_value > !scale_denominator!) as map
|
||||
|
||||
- PostGIS Plugin: Added support for quoted table names (r1454) (#393)
|
||||
|
||||
|
@ -965,14 +1042,14 @@ Released January, 19 2010
|
|||
- TextSymbolizer: Large set of new attributes: `text_transform`, `line_spacing`, `character_spacing`,
|
||||
`wrap_character`, `wrap_before`, `horizontal_alignment`, `justify_alignment`, and `opacity`.
|
||||
|
||||
* More details at changesets: r1254 and r1341
|
||||
* More details at changesets: r1254 and r1341
|
||||
|
||||
- SheildSymbolizer: Added special new attributes: `unlock_image`, `VERTEX` placement, `no_text` and many
|
||||
attributes previously only supported in the TextSymbolizer: `allow_overlap`, `vertical_alignment`,
|
||||
`horizontal_alignment`, `justify_alignment`, `wrap_width`, `wrap_character`, `wrap_before`, `text_transform`,
|
||||
`line_spacing`, `character_spacing`, and `opacity`.
|
||||
|
||||
* More details at changeset r1341
|
||||
* More details at changeset r1341
|
||||
|
||||
- XML: Added support for using CDATA with libxml2 parser (r1364)
|
||||
|
||||
|
@ -1200,7 +1277,7 @@ Released April 1, 2009
|
|||
|
||||
- Plugins: Use memory mapped files for reading shape file (r628)
|
||||
|
||||
- Core: Use streams to write images (i/o refactor) (r628) (#15)
|
||||
- Core: Use streams to write images (i/o re-factor) (r628) (#15)
|
||||
|
||||
# Mapnik 0.5.1
|
||||
|
||||
|
|
10
INSTALL.md
10
INSTALL.md
|
@ -2,6 +2,13 @@
|
|||
|
||||
Mapnik runs on Linux, OS X, Windows, and BSD systems.
|
||||
|
||||
First clone mapnik from github and initialize submodules
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mapnik/mapnik.git
|
||||
git submodule update --init
|
||||
```
|
||||
|
||||
To configure and build Mapnik do:
|
||||
|
||||
```bash
|
||||
|
@ -35,7 +42,6 @@ NOTE: the above will not work on windows, rather see https://github.com/mapnik/m
|
|||
|
||||
Then to run the tests locally (without needing to install):
|
||||
|
||||
git submodule update --init
|
||||
make test
|
||||
|
||||
Install like:
|
||||
|
@ -92,7 +98,7 @@ Additional optional dependencies:
|
|||
* PostgreSQL (for PostGIS plugin support)
|
||||
- libpq - PostreSQL libraries
|
||||
- pg_config - PostgreSQL installation capabilities
|
||||
* libgdal - GDAL/OGR input (For gdal and ogr plugin support)
|
||||
* libgdal - GDAL/OGR input (For gdal and ogr plugin support) (>= GDAL 2.0.2 for thread safety - https://github.com/mapnik/mapnik/issues/3339)
|
||||
* libsqlite3 - SQLite input (needs RTree support builtin) (sqlite plugin support)
|
||||
|
||||
Instructions for installing many of these dependencies on
|
||||
|
|
35
Makefile
35
Makefile
|
@ -7,6 +7,10 @@ ifeq ($(JOBS),)
|
|||
JOBS:=1
|
||||
endif
|
||||
|
||||
ifeq ($(HEAVY_JOBS),)
|
||||
HEAVY_JOBS:=1
|
||||
endif
|
||||
|
||||
all: mapnik
|
||||
|
||||
install:
|
||||
|
@ -20,7 +24,8 @@ release:
|
|||
git clone --depth 1 --branch v$${MAPNIK_VERSION} git@github.com:mapnik/mapnik.git $${TARBALL_NAME} && \
|
||||
cd $${TARBALL_NAME} && \
|
||||
git checkout "tags/v$${MAPNIK_VERSION}" && \
|
||||
git submodule update --depth 1 --init && \
|
||||
git submodule update --depth 100 --init && \
|
||||
rm -rf deps/mapbox/variant/.git && \
|
||||
rm -rf test/data/.git && \
|
||||
rm -rf test/data/.gitignore && \
|
||||
rm -rf test/data-visual/.git && \
|
||||
|
@ -37,22 +42,28 @@ python:
|
|||
python bindings/python/test/visual.py -q
|
||||
|
||||
src/json/libmapnik-json.a:
|
||||
# we first build memory intensive files with -j1
|
||||
$(PYTHON) scons/scons.py -j1 \
|
||||
# we first build memory intensive files with -j$(HEAVY_JOBS)
|
||||
$(PYTHON) scons/scons.py -j$(HEAVY_JOBS) \
|
||||
--config=cache --implicit-cache --max-drift=1 \
|
||||
src/renderer_common/process_group_symbolizer.os \
|
||||
src/renderer_common/render_group_symbolizer.os \
|
||||
src/renderer_common/render_markers_symbolizer.os \
|
||||
src/renderer_common/render_thunk_extractor.os \
|
||||
src/json/libmapnik-json.a \
|
||||
src/wkt/libmapnik-wkt.a \
|
||||
src/css_color_grammar.os \
|
||||
src/expression_grammar.os \
|
||||
src/transform_expression_grammar.os \
|
||||
src/image_filter_types.os \
|
||||
src/agg/process_markers_symbolizer.os \
|
||||
src/agg/process_group_symbolizer.os \
|
||||
src/grid/process_markers_symbolizer.os \
|
||||
src/grid/process_group_symbolizer.os \
|
||||
src/cairo/process_markers_symbolizer.os \
|
||||
src/cairo/process_group_symbolizer.os \
|
||||
src/image_filter_grammar.os \
|
||||
src/marker_helpers.os \
|
||||
src/svg/svg_transform_parser.os \
|
||||
src/agg/process_line_symbolizer.os \
|
||||
plugins/input/geojson/geojson_datasource.os \
|
||||
utils/mapnik-index/process_geojson_file.o \
|
||||
src/svg/svg_path_parser.os \
|
||||
src/svg/svg_parser.os \
|
||||
src/svg/svg_points_parser.os \
|
||||
src/svg/svg_transform_parser.os \
|
||||
|
||||
|
||||
mapnik: src/json/libmapnik-json.a
|
||||
# then install the rest with -j$(JOBS)
|
||||
|
@ -70,6 +81,8 @@ clean:
|
|||
@find ./src/ -name "*.so" -exec rm {} \;
|
||||
@find ./ -name "*.o" -exec rm {} \;
|
||||
@find ./src/ -name "*.a" -exec rm {} \;
|
||||
@find ./ -name "*.gcda" -exec rm {} \;
|
||||
@find ./ -name "*.gcno" -exec rm {} \;
|
||||
|
||||
distclean:
|
||||
if test -e "config.py"; then mv "config.py" "config.py.backup"; fi
|
||||
|
|
|
@ -8,8 +8,9 @@ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/
|
|||
_/
|
||||
```
|
||||
|
||||
[![Build Status Linux](https://secure.travis-ci.org/mapnik/mapnik.png)](http://travis-ci.org/mapnik/mapnik)
|
||||
[![Build status Windows](https://ci.appveyor.com/api/projects/status/hc9l7okdjtucfqqn?svg=true)](https://ci.appveyor.com/project/Mapbox/mapnik)
|
||||
[![Build Status Linux](https://api.travis-ci.org/mapnik/mapnik.svg?branch=master)](http://travis-ci.org/mapnik/mapnik)
|
||||
[![CircleCI](https://circleci.com/gh/mapnik/mapnik.svg?style=svg)](https://circleci.com/gh/mapnik/mapnik)
|
||||
[![Build Status Windows](https://ci.appveyor.com/api/projects/status/hc9l7okdjtucfqqn?branch=master&svg=true)](https://ci.appveyor.com/project/Mapbox/mapnik)
|
||||
[![Coverage Status](https://coveralls.io/repos/mapnik/mapnik/badge.svg?branch=master&service=github)](https://coveralls.io/github/mapnik/mapnik?branch=master)
|
||||
|
||||
Mapnik is an open source toolkit for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization.
|
||||
|
@ -20,7 +21,7 @@ For further information see [http://mapnik.org](http://mapnik.org) and also our
|
|||
|
||||
# Installation
|
||||
|
||||
See [INSTALL.md](https://github.com/mapnik/mapnik/blob/master/INSTALL.md) for installation instructions and the [Install](https://github.com/mapnik/mapnik/wiki/Mapnik-Installation) page on the wiki for guides.
|
||||
See [INSTALL.md](INSTALL.md) for installation instructions and the [Install](https://github.com/mapnik/mapnik/wiki/Mapnik-Installation) page on the wiki for guides.
|
||||
|
||||
# Code of Conduct
|
||||
|
||||
|
@ -28,4 +29,4 @@ Please note that this project is released with a [Contributor Code of Conduct](h
|
|||
|
||||
# License
|
||||
|
||||
Mapnik software is free and is released under the LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html_)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
|
||||
Mapnik software is free and is released under the LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
|
||||
|
|
59
SConstruct
59
SConstruct
|
@ -294,7 +294,9 @@ opts.AddVariables(
|
|||
EnumVariable('OPTIMIZATION','Set compiler optimization level','3', ['0','1','2','3','4','s']),
|
||||
# Note: setting DEBUG=True will override any custom OPTIMIZATION level
|
||||
BoolVariable('DEBUG', 'Compile a debug version of Mapnik', 'False'),
|
||||
BoolVariable('COVERAGE', 'Compile a libmapnik and plugins with --coverage', 'False'),
|
||||
BoolVariable('DEBUG_UNDEFINED', 'Compile a version of Mapnik using clang/llvm undefined behavior asserts', 'False'),
|
||||
BoolVariable('DEBUG_SANITIZE', 'Compile a version of Mapnik using clang/llvm address sanitation', 'False'),
|
||||
ListVariable('INPUT_PLUGINS','Input drivers to include',DEFAULT_PLUGINS,PLUGINS.keys()),
|
||||
('WARNING_CXXFLAGS', 'Compiler flags you can set to reduce warning levels which are placed after -Wall.', ''),
|
||||
|
||||
|
@ -303,6 +305,7 @@ opts.AddVariables(
|
|||
('CONFIG', "The path to the python file in which to save user configuration options. Currently : '%s'" % SCONS_LOCAL_CONFIG,SCONS_LOCAL_CONFIG),
|
||||
BoolVariable('USE_CONFIG', "Use SCons user '%s' file (will also write variables after successful configuration)", 'True'),
|
||||
BoolVariable('NO_ATEXIT', 'Will prevent Singletons from being deleted atexit of main thread', 'False'),
|
||||
BoolVariable('NO_DLCLOSE', 'Will prevent plugins from being unloaded', 'False'),
|
||||
# http://www.scons.org/wiki/GoFastButton
|
||||
# http://stackoverflow.com/questions/1318863/how-to-optimize-an-scons-script
|
||||
BoolVariable('FAST', "Make SCons faster at the cost of less precise dependency tracking", 'False'),
|
||||
|
@ -317,7 +320,6 @@ opts.AddVariables(
|
|||
('PATH_REMOVE', 'A path prefix to exclude from all known command and compile paths (create multiple excludes separated by :)', ''),
|
||||
('PATH_REPLACE', 'Two path prefixes (divided with a :) to search/replace from all known command and compile paths', ''),
|
||||
('MAPNIK_NAME', 'Name of library', 'mapnik'),
|
||||
BoolVariable('MAPNIK_BUNDLED_SHARE_DIRECTORY', 'For portable packaging: instruct mapnik-config to report relative paths to bundled GDAL_DATA, PROJ_LIB, and ICU_DATA','False'),
|
||||
|
||||
# Boost variables
|
||||
# default is '/usr/include', see FindBoost method below
|
||||
|
@ -703,11 +705,7 @@ def FindBoost(context, prefixes, thread_flag):
|
|||
BOOST_INCLUDE_DIR = None
|
||||
BOOST_APPEND = None
|
||||
env['BOOST_APPEND'] = str()
|
||||
|
||||
if env['THREADING'] == 'multi':
|
||||
search_lib = 'libboost_thread'
|
||||
else:
|
||||
search_lib = 'libboost_filesystem'
|
||||
search_lib = 'libboost_filesystem'
|
||||
|
||||
# note: must call normpath to strip trailing slash otherwise dirname
|
||||
# does not remove 'lib' and 'include'
|
||||
|
@ -1139,6 +1137,9 @@ if not preconfigured:
|
|||
else:
|
||||
mode = 'release mode'
|
||||
|
||||
if env['COVERAGE']:
|
||||
mode += ' (with coverage)'
|
||||
|
||||
env['PLATFORM'] = platform.uname()[0]
|
||||
color_print(4,"Configuring on %s in *%s*..." % (env['PLATFORM'],mode))
|
||||
|
||||
|
@ -1355,7 +1356,7 @@ if not preconfigured:
|
|||
|
||||
# test for C++11 support, which is required
|
||||
if not env['HOST'] and not conf.supports_cxx11():
|
||||
color_print(1,"C++ compiler does not support C++11 standard (-std=c++11), which is required. Please upgrade your compiler to at least g++ 4.7 (ideally 4.8)")
|
||||
color_print(1,"C++ compiler does not support C++11 standard (-std=c++11), which is required. Please upgrade your compiler")
|
||||
Exit(1)
|
||||
|
||||
if not env['HOST']:
|
||||
|
@ -1407,15 +1408,6 @@ if not preconfigured:
|
|||
['program_options', 'boost/program_options.hpp', False]
|
||||
]
|
||||
|
||||
if env['THREADING'] == 'multi':
|
||||
BOOST_LIBSHEADERS.append(['thread', 'boost/thread/mutex.hpp', True])
|
||||
# on solaris the configure checks for boost_thread
|
||||
# require the -pthreads flag to be able to check for
|
||||
# threading support, so we add as a global library instead
|
||||
# of attaching to cxxflags after configure
|
||||
if env['PLATFORM'] == 'SunOS':
|
||||
env.Append(CXXFLAGS = '-pthreads')
|
||||
|
||||
# if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests
|
||||
if env['PRIORITIZE_LINKING']:
|
||||
conf.prioritize_paths(silent=True)
|
||||
|
@ -1447,12 +1439,13 @@ if not preconfigured:
|
|||
# just turn it off like this, but seems the only available work-
|
||||
# around. See https://svn.boost.org/trac/boost/ticket/6779 for more
|
||||
# details.
|
||||
boost_version = [int(x) for x in env.get('BOOST_LIB_VERSION_FROM_HEADER').split('_')]
|
||||
if not conf.CheckBoostScopedEnum():
|
||||
if boost_version < [1, 51]:
|
||||
env.Append(CXXFLAGS = '-DBOOST_NO_SCOPED_ENUMS')
|
||||
elif boost_version < [1, 57]:
|
||||
env.Append(CXXFLAGS = '-DBOOST_NO_CXX11_SCOPED_ENUMS')
|
||||
if not env['HOST']:
|
||||
boost_version = [int(x) for x in env.get('BOOST_LIB_VERSION_FROM_HEADER').split('_')]
|
||||
if not conf.CheckBoostScopedEnum():
|
||||
if boost_version < [1, 51]:
|
||||
env.Append(CXXFLAGS = '-DBOOST_NO_SCOPED_ENUMS')
|
||||
elif boost_version < [1, 57]:
|
||||
env.Append(CXXFLAGS = '-DBOOST_NO_CXX11_SCOPED_ENUMS')
|
||||
|
||||
if not env['HOST'] and env['ICU_LIB_NAME'] not in env['MISSING_DEPS']:
|
||||
# http://lists.boost.org/Archives/boost/2009/03/150076.php
|
||||
|
@ -1605,6 +1598,7 @@ if not preconfigured:
|
|||
# prepend to make sure we link locally
|
||||
env.Prepend(CPPPATH = '#deps/agg/include')
|
||||
env.Prepend(LIBPATH = '#deps/agg')
|
||||
env.Prepend(CPPPATH = '#deps/mapbox/variant/include')
|
||||
# prepend deps dir for auxillary headers
|
||||
env.Prepend(CPPPATH = '#deps')
|
||||
|
||||
|
@ -1630,7 +1624,7 @@ if not preconfigured:
|
|||
env["CAIRO_ALL_LIBS"] = ['cairo']
|
||||
if env['RUNTIME_LINK'] == 'static':
|
||||
env["CAIRO_ALL_LIBS"].extend(
|
||||
['pixman-1','expat']
|
||||
['pixman-1']
|
||||
)
|
||||
# todo - run actual checkLib?
|
||||
env['HAS_CAIRO'] = True
|
||||
|
@ -1727,6 +1721,9 @@ if not preconfigured:
|
|||
if env['NO_ATEXIT']:
|
||||
env.Append(CPPDEFINES = '-DMAPNIK_NO_ATEXIT')
|
||||
|
||||
if env['NO_DLCLOSE'] or env['COVERAGE']:
|
||||
env.Append(CPPDEFINES = '-DMAPNIK_NO_DLCLOSE')
|
||||
|
||||
# Mac OSX (Darwin) special settings
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
pthread = ''
|
||||
|
@ -1786,20 +1783,24 @@ if not preconfigured:
|
|||
|
||||
# Common flags for g++/clang++ CXX compiler.
|
||||
# TODO: clean up code more to make -Wextra -Wsign-compare -Wsign-conversion -Wconversion viable
|
||||
common_cxx_flags = '-Wall %s %s -ftemplate-depth-300 -Wsign-compare -Wshadow ' % (env['WARNING_CXXFLAGS'], pthread)
|
||||
# -Wfloat-equal -Wold-style-cast -Wexit-time-destructors -Wglobal-constructors -Wreserved-id-macro -Wheader-hygiene -Wmissing-noreturn
|
||||
common_cxx_flags = '-fvisibility=hidden -fvisibility-inlines-hidden -Wall %s %s -ftemplate-depth-300 -Wsign-compare -Wshadow ' % (env['WARNING_CXXFLAGS'], pthread)
|
||||
|
||||
if 'clang++' in env['CXX']:
|
||||
common_cxx_flags += ' -Wno-unsequenced '
|
||||
common_cxx_flags += ' -Wno-unsequenced -Wtautological-compare -Wheader-hygiene '
|
||||
|
||||
if env['DEBUG']:
|
||||
env.Append(CXXFLAGS = common_cxx_flags + '-O0')
|
||||
else:
|
||||
# TODO - add back -fvisibility-inlines-hidden
|
||||
# https://github.com/mapnik/mapnik/issues/1863
|
||||
env.Append(CXXFLAGS = common_cxx_flags + '-O%s' % (env['OPTIMIZATION']))
|
||||
if env['DEBUG_UNDEFINED']:
|
||||
env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
|
||||
|
||||
if env['DEBUG_SANITIZE']:
|
||||
env.Append(CXXFLAGS = ['-fsanitize=address'])
|
||||
env.Append(LINKFLAGS = ['-fsanitize=address'])
|
||||
|
||||
|
||||
# if requested, sort LIBPATH and CPPPATH one last time before saving...
|
||||
if env['PRIORITIZE_LINKING']:
|
||||
conf.prioritize_paths(silent=True)
|
||||
|
@ -1888,6 +1889,10 @@ if not HELP_REQUESTED:
|
|||
|
||||
plugin_base = env.Clone()
|
||||
|
||||
if env['COVERAGE']:
|
||||
plugin_base.Append(LINKFLAGS='--coverage')
|
||||
plugin_base.Append(CXXFLAGS='--coverage')
|
||||
|
||||
Export('plugin_base')
|
||||
|
||||
if env['FAST']:
|
||||
|
|
20
appveyor.yml
20
appveyor.yml
|
@ -1,6 +1,6 @@
|
|||
environment:
|
||||
msvs_toolset: 14
|
||||
BOOST_VERSION: 59
|
||||
BOOST_VERSION: 60
|
||||
FASTBUILD: 1
|
||||
matrix:
|
||||
- platform: x64
|
||||
|
@ -8,11 +8,24 @@ environment:
|
|||
|
||||
os: Visual Studio 2015
|
||||
|
||||
shallow_clone: true
|
||||
#shallow_clone: true
|
||||
# limit clone to latest 5 commits
|
||||
clone_depth: 5
|
||||
|
||||
services:
|
||||
- postgresql94 #if changing this, also change PATH below
|
||||
|
||||
install:
|
||||
- SET PGUSER=postgres
|
||||
- SET PGPASSWORD=Password12!
|
||||
- SET PATH=C:\Program Files\PostgreSQL\9.4\bin\;%PATH%
|
||||
|
||||
build_script:
|
||||
- scripts\build-appveyor.bat
|
||||
|
||||
after_build:
|
||||
- 7z a mapnik-visual-images.zip C:\tmp\mapnik-visual-images
|
||||
|
||||
artifacts:
|
||||
- path: mapnik-gyp\msbuild-summary.txt
|
||||
name: msbuild-summary.txt
|
||||
|
@ -20,7 +33,8 @@ artifacts:
|
|||
name: msbuild-errors.txt
|
||||
- path: mapnik-gyp\msbuild-warnings.txt
|
||||
name: msbuild-warnings.txt
|
||||
- path: mapnik-visual-images.zip
|
||||
name: mapnik-visual-images.zip
|
||||
|
||||
build: off
|
||||
test: off
|
||||
deploy: off
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#ifndef __MAPNIK_BENCH_FRAMEWORK_HPP__
|
||||
#define __MAPNIK_BENCH_FRAMEWORK_HPP__
|
||||
#ifndef MAPNIK_BENCH_FRAMEWORK_HPP
|
||||
#define MAPNIK_BENCH_FRAMEWORK_HPP
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/params.hpp>
|
||||
#include <mapnik/value_types.hpp>
|
||||
#include <mapnik/safe_cast.hpp>
|
||||
|
@ -9,7 +10,8 @@
|
|||
|
||||
// stl
|
||||
#include <chrono>
|
||||
#include <iomanip>
|
||||
#include <cmath> // log10, round
|
||||
#include <cstdio> // snprintf
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
|
@ -18,6 +20,12 @@
|
|||
|
||||
namespace benchmark {
|
||||
|
||||
template <typename T>
|
||||
using milliseconds = std::chrono::duration<T, std::milli>;
|
||||
|
||||
template <typename T>
|
||||
using seconds = std::chrono::duration<T>;
|
||||
|
||||
class test_case
|
||||
{
|
||||
protected:
|
||||
|
@ -38,26 +46,78 @@ public:
|
|||
{
|
||||
return iterations_;
|
||||
}
|
||||
mapnik::parameters const& params() const
|
||||
{
|
||||
return params_;
|
||||
}
|
||||
virtual bool validate() const = 0;
|
||||
virtual bool operator()() const = 0;
|
||||
virtual ~test_case() {}
|
||||
};
|
||||
|
||||
void handle_args(int argc, char** argv, mapnik::parameters & params)
|
||||
// gathers --long-option values in 'params';
|
||||
// returns the index of the first non-option argument,
|
||||
// or negated index of an ill-formed option argument
|
||||
inline int parse_args(int argc, char** argv, mapnik::parameters & params)
|
||||
{
|
||||
if (argc > 0) {
|
||||
for (int i=1;i<argc;++i) {
|
||||
std::string opt(argv[i]);
|
||||
// parse --foo bar
|
||||
if (!opt.empty() && (opt.find("--") != 0)) {
|
||||
std::string key = std::string(argv[i-1]);
|
||||
if (!key.empty() && (key.find("--") == 0)) {
|
||||
key = key.substr(key.find_first_not_of("-"));
|
||||
params[key] = opt;
|
||||
}
|
||||
}
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
const char* opt = argv[i];
|
||||
if (opt[0] != '-') {
|
||||
// non-option argument, return its index
|
||||
return i;
|
||||
}
|
||||
if (opt[1] != '-') {
|
||||
// we only accept --long-options, but instead of throwing,
|
||||
// just issue a warning and let the caller decide what to do
|
||||
std::clog << argv[0] << ": invalid option '" << opt << "'\n";
|
||||
return -i; // negative means ill-formed option #i
|
||||
}
|
||||
if (opt[2] == '\0') {
|
||||
// option-list terminator '--'
|
||||
return i + 1;
|
||||
}
|
||||
|
||||
// take option name without the leading '--'
|
||||
std::string key(opt + 2);
|
||||
size_t eq = key.find('=');
|
||||
if (eq != std::string::npos) {
|
||||
// one-argument form '--foo=bar'
|
||||
params[key.substr(0, eq)] = key.substr(eq + 1);
|
||||
}
|
||||
else if (i + 1 < argc) {
|
||||
// two-argument form '--foo' 'bar'
|
||||
params[key] = std::string(argv[++i]);
|
||||
}
|
||||
else {
|
||||
// missing second argument
|
||||
std::clog << argv[0] << ": missing option '" << opt << "' value\n";
|
||||
return -i; // negative means ill-formed option #i
|
||||
}
|
||||
}
|
||||
return argc; // there were no non-option arguments
|
||||
}
|
||||
|
||||
inline void handle_common_args(mapnik::parameters const& params)
|
||||
{
|
||||
if (auto severity = params.get<std::string>("log")) {
|
||||
if (*severity == "debug")
|
||||
mapnik::logger::set_severity(mapnik::logger::debug);
|
||||
else if (*severity == "warn")
|
||||
mapnik::logger::set_severity(mapnik::logger::warn);
|
||||
else if (*severity == "error")
|
||||
mapnik::logger::set_severity(mapnik::logger::error);
|
||||
else if (*severity == "none")
|
||||
mapnik::logger::set_severity(mapnik::logger::none);
|
||||
else
|
||||
std::clog << "ignoring option --log='" << *severity
|
||||
<< "' (allowed values are: debug, warn, error, none)\n";
|
||||
}
|
||||
}
|
||||
|
||||
inline int handle_args(int argc, char** argv, mapnik::parameters & params)
|
||||
{
|
||||
int res = parse_args(argc, argv, params);
|
||||
handle_common_args(params);
|
||||
return res;
|
||||
}
|
||||
|
||||
#define BENCHMARK(test_class,name) \
|
||||
|
@ -80,6 +140,29 @@ void handle_args(int argc, char** argv, mapnik::parameters & params)
|
|||
} \
|
||||
} \
|
||||
|
||||
struct big_number_fmt
|
||||
{
|
||||
int w;
|
||||
double v;
|
||||
const char* u;
|
||||
|
||||
big_number_fmt(int width, double value, int base = 1000)
|
||||
: w(width), v(value), u("")
|
||||
{
|
||||
static const char* suffixes = "\0\0k\0M\0G\0T\0P\0E\0Z\0Y\0\0";
|
||||
u = suffixes;
|
||||
|
||||
while (v > 1 && std::log10(std::round(v)) >= width && u[2])
|
||||
{
|
||||
v /= base;
|
||||
u += 2;
|
||||
}
|
||||
|
||||
// adjust width for proper alignment without suffix
|
||||
w += (u == suffixes);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
int run(T const& test_runner, std::string const& name)
|
||||
{
|
||||
|
@ -88,52 +171,120 @@ int run(T const& test_runner, std::string const& name)
|
|||
if (!test_runner.validate())
|
||||
{
|
||||
std::clog << "test did not validate: " << name << "\n";
|
||||
return -1;
|
||||
return 1;
|
||||
}
|
||||
// run test once before timing
|
||||
// if it returns false then we'll abort timing
|
||||
if (test_runner())
|
||||
if (!test_runner())
|
||||
{
|
||||
std::chrono::high_resolution_clock::time_point start;
|
||||
std::chrono::high_resolution_clock::duration elapsed;
|
||||
std::stringstream s;
|
||||
s << name << ":"
|
||||
<< std::setw(45 - (int)s.tellp()) << std::right
|
||||
<< " t:" << test_runner.threads()
|
||||
<< " i:" << test_runner.iterations();
|
||||
if (test_runner.threads() > 0)
|
||||
return 2;
|
||||
}
|
||||
|
||||
std::chrono::high_resolution_clock::time_point start;
|
||||
std::chrono::high_resolution_clock::duration elapsed;
|
||||
auto opt_min_duration = test_runner.params().template get<double>("min-duration", 0.0);
|
||||
std::chrono::duration<double> min_seconds(*opt_min_duration);
|
||||
auto min_duration = std::chrono::duration_cast<decltype(elapsed)>(min_seconds);
|
||||
auto num_iters = test_runner.iterations();
|
||||
auto num_threads = test_runner.threads();
|
||||
auto total_iters = 0;
|
||||
|
||||
if (num_threads > 0)
|
||||
{
|
||||
std::mutex mtx_ready;
|
||||
std::unique_lock<std::mutex> lock_ready(mtx_ready);
|
||||
|
||||
auto stub = [&](T const& test_copy)
|
||||
{
|
||||
using thread_group = std::vector<std::unique_ptr<std::thread> >;
|
||||
using value_type = thread_group::value_type;
|
||||
thread_group tg;
|
||||
for (std::size_t i=0;i<test_runner.threads();++i)
|
||||
{
|
||||
tg.emplace_back(new std::thread(test_runner));
|
||||
}
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
std::for_each(tg.begin(), tg.end(), [](value_type & t) {if (t->joinable()) t->join();});
|
||||
elapsed = std::chrono::high_resolution_clock::now() - start;
|
||||
// workers will wait on this mutex until the main thread
|
||||
// constructs all of them and starts measuring time
|
||||
std::unique_lock<std::mutex> my_lock(mtx_ready);
|
||||
my_lock.unlock();
|
||||
test_copy();
|
||||
};
|
||||
|
||||
std::vector<std::thread> tg;
|
||||
tg.reserve(num_threads);
|
||||
for (auto i = num_threads; i-- > 0; )
|
||||
{
|
||||
tg.emplace_back(stub, test_runner);
|
||||
}
|
||||
else
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
lock_ready.unlock();
|
||||
// wait for all workers to finish
|
||||
for (auto & t : tg)
|
||||
{
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
if (t.joinable())
|
||||
t.join();
|
||||
}
|
||||
elapsed = std::chrono::high_resolution_clock::now() - start;
|
||||
// this is actually per-thread count, not total, but I think
|
||||
// reporting average 'iters/thread/second' is more useful
|
||||
// than 'iters/second' multiplied by the number of threads
|
||||
total_iters += num_iters;
|
||||
}
|
||||
else
|
||||
{
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
do {
|
||||
test_runner();
|
||||
elapsed = std::chrono::high_resolution_clock::now() - start;
|
||||
}
|
||||
s << std::setw(65 - (int)s.tellp()) << std::right
|
||||
<< std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() << " milliseconds\n";
|
||||
std::clog << s.str();
|
||||
total_iters += num_iters;
|
||||
} while (elapsed < min_duration);
|
||||
}
|
||||
|
||||
char msg[200];
|
||||
double dur_total = milliseconds<double>(elapsed).count();
|
||||
auto elapsed_nonzero = std::max(elapsed, decltype(elapsed){1});
|
||||
big_number_fmt itersf(4, total_iters);
|
||||
big_number_fmt ips(5, total_iters / seconds<double>(elapsed_nonzero).count());
|
||||
|
||||
std::snprintf(msg, sizeof(msg),
|
||||
"%-43s %3zu threads %*.0f%s iters %6.0f milliseconds %*.0f%s i/s\n",
|
||||
name.c_str(),
|
||||
num_threads,
|
||||
itersf.w, itersf.v, itersf.u,
|
||||
dur_total,
|
||||
ips.w, ips.v, ips.u
|
||||
);
|
||||
std::clog << msg;
|
||||
return 0;
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << "test runner did not complete: " << ex.what() << "\n";
|
||||
return -1;
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct sequencer
|
||||
{
|
||||
sequencer(int argc, char** argv)
|
||||
: exit_code_(0)
|
||||
{
|
||||
benchmark::handle_args(argc, argv, params_);
|
||||
}
|
||||
|
||||
int done() const
|
||||
{
|
||||
return exit_code_;
|
||||
}
|
||||
|
||||
template <typename Test, typename... Args>
|
||||
sequencer & run(std::string const& name, Args && ...args)
|
||||
{
|
||||
// Test instance lifetime is confined to this function
|
||||
Test test_runner(params_, std::forward<Args>(args)...);
|
||||
// any failing test run will make exit code non-zero
|
||||
exit_code_ |= benchmark::run(test_runner, name);
|
||||
return *this; // allow chaining calls
|
||||
}
|
||||
|
||||
protected:
|
||||
mapnik::parameters params_;
|
||||
int exit_code_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MAPNIK_BENCH_FRAMEWORK_HPP__
|
||||
#endif // MAPNIK_BENCH_FRAMEWORK_HPP
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
#ifndef __MAPNIK_COMPARE_IMAGES_HPP__
|
||||
#define __MAPNIK_COMPARE_IMAGES_HPP__
|
||||
#ifndef MAPNIK_COMPARE_IMAGES_HPP
|
||||
#define MAPNIK_COMPARE_IMAGES_HPP
|
||||
|
||||
#include <mapnik/image.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/image_reader.hpp>
|
||||
|
||||
using namespace mapnik;
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
|
@ -23,15 +22,15 @@ namespace benchmark {
|
|||
throw mapnik::image_reader_exception("Failed to load: " + src_fn);
|
||||
}
|
||||
|
||||
const image_any desc_any = reader1->read(0,0,reader1->width(), reader1->height());
|
||||
const image_any src_any = reader2->read(0,0,reader2->width(), reader2->height());
|
||||
const mapnik::image_any desc_any = reader1->read(0,0,reader1->width(), reader1->height());
|
||||
const mapnik::image_any src_any = reader2->read(0,0,reader2->width(), reader2->height());
|
||||
|
||||
image_rgba8 const& dest = util::get<image_rgba8>(desc_any);
|
||||
image_rgba8 const& src = util::get<image_rgba8>(src_any);
|
||||
mapnik::image_rgba8 const& dest = mapnik::util::get<mapnik::image_rgba8>(desc_any);
|
||||
mapnik::image_rgba8 const& src = mapnik::util::get<mapnik::image_rgba8>(src_any);
|
||||
|
||||
return compare(dest, src, 0, true) == 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // __MAPNIK_COMPARE_IMAGES_HPP__
|
||||
#endif // MAPNIK_COMPARE_IMAGES_HPP
|
||||
|
|
|
@ -6,8 +6,14 @@ source ./localize.sh
|
|||
|
||||
BASE=./benchmark/out
|
||||
function run {
|
||||
${BASE}/$1 --threads 0 --iterations $3;
|
||||
${BASE}/$1 --threads $2 --iterations $(expr $3 / $2);
|
||||
local runner="$BASE/$1 --log=none"
|
||||
local threads="$2"
|
||||
local iters="$3"
|
||||
shift 3
|
||||
$runner --threads 0 --iterations $iters "$@"
|
||||
if test $threads -gt 0; then
|
||||
$runner --threads $threads --iterations $((iters/threads)) "$@"
|
||||
fi
|
||||
}
|
||||
run test_getline 30 10000000
|
||||
#run test_array_allocation 20 100000
|
||||
|
@ -23,6 +29,8 @@ run test_face_ptr_creation 10 1000
|
|||
run test_font_registration 10 100
|
||||
run test_offset_converter 10 1000
|
||||
|
||||
# commented since this is really slow on travis
|
||||
: '
|
||||
./benchmark/out/test_rendering \
|
||||
--name "text rendering" \
|
||||
--map benchmark/data/roads.xml \
|
||||
|
@ -31,6 +39,7 @@ run test_offset_converter 10 1000
|
|||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
'
|
||||
|
||||
./benchmark/out/test_rendering \
|
||||
--name "gdal tiff rendering" \
|
||||
|
|
|
@ -231,33 +231,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class test3d : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3d(mapnik::parameters const& params)
|
||||
: test_case(params),
|
||||
size_(*params.get<mapnik::value_integer>("size",256*256)),
|
||||
array_(size_,0) { }
|
||||
bool validate() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i=0;i<iterations_;++i) {
|
||||
std::deque<uint8_t> data(size_);
|
||||
for (std::size_t i=0;i<size_;++i) {
|
||||
if (data[i] != 0) {
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test4 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
|
@ -386,62 +359,21 @@ public:
|
|||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
int return_value = 0;
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc,argv,params);
|
||||
{
|
||||
test4 test_runner4(params);
|
||||
return_value = return_value | run(test_runner4,"calloc");
|
||||
}
|
||||
{
|
||||
test1 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"malloc/memcpy");
|
||||
}
|
||||
{
|
||||
test1b test_runner(params);
|
||||
return_value = return_value | run(test_runner,"malloc/memset");
|
||||
}
|
||||
{
|
||||
test1c test_runner(params);
|
||||
return_value = return_value | run(test_runner,"operator new/std::fill");
|
||||
}
|
||||
{
|
||||
test2 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"operator new/memcpy");
|
||||
}
|
||||
{
|
||||
test3 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"vector(N)");
|
||||
}
|
||||
{
|
||||
test3b test_runner(params);
|
||||
return_value = return_value | run(test_runner,"vector/resize");
|
||||
}
|
||||
{
|
||||
test3c test_runner(params);
|
||||
return_value = return_value | run(test_runner,"vector/assign");
|
||||
}
|
||||
{
|
||||
test3d test_runner(params);
|
||||
return_value = return_value | run(test_runner,"deque(N)");
|
||||
}
|
||||
{
|
||||
test5 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"std::string range");
|
||||
}
|
||||
{
|
||||
test5b test_runner(params);
|
||||
return_value = return_value | run(test_runner,"std::string &[0]");
|
||||
}
|
||||
{
|
||||
test6 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"valarray");
|
||||
}
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test4>("calloc")
|
||||
.run<test1>("malloc/memcpy")
|
||||
.run<test1b>("malloc/memset")
|
||||
.run<test1c>("operator new/std::fill")
|
||||
.run<test2>("operator new/memcpy")
|
||||
.run<test3>("vector(N)")
|
||||
.run<test3b>("vector/resize")
|
||||
.run<test3c>("vector/assign")
|
||||
.run<test3d>("deque(N)")
|
||||
.run<test5>("std::string range")
|
||||
.run<test5b>("std::string &[0]")
|
||||
.run<test6>("valarray")
|
||||
#if BOOST_VERSION >= 105400
|
||||
{
|
||||
test7 test_runner(params);
|
||||
return_value = return_value | run(test_runner,"static_vector");
|
||||
}
|
||||
.run<test7>("static_vector")
|
||||
#endif
|
||||
return return_value;
|
||||
.done();
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
#include "../plugins/input/csv/csv_utils.hpp"
|
||||
#include "../plugins/input/csv/csv_getline.hpp"
|
||||
|
||||
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
|
|
|
@ -73,16 +73,8 @@ public:
|
|||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc,argv,params);
|
||||
int return_value = 0;
|
||||
{
|
||||
test_static test_runner(params);
|
||||
return_value = return_value | run(test_runner,"static_cast");
|
||||
}
|
||||
{
|
||||
test_numeric test_runner(params);
|
||||
return_value = return_value | run(test_runner,"numeric_cast");
|
||||
}
|
||||
return return_value;
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test_static>("static_cast")
|
||||
.run<test_numeric>("numeric_cast")
|
||||
.done();
|
||||
}
|
||||
|
|
|
@ -19,8 +19,8 @@ public:
|
|||
out.clear();
|
||||
out = mapnik::save_to_string(im_,"png8:m=h:z=1");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
BENCHMARK(test,"encoding blank png")
|
||||
|
|
|
@ -30,8 +30,8 @@ public:
|
|||
out.clear();
|
||||
out = mapnik::save_to_string(*im_,"png8:m=h:z=1");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
BENCHMARK(test,"encoding multicolor png")
|
||||
|
|
|
@ -51,30 +51,10 @@ int main(int argc, char** argv)
|
|||
mapnik::box2d<double> z1(-20037508.3428,-8317435.0606,20037508.3428,18399242.7298);
|
||||
// bbox for 16/10491/22911.png
|
||||
mapnik::box2d<double> z16(-13622912.929097254,6026906.8062295765,-13621689.93664469,6028129.79868214);
|
||||
int return_value = 0;
|
||||
{
|
||||
test test_runner(params,
|
||||
"benchmark/data/polygon_rendering_clip.xml",
|
||||
z1);
|
||||
return_value = return_value | run(test_runner,"polygon clip render z1");
|
||||
}
|
||||
{
|
||||
test test_runner(params,
|
||||
"benchmark/data/polygon_rendering_no_clip.xml",
|
||||
z1);
|
||||
return_value = return_value | run(test_runner,"polygon noclip render z1");
|
||||
}
|
||||
{
|
||||
test test_runner(params,
|
||||
"benchmark/data/polygon_rendering_clip.xml",
|
||||
z16);
|
||||
return_value = return_value | run(test_runner,"polygon clip render z16");
|
||||
}
|
||||
{
|
||||
test test_runner(params,
|
||||
"benchmark/data/polygon_rendering_no_clip.xml",
|
||||
z16);
|
||||
return_value = return_value | run(test_runner,"polygon noclip render z16");
|
||||
}
|
||||
return return_value;
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test>("polygon clip render z1", "benchmark/data/polygon_rendering_clip.xml", z1)
|
||||
.run<test>("polygon noclip render z1", "benchmark/data/polygon_rendering_no_clip.xml", z1)
|
||||
.run<test>("polygon clip render z16", "benchmark/data/polygon_rendering_clip.xml", z16)
|
||||
.run<test>("polygon noclip render z16", "benchmark/data/polygon_rendering_no_clip.xml", z16)
|
||||
.done();
|
||||
}
|
||||
|
|
|
@ -59,42 +59,16 @@ public:
|
|||
// echo -180 -60 | cs2cs -f "%.10f" +init=epsg:4326 +to +init=epsg:3857
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc,argv,params);
|
||||
mapnik::box2d<double> from(-180,-80,180,80);
|
||||
mapnik::box2d<double> to(-20037508.3427892476,-15538711.0963092316,20037508.3427892476,15538711.0963092316);
|
||||
std::string from_str("+init=epsg:4326");
|
||||
std::string to_str("+init=epsg:3857");
|
||||
std::string from_str2("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
|
||||
std::string to_str2("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over");
|
||||
int return_value = 0;
|
||||
test test_runner(params,
|
||||
from_str,
|
||||
to_str,
|
||||
from,
|
||||
to,
|
||||
true);
|
||||
return_value = return_value | run(test_runner,"lonlat->merc epsg");
|
||||
test test_runner2(params,
|
||||
from_str2,
|
||||
to_str2,
|
||||
from,
|
||||
to,
|
||||
true);
|
||||
return_value = return_value | run(test_runner2,"lonlat->merc literal");
|
||||
test test_runner3(params,
|
||||
to_str,
|
||||
from_str,
|
||||
to,
|
||||
from,
|
||||
true);
|
||||
return_value = return_value | run(test_runner3,"merc->lonlat epsg");
|
||||
test test_runner4(params,
|
||||
to_str2,
|
||||
from_str2,
|
||||
to,
|
||||
from,
|
||||
true);
|
||||
return_value = return_value | run(test_runner4,"merc->lonlat literal");
|
||||
return return_value;
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test>("lonlat->merc epsg", from_str, to_str, from, to, true)
|
||||
.run<test>("lonlat->merc literal", from_str2, to_str2, from, to, true)
|
||||
.run<test>("merc->lonlat epsg", to_str, from_str, to, from, true)
|
||||
.run<test>("merc->lonlat literal", to_str2, from_str2, to, from, true)
|
||||
.done();
|
||||
}
|
||||
|
|
86
bootstrap.sh
86
bootstrap.sh
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
#set -eu
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
: '
|
||||
|
||||
|
@ -10,67 +11,75 @@ todo
|
|||
- shrink icu data
|
||||
'
|
||||
|
||||
MASON_VERSION="7ed8931"
|
||||
|
||||
function setup_mason() {
|
||||
if [[ ! -d ./.mason ]]; then
|
||||
git clone --depth 1 https://github.com/mapbox/mason.git ./.mason
|
||||
git clone https://github.com/mapbox/mason.git ./.mason
|
||||
(cd ./.mason && git checkout ${MASON_VERSION})
|
||||
else
|
||||
echo "Updating to latest mason"
|
||||
(cd ./.mason && git pull)
|
||||
(cd ./.mason && git fetch && git checkout ${MASON_VERSION})
|
||||
fi
|
||||
export MASON_DIR=$(pwd)/.mason
|
||||
export PATH=$(pwd)/.mason:$PATH
|
||||
export CXX=${CXX:-clang++}
|
||||
export CC=${CC:-clang}
|
||||
}
|
||||
|
||||
if [[ $(uname -s) == 'Darwin' ]]; then
|
||||
FIND_PATTERN="\/Users\/travis\/build\/mapbox\/mason"
|
||||
else
|
||||
FIND_PATTERN="\/home\/travis\/build\/mapbox\/mason"
|
||||
fi
|
||||
|
||||
REPLACE="$(pwd)"
|
||||
REPLACE=${REPLACE////\\/}
|
||||
|
||||
function install() {
|
||||
MASON_PLATFORM_ID=$(mason env MASON_PLATFORM_ID)
|
||||
if [[ ! -d ./mason_packages/${MASON_PLATFORM_ID}/${1}/${2} ]]; then
|
||||
mason install $1 $2
|
||||
mason link $1 $2
|
||||
if [[ $3 ]]; then
|
||||
LA_FILE=$(${MASON_DIR:-~/.mason}/mason prefix $1 $2)/lib/$3.la
|
||||
if [[ ${3:-false} != false ]]; then
|
||||
LA_FILE=$(mason prefix $1 $2)/lib/$3.la
|
||||
if [[ -f ${LA_FILE} ]]; then
|
||||
perl -i -p -e "s/${FIND_PATTERN}/${REPLACE}/g;" ${LA_FILE}
|
||||
perl -i -p -e 's:\Q$ENV{HOME}/build/mapbox/mason\E:$ENV{PWD}:g' ${LA_FILE}
|
||||
else
|
||||
echo "$LA_FILE not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
mason link $1 $2
|
||||
}
|
||||
|
||||
ICU_VERSION="55.1"
|
||||
|
||||
function install_mason_deps() {
|
||||
install gdal 1.11.2 libgdal &
|
||||
install boost 1.59.0 &
|
||||
install boost_liball 1.59.0 &
|
||||
install freetype 2.6 libfreetype &
|
||||
install harfbuzz 0.9.40 libharfbuzz &
|
||||
FAIL=0
|
||||
install ccache 3.2.4 &
|
||||
install jpeg_turbo 1.4.0 libjpeg &
|
||||
install libpng 1.6.17 libpng &
|
||||
install webp 0.4.2 libwebp &
|
||||
install libpng 1.6.20 libpng &
|
||||
install libtiff 4.0.4beta libtiff &
|
||||
install libpq 9.4.1 &
|
||||
install sqlite 3.8.8.3 libsqlite3 &
|
||||
install expat 2.1.0 libexpat &
|
||||
install icu ${ICU_VERSION} &
|
||||
install proj 4.8.0 libproj &
|
||||
install libtiff 4.0.4beta libtiff &
|
||||
install libpq 9.4.0 &
|
||||
install sqlite 3.8.8.1 libsqlite3 &
|
||||
install expat 2.1.0 libexpat &
|
||||
install pixman 0.32.6 libpixman-1 &
|
||||
install cairo 1.14.2 libcairo &
|
||||
install protobuf 2.6.1 &
|
||||
wait
|
||||
# technically protobuf is not a mapnik core dep, but installing
|
||||
# here by default helps make mapnik-vector-tile builds easier
|
||||
install webp 0.5.0 libwebp &
|
||||
install gdal 1.11.2 libgdal &
|
||||
install boost 1.61.0 &
|
||||
install boost_libsystem 1.61.0 &
|
||||
install boost_libfilesystem 1.61.0 &
|
||||
install boost_libprogram_options 1.61.0 &
|
||||
install boost_libregex_icu 1.61.0 &
|
||||
# technically boost thread and python are not a core dep, but installing
|
||||
# here by default helps make python-mapnik builds easier
|
||||
install boost_libthread 1.61.0 &
|
||||
install boost_libpython 1.61.0 &
|
||||
install freetype 2.6 libfreetype &
|
||||
install harfbuzz 0.9.41 libharfbuzz &
|
||||
for job in $(jobs -p)
|
||||
do
|
||||
wait $job || let "FAIL+=1"
|
||||
done
|
||||
if [[ "$FAIL" != "0" ]]; then
|
||||
exit ${FAIL}
|
||||
fi
|
||||
}
|
||||
|
||||
MASON_LINKED_ABS=$(pwd)/mason_packages/.link
|
||||
|
@ -80,22 +89,15 @@ export CPLUS_INCLUDE_PATH="${MASON_LINKED_ABS}/include"
|
|||
export LIBRARY_PATH="${MASON_LINKED_ABS}/lib"
|
||||
|
||||
function make_config() {
|
||||
if [[ $(uname -s) == 'Darwin' ]]; then
|
||||
local PATH_REPLACE="/Users/travis/build/mapbox/mason/mason_packages:./mason_packages"
|
||||
else
|
||||
local PATH_REPLACE="/home/travis/build/mapbox/mason/mason_packages:./mason_packages"
|
||||
fi
|
||||
|
||||
echo "
|
||||
CXX = '$CXX'
|
||||
CC = '$CC'
|
||||
CUSTOM_CXXFLAGS = '-fvisibility=hidden -fvisibility-inlines-hidden -DU_CHARSET_IS_UTF8=1'
|
||||
RUNTIME_LINK = 'static'
|
||||
INPUT_PLUGINS = 'all'
|
||||
PATH = '${MASON_LINKED_REL}/bin'
|
||||
PKG_CONFIG_PATH = '${MASON_LINKED_REL}/lib/pkgconfig'
|
||||
PATH_REMOVE = '/usr:/usr/local'
|
||||
PATH_REPLACE = '${PATH_REPLACE}'
|
||||
PATH_REPLACE = '$HOME/build/mapbox/mason/mason_packages:./mason_packages'
|
||||
BOOST_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||
BOOST_LIBS = '${MASON_LINKED_REL}/lib'
|
||||
ICU_INCLUDES = '${MASON_LINKED_REL}/include'
|
||||
|
@ -126,8 +128,7 @@ CPP_TESTS = True
|
|||
PGSQL2SQLITE = True
|
||||
XMLPARSER = 'ptree'
|
||||
SVG2PNG = True
|
||||
SAMPLE_INPUT_PLUGINS = True
|
||||
" > ./config.py
|
||||
"
|
||||
}
|
||||
|
||||
# NOTE: the `mapnik-settings.env` is used by test/run (which is run by `make test`)
|
||||
|
@ -141,7 +142,7 @@ function setup_runtime_settings() {
|
|||
function main() {
|
||||
setup_mason
|
||||
install_mason_deps
|
||||
make_config
|
||||
make_config > ./config.py
|
||||
setup_runtime_settings
|
||||
echo "Ready, now run:"
|
||||
echo ""
|
||||
|
@ -149,3 +150,8 @@ function main() {
|
|||
}
|
||||
|
||||
main
|
||||
|
||||
# allow sourcing of script without
|
||||
# causing the terminal to bail on error
|
||||
set +eu
|
||||
set +o pipefail
|
||||
|
|
45
circle.yml
Normal file
45
circle.yml
Normal file
|
@ -0,0 +1,45 @@
|
|||
machine:
|
||||
xcode:
|
||||
version: 7.3
|
||||
environment:
|
||||
XCODE_SCHEME: "no"
|
||||
XCODE_WORKSPACE: "no"
|
||||
JOBS: 8
|
||||
CCACHE_TEMPDIR: /tmp/.ccache-temp
|
||||
CCACHE_COMPRESS: 1
|
||||
LLVM_VERSION: 3.8
|
||||
pre:
|
||||
- echo "here"
|
||||
post:
|
||||
- echo "there"
|
||||
|
||||
checkout:
|
||||
post:
|
||||
- git submodule update --init
|
||||
|
||||
dependencies:
|
||||
cache_directories:
|
||||
- "~/.ccache"
|
||||
- "~/.apt-cache"
|
||||
pre:
|
||||
# https://discuss.circleci.com/t/add-ability-to-cache-apt-get-programs/598/3
|
||||
- sudo rm -rf /var/cache/apt/archives && sudo ln -s ~/.apt-cache /var/cache/apt/archives && mkdir -p ~/.apt-cache/partial
|
||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||
override:
|
||||
- sudo apt-get update -y
|
||||
- sudo apt-get install -y libstdc++-5-dev xutils
|
||||
|
||||
database:
|
||||
pre:
|
||||
- ./bootstrap.sh
|
||||
- ./.mason/mason install clang ${LLVM_VERSION}.0
|
||||
- ./.mason/mason link clang ${LLVM_VERSION}.0
|
||||
- ./configure CC="$(pwd)/mason_packages/.link/bin/clang-${LLVM_VERSION}" CXX="$(pwd)/mason_packages/.link/bin/ccache $(pwd)/mason_packages/.link/bin/clang++-${LLVM_VERSION} -Qunused-arguments"
|
||||
- make
|
||||
override:
|
||||
- psql -c 'create database template_postgis;'
|
||||
- psql -c 'create extension postgis;' -d template_postgis
|
||||
|
||||
test:
|
||||
override:
|
||||
- make test
|
|
@ -52,11 +52,11 @@ If you do not have svn installed you can grab gyp from:
|
|||
|
||||
Simply type:
|
||||
|
||||
make
|
||||
make
|
||||
|
||||
Then to run do:
|
||||
|
||||
./rundemo `mapnik-config --prefix`
|
||||
./rundemo `mapnik-config --prefix`
|
||||
|
||||
On OS X you can also create an xcode project:
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ int main ( int, char** )
|
|||
try {
|
||||
std::cout << " running demo ... \n";
|
||||
datasource_cache::instance().register_datasources("plugins/input/");
|
||||
freetype_engine::register_font("fonts/dejavu-fonts-ttf-2.34/ttf/DejaVuSans.ttf");
|
||||
freetype_engine::register_font("fonts/dejavu-fonts-ttf-2.35/ttf/DejaVuSans.ttf");
|
||||
|
||||
Map m(800,600);
|
||||
m.set_background(parse_color("white"));
|
||||
|
@ -230,7 +230,7 @@ int main ( int, char** )
|
|||
parameters p;
|
||||
p["type"]="shape";
|
||||
p["file"]="demo/data/boundaries";
|
||||
p["encoding"]="latin1";
|
||||
p["encoding"]="utf8";
|
||||
|
||||
layer lyr("Provinces");
|
||||
lyr.set_datasource(datasource_cache::instance().create(p));
|
||||
|
@ -295,7 +295,7 @@ int main ( int, char** )
|
|||
parameters p;
|
||||
p["type"]="shape";
|
||||
p["file"]="demo/data/popplaces";
|
||||
p["encoding"] = "latin1";
|
||||
p["encoding"] = "utf8";
|
||||
layer lyr("Populated Places");
|
||||
lyr.set_srs(srs_lcc);
|
||||
lyr.set_datasource(datasource_cache::instance().create(p));
|
||||
|
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
PROJCS["Atlas of Canada Lambert Conformal Conic",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-95.0],PARAMETER["Standard_Parallel_1",49.0],PARAMETER["Standard_Parallel_2",77.0],PARAMETER["Latitude_Of_Origin",49.0],UNIT["Meter",1.0]]
|
Binary file not shown.
|
@ -18,7 +18,7 @@
|
|||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
from os import path
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifndef LAYER_DELEGATE_HPP
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
|
||||
|
|
78
deps/agg/include/agg_array.h
vendored
78
deps/agg/include/agg_array.h
vendored
|
@ -27,8 +27,8 @@ namespace agg
|
|||
{
|
||||
public:
|
||||
typedef T value_type;
|
||||
pod_array_adaptor(T* array, unsigned size) :
|
||||
m_array(array), m_size(size) {}
|
||||
pod_array_adaptor(T* array, unsigned _size) :
|
||||
m_array(array), m_size(_size) {}
|
||||
|
||||
unsigned size() const { return m_size; }
|
||||
const T& operator [] (unsigned i) const { return m_array[i]; }
|
||||
|
@ -87,7 +87,7 @@ namespace agg
|
|||
void clear() { m_size = 0; }
|
||||
void add(const T& v) { m_array[m_size++] = v; }
|
||||
void push_back(const T& v) { m_array[m_size++] = v; }
|
||||
void inc_size(unsigned size) { m_size += size; }
|
||||
void inc_size(unsigned _size) { m_size += _size; }
|
||||
|
||||
unsigned size() const { return m_size; }
|
||||
const T& operator [] (unsigned i) const { return m_array[i]; }
|
||||
|
@ -112,9 +112,9 @@ namespace agg
|
|||
~pod_array() { pod_allocator<T>::deallocate(m_array, m_size); }
|
||||
pod_array() : m_array(0), m_size(0) {}
|
||||
|
||||
pod_array(unsigned size) :
|
||||
m_array(pod_allocator<T>::allocate(size)),
|
||||
m_size(size)
|
||||
pod_array(unsigned _size) :
|
||||
m_array(pod_allocator<T>::allocate(_size)),
|
||||
m_size(_size)
|
||||
{}
|
||||
|
||||
pod_array(const self_type& v) :
|
||||
|
@ -124,12 +124,12 @@ namespace agg
|
|||
memcpy(m_array, v.m_array, sizeof(T) * m_size);
|
||||
}
|
||||
|
||||
void resize(unsigned size)
|
||||
void resize(unsigned _size)
|
||||
{
|
||||
if(size != m_size)
|
||||
if(_size != m_size)
|
||||
{
|
||||
pod_allocator<T>::deallocate(m_array, m_size);
|
||||
m_array = pod_allocator<T>::allocate(m_size = size);
|
||||
m_array = pod_allocator<T>::allocate(m_size = _size);
|
||||
}
|
||||
}
|
||||
const self_type& operator = (const self_type& v)
|
||||
|
@ -191,7 +191,7 @@ namespace agg
|
|||
void add(const T& v) { m_array[m_size++] = v; }
|
||||
void push_back(const T& v) { m_array[m_size++] = v; }
|
||||
void insert_at(unsigned pos, const T& val);
|
||||
void inc_size(unsigned size) { m_size += size; }
|
||||
void inc_size(unsigned _size) { m_size += _size; }
|
||||
unsigned size() const { return m_size; }
|
||||
unsigned byte_size() const { return m_size * sizeof(T); }
|
||||
void serialize(int8u* ptr) const;
|
||||
|
@ -230,10 +230,10 @@ namespace agg
|
|||
|
||||
//------------------------------------------------------------------------
|
||||
template<class T>
|
||||
void pod_vector<T>::allocate(unsigned size, unsigned extra_tail)
|
||||
void pod_vector<T>::allocate(unsigned _size, unsigned extra_tail)
|
||||
{
|
||||
capacity(size, extra_tail);
|
||||
m_size = size;
|
||||
capacity(_size, extra_tail);
|
||||
m_size = _size;
|
||||
}
|
||||
|
||||
|
||||
|
@ -245,10 +245,10 @@ namespace agg
|
|||
{
|
||||
if(new_size > m_capacity)
|
||||
{
|
||||
T* data = pod_allocator<T>::allocate(new_size);
|
||||
memcpy(data, m_array, m_size * sizeof(T));
|
||||
T* _data = pod_allocator<T>::allocate(new_size);
|
||||
memcpy(_data, m_array, m_size * sizeof(T));
|
||||
pod_allocator<T>::deallocate(m_array, m_capacity);
|
||||
m_array = data;
|
||||
m_array = _data;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -289,11 +289,11 @@ namespace agg
|
|||
|
||||
//------------------------------------------------------------------------
|
||||
template<class T>
|
||||
void pod_vector<T>::deserialize(const int8u* data, unsigned byte_size)
|
||||
void pod_vector<T>::deserialize(const int8u* _data, unsigned _byte_size)
|
||||
{
|
||||
byte_size /= sizeof(T);
|
||||
allocate(byte_size);
|
||||
if(byte_size) memcpy(m_array, data, byte_size * sizeof(T));
|
||||
_byte_size /= sizeof(T);
|
||||
allocate(_byte_size);
|
||||
if(_byte_size) memcpy(m_array, _data, _byte_size * sizeof(T));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
@ -371,9 +371,9 @@ namespace agg
|
|||
}
|
||||
}
|
||||
|
||||
void cut_at(unsigned size)
|
||||
void cut_at(unsigned _size)
|
||||
{
|
||||
if(size < m_size) m_size = size;
|
||||
if(_size < m_size) m_size = _size;
|
||||
}
|
||||
|
||||
unsigned size() const { return m_size; }
|
||||
|
@ -529,11 +529,11 @@ namespace agg
|
|||
|
||||
//------------------------------------------------------------------------
|
||||
template<class T, unsigned S>
|
||||
void pod_bvector<T, S>::free_tail(unsigned size)
|
||||
void pod_bvector<T, S>::free_tail(unsigned _size)
|
||||
{
|
||||
if(size < m_size)
|
||||
if(_size < m_size)
|
||||
{
|
||||
unsigned nb = (size + block_mask) >> block_shift;
|
||||
unsigned nb = (_size + block_mask) >> block_shift;
|
||||
while(m_num_blocks > nb)
|
||||
{
|
||||
pod_allocator<T>::deallocate(m_blocks[--m_num_blocks], block_size);
|
||||
|
@ -544,7 +544,7 @@ namespace agg
|
|||
m_blocks = 0;
|
||||
m_max_blocks = 0;
|
||||
}
|
||||
m_size = size;
|
||||
m_size = _size;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -728,16 +728,16 @@ namespace agg
|
|||
|
||||
//------------------------------------------------------------------------
|
||||
template<class T, unsigned S>
|
||||
void pod_bvector<T, S>::deserialize(const int8u* data, unsigned byte_size)
|
||||
void pod_bvector<T, S>::deserialize(const int8u* _data, unsigned _byte_size)
|
||||
{
|
||||
remove_all();
|
||||
byte_size /= sizeof(T);
|
||||
for(unsigned i = 0; i < byte_size; ++i)
|
||||
_byte_size /= sizeof(T);
|
||||
for(unsigned i = 0; i < _byte_size; ++i)
|
||||
{
|
||||
T* ptr = data_ptr();
|
||||
memcpy(ptr, data, sizeof(T));
|
||||
memcpy(ptr, _data, sizeof(T));
|
||||
++m_size;
|
||||
data += sizeof(T);
|
||||
_data += sizeof(T);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -746,27 +746,27 @@ namespace agg
|
|||
//------------------------------------------------------------------------
|
||||
template<class T, unsigned S>
|
||||
void pod_bvector<T, S>::deserialize(unsigned start, const T& empty_val,
|
||||
const int8u* data, unsigned byte_size)
|
||||
const int8u* _data, unsigned _byte_size)
|
||||
{
|
||||
while(m_size < start)
|
||||
{
|
||||
add(empty_val);
|
||||
}
|
||||
|
||||
byte_size /= sizeof(T);
|
||||
for(unsigned i = 0; i < byte_size; ++i)
|
||||
_byte_size /= sizeof(T);
|
||||
for(unsigned i = 0; i < _byte_size; ++i)
|
||||
{
|
||||
if(start + i < m_size)
|
||||
{
|
||||
memcpy(&((*this)[start + i]), data, sizeof(T));
|
||||
memcpy(&((*this)[start + i]), _data, sizeof(T));
|
||||
}
|
||||
else
|
||||
{
|
||||
T* ptr = data_ptr();
|
||||
memcpy(ptr, data, sizeof(T));
|
||||
memcpy(ptr, _data, sizeof(T));
|
||||
++m_size;
|
||||
}
|
||||
data += sizeof(T);
|
||||
_data += sizeof(T);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1087,8 +1087,8 @@ namespace agg
|
|||
public:
|
||||
typedef typename Array::value_type value_type;
|
||||
|
||||
range_adaptor(Array& array, unsigned start, unsigned size) :
|
||||
m_array(array), m_start(start), m_size(size)
|
||||
range_adaptor(Array& array, unsigned start, unsigned _size) :
|
||||
m_array(array), m_start(start), m_size(_size)
|
||||
{}
|
||||
|
||||
unsigned size() const { return m_size; }
|
||||
|
|
4
deps/agg/include/agg_conv_clip_polygon.h
vendored
4
deps/agg/include/agg_conv_clip_polygon.h
vendored
|
@ -42,9 +42,9 @@ namespace agg
|
|||
conv_clip_polygon(VertexSource& vs) :
|
||||
conv_adaptor_vpgen<VertexSource, vpgen_clip_polygon>(vs) {}
|
||||
|
||||
void clip_box(double x1, double y1, double x2, double y2)
|
||||
void clip_box(double _x1, double _y1, double _x2, double _y2)
|
||||
{
|
||||
base_type::vpgen().clip_box(x1, y1, x2, y2);
|
||||
base_type::vpgen().clip_box(_x1, _y1, _x2, _y2);
|
||||
}
|
||||
|
||||
double x1() const { return base_type::vpgen().x1(); }
|
||||
|
|
4
deps/agg/include/agg_conv_clip_polyline.h
vendored
4
deps/agg/include/agg_conv_clip_polyline.h
vendored
|
@ -42,9 +42,9 @@ namespace agg
|
|||
conv_clip_polyline(VertexSource& vs) :
|
||||
conv_adaptor_vpgen<VertexSource, vpgen_clip_polyline>(vs) {}
|
||||
|
||||
void clip_box(double x1, double y1, double x2, double y2)
|
||||
void clip_box(double _x1, double _y1, double _x2, double _y2)
|
||||
{
|
||||
base_type::vpgen().clip_box(x1, y1, x2, y2);
|
||||
base_type::vpgen().clip_box(_x1, _y1, _x2, _y2);
|
||||
}
|
||||
|
||||
double x1() const { return base_type::vpgen().x1(); }
|
||||
|
|
0
deps/agg/include/agg_rasterizer_cells_aa.h
vendored
Executable file → Normal file
0
deps/agg/include/agg_rasterizer_cells_aa.h
vendored
Executable file → Normal file
0
deps/agg/include/agg_rasterizer_compound_aa.h
vendored
Executable file → Normal file
0
deps/agg/include/agg_rasterizer_compound_aa.h
vendored
Executable file → Normal file
173
deps/agg/include/agg_rasterizer_scanline_aa.h
vendored
173
deps/agg/include/agg_rasterizer_scanline_aa.h
vendored
|
@ -2,15 +2,15 @@
|
|||
// Anti-Grain Geometry - Version 2.4
|
||||
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
|
||||
//
|
||||
// Permission to copy, use, modify, sell and distribute this software
|
||||
// is granted provided this copyright notice appears in all copies.
|
||||
// Permission to copy, use, modify, sell and distribute this software
|
||||
// is granted provided this copyright notice appears in all copies.
|
||||
// This software is provided "as is" without express or implied
|
||||
// warranty, and with no claim as to its suitability for any purpose.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// The author gratefully acknowleges the support of David Turner,
|
||||
// Robert Wilhelm, and Werner Lemberg - the authors of the FreeType
|
||||
// The author gratefully acknowleges the support of David Turner,
|
||||
// Robert Wilhelm, and Werner Lemberg - the authors of the FreeType
|
||||
// libray - in producing this work. See http://www.freetype.org for details.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -19,12 +19,12 @@
|
|||
// http://www.antigrain.com
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// Adaptation for 32-bit screen coordinates has been sponsored by
|
||||
// Adaptation for 32-bit screen coordinates has been sponsored by
|
||||
// Liberty Technology Systems, Inc., visit http://lib-sys.com
|
||||
//
|
||||
// Liberty Technology Systems, Inc. is the provider of
|
||||
// PostScript and PDF technology for software developers.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
#ifndef AGG_RASTERIZER_SCANLINE_AA_INCLUDED
|
||||
#define AGG_RASTERIZER_SCANLINE_AA_INCLUDED
|
||||
|
@ -39,8 +39,8 @@ namespace agg
|
|||
|
||||
|
||||
//-----------------------------------------------------------------cell_aa
|
||||
// A pixel cell. There're no constructors defined and it was done
|
||||
// intentionally in order to avoid extra overhead when allocating an
|
||||
// A pixel cell. There're no constructors defined and it was done
|
||||
// intentionally in order to avoid extra overhead when allocating an
|
||||
// array of cells.
|
||||
struct cell_aa
|
||||
{
|
||||
|
@ -67,10 +67,10 @@ namespace agg
|
|||
|
||||
|
||||
//==================================================rasterizer_scanline_aa
|
||||
// Polygon rasterizer that is used to render filled polygons with
|
||||
// high-quality Anti-Aliasing. Internally, by default, the class uses
|
||||
// integer coordinates in format 24.8, i.e. 24 bits for integer part
|
||||
// and 8 bits for fractional - see poly_subpixel_shift. This class can be
|
||||
// Polygon rasterizer that is used to render filled polygons with
|
||||
// high-quality Anti-Aliasing. Internally, by default, the class uses
|
||||
// integer coordinates in format 24.8, i.e. 24 bits for integer part
|
||||
// and 8 bits for fractional - see poly_subpixel_shift. This class can be
|
||||
// used in the following way:
|
||||
//
|
||||
// 1. filling_rule(filling_rule_e ft) - optional.
|
||||
|
@ -79,20 +79,20 @@ namespace agg
|
|||
//
|
||||
// 3. reset()
|
||||
//
|
||||
// 4. move_to(x, y) / line_to(x, y) - make the polygon. One can create
|
||||
// 4. move_to(x, y) / line_to(x, y) - make the polygon. One can create
|
||||
// more than one contour, but each contour must consist of at least 3
|
||||
// vertices, i.e. move_to(x1, y1); line_to(x2, y2); line_to(x3, y3);
|
||||
// is the absolute minimum of vertices that define a triangle.
|
||||
// The algorithm does not check either the number of vertices nor
|
||||
// coincidence of their coordinates, but in the worst case it just
|
||||
// coincidence of their coordinates, but in the worst case it just
|
||||
// won't draw anything.
|
||||
// The orger of the vertices (clockwise or counterclockwise)
|
||||
// The orger of the vertices (clockwise or counterclockwise)
|
||||
// is important when using the non-zero filling rule (fill_non_zero).
|
||||
// In this case the vertex order of all the contours must be the same
|
||||
// if you want your intersecting polygons to be without "holes".
|
||||
// You actually can use different vertices order. If the contours do not
|
||||
// intersect each other the order is not important anyway. If they do,
|
||||
// contours with the same vertex order will be rendered without "holes"
|
||||
// You actually can use different vertices order. If the contours do not
|
||||
// intersect each other the order is not important anyway. If they do,
|
||||
// contours with the same vertex order will be rendered without "holes"
|
||||
// while the intersecting contours with different orders will have "holes".
|
||||
//
|
||||
// filling_rule() and gamma() can be called anytime before "sweeping".
|
||||
|
@ -122,7 +122,7 @@ namespace agg
|
|||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
rasterizer_scanline_aa() :
|
||||
rasterizer_scanline_aa() :
|
||||
m_outline(),
|
||||
m_clipper(),
|
||||
m_filling_rule(fill_non_zero),
|
||||
|
@ -136,8 +136,8 @@ namespace agg
|
|||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
template<class GammaF>
|
||||
rasterizer_scanline_aa(const GammaF& gamma_function) :
|
||||
template<class GammaF>
|
||||
rasterizer_scanline_aa(const GammaF& gamma_function) :
|
||||
m_outline(),
|
||||
m_clipper(m_outline),
|
||||
m_filling_rule(fill_non_zero),
|
||||
|
@ -150,7 +150,7 @@ namespace agg
|
|||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
void reset();
|
||||
void reset();
|
||||
void reset_clipping();
|
||||
void clip_box(double x1, double y1, double x2, double y2);
|
||||
void filling_rule(filling_rule_e filling_rule);
|
||||
|
@ -158,7 +158,7 @@ namespace agg
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
template<class GammaF> void gamma(const GammaF& gamma_function)
|
||||
{
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < aa_scale; i++)
|
||||
{
|
||||
|
@ -167,9 +167,9 @@ namespace agg
|
|||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
unsigned apply_gamma(unsigned cover) const
|
||||
{
|
||||
return m_gamma[cover];
|
||||
unsigned apply_gamma(unsigned cover) const
|
||||
{
|
||||
return m_gamma[cover];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
@ -198,7 +198,7 @@ namespace agg
|
|||
add_vertex(x, y, cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
int min_x() const { return m_outline.min_x(); }
|
||||
int min_y() const { return m_outline.min_y(); }
|
||||
|
@ -237,7 +237,7 @@ namespace agg
|
|||
sl.reset_spans();
|
||||
unsigned num_cells = m_outline.scanline_num_cells(m_scan_y);
|
||||
const cell_aa* const* cells = m_outline.scanline_cells(m_scan_y);
|
||||
int cover = 0;
|
||||
unsigned cover = 0;
|
||||
|
||||
while(num_cells)
|
||||
{
|
||||
|
@ -276,7 +276,7 @@ namespace agg
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(sl.num_spans()) break;
|
||||
++m_scan_y;
|
||||
}
|
||||
|
@ -294,7 +294,7 @@ namespace agg
|
|||
//--------------------------------------------------------------------
|
||||
// Disable copying
|
||||
rasterizer_scanline_aa(const rasterizer_scanline_aa<Clip>&);
|
||||
const rasterizer_scanline_aa<Clip>&
|
||||
const rasterizer_scanline_aa<Clip>&
|
||||
operator = (const rasterizer_scanline_aa<Clip>&);
|
||||
|
||||
private:
|
||||
|
@ -321,32 +321,32 @@ namespace agg
|
|||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::reset()
|
||||
{
|
||||
m_outline.reset();
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::reset()
|
||||
{
|
||||
m_outline.reset();
|
||||
m_status = status_initial;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::filling_rule(filling_rule_e filling_rule)
|
||||
{
|
||||
m_filling_rule = filling_rule;
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::filling_rule(filling_rule_e filling_rule)
|
||||
{
|
||||
m_filling_rule = filling_rule;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::clip_box(double x1, double y1,
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::clip_box(double x1, double y1,
|
||||
double x2, double y2)
|
||||
{
|
||||
reset();
|
||||
m_clipper.clip_box(conv_type::upscale(x1), conv_type::upscale(y1),
|
||||
m_clipper.clip_box(conv_type::upscale(x1), conv_type::upscale(y1),
|
||||
conv_type::upscale(x2), conv_type::upscale(y2));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::reset_clipping()
|
||||
{
|
||||
reset();
|
||||
|
@ -354,7 +354,7 @@ namespace agg
|
|||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::close_polygon()
|
||||
{
|
||||
if(m_status == status_line_to)
|
||||
|
@ -365,56 +365,56 @@ namespace agg
|
|||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::move_to(int x, int y)
|
||||
{
|
||||
if(m_outline.sorted()) reset();
|
||||
if(m_auto_close) close_polygon();
|
||||
m_clipper.move_to(m_start_x = conv_type::downscale(x),
|
||||
m_clipper.move_to(m_start_x = conv_type::downscale(x),
|
||||
m_start_y = conv_type::downscale(y));
|
||||
m_status = status_move_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::line_to(int x, int y)
|
||||
{
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::downscale(x),
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::downscale(x),
|
||||
conv_type::downscale(y));
|
||||
m_status = status_line_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::move_to_d(double x, double y)
|
||||
{
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::move_to_d(double x, double y)
|
||||
{
|
||||
if(m_outline.sorted()) reset();
|
||||
if(m_auto_close) close_polygon();
|
||||
m_clipper.move_to(m_start_x = conv_type::upscale(x),
|
||||
m_start_y = conv_type::upscale(y));
|
||||
m_clipper.move_to(m_start_x = conv_type::upscale(x),
|
||||
m_start_y = conv_type::upscale(y));
|
||||
m_status = status_move_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::line_to_d(double x, double y)
|
||||
{
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::upscale(x),
|
||||
conv_type::upscale(y));
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::line_to_d(double x, double y)
|
||||
{
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::upscale(x),
|
||||
conv_type::upscale(y));
|
||||
m_status = status_line_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::add_vertex(double x, double y, unsigned cmd)
|
||||
{
|
||||
if(is_move_to(cmd))
|
||||
if(is_move_to(cmd))
|
||||
{
|
||||
move_to_d(x, y);
|
||||
}
|
||||
else
|
||||
else
|
||||
if(is_vertex(cmd))
|
||||
{
|
||||
line_to_d(x, y);
|
||||
|
@ -427,32 +427,32 @@ namespace agg
|
|||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::edge(int x1, int y1, int x2, int y2)
|
||||
{
|
||||
if(m_outline.sorted()) reset();
|
||||
m_clipper.move_to(conv_type::downscale(x1), conv_type::downscale(y1));
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::downscale(x2),
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::downscale(x2),
|
||||
conv_type::downscale(y2));
|
||||
m_status = status_move_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::edge_d(double x1, double y1,
|
||||
double x2, double y2)
|
||||
{
|
||||
if(m_outline.sorted()) reset();
|
||||
m_clipper.move_to(conv_type::upscale(x1), conv_type::upscale(y1));
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::upscale(x2),
|
||||
conv_type::upscale(y2));
|
||||
m_status = status_move_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::edge_d(double x1, double y1,
|
||||
double x2, double y2)
|
||||
{
|
||||
if(m_outline.sorted()) reset();
|
||||
m_clipper.move_to(conv_type::upscale(x1), conv_type::upscale(y1));
|
||||
m_clipper.line_to(m_outline,
|
||||
conv_type::upscale(x2),
|
||||
conv_type::upscale(y2));
|
||||
m_status = status_move_to;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
void rasterizer_scanline_aa<Clip>::sort()
|
||||
{
|
||||
if(m_auto_close) close_polygon();
|
||||
|
@ -460,12 +460,12 @@ namespace agg
|
|||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
AGG_INLINE bool rasterizer_scanline_aa<Clip>::rewind_scanlines()
|
||||
{
|
||||
if(m_auto_close) close_polygon();
|
||||
m_outline.sort_cells();
|
||||
if(m_outline.total_cells() == 0)
|
||||
if(m_outline.total_cells() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -475,14 +475,14 @@ namespace agg
|
|||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
AGG_INLINE bool rasterizer_scanline_aa<Clip>::navigate_scanline(int y)
|
||||
{
|
||||
if(m_auto_close) close_polygon();
|
||||
m_outline.sort_cells();
|
||||
if(m_outline.total_cells() == 0 ||
|
||||
y < m_outline.min_y() ||
|
||||
y > m_outline.max_y())
|
||||
if(m_outline.total_cells() == 0 ||
|
||||
y < m_outline.min_y() ||
|
||||
y > m_outline.max_y())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -491,7 +491,7 @@ namespace agg
|
|||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
template<class Clip>
|
||||
template<class Clip>
|
||||
bool rasterizer_scanline_aa<Clip>::hit_test(int tx, int ty)
|
||||
{
|
||||
if(!navigate_scanline(ty)) return false;
|
||||
|
@ -507,4 +507,3 @@ namespace agg
|
|||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
7
deps/agg/include/agg_vcgen_dash.h
vendored
7
deps/agg/include/agg_vcgen_dash.h
vendored
|
@ -2,8 +2,8 @@
|
|||
// Anti-Grain Geometry - Version 2.4
|
||||
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
|
||||
//
|
||||
// Permission to copy, use, modify, sell and distribute this software
|
||||
// is granted provided this copyright notice appears in all copies.
|
||||
// Permission to copy, use, modify, sell and distribute this software
|
||||
// is granted provided this copyright notice appears in all copies.
|
||||
// This software is provided "as is" without express or implied
|
||||
// warranty, and with no claim as to its suitability for any purpose.
|
||||
//
|
||||
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "agg_basics.h"
|
||||
#include "agg_vertex_sequence.h"
|
||||
#include <mapnik/config.hpp>
|
||||
|
||||
namespace agg
|
||||
{
|
||||
|
@ -29,7 +30,7 @@ namespace agg
|
|||
//
|
||||
// See Implementation agg_vcgen_dash.cpp
|
||||
//
|
||||
class vcgen_dash
|
||||
class MAPNIK_DECL vcgen_dash
|
||||
{
|
||||
enum max_dashes_e
|
||||
{
|
||||
|
|
1
deps/mapbox/variant
vendored
Submodule
1
deps/mapbox/variant
vendored
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit aaddee9270e3956cee98cdd7d04aea848d69f5f0
|
11
deps/mapnik/build.py
vendored
11
deps/mapnik/build.py
vendored
|
@ -4,14 +4,15 @@ from glob import glob
|
|||
Import('env')
|
||||
|
||||
subdirs = {
|
||||
'sparsehash':'sparsehash',
|
||||
'sparsehash/internal':'sparsehash/internal',
|
||||
'../agg/include':'agg',
|
||||
'./sparsehash':{'dir':'sparsehash','glob':'*'},
|
||||
'./sparsehash/internal':{'dir':'sparsehash/internal','glob':'*'},
|
||||
'../agg/include':{'dir':'agg','glob':'agg*'},
|
||||
'../mapbox/variant/include':{'dir':'mapbox','glob':'*/*.hpp'}
|
||||
}
|
||||
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
for k,v in subdirs.items():
|
||||
pathdir = os.path.join(k,'*')
|
||||
pathdir = os.path.join(k,v['glob'])
|
||||
includes = glob(pathdir)
|
||||
inc_target = os.path.normpath(env['INSTALL_PREFIX']+'/include/mapnik/'+v)
|
||||
inc_target = os.path.normpath(env['INSTALL_PREFIX']+'/include/mapnik/'+v['dir'])
|
||||
env.Alias(target='install', source=env.Install(inc_target, includes))
|
||||
|
|
Binary file not shown.
|
@ -21,7 +21,7 @@ James Cloos
|
|||
James Crippen
|
||||
John Karp
|
||||
Keenan Pepper
|
||||
Lars Naesbye Christensen
|
||||
Lars Næsbye Christensen
|
||||
Lior Halphon
|
||||
MaEr
|
||||
Mashrab Kuvatov
|
||||
|
@ -33,6 +33,7 @@ Misu Moldovan
|
|||
Nguyen Thai Ngoc Duy
|
||||
Nicolas Mailhot
|
||||
Norayr Chilingarian
|
||||
Olleg Samoylov
|
||||
Ognyan Kulev
|
||||
Ondrej Koala Vacha
|
||||
Peter Cernak
|
||||
|
@ -53,4 +54,4 @@ Vasek Stodulka
|
|||
Wesley Transue
|
||||
Yoshiki Ohshima
|
||||
|
||||
$Id: AUTHORS 2593 2015-05-17 07:47:39Z ben_laenen $
|
||||
$Id$
|
|
@ -1,3 +1,3 @@
|
|||
See http://dejavu.sourceforge.net/wiki/index.php/Bugs
|
||||
|
||||
$Id: BUGS 80 2004-11-13 13:12:02Z src $
|
||||
$Id$
|
|
@ -1,6 +1,7 @@
|
|||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
|
@ -46,7 +47,7 @@ Foundation, and Bitstream Inc., shall not be used in advertising or
|
|||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
||||
org.
|
||||
|
||||
Arev Fonts Copyright
|
||||
------------------------------
|
||||
|
@ -96,4 +97,91 @@ dealings in this Font Software without prior written authorization
|
|||
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||
. fr.
|
||||
|
||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
|
||||
TeX Gyre DJV Math
|
||||
-----------------
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
|
||||
Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
|
||||
(on behalf of TeX users groups) are in public domain.
|
||||
|
||||
Letters imported from Euler Fraktur from AMSfonts are (c) American
|
||||
Mathematical Society (see below).
|
||||
Bitstream Vera Fonts Copyright
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
|
||||
is a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license (“Fonts”) and associated
|
||||
documentation
|
||||
files (the “Font Software”), to reproduce and distribute the Font Software,
|
||||
including without limitation the rights to use, copy, merge, publish,
|
||||
distribute,
|
||||
and/or sell copies of the Font Software, and to permit persons to whom
|
||||
the Font Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be
|
||||
included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional
|
||||
glyphs or characters may be added to the Fonts, only if the fonts are
|
||||
renamed
|
||||
to names not containing either the words “Bitstream” or the word “Vera”.
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or
|
||||
Font Software
|
||||
that has been modified and is distributed under the “Bitstream Vera”
|
||||
names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy
|
||||
of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
|
||||
SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
|
||||
ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
|
||||
INABILITY TO USE
|
||||
THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Except as contained in this notice, the names of GNOME, the GNOME
|
||||
Foundation,
|
||||
and Bitstream Inc., shall not be used in advertising or otherwise to promote
|
||||
the sale, use or other dealings in this Font Software without prior written
|
||||
authorization from the GNOME Foundation or Bitstream Inc., respectively.
|
||||
For further information, contact: fonts at gnome dot org.
|
||||
|
||||
AMSFonts (v. 2.2) copyright
|
||||
|
||||
The PostScript Type 1 implementation of the AMSFonts produced by and
|
||||
previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
|
||||
available for general use. This has been accomplished through the
|
||||
cooperation
|
||||
of a consortium of scientific publishers with Blue Sky Research and Y&Y.
|
||||
Members of this consortium include:
|
||||
|
||||
Elsevier Science IBM Corporation Society for Industrial and Applied
|
||||
Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
|
||||
|
||||
In order to assure the authenticity of these fonts, copyright will be
|
||||
held by
|
||||
the American Mathematical Society. This is not meant to restrict in any way
|
||||
the legitimate use of the fonts, such as (but not limited to) electronic
|
||||
distribution of documents containing these fonts, inclusion of these fonts
|
||||
into other public domain or commercial font collections or computer
|
||||
applications, use of the outline data to create derivative fonts and/or
|
||||
faces, etc. However, the AMS does require that the AMS copyright notice be
|
||||
removed from any derivative versions of the fonts which have been altered in
|
||||
any way. In addition, to ensure the fidelity of TeX documents using Computer
|
||||
Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
|
||||
has requested that any alterations which yield different font metrics be
|
||||
given a different name.
|
||||
|
||||
$Id$
|
|
@ -1,3 +1,29 @@
|
|||
Changes from 2.35 to 2.36
|
||||
|
||||
* Fix issue with empty glyphs in condensed typefaces in the released source files.
|
||||
|
||||
Changes from 2.35 to 2.36
|
||||
|
||||
* Math: added DejaVu Math Tex Gyre by B. Jackowski, P. Strzelczyk and
|
||||
P. Pianowski (on behalf of TeX users groups)
|
||||
* Sans: removed dot of U+06BA in all forms
|
||||
* Sans: fixed position of three dots of U+06BD in init and medi forms (by
|
||||
Denis Jacquerye)
|
||||
* Sans: corrected direction of contours in U+05E7 (by Lior Halphon)
|
||||
* Sans: added U+1F643 (by Olleg Samoylov)
|
||||
* Serif: moved up U+0360-0361 (by Gee Fung Sit 薛至峰)
|
||||
* Serif: increased spacing of Roman numerals U+2161-2163, U+2165-2168,
|
||||
U+216A-216B (by Gee Fung Sit 薛至峰)
|
||||
* Serif: fixed anchor position of U+00E6 (by Gee Fung Sit 薛至峰)
|
||||
* Sans: fixed vertical position of U+20BA (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: fixed glyph height of Block Elements (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+A698-A699 (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Mono, Serif: added U+037F (by Gee Fung Sit 薛至峰)
|
||||
* Mono: added U+0376-0377, U+037B-037D (by Gee Fung Sit 薛至峰)
|
||||
* Serif: removed duplicate point from U+1D05 (by Gee Fung Sit 薛至峰)
|
||||
* Mono: added U+20BA, U+20BD (by Gee Fung Sit 薛至峰)
|
||||
* Sans: added moon symbols U+1F311-1F318 (by Ben Laenen)
|
||||
|
||||
Changes from 2.34 to 2.35
|
||||
|
||||
* Sans, SansMono, Serif: added U+0E3F, U+A7F8-U+A7F9 (by Gee Fung Sit 薛至峰)
|
||||
|
@ -51,7 +77,7 @@ Changes from 2.34 to 2.35
|
|||
U+234E-U+234F, U+2351, U+2355-U+2356, U+235D, U+2361-U+2362, U+2366-U+2367,
|
||||
U+236A, U+2371-U+2372 (by Sami Tarazi)
|
||||
* Serif: added U+20BA (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+20BD (by Gee Fung Sit 薛至峰)
|
||||
* Sans, Serif: added U+20BD (by Gee Fung Sit 薛至峰)
|
||||
|
||||
Changes from 2.33 to 2.34
|
||||
|
||||
|
@ -82,7 +108,7 @@ Changes from 2.33 to 2.34
|
|||
* Sans: adjusted ogonek reference in U+0172, U+01EA, U+01EB
|
||||
(by Denis Jacquerye)
|
||||
* Sans: added anchors to U+0104, U+0105 (by Denis Jacquerye)
|
||||
* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F,
|
||||
* Sans: added U+1F600, U+1F611, U+1F615, U+1F617, U+1F619, U+1F61B, U+1F61F,
|
||||
U+1F626-U+1F627, U+1F62E-U+1F62F, U+1F634 (by Gee Fung Sit 薛至峰)
|
||||
* Sans: replaced U+27A1 with mirror image of U+2B05 for consistency
|
||||
(by Gee Fung Sit 薛至峰)
|
||||
|
@ -114,46 +140,46 @@ Changes from 2.33 to 2.34
|
|||
|
||||
Changes from 2.32 to 2.33
|
||||
|
||||
* added Old Italic block to Sans (by MaEr)
|
||||
* added U+051E, U+051F to Sans (by MaEr)
|
||||
* added Old Italic block to Sans (by MaEr)
|
||||
* added U+051E, U+051F to Sans (by MaEr)
|
||||
* added U+01BA, U+0372-U+0373, U+0376-U+0377, U+03CF, U+1D00-U+1D01,
|
||||
U+1D03-U+1D07, U+1D0A-U+1D13, U+1D15, U+1D18-U+1D1C, U+1D20-U+1D2B,
|
||||
U+1D2F, U+1D3D, U+1D5C-U+1D61, U+1D66-U+1D6B, U+1DB8, U+1E9C-U+1E9D,
|
||||
U+1EFA-U+1EFB, U+2C60-U+2C61, U+2C63, U+A726-U+A73C, U+A73E-U+A73F,
|
||||
U+A746-U+A747, U+A74A-U+A74B, U+A74E+U+A74F, U+A768-U+A769, U+A77B-U+A77C,
|
||||
U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰)
|
||||
* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰)
|
||||
U+A780-U+A787, U+A790-U+A791, U+A7FA-U+A7FF to Serif (by Gee Fung Sit 薛至峰)
|
||||
* added alternate forms to U+014A and U+01B7 in Serif (by Gee Fung Sit 薛至峰)
|
||||
* typographical improvements to U+0166-U+0167, U+0197, U+01B5-U+01B6, U+01BB,
|
||||
U+0222-U+0223, U+023D, U+0250-U+0252, U+026E, U+0274, U+028F, U+029F,
|
||||
U+02A3-U+02A5, U+02AB, U+03FE-U+03FF, U+1D02, U+1D14, U+1D1D-U+1D1F, U+1D3B,
|
||||
U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰)
|
||||
U+1D43-U+1D46, U+1D59, U+1D9B, U+2C71, U+2C73 in Serif (by Gee Fung Sit 薛至峰)
|
||||
* fixed bugs #31762 and #34700 plus other small fixes (wrong direction,
|
||||
duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰)
|
||||
* added U+204B to Mono (by Gee Fung Sit 薛至峰)
|
||||
* added U+26E2 to Sans (by Gee Fung Sit 薛至峰)
|
||||
* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰)
|
||||
duplicate points, etc.) for Sans and Serif (by Gee Fung Sit 薛至峰)
|
||||
* added U+204B to Mono (by Gee Fung Sit 薛至峰)
|
||||
* added U+26E2 to Sans (by Gee Fung Sit 薛至峰)
|
||||
* added Playing Cards block (U+1F0A0-U+1F0DF) to Sans (by Gee Fung Sit 薛至峰)
|
||||
* emoticons in Sans: replace U+2639-U+263B with better versions, add
|
||||
U+1F601-U+1F610, U+1F612-U+1F614, U+1F616, U+1F618, U+1F61A, U+1F61C-U+1F61E,
|
||||
U+1F620-U+1F624, U+1F625, U+1F628-U+1F62B, U+1F62D, U+1F630-U+1F633,
|
||||
U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye)
|
||||
* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye)
|
||||
* added U+A7FA to Sans (by Denis Jacquerye)
|
||||
U+1F635-U+1F640 (by Ben Laenen and Denis Jacquerye)
|
||||
* added U+A78E, U+A790-U+A791 to Sans and Mono (by Denis Jacquerye)
|
||||
* added U+A7FA to Sans (by Denis Jacquerye)
|
||||
* subscripts: added U+2095-U+209C to Sans, Serif and Mono, adjusted
|
||||
U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye)
|
||||
* added U+0243 to Mono (by Denis Jacquerye)
|
||||
U+1D49-U+1D4A in Sans and Mono (by Denis Jacquerye)
|
||||
* added U+0243 to Mono (by Denis Jacquerye)
|
||||
* adjusted U+0307 to match dot of i, replaced dotaccent U+02D9 with U+0307 in
|
||||
most dependencies in Sans (by Denis Jacquerye)
|
||||
* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye)
|
||||
* added anchors to precomposed dependencies of D and d (by Denis Jacquerye)
|
||||
most dependencies in Sans (by Denis Jacquerye)
|
||||
* adjusted anchors of f and added them to long s in Sans (by Denis Jacquerye)
|
||||
* added anchors to precomposed dependencies of D and d (by Denis Jacquerye)
|
||||
* added debug glyphs U+F002 and U+F003 which will show current point size (by
|
||||
Ben Laenen)
|
||||
* use correct version for Serbian italic be (by Eugeniy Meshcheryakov)
|
||||
* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye)
|
||||
* improved Hebrew in Sans (by Lior Halphon)
|
||||
Ben Laenen)
|
||||
* use correct version for Serbian italic be (by Eugeniy Meshcheryakov)
|
||||
* added pictograms U+1F42D-U+1F42E, U+1F431, U+1F435 (by Denis Jacquerye)
|
||||
* improved Hebrew in Sans (by Lior Halphon)
|
||||
* improved Armenian in Sans, and added Armenian in Serif and Mono (by Rouben
|
||||
Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian)
|
||||
Hakobian (Tarumian), Aleksey Chalabyan and Norayr Chilingarian)
|
||||
* remove "locl" feature for Romanian for S/T/s/t with cedilla/comma accent (by
|
||||
Ben Laenen)
|
||||
Ben Laenen)
|
||||
* replace wrong "dflt" script tag in Mono with "DFLT" (by Ben Laenen)
|
||||
|
||||
Changes from 2.31 to 2.32
|
||||
|
@ -210,26 +236,26 @@ Changes from 2.30 to 2.31
|
|||
U+06AA-U+06AE, U+06B0-U+06B4, U+06B6-U+06B9, U+06BB-U+06BE and their
|
||||
contextual forms to Sans (by MihailJP)
|
||||
* added U+A78D LATIN CAPITAL LETTER TURNED H for coming Unicode 6.0 (by Denis
|
||||
Jacquerye)
|
||||
Jacquerye)
|
||||
|
||||
Changes from 2.29 to 2.30
|
||||
|
||||
* added U+0462-U+0463 to Mono (by Denis Jacquerye)
|
||||
* corrected U+1E53 in Serif (by Gee Fung Sit)
|
||||
* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit)
|
||||
* added U+1E78-U+1E79 to Mono (by Gee Fung Sit)
|
||||
* added U+0462-U+0463 to Mono (by Denis Jacquerye)
|
||||
* corrected U+1E53 in Serif (by Gee Fung Sit)
|
||||
* added U+1E4C-U+1E4D to Mono and Serif (by Gee Fung Sit)
|
||||
* added U+1E78-U+1E79 to Mono (by Gee Fung Sit)
|
||||
* fixed missing diacritics in Latin Extended Additional in Sans ExtraLight
|
||||
(moved stacked diacritics out of PUA in the process) (by Gee Fung Sit)
|
||||
* fixed anchors on U+1E78 in Serif (by Gee Fung Sit)
|
||||
* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye)
|
||||
* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye)
|
||||
(moved stacked diacritics out of PUA in the process) (by Gee Fung Sit)
|
||||
* fixed anchors on U+1E78 in Serif (by Gee Fung Sit)
|
||||
* added U+1DC4-U+1DC9 to Serif (by Denis Jacquerye)
|
||||
* renamed above-mark to above-mark in Serif-Italic (by Denis Jacquerye)
|
||||
* added U+1DC4-U+1DC9 to context class for dotless substitution (by Denis
|
||||
Jacquerye)
|
||||
* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit)
|
||||
* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit)
|
||||
* added U+A726-U+A727 to Mono (Denis Jacquerye)
|
||||
Jacquerye)
|
||||
* changed Doubleacute to Doublegrave in Sans ExtraLight (by Gee Fung Sit)
|
||||
* removed redundant reference in U+01FB in Sans Oblique (by Gee Fung Sit)
|
||||
* added U+A726-U+A727 to Mono (Denis Jacquerye)
|
||||
* changed U+04BE and U+04BF according to recommedations of Sasha Ankwab in Sans
|
||||
(by Andrey V. Panov)
|
||||
(by Andrey V. Panov)
|
||||
* remove "Symbol Charset" from set of codepages in Sans (by Eugeniy
|
||||
Meshcheryakov)
|
||||
|
||||
|
@ -249,7 +275,7 @@ Changes from 2.28 to 2.29
|
|||
* Remove 'cmap' mappings for U+066E, U+066F, U+067C, U+067D, U+0681, U+0682,
|
||||
U+0685, U+0692, U+06A1, U+06B5, U+06BA, U+06C6, U+06CE, and U+06D5
|
||||
in Sans Mono (bug 20323) (by Roozbeh Pournader)
|
||||
* add half brackets (U+2E22 - U+2E25, by Steve Tinney)
|
||||
* add half brackets (U+2E22 - U+2E25, by Steve Tinney)
|
||||
|
||||
Changes from 2.27 to 2.28
|
||||
|
||||
|
@ -319,7 +345,7 @@ Changes from 2.26 to 2.27
|
|||
* rounded U+2C77 at the bottom in Serif (by Gee Fung Sit)
|
||||
* added joining behavior for tone letters (U+02E5-U+02E9) in Sans (bug #15669)
|
||||
(by Gee Fung Sit)
|
||||
* fixed outline of y.alt in Sans Regular (by Denis Jacquerye)
|
||||
* fixed outline of y.alt in Sans Regular (by Denis Jacquerye)
|
||||
* changed references of U+1D5A8, U+1D5C5, U+1D5DC, U+1D5F9, U+1D610, U+1D62D,
|
||||
U+1D644 and U+1D661 to stylistic alternates to have a better distinction (by
|
||||
Gee Fung Sit)
|
||||
|
@ -333,41 +359,41 @@ Changes from 2.26 to 2.27
|
|||
|
||||
Changes from 2.25 to 2.26
|
||||
|
||||
- added glyphs for Cyrillic-B to Sans (by Wesley Transue)
|
||||
- added U+0370-U+0371 to Sans (by Wesley Transue)
|
||||
- added glyphs for Cyrillic-B to Sans (by Wesley Transue)
|
||||
- added U+0370-U+0371 to Sans (by Wesley Transue)
|
||||
- added U+019C, U+01A2-U+01A3, U+01A6, U+01E4-U+01E5, U+024C-U+024D, U+0285,
|
||||
U+0290, U+02A0, U+0370-U+0371, U+03F1, U+03FC to Sans ExtraLight (by Wesley
|
||||
Transue)
|
||||
Transue)
|
||||
- added U+20A0-U+20A5, U+20A7-U+20B3, U+2105, U+210D, U+210F, U+2115, U+2117,
|
||||
U+2119-U+211A, U+211D, U+2124, U+212E, U+2200-U+2204 to Mono (by Heikki
|
||||
Lindroos)
|
||||
- added U+01BA and U+01BF to Mono (by Heikki Lindroos)
|
||||
- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye)
|
||||
- added alternative shape for y in Sans (by Denis Jacquerye)
|
||||
- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos)
|
||||
Lindroos)
|
||||
- added U+01BA and U+01BF to Mono (by Heikki Lindroos)
|
||||
- merged OpenType "aalt" feature in Latin in Sans (by Denis Jacquerye)
|
||||
- added alternative shape for y in Sans (by Denis Jacquerye)
|
||||
- added saltillo (U+A78B-U+A78C) to all faces (by James Cloos)
|
||||
- changed U+047C-U+047D to references instead of outlines in Sans (by Wesley
|
||||
Transue)
|
||||
- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue)
|
||||
- added U+A734-U+A737 to Sans (by Wesley Transue)
|
||||
- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit)
|
||||
- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit)
|
||||
- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit)
|
||||
- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit)
|
||||
Transue)
|
||||
- added Latin letter tresillo U+A72A-U+A72B to Sans (by Wesley Transue)
|
||||
- added U+A734-U+A737 to Sans (by Wesley Transue)
|
||||
- added U+2053 to Serif and fixed it bug:9425 in Sans (by Gee Fung Sit)
|
||||
- removed problematic hints for U+0423 bug:10025 (by Gee Fung Sit)
|
||||
- added U+27C5-U+27C6 bug:10255 to all faces (by Gee Fung Sit)
|
||||
- fixed width of U+2016 in Sans Oblique (by Gee Fung Sit)
|
||||
- added U+2016, U+2032-U+2038, U+2042, U+2045-U+2046, U+204B-U+204F,
|
||||
U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit)
|
||||
- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit)
|
||||
- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit)
|
||||
- added U+221B-U+221C to Mono (by Gee Fung Sit)
|
||||
- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit)
|
||||
- update U+04B4-U+04B5 in Serif (by Andrey V. Panov)
|
||||
- increased max-storage value from maxp table to 153 (by Andrey V. Panov)
|
||||
U+2051-U+2052, U+2057 to Serif (by Gee Fung Sit)
|
||||
- made U+2140 bigger to match other n-ary operators (by Gee Fung Sit)
|
||||
- added U+0606-U+0607, U+0609-U+060A to Sans (by Gee Fung Sit)
|
||||
- added U+221B-U+221C to Mono (by Gee Fung Sit)
|
||||
- small adjustments to U+221B-U+221C in Sans and Serif (by Gee Fung Sit)
|
||||
- update U+04B4-U+04B5 in Serif (by Andrey V. Panov)
|
||||
- increased max-storage value from maxp table to 153 (by Andrey V. Panov)
|
||||
- added U+0472-U+0473, U+0510-U+0511, U+051A-U+051D, U+0606-U+0607,
|
||||
U+0609-U+060A, U+1E26-U+1E27, U+1E54-U+1E55, U+1E7C-U+1E7D, U+1E8C-U+1E8D,
|
||||
U+1E90-U+1E91, U+1E97-U+1E99, U+1E9F, U+1EAC-U+1EAD, U+1EB6-U+1EB7,
|
||||
U+1EC6-U+1EC7, U+1ED8-U+1EDD, U+1EE0-U+1EE3, U+1EE8-U+1EEB, U+1EEE-U+1EF1 to
|
||||
Mono (by Gee Fung Sit)
|
||||
Mono (by Gee Fung Sit)
|
||||
- added locl rules for S/T cedilla for Romanian and Moldavian so they get
|
||||
rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen)
|
||||
rendered as S/T with comma accent (see Redhat bug #455981) (by Ben Laenen)
|
||||
- removed ligature rule from Armenian U+0587 bug:16113 (by Gee Fung Sit)
|
||||
|
||||
Changes from 2.24 to 2.25
|
||||
|
@ -395,33 +421,33 @@ Changes from 2.24 to 2.25
|
|||
- added a bunch of glyphs+small corrections to Sans Light (by Gee Fung Sit)
|
||||
- added U+0496, U+0497, U+04B0, U+04B1 (by Andrey V. Panov)
|
||||
- updated U+0493, U+049B, U+04B3, U+04B7, U+04F7 (by Andrey V. Panov)
|
||||
- further improvements in extended Cyrillic (by Andrey V. Panov)
|
||||
- further improvements in extended Cyrillic (by Andrey V. Panov)
|
||||
|
||||
Changes from 2.23 to 2.24
|
||||
|
||||
- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu
|
||||
- instructions for U+05C0 ׀, U+05C3 ׃, U+05F3 ׳, and U+05F4 ״ in DejaVu
|
||||
Sans. (by Wesley Transue)
|
||||
- instructions for U+2116 in Sans (by Andrey V. Panov)
|
||||
- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added
|
||||
U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by
|
||||
- Unicode 5.1 update: moved U+F208 to U+2C6D, U+F25F to U+2C71, added
|
||||
U+2C6E-U+2C6F, U+2C72-U+2C73, updated outline of U+2C71 in Sans. (by
|
||||
Denis Jacquerye)
|
||||
- updated and instructed U+0401 in Sans (by Andrey V. Panov)
|
||||
- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction.
|
||||
- fixed the bug in Sans faces where U+02EC ˬ faced the wrong direction.
|
||||
Also, added a few more glyph instructions. (by Wesley Transue)
|
||||
- removed OS2Sub and OS2Strike that weren't intentional in Sans
|
||||
- removed OS2Sub and OS2Strike that weren't intentional in Sans
|
||||
ExtraLight. (by Denis Jacquerye)
|
||||
- updated instructions for U+401, U+44F in Serif Book. (by Andrey V.
|
||||
- updated instructions for U+401, U+44F in Serif Book. (by Andrey V.
|
||||
Panov)
|
||||
- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and
|
||||
- instructions for U+02C4 ˄, U+02C5 ˅, U+03D8 Ϙ, U+03D9 ϙ, U+0494 Ҕ, and
|
||||
U+0495 ҕ in Sans Book. (by Wesley Transue)
|
||||
- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆
|
||||
- instructions for U+01A6 Ʀ, U+0238 ȸ, U+0239 ȹ, U+02EC ˬ, and U+05C6 ׆
|
||||
in Sans Book. (by Wesley Transue)
|
||||
- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and
|
||||
- DejaVuSans.sfd DejaVuSerif.sfd: updated instructions for U+447 and
|
||||
U+451 using code generated with xgridfit (by Andrey V. Panov)
|
||||
- instructions for a few glyphs in the Latin Extended-B Block, Greek
|
||||
- instructions for a few glyphs in the Latin Extended-B Block, Greek
|
||||
Block, Cyrillic Block, and N'Ko block. (by Wesley Transue)
|
||||
- updated sfdnormalize.pl, and SFD files to new SFD format with empty
|
||||
lines. (by Denis Jacquerye)
|
||||
- updated sfdnormalize.pl, and SFD files to new SFD format with empty
|
||||
lines. (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.22 to 2.23
|
||||
|
||||
|
@ -436,7 +462,7 @@ Changes from 2.22 to 2.23
|
|||
Wesley Transue)
|
||||
- added mathematical alphanumeric symbols to all styles (by Max Berger)
|
||||
- added Unicode 5.1 U+2E18 as U+2E18.u51 (not yet usable) to Sans (by Roozbeh
|
||||
Pournader)
|
||||
Pournader)
|
||||
- dereferenced all glyphs with mixed references and outlines (by Denis
|
||||
Jacquerye)
|
||||
- removed non-zero width from U+0344 in Sans (by Denis Jacquerye)
|
||||
|
@ -519,7 +545,7 @@ Changes from 2.19 to 2.20
|
|||
|
||||
Changes from 2.18 to 2.19
|
||||
|
||||
- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp)
|
||||
- fixed misplaced symbols (U+2325,2326) in Sans Oblique (by John Karp)
|
||||
- added Mark to Base anchors: 'cedilla' for combining cedilla and
|
||||
'above-legacy' for stacking above precomposed glyphs (just a,e,i,o,u with
|
||||
macron for now) in Sans (by Denis Jacquerye).
|
||||
|
@ -599,25 +625,25 @@ Changes from 2.15 to 2.16
|
|||
- adjusted dot and dieresis below and above in Serif fonts (by Denis Jacquerye)
|
||||
- added U+1E1C-U+1E1D to Serif fonts (by Denis Jacquerye)
|
||||
- added U+22BE, U+22BF (by Wesley Transue)
|
||||
- added U+2324; modified U+2325: more standard proportions, and matches U+2324
|
||||
and U+2387; added U+2387 : flipped U+2325 with standard arrowhead
|
||||
- added U+2324; modified U+2325: more standard proportions, and matches U+2324
|
||||
and U+2387; added U+2387 : flipped U+2325 with standard arrowhead
|
||||
(by John Karp)
|
||||
- added Lao digits U+0ED0-0ED7, U+0ED9 (by Remy Oudompheng)
|
||||
- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F,
|
||||
U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691,
|
||||
U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE,
|
||||
- added to Mono in Arabic block : U+060C, U+0615, U+061B, U+061F,
|
||||
U+0621-U+063A, U+0640-0655, U+065A, U+0660-066F, U+0674, U+0679-0687, U+0691,
|
||||
U+0692, U+0698, U+06A1, U+06A4, U+06A9, U+06AF, U+06B5, U+06BA, U+06BE,
|
||||
U+06C6, U+06CC, U+06CE, U+06D5, U+06F0-06F9 (by Remy Oudompheng)
|
||||
- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95,
|
||||
- added to Mono in Arabic Presentations Forms-A : U+FB52-FB81, U+FB8A-FB95,
|
||||
U+FB9E, U+FB9F, U+FBAA-FBAD, U+FBE8, U+FBE9, U+FBFC-FBFF (by Remy Oudompheng)
|
||||
- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC,
|
||||
- added to Mono in Arabic Presentations Forms-B : U+FE70-FE74, U+FE76-FEFC,
|
||||
U+FEFF (by Remy Oudompheng)
|
||||
- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans
|
||||
- added U+05BA, U+05BE, U+05F3, U+05F4, U+FB1E, U+FB21-U+FB28, U+FB4F to Sans
|
||||
(by Eugeniy Meshcheryakov)
|
||||
- added U+2102 to Mono (by Eugeniy Meshcheryakov)
|
||||
- added U+2983-U+2984 to Sans (by Gee Fung Sit)
|
||||
- added U+2A2F to Sans, Serif and Mono (by Gee Fung Sit)
|
||||
- added U+2373-2375, U+237A to Sans (by John Karp)
|
||||
- converted kern pairs to kern classes with Tavmjong Bah's scripts
|
||||
- converted kern pairs to kern classes with Tavmjong Bah's scripts
|
||||
(by Denis Jacquerye)
|
||||
- set ScriptLang of kerning classes to just latn because of Pango bug
|
||||
(by Denis Jacquerye)
|
||||
|
@ -629,7 +655,7 @@ Changes from 2.15 to 2.16
|
|||
(by Denis Jacquerye)
|
||||
- added bearings to en dash U+2013, em dash U+2014 and figure dash U+2012
|
||||
by making dashes shorter, preserving character width (by Denis Jacquerye)
|
||||
- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible;
|
||||
- reduced U+031C, U+0325 (ring below), U+0339 to be entirely visible;
|
||||
added instructions in Sans Book; changed U+1e00-U+1e01 to use new ring below
|
||||
(by Denis Jacquerye)
|
||||
- adjusted circumflex below on U+1E12-U+1E13, U+1E18-U+1E19, U+1E3C-U+1E3D,
|
||||
|
@ -662,96 +688,96 @@ Changes from 2.14 to 2.15
|
|||
Changes from 2.13 to 2.14
|
||||
|
||||
- added Philippine peso glyph U+20B1 (by Clayborne Arevalo)
|
||||
- made U+2012 have the same width as digits, according to Unicode 5.0,
|
||||
- made U+2012 have the same width as digits, according to Unicode 5.0,
|
||||
page 206 (by Roozbeh Pournader)
|
||||
- made all of the "above" combining characters remove the dot of "i",
|
||||
"j", etc (Soft_Dotted characters), according to Unicode 5.0,
|
||||
- made all of the "above" combining characters remove the dot of "i",
|
||||
"j", etc (Soft_Dotted characters), according to Unicode 5.0,
|
||||
page 228 (by Roozbeh Pournader)
|
||||
- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts
|
||||
except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed),
|
||||
U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif
|
||||
and Serif Condensed) respect the Soft_Dotted property (by Roozbeh
|
||||
- made U+012F, U+03F3, U+0456, U+0458, U+1E2D, and U+1ECB (all fonts
|
||||
except Mono), U+0249, U+2148, and U+2149 (Sans and Sans Condensed),
|
||||
U+0268 (Sans ExtraLight, Serif and Serif Condensed), and U+029D (Serif
|
||||
and Serif Condensed) respect the Soft_Dotted property (by Roozbeh
|
||||
Pournader)
|
||||
- added U+223E, U+223F, U+2240, U+22C2, U+22C3 to Sans (by Remy Oudompheng)
|
||||
- added U+203D to Serif (by Gee Fung Sit)
|
||||
- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee
|
||||
- added zero-width glyphs for U+2061-U+2063 to Sans and Serif (by Gee
|
||||
Fung Sit)
|
||||
- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432)
|
||||
- changed isolated forms of Arabic waw (U+0648, U+0624 and U+06C6) (bug #9432)
|
||||
(by Ben Laenen)
|
||||
- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A,
|
||||
U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA,
|
||||
- added Lao consonants U+0E81, U+0E82, U+0E84, U+0E87, U+0E88, U+0E8A,
|
||||
U+0E8D, U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA,
|
||||
U+0EAB, U+0EAD-0EAF to Sans Mono (by Remy Oudompheng)
|
||||
- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07,
|
||||
U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D,
|
||||
U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59,
|
||||
U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77,
|
||||
U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono
|
||||
- added U+0200-U+0217, U+0226-U+0229, U+02F3, U+1E00-U+1E07,
|
||||
U+1E0A-U+1E0B, U+1E18-U+1E1F, U+1E22-U+1E23, U+1E28-U+1E2D,
|
||||
U+1E3A-U+1E3B, U+1E40, U+1E48-U+1E49, U+1E56, U+1E58-U+1E59,
|
||||
U+1E5E-U+1E5F, U+1E60, U+1E68-U+1E6B, U+1E6E-U+1E6F, U+1E72-U+1E77,
|
||||
U+1E86-U+1E8B, U+1E92-U+1E96, U+1EA0-U+1EA1, U+1EF4-U+1EF5 to Mono
|
||||
(by Ben Laenen)
|
||||
- renamed uppercase variants of diacritics (macron, breve, double grave,
|
||||
double acute, inverted breve, dot above) to "uni03XX.case" in Mono
|
||||
- renamed uppercase variants of diacritics (macron, breve, double grave,
|
||||
double acute, inverted breve, dot above) to "uni03XX.case" in Mono
|
||||
(by Ben Laenen)
|
||||
- moved uppercase variants of diacritics up in Mono so they properly
|
||||
- moved uppercase variants of diacritics up in Mono so they properly
|
||||
vertically align on capitals (by Ben Laenen)
|
||||
- precomposed glyphs with macron, breve, double grave, double acute,
|
||||
inverted breve, dot above, macron below, breve below, inverted breve
|
||||
below, dot below, cedilla, caron below, circumflex below, diaeresis
|
||||
below, tilde below now reference to combining diacritics instead of
|
||||
- precomposed glyphs with macron, breve, double grave, double acute,
|
||||
inverted breve, dot above, macron below, breve below, inverted breve
|
||||
below, dot below, cedilla, caron below, circumflex below, diaeresis
|
||||
below, tilde below now reference to combining diacritics instead of
|
||||
space modifiers in Mono (by Ben Laenen)
|
||||
- made ring below (U+0325), and half rings below (U+031C and U+0339)
|
||||
- made ring below (U+0325), and half rings below (U+031C and U+0339)
|
||||
smaller in Mono (by Ben Laenen)
|
||||
- added U+205F to all fonts (by Roozbeh Pournader)
|
||||
- added U+035E-U+035F to Sans (by Roozbeh Pournader)
|
||||
- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F,
|
||||
- added empty glyphs for U+034F, U+202A-U+202E, U+2060, U+206A-206F,
|
||||
U+FE00-U+FE0F to non-Mono fonts (by Roozbeh Pournader)
|
||||
- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B,
|
||||
U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F,
|
||||
U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11,
|
||||
- added U+2101, U+2107-U+2108, U+210B, U+210C, U+2110, U+2112, U+211B,
|
||||
U+211F, U+2123, U+2125, U+2128-U+2129, U+212C-U+212D, U+212F,
|
||||
U+2130-U+2131, U+2133, U+2136-U+213A, U+2141-U+2144, U+2B00-U+2B11,
|
||||
U+2B20-U+2B23 to Sans (by John Karp)
|
||||
- reshaped omega (U+03C9) in Mono (by Ben Laenen)
|
||||
- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F,
|
||||
U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344,
|
||||
U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354,
|
||||
U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365,
|
||||
U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383,
|
||||
- added U+2205, U+22C6, U+2300-U+2301, U+2303-U+2306, U+230C-U+230F,
|
||||
U+2312-U+2315, U+231C-U+231F, U+2335, U+2337-U+233E, U+2341-U+2344,
|
||||
U+2347-U+2348, U+234B-U+234D, U+2349-U+2350, U+2352-U+2354,
|
||||
U+2357-U+2359, U+235A-U+235C, U+235E-U+2360, U+2363-U+2365,
|
||||
U+2368-U+2369, U+236B-U+2370, U+2373-U+237A, U+2380-U+2383,
|
||||
U+2388-U+238B, U+2395 in Mono (by Ben Laenen)
|
||||
|
||||
Changes from 2.12 to 2.13
|
||||
|
||||
- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book
|
||||
- adjusted U+0198B, U+01B3-U+01B4 in Sans, hinted U+01B4 in Sans Book
|
||||
(by Denis Jacquerye)
|
||||
- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans
|
||||
- added U+27F0-U+27FF, U+2906-U+2907, U+290A-U+290B, U+2940-U+2941 to Sans
|
||||
(by Denis Jacquerye)
|
||||
- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF,
|
||||
- added U+01E6-U+01E9, U+01EE-U+01EF, U+01F4-U+01F5, U+01FC-U+01FF,
|
||||
U+021E-U+021F, U+0245, U+02BD, U+02C9, U+1E9B, U+2045-U+2046, U+2213, U+22C5,
|
||||
U+22EF to Sans Mono (by Roozbeh Pournader)
|
||||
- added U+04FA-U+04FD to Sans (by Michael Everson)
|
||||
- removed U+2329 and U+232A because of their CJK properties, added U+27E8
|
||||
- removed U+2329 and U+232A because of their CJK properties, added U+27E8
|
||||
and U+27E9 in their stead, fixing part of bug #9038 (by Roozbeh Pournader)
|
||||
- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482,
|
||||
U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A
|
||||
- corrected and improvised U+0466-U+0469, U+046E-U+0471, U+047C-U+047D, U+0482,
|
||||
U+0484-U+0486, U+0492-U+0493, U+04B0-U+04B1, U+050C-U+050D, and U+204A
|
||||
in Sans (by Michael Everson)
|
||||
- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F,
|
||||
- added instructions for U+0402, U+0409, U+040A, U+040B, U+044D, U+040F,
|
||||
U+0452, U+0459-U+045B, U+045F to Sans Book (by Eugeniy Meshcheryakov)
|
||||
- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447,
|
||||
U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique
|
||||
- made italic shape for U+431, U+432, U+437, U+43B, U+43C, U+43D, U+444, U+447,
|
||||
U+44D, U+44F, U+459, U+45A in SerifOblique and SerifBoldOblique
|
||||
(by Andrey V. Panov)
|
||||
- modified U+024C to match glyph in Unicode chart, fixing bug #9039
|
||||
- modified U+024C to match glyph in Unicode chart, fixing bug #9039
|
||||
(by Denis Jacquerye)
|
||||
- made some canonically equivalent characters share the same glyph:
|
||||
U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA
|
||||
- made some canonically equivalent characters share the same glyph:
|
||||
U+02B9 = U+0374, U+0343 = U+0313, and U+0387 = U+00B7 also adjusting U+02BA
|
||||
to look like double U+02B9, fixing parts of bug #9038 (by Roozbeh Pournader)
|
||||
- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts,
|
||||
based on a recent decision by Unicode Technical Committee to only use
|
||||
- changed shapes for U+0478 and U+0479 in Sans to those in the Unicode charts,
|
||||
based on a recent decision by Unicode Technical Committee to only use
|
||||
the digraph form (by Michael Everson)
|
||||
- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401
|
||||
- adjusted width of NBSP U+00A0 and NNBSP U+202F, fixing bug #8401
|
||||
(by Denis Jacquerye)
|
||||
- fixed several contours to not intersect, use horizontal or vertical tangents,
|
||||
- fixed several contours to not intersect, use horizontal or vertical tangents,
|
||||
use integer coordinates, etc (by Roozbeh Pournader and Denis Jacquerye)
|
||||
- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE,
|
||||
- added U+1402, U+1430, U+144D, U+146C, U+148A, U+14A4, U+14C1, U+14D4, U+14EE,
|
||||
U+1527, U+1545, U+157E, U+158E, U+15AF to Sans (by Eugeniy Meshcheryakov)
|
||||
- enlarged width of U+459 and U+45A in Serif (by Andrey V. Panov)
|
||||
- made traditional shape for U+452, U+45B (by Andrey V. Panov)
|
||||
- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize
|
||||
- added euro sign U+20AC to Sans ExtraLight, making fontconfig recognize
|
||||
the font as supporting English (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.11 to 2.12
|
||||
|
@ -820,47 +846,47 @@ Changes from 2.10 to 2.11
|
|||
|
||||
Changes from 2.9 to 2.10:
|
||||
|
||||
- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F,
|
||||
U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8,
|
||||
U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and
|
||||
- added U+0242, U+024A-U+024B, U+024E-U+024F, U+037C-U+037D, U+0E3F,
|
||||
U+1D2C-U+1D2E, U+1D30-U+1D42, U+1D5D-U+1D6A, U+1D78, U+1DB8,
|
||||
U+2090-U+2094, U+20D0-U+20D1, U+2C60-U+2C66, U+2C6B-U+2C6C, U+2C74 and
|
||||
U+FB29 to Sans (by Gee Fung Sit)
|
||||
- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D,
|
||||
U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB,
|
||||
U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD
|
||||
- added Lao glyphs : U+0E81-0E82, U+E084, U+0E87-0E88, U+0E8A, U+0E8D,
|
||||
U+0E94-0E97, U+0E99-0E9F, U+0EA1-0EA3, U+0EA5, U+0EA7, U+0EAA-0EAB,
|
||||
U+0EAD-0EB9, U+0EBB-0EBD, U+0EC0-0EC4, U+0EC6, U+0EC8-0ECD, U+0EDC-0EDD
|
||||
(by Remy Oudompheng)
|
||||
- fixed U+0193 not showing in Windows (bug #7897) (by Ben Laenen)
|
||||
- changes to U+222B-222D in Sans Mono (by Remy Oudompheng)
|
||||
- ported the three remaining currency symbols from Arev (U+20B0,
|
||||
U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye
|
||||
- ported the three remaining currency symbols from Arev (U+20B0,
|
||||
U+20B2-U+20B3), and replaced one (U+20AF) in Sans (by Lars Naesbye
|
||||
Christensen)
|
||||
- corrected U+20A5 in Sans (by Gee Fung Sit)
|
||||
- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115,
|
||||
- merged Double-Struck Letters from Arev: U+2102, U+210D, U+2115,
|
||||
U+2119-U+211A, U+2124, U+213C-U+2140 (by Gee Fung Sit)
|
||||
- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces,
|
||||
fixed incorrect direction of U+2329 in Sans faces, and improved
|
||||
U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David
|
||||
- added U+2308-U+230B and U+2329-U+232A to Sans Mono and Serif faces,
|
||||
fixed incorrect direction of U+2329 in Sans faces, and improved
|
||||
U+2308-U+230B in Sans faces per Ben Laenen's suggestions (by David
|
||||
Lawrence Ramsey)
|
||||
- added U+06D5 and final form of it (needed for Kurdish) (by Ben Laenen)
|
||||
- added two special glyphs U+F000 and U+F001 in Sans Book that show the
|
||||
- added two special glyphs U+F000 and U+F001 in Sans Book that show the
|
||||
current ppem size (horizontal and vertical) (by Ben Laenen)
|
||||
- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions
|
||||
- added U+2318 and U+2325 to Sans Mono faces, based on the Sans versions
|
||||
(by David Lawrence Ramsey)
|
||||
- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David
|
||||
- added U+2B14-U+2B1A to all faces except Sans ExtraLight (by David
|
||||
Lawrence Ramsey)
|
||||
- respaced all Geometric Shapes characters in Serif faces to match those
|
||||
in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and
|
||||
Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again,
|
||||
and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1
|
||||
- respaced all Geometric Shapes characters in Serif faces to match those
|
||||
in Sans faces again, respaced U+23CF in Sans, Sans ExtraLight, and
|
||||
Serif faces to match U+25A0 (or Sans in Sans ExtraLight's case) again,
|
||||
and respaced U+2B12-U+2B13 in Sans and Serif faces to match U+25A1
|
||||
again (by David Lawrence Ramsey)
|
||||
- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique
|
||||
- corrected width of Modifier Small Letters U+1D43-1D5B in Sans Oblique
|
||||
and U+1D9B-U+1DBF in Sans Oblique and Sans Bold Oblique (by Gee Fung Sit)
|
||||
- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by
|
||||
- added a bunch of glyphs to Sans ExtraLight (see SVN for details) (by
|
||||
Gee Fung Sit)
|
||||
- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by
|
||||
- adjusted Cyrillic descenders in Sans ExtraLight to sync with Sans (by
|
||||
Gee Fung Sit)
|
||||
- added U+0242, U+0245 to Serif (by Gee Fung Sit)
|
||||
- replaced the SHPIX routines which gave them bad spacing at certain
|
||||
sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen)
|
||||
- replaced the SHPIX routines which gave them bad spacing at certain
|
||||
sizes in FreeType for A, V, Z, v and z in Sans Bold (by Ben Laenen)
|
||||
|
||||
Changes from 2.8 to 2.9:
|
||||
|
||||
|
@ -1097,7 +1123,7 @@ Changes from 2.3 to 2.4:
|
|||
- added DejaVu Sans Extra Light (by Denis Jacquerye)
|
||||
- Adjusted underline position for (hopefully) improved legibility in
|
||||
Sans, Serif, Mono (Tim May)
|
||||
- added auto-generated DejaVu LGC (by Stepan Roh)
|
||||
- added auto-generated DejaVu LGC (by Stepan Roh)
|
||||
|
||||
Changes from 2.2 to 2.3:
|
||||
|
||||
|
@ -1159,7 +1185,7 @@ Changes from 2.2 to 2.3:
|
|||
- added U+0181, U+0187-U+0188, U+018A, U+018D, U+018F, U+0191, U+0193,
|
||||
U+0195-U+019F, U+01A4-01A5, U+01AC-01AD, U+01B5-U+01B6, U+1BB, U+01F6,
|
||||
U+01D7-U+01DC, U+0238-U+0239, U+0241 to Mono (by Denis Jacquerye)
|
||||
- added to Mono and Serif (by Denis Jacquerye)
|
||||
- added to Mono and Serif (by Denis Jacquerye)
|
||||
|
||||
Changes from 2.1 to 2.2:
|
||||
|
||||
|
@ -1203,7 +1229,7 @@ Changes from 2.1 to 2.2:
|
|||
- completed basic Greek alphabet: added U+0374-U+0375, U+037A, U+037E,
|
||||
U+0384-U+038A, U+038C, U+038E-U+0390, U+03AC-U+03BF, U+03C1-U+03CE (by Ben
|
||||
Laenen)
|
||||
- added U+2070 and U+2074-U+2079 (by Mederic Boquien)
|
||||
- added U+2070 and U+2074-U+2079 (by Mederic Boquien)
|
||||
|
||||
Changes from 2.0 to 2.1:
|
||||
|
||||
|
@ -1238,7 +1264,7 @@ Changes from 2.0 to 2.1:
|
|||
Lawrence Ramsey)
|
||||
- new logo (by Gee Fung Sit)
|
||||
- added U+0180, U+018E, U+201F, U+2024, U+2025, U+203D, U+2200, U+2203,
|
||||
U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit)
|
||||
U+2213, U+222C, U+222D, U+2263 to Sans (by Gee Fung Sit)
|
||||
|
||||
Changes from 1.15 to 2.0:
|
||||
|
||||
|
@ -1426,4 +1452,4 @@ Changes from 0.9 to 0.9.1:
|
|||
- proper caron shape for dcaron and tcaron
|
||||
- minor visual changes
|
||||
|
||||
$Id: NEWS 2594 2015-05-17 07:54:48Z ben_laenen $
|
||||
$Id$
|
|
@ -1,4 +1,6 @@
|
|||
DejaVu fonts 2.35 (c)2004-2015 DejaVu fonts team
|
||||
[![Build Status](https://travis-ci.org/dejavu-fonts/dejavu-fonts.svg)](https://travis-ci.org/dejavu-fonts/dejavu-fonts)
|
||||
|
||||
DejaVu fonts 2.37 (c)2004-2016 DejaVu fonts team
|
||||
------------------------------------------------
|
||||
|
||||
The DejaVu fonts are a font family based on the Bitstream Vera Fonts
|
||||
|
@ -31,6 +33,7 @@ DejaVu Serif Condensed (experimental)
|
|||
DejaVu Serif Condensed Bold (experimental)
|
||||
DejaVu Serif Condensed Bold Italic (experimental)
|
||||
DejaVu Serif Condensed Italic (experimental)
|
||||
DejaVu Math TeX Gyre
|
||||
|
||||
All fonts are also available as derivative called DejaVu LGC with support
|
||||
only for Latin, Greek and Cyrillic scripts.
|
||||
|
@ -56,4 +59,9 @@ U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704,
|
|||
U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794,
|
||||
U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06
|
||||
|
||||
$Id: README 2595 2015-05-17 07:57:27Z ben_laenen $
|
||||
DejaVu Math TeX Gyre
|
||||
--------------------
|
||||
TeX Gyre DJV Math by B. Jackowski, P. Strzelczyk and P. Pianowski
|
||||
(on behalf of TeX users groups).
|
||||
|
||||
$Id$
|
File diff suppressed because it is too large
Load diff
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuMathTeXGyre.ttf
Normal file
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuMathTeXGyre.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans-ExtraLight.ttf
Normal file
BIN
fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans-ExtraLight.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue