Compare commits
8 Commits
jb_bp_grad
...
generate-2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6c0d76e4f | ||
|
|
952bb124b9 | ||
|
|
4b2d13f4a1 | ||
|
|
76b70c383c | ||
|
|
b7618e591f | ||
|
|
913b19bbaa | ||
|
|
6c8964e059 | ||
|
|
5ca03f7aa3 |
@@ -34,19 +34,63 @@ on:
|
||||
- track_generator/**
|
||||
- xcode/**
|
||||
|
||||
env:
|
||||
SUBMODULE_CACHE_PATHS: |
|
||||
.git/modules
|
||||
3party/CMake-MetalShaderSupport
|
||||
3party/Vulkan-Headers
|
||||
3party/boost
|
||||
3party/expat
|
||||
3party/fast_double_parser
|
||||
3party/fast_obj
|
||||
3party/freetype/freetype
|
||||
3party/gflags
|
||||
3party/glaze
|
||||
3party/glfw
|
||||
3party/glm
|
||||
3party/googletest
|
||||
3party/harfbuzz/harfbuzz
|
||||
3party/icu/icu
|
||||
3party/imgui/imgui
|
||||
3party/jansson/jansson
|
||||
3party/just_gtfs
|
||||
3party/protobuf/protobuf
|
||||
3party/pugixml/pugixml
|
||||
3party/utfcpp
|
||||
tools/kothic
|
||||
tools/osmctools
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Android Lint
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: codeberg.org/comaps/docker-android-sdk:ubuntu-standalone-zy-docker
|
||||
options: --user root
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Parallel submodules checkout
|
||||
- name: Cache world map
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: data/world_mwm
|
||||
key: world-mwm
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.SUBMODULE_CACHE_PATHS }}
|
||||
key: submodules-${{ hashFiles('.gitmodules') }}
|
||||
restore-keys: |
|
||||
submodules-
|
||||
|
||||
- name: Sync and update submodules
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
run: |
|
||||
git submodule sync --recursive
|
||||
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Lint
|
||||
shell: bash
|
||||
@@ -56,6 +100,9 @@ jobs:
|
||||
android-check:
|
||||
name: Build Android Debug
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: codeberg.org/comaps/docker-android-sdk:ubuntu-standalone-zy-docker
|
||||
options: --user root
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -71,23 +118,32 @@ jobs:
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: Install build tools and dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y ninja-build
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 200 # enough to get all commits for the current day
|
||||
|
||||
- name: Parallel submodules checkout
|
||||
- name: Cache world map
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: data/world_mwm
|
||||
key: world-mwm
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.SUBMODULE_CACHE_PATHS }}
|
||||
key: submodules-${{ hashFiles('.gitmodules') }}
|
||||
restore-keys: |
|
||||
submodules-
|
||||
|
||||
- name: Sync and update submodules
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
run: |
|
||||
git submodule sync --recursive
|
||||
git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
uses: https://github.com/hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
key: ${{ github.workflow }}-${{ matrix.flavor }}
|
||||
|
||||
@@ -97,14 +153,11 @@ jobs:
|
||||
env:
|
||||
CMAKE_C_COMPILER_LAUNCHER: ccache
|
||||
CMAKE_CXX_COMPILER_LAUNCHER: ccache
|
||||
run: |
|
||||
cmake --version
|
||||
ninja --version
|
||||
./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
run: ./gradlew -P${{ matrix.arch }} assemble${{ matrix.flavor }}
|
||||
|
||||
- name: Upload ${{ matrix.flavor }} apk
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: android-${{ matrix.flavor }}
|
||||
path: android/app/build/outputs/apk/**/OrganicMaps-*.apk
|
||||
path: android/app/build/outputs/apk/**/*.apk
|
||||
if-no-files-found: error
|
||||
|
||||
@@ -5,45 +5,6 @@
|
||||
android:viewportWidth="74"
|
||||
android:viewportHeight="57">
|
||||
<path
|
||||
android:pathData="m67.3,21.772 l-28.103,11.757 11.772,5.095 5.463,11.606z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#757575"
|
||||
android:strokeColor="#757575" />
|
||||
<path
|
||||
android:pathData="M45.042,44.7m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M37.942,51.6m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M27.842,52m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="m26.942,43.5c0,2.485 -2.015,4.5 -4.5,4.5 -2.485,0 -4.5,-2.015 -4.5,-4.5 0,-2.485 2.015,-4.5 4.5,-4.5 2.485,0 4.5,2.015 4.5,4.5z"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M26.642,34.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M34.042,27.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M40.842,20.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M41.842,10.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M32.842,4.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M23.842,9.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M16.842,16.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
<path
|
||||
android:pathData="M9.842,23.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
|
||||
android:fillColor="#757575" />
|
||||
android:pathData="m26.278,8.137c3.695,-3.729 9.719,-3.761 13.453,-0.073 3.736,3.687 3.769,9.699 0.074,13.425l-14.597,14.726c-2.353,2.373 -2.331,6.197 0.046,8.544 2.379,2.345 6.209,2.326 8.562,-0.048l14.303,-14.428c-0.155,-0.32 -0.286,-0.647 -0.394,-0.978l-4.006,0.001c-2.787,0 -3.659,-3.825 -1.045,-5.042l7.813,-3.604c0.879,-0.652 1.87,-1.098 2.9,-1.333l11.936,-5.495c2.091,-0.869 4.357,1.392 3.486,3.478l-10.454,22.603c-1.219,2.607 -5.053,1.736 -5.053,-1.044v-4.418c-0.506,-0.122 -1.006,-0.296 -1.494,-0.525l-14.303,14.428c-4.368,4.406 -11.485,4.444 -15.901,0.086 -4.413,-4.358 -4.452,-11.461 -0.084,-15.867l14.597,-14.726c1.68,-1.693 1.665,-4.426 -0.033,-6.102 -1.7,-1.677 -4.437,-1.662 -6.117,0.033l-9.43,9.516c0.436,0.994 0.679,2.091 0.679,3.244 0,4.464 -3.634,8.091 -8.108,8.091 -4.475,0 -8.108,-3.627 -8.108,-8.091 0,-4.466 3.633,-8.091 8.108,-8.091 1.424,0 2.764,0.367 3.928,1.012z" />
|
||||
</vector>
|
||||
|
||||
@@ -9,45 +9,6 @@
|
||||
android:fillColor="@color/active_track_recording"
|
||||
android:fillAlpha="0.78" />
|
||||
<path
|
||||
android:pathData="m78.907,32.87 l-31.833,13.318 13.335,5.772 6.188,13.147z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M49.731,57.709a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M41.688,65.525a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M30.247,65.978a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="m34.324,56.35c0,2.815 -2.282,5.097 -5.097,5.097 -2.815,0 -5.097,-2.282 -5.097,-5.097 0,-2.815 2.282,-5.097 5.097,-5.097 2.815,0 5.097,2.282 5.097,5.097z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M28.888,46.155a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M37.27,38.226a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M44.974,30.297a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M46.106,18.969a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M35.911,12.173a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M25.718,17.837a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M17.788,25.766a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
<path
|
||||
android:pathData="M9.858,33.695a5.097,5.097 0,1 0,10.195 0a5.097,5.097 0,1 0,-10.195 0z"
|
||||
android:fillColor="#ffffff" />
|
||||
android:pathData="m33.024,19.508c3.955,-3.981 10.402,-4.015 14.399,-0.078 3.999,3.937 4.034,10.355 0.079,14.333l-15.623,15.722c-2.518,2.534 -2.495,6.616 0.049,9.122 2.546,2.504 6.646,2.483 9.164,-0.051l15.309,-15.404c-0.166,-0.342 -0.306,-0.691 -0.422,-1.044l-4.288,0.001c-2.983,0 -3.916,-4.084 -1.118,-5.383l8.362,-3.848c0.941,-0.696 2.001,-1.172 3.104,-1.423l12.775,-5.867c2.238,-0.928 4.663,1.486 3.731,3.713l-11.189,24.132c-1.305,2.783 -5.408,1.854 -5.408,-1.115l-0,-4.717c-0.542,-0.13 -1.077,-0.316 -1.599,-0.561l-15.309,15.404c-4.675,4.704 -12.293,4.745 -17.019,0.092 -4.723,-4.653 -4.765,-12.237 -0.09,-16.941l15.623,-15.722c1.798,-1.808 1.782,-4.725 -0.035,-6.515 -1.819,-1.79 -4.749,-1.774 -6.547,0.035l-10.093,10.16c0.467,1.061 0.727,2.232 0.727,3.464 0,4.766 -3.89,8.638 -8.678,8.638 -4.79,0 -8.678,-3.872 -8.678,-8.638 0,-4.768 3.888,-8.638 8.678,-8.638 1.524,0 2.958,0.392 4.204,1.081z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionSha256Sum=72f44c9f8ebcb1af43838f45ee5c4aa9c5444898b3468ab3f4af7b6076c5bc3f
|
||||
distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
|
||||
|
||||
@@ -153,7 +153,7 @@ project.afterEvaluate {
|
||||
|
||||
final taskName = gradle.startParameter.taskNames
|
||||
|
||||
if (['assemble', 'bundle', 'compile', 'install', 'run', 'publish'].any{taskName.any{task->task.startsWith(it)}}) {
|
||||
if (['assemble', 'bundle', 'compile', 'install', 'lint', 'publish', 'run'].any{taskName.any{task->task.startsWith(it)}}) {
|
||||
exec {
|
||||
workingDir '../..'
|
||||
|
||||
|
||||
1
android/sdk/src/main/assets/countries_meta.txt
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../data/countries_meta.txt
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"World": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
"languages": []
|
||||
},
|
||||
"WorldCoasts": {
|
||||
"languages": ["int_name", "en", "default"]
|
||||
"languages": []
|
||||
},
|
||||
"Abkhazia": {
|
||||
"languages": ["ab", "ru"]
|
||||
|
||||
@@ -475,6 +475,7 @@ amenity|parking|multi-storey;[amenity=parking][parking=multi-storey];;name;int_n
|
||||
# TODO: its being replaced by landuse-recreation_ground, merge in there.
|
||||
leisure|recreation_ground;360;
|
||||
deprecated:highway|footway|mountain_hiking:04.2024;[highway=footway][sac_scale=mountain_hiking];x;name;int_name;361;highway|path
|
||||
# Workaround for (mis)uses of emergency access points to provide kind of an additional emergency address to each house, which without this would completely clutter the map. See https://codeberg.org/comaps/comaps/pulls/3220.
|
||||
emergency|access_point|address;[emergency=access_point][operator=helpbidea];;name;;362;
|
||||
amenity|parking|multi-storey|fee;[amenity=parking][parking=multi-storey][fee];;name;int_name;363;
|
||||
sport|9pin;364;
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 7 and column 16.
|
@@ -1 +1 @@
|
||||
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#000" height="18" opacity=".6" rx="1.875" width="18"/><rect fill="#2f6499" height="16.5" rx="1.5" width="16.5" x=".75" y=".75"/><path d="m12.9135042 6.75c-.0833333-1-.8333333-1.66666667-1.75-1.66666667h-1.49999999v-.75c.33333333 0 .74999999.08333334 1.16666669.16666667.3333333.08333333.6666667-.16666667.8333333-.58333333.0833334-.41666667-.1666666-.75-.5833333-.91666667-.75-.16666667-1.50000002-.25-2.16666669-.25h-.08333333c-1.25 0-2.16666667.25-2.25.25-.33333334.16666667-.5.58333333-.41666667 1s.5.66666667.91666667.58333333c.16666666 0 .58333333-.16666666 1.08333333-.16666666v.75h-1.58333333c-.91666667-.08333334-1.66666667.66666666-1.66666667 1.58333333l-.25 6.1666667v.0833333c0 1 .75 1.75 1.75 1.75h5.16666669.0833333c1-.0833333 1.75-.9166667 1.6666667-1.8333333zm-6.99999999 3.08333333.08333333-2.41666666c0-.58333334.41666667-1 .91666667-1h3.99999999c.5 0 .8333334.41666666.9166667 1l.0833333 2.41666666c0 .58333337-.3333333.99999997-.8333333.99999997h-.0833333-4.16666672c-.5 0-.91666667-.4166666-.91666667-.99999997zm.58333333 3.74999997c-.41666666 0-.75-.3333333-.75-.75 0-.4166666.33333334-.75.75-.75.41666667 0 .75.25.75.6666667s-.33333333.8333333-.75.8333333zm4.83333336 0c-.4166667 0-.75-.3333333-.75-.75 0-.4166666.3333333-.75.75-.75s.75.3333334.75.75c0 .3333334-.3333333.75-.75.75z" fill="#000"/></g></svg>
|
||||
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#000" height="18" opacity=".6" rx="1.875" width="18"/><rect fill="#2f6499" height="16.5" rx="1.5" width="16.5" x=".75" y=".75"/><path d="m6.41350421 14.75c-.95 0-1.674375-.676875-1.7444375-1.6019375l-.0055625-.1480625v-.0833333l.25-6.1666667c0-.91666667.75-1.66666667 1.66666667-1.58333333h1.58333333v-.75c-.5 0-.91666667.16666666-1.08333333.16666666-.41666667.08333334-.83333334-.16666666-.91666667-.58333333s.08333333-.83333333.41666667-1l.11922451-.02060859c.27673179-.05556686.98917837-.2057297 1.91374923-.22689803l.38536266-.00204645-.00000307.26264718.00249272-.26264718.1683364-.00044693c1.24999997 0 2.16666667.25 2.24999997.25.3333334.16666667.5.58333333.4166667 1s-.5.66666667-.9166667.58333333c-.1666666 0-.5833333-.16666666-1.0833333-.16666666v.75h1.5833333c.8708334-.07916667 1.59125.59374999 1.6611146 1.44716666l.2555521 6.30283337v.0833333l-.0055625.1480625c-.0700625.9250625-.7944375 1.6019375-1.7444375 1.6019375zm.08333333-2.6666667c-.41666666 0-.75.3333334-.75.75 0 .4166667.33333334.75.75.75.41666667 0 .75-.4166666.75-.8333333s-.33333333-.6666667-.75-.6666667zm5.00582916 0c-.4166667 0-.75.25-.75.6666667s.3333333.8333333.75.8333333c.4166666 0 .75-.3333333.75-.75 0-.4166666-.3333334-.75-.75-.75zm-4.58916249-5.66666663c-.46428571 0-.85671769.3592687-.9104106.87764213l-.00625607.12235787-.08333333 2.41666666c0 .58333337.41666667.99999997.91666667.99999997h4.33916242c.5 0 .9166667-.4166666.9166667-.99999997l-.0833333-2.41666666-.0062561-.12235787c-.0536929-.51837343-.4461249-.87764213-.9104106-.87764213z" fill="#000"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1 +1 @@
|
||||
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#000" height="12" opacity=".6" rx="1.875" width="12"/><rect fill="#2f6499" height="11.00025" rx="1.5" width="11.00025" x=".500003" y=".500003"/><path d="m8.52747147 4.58333334c-.05381944-.64583334-.53819445-1.07638889-1.13020833-1.07638889h-.96875v-.48437501c.21527777 0 .484375.05381945.75347222.10763889.21527778.05381945.43055555-.10763889.53819445-.37673611.05381944-.26909722-.1076389-.484375-.37673612-.59201389-.484375-.10763889-.96874999-.16145833-1.39930555-.16145833h-.05381945c-.80729166 0-1.39930555.16145833-1.45312499.16145833-.21527778.10763889-.32291667.37673612-.26909723.64583333.05381945.26909723.32291667.43055557.59201389.37673612.10763889 0 .37673611-.10763889.69965278-.10763889v.484375h-1.02256944c-.59201389-.05381944-1.07638889.43055556-1.07638889 1.02256945l-.16145834 3.98263889v.05381944c0 .64583333.484375 1.13020833 1.13020833 1.13020833h3.33680556.05381945c.64583333-.05381944 1.13020833-.59201389 1.07638889-1.18402777zm-4.52083334 1.99131944.05381946-1.56076389c0-.37673611.26909721-.64583333.59201388-.64583333h2.58333333c.32291667 0 .53819445.26909722.5920139.64583333l.05381944 1.56076389c0 .37673611-.21527778.64583334-.53819445.64583334h-.05381944-2.69097223c-.32291666 0-.59201389-.26909723-.59201389-.64583334zm.37673612 2.421875c-.26909722 0-.484375-.21527778-.484375-.48437499 0-.26909723.21527778-.48437501.484375-.48437501s.484375.16145834.484375.43055555c0 .26909723-.21527778.53819445-.484375.53819445zm3.12152778 0c-.26909723 0-.484375-.21527778-.484375-.48437499 0-.26909723.21527777-.48437501.484375-.48437501.26909722 0 .48437499.21527778.48437499.48437501 0 .21527777-.21527777.48437499-.48437499.48437499z" fill="#000"/></g></svg>
|
||||
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#000" height="12" opacity=".6" rx="1.875" width="12"/><rect fill="#2f6499" height="11.00025" rx="1.5" width="11.00025" x=".500003" y=".500003"/><path d="m5.99901368 2.00028841.27959242.00206521c.38744508.01070897.71530435.05601616.94321322.09555697l.34033345.06354774c.21527778.10763889.32291667.37673612.26909723.64583333-.04783951.23919754-.26577504.39334706-.50261012.38685034l-.14510611-.01607672-.26690051-.05931123c-.11014942-.02259475-.23865707-.04236516-.37704993-.04236516v.484375h1.02256944c.5525463-.05023148 1.01132716.3683642 1.07004218.90572943l.16780505 4.09947891v.05381944l-.00636265.12691821c-.05893828.58134568-.52106791 1.00329012-1.12384568 1.00329012h-3.34023687c-.60277777 0-1.0649074-.42194444-1.12384568-1.00329012l-.00636265-.12691821v-.05381944l.16145834-3.98263889c0-.59201389.484375-1.07638889 1.07638889-1.02256945h1.02256944v-.484375c-.27678572 0-.51403061.07908163-.64395044.10167639l-.05570234.0059625c-.26909722.05381945-.53819444-.10763889-.59201389-.37673612-.05381944-.26909721.05381945-.53819444.26909723-.64583333l.34033345-.06354774.25973069-.03996795c.19337167-.02593341.42518581-.04844971.68348253-.05558902zm-1.61563943 6.02748937c-.26909722 0-.484375.21527778-.484375.484375s.21527778.484375.484375.484375.484375-.26909722.484375-.53819445c0-.26909721-.21527778-.43055555-.484375-.43055555zm3.23259797 0c-.26909722 0-.484375.16145834-.484375.43055555 0 .26909723.21527778.53819445.484375.53819445s.484375-.21527778.484375-.484375-.21527778-.484375-.484375-.484375zm-.26909722-3.65972222h-2.69440353c-.29356061 0-.54264233.2223944-.58550379.54587716l-.00651009.09995617-.05381946 1.56076389c0 .37673611.26909723.64583334.59201389.64583334h2.80204243c.32291666 0 .59201389-.26909723.59201389-.64583334l-.05381946-1.56076389-.00651009-.09995617c-.04286146-.32348276-.29194318-.54587716-.58550379-.54587716z" fill="#000"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -1 +1 @@
|
||||
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#fff" height="18" opacity=".6" rx="1.875" width="18"/><rect fill="#2f6499" height="16.5" rx="1.5" width="16.5" x=".75" y=".75"/><path d="m12.9135042 6.75c-.0833333-1-.8333333-1.66666667-1.75-1.66666667h-1.49999999v-.75c.33333333 0 .74999999.08333334 1.16666669.16666667.3333333.08333333.6666667-.16666667.8333333-.58333333.0833334-.41666667-.1666666-.75-.5833333-.91666667-.75-.16666667-1.50000002-.25-2.16666669-.25h-.08333333c-1.25 0-2.16666667.25-2.25.25-.33333334.16666667-.5.58333333-.41666667 1s.5.66666667.91666667.58333333c.16666666 0 .58333333-.16666666 1.08333333-.16666666v.75h-1.58333333c-.91666667-.08333334-1.66666667.66666666-1.66666667 1.58333333l-.25 6.1666667v.0833333c0 1 .75 1.75 1.75 1.75h5.16666669.0833333c1-.0833333 1.75-.9166667 1.6666667-1.8333333zm-6.99999999 3.08333333.08333333-2.41666666c0-.58333334.41666667-1 .91666667-1h3.99999999c.5 0 .8333334.41666666.9166667 1l.0833333 2.41666666c0 .58333337-.3333333.99999997-.8333333.99999997h-.0833333-4.16666672c-.5 0-.91666667-.4166666-.91666667-.99999997zm.58333333 3.74999997c-.41666666 0-.75-.3333333-.75-.75 0-.4166666.33333334-.75.75-.75.41666667 0 .75.25.75.6666667s-.33333333.8333333-.75.8333333zm4.83333336 0c-.4166667 0-.75-.3333333-.75-.75 0-.4166666.3333333-.75.75-.75s.75.3333334.75.75c0 .3333334-.3333333.75-.75.75z" fill="#fff"/></g></svg>
|
||||
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#fff" height="18" opacity=".6" rx="1.875" width="18"/><rect fill="#2f6499" height="16.5" rx="1.5" width="16.5" x=".75" y=".75"/><path d="m6.41350421 14.75c-.95 0-1.674375-.676875-1.7444375-1.6019375l-.0055625-.1480625v-.0833333l.25-6.1666667c0-.91666667.75-1.66666667 1.66666667-1.58333333h1.58333333v-.75c-.5 0-.91666667.16666666-1.08333333.16666666-.41666667.08333334-.83333334-.16666666-.91666667-.58333333s.08333333-.83333333.41666667-1l.11922451-.02060859c.27673179-.05556686.98917837-.2057297 1.91374923-.22689803l.38536266-.00204645-.00000307.26264718.00249272-.26264718.1683364-.00044693c1.24999997 0 2.16666667.25 2.24999997.25.3333334.16666667.5.58333333.4166667 1s-.5.66666667-.9166667.58333333c-.1666666 0-.5833333-.16666666-1.0833333-.16666666v.75h1.5833333c.8708334-.07916667 1.59125.59374999 1.6611146 1.44716666l.2555521 6.30283337v.0833333l-.0055625.1480625c-.0700625.9250625-.7944375 1.6019375-1.7444375 1.6019375zm.08333333-2.6666667c-.41666666 0-.75.3333334-.75.75 0 .4166667.33333334.75.75.75.41666667 0 .75-.4166666.75-.8333333s-.33333333-.6666667-.75-.6666667zm5.00582916 0c-.4166667 0-.75.25-.75.6666667s.3333333.8333333.75.8333333c.4166666 0 .75-.3333333.75-.75 0-.4166666-.3333334-.75-.75-.75zm-4.58916249-5.66666663c-.46428571 0-.85671769.3592687-.9104106.87764213l-.00625607.12235787-.08333333 2.41666666c0 .58333337.41666667.99999997.91666667.99999997h4.33916242c.5 0 .9166667-.4166666.9166667-.99999997l-.0833333-2.41666666-.0062561-.12235787c-.0536929-.51837343-.4461249-.87764213-.9104106-.87764213z" fill="#fff"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1 +1 @@
|
||||
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#fff" height="12" opacity=".6" rx="1.875" width="12"/><rect fill="#2f6499" height="11.00025" rx="1.5" width="11.00025" x=".500003" y=".500003"/><path d="m8.52747147 4.58333334c-.05381944-.64583334-.53819445-1.07638889-1.13020833-1.07638889h-.96875v-.48437501c.21527777 0 .484375.05381945.75347222.10763889.21527778.05381945.43055555-.10763889.53819445-.37673611.05381944-.26909722-.1076389-.484375-.37673612-.59201389-.484375-.10763889-.96874999-.16145833-1.39930555-.16145833h-.05381945c-.80729166 0-1.39930555.16145833-1.45312499.16145833-.21527778.10763889-.32291667.37673612-.26909723.64583333.05381945.26909723.32291667.43055557.59201389.37673612.10763889 0 .37673611-.10763889.69965278-.10763889v.484375h-1.02256944c-.59201389-.05381944-1.07638889.43055556-1.07638889 1.02256945l-.16145834 3.98263889v.05381944c0 .64583333.484375 1.13020833 1.13020833 1.13020833h3.33680556.05381945c.64583333-.05381944 1.13020833-.59201389 1.07638889-1.18402777zm-4.52083334 1.99131944.05381946-1.56076389c0-.37673611.26909721-.64583333.59201388-.64583333h2.58333333c.32291667 0 .53819445.26909722.5920139.64583333l.05381944 1.56076389c0 .37673611-.21527778.64583334-.53819445.64583334h-.05381944-2.69097223c-.32291666 0-.59201389-.26909723-.59201389-.64583334zm.37673612 2.421875c-.26909722 0-.484375-.21527778-.484375-.48437499 0-.26909723.21527778-.48437501.484375-.48437501s.484375.16145834.484375.43055555c0 .26909723-.21527778.53819445-.484375.53819445zm3.12152778 0c-.26909723 0-.484375-.21527778-.484375-.48437499 0-.26909723.21527777-.48437501.484375-.48437501.26909722 0 .48437499.21527778.48437499.48437501 0 .21527777-.21527777.48437499-.48437499.48437499z" fill="#fff"/></g></svg>
|
||||
<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><g fill="none"><rect fill="#fff" height="12" opacity=".6" rx="1.875" width="12"/><rect fill="#2f6499" height="11.00025" rx="1.5" width="11.00025" x=".500003" y=".500003"/><path d="m5.99901368 2.00028841.27959242.00206521c.38744508.01070897.71530435.05601616.94321322.09555697l.34033345.06354774c.21527778.10763889.32291667.37673612.26909723.64583333-.04783951.23919754-.26577504.39334706-.50261012.38685034l-.14510611-.01607672-.26690051-.05931123c-.11014942-.02259475-.23865707-.04236516-.37704993-.04236516v.484375h1.02256944c.5525463-.05023148 1.01132716.3683642 1.07004218.90572943l.16780505 4.09947891v.05381944l-.00636265.12691821c-.05893828.58134568-.52106791 1.00329012-1.12384568 1.00329012h-3.34023687c-.60277777 0-1.0649074-.42194444-1.12384568-1.00329012l-.00636265-.12691821v-.05381944l.16145834-3.98263889c0-.59201389.484375-1.07638889 1.07638889-1.02256945h1.02256944v-.484375c-.27678572 0-.51403061.07908163-.64395044.10167639l-.05570234.0059625c-.26909722.05381945-.53819444-.10763889-.59201389-.37673612-.05381944-.26909721.05381945-.53819444.26909723-.64583333l.34033345-.06354774.25973069-.03996795c.19337167-.02593341.42518581-.04844971.68348253-.05558902zm-1.61563943 6.02748937c-.26909722 0-.484375.21527778-.484375.484375s.21527778.484375.484375.484375.484375-.26909722.484375-.53819445c0-.26909721-.21527778-.43055555-.484375-.43055555zm3.23259797 0c-.26909722 0-.484375.16145834-.484375.43055555 0 .26909723.21527778.53819445.484375.53819445s.484375-.21527778.484375-.484375-.21527778-.484375-.484375-.484375zm-.26909722-3.65972222h-2.69440353c-.29356061 0-.54264233.2223944-.58550379.54587716l-.00651009.09995617-.05381946 1.56076389c0 .37673611.26909723.64583334.59201389.64583334h2.80204243c.32291666 0 .59201389-.26909723.59201389-.64583334l-.05381946-1.56076389-.00651009-.09995617c-.04286146-.32348276-.29194318-.54587716-.58550379-.54587716z" fill="#fff"/></g></svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
150
docs/ECLIPSE.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# Eclipse
|
||||
|
||||
As mentioned in [Building](INSTALL.md), there are several IDEs which can be used for CoMaps development. With the refactoring of the code that happened in August 2025, Eclipse finally can be used to work with the CoMaps C++ and Java codebase. (Code in other languages is untested.)
|
||||
|
||||
Eclipse natively supports Java, thus it can be used to edit the entire Android codebase. However, although Eclipse was once the tool for Android development, the Android plug-ins (ADT and its fork, Andmore) are no longer being actively developed. Therefore, although you can edit Java code for Android in Eclipse, you will get warnings about missing Android-specific dependencies. Building and debugging the Android app is not possible (or will require a lot of tinkering to get it to work).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
You need Eclipse with CDT (C/C++ developer tools).
|
||||
|
||||
## Import the code
|
||||
|
||||
**Do not** import the entire source directory – the code indexer will choke on `3party`. Instead, import the following directories as individual projects:
|
||||
|
||||
* `libs` – this should be the first dir to import
|
||||
* `qt` if you want to work on the desktop app
|
||||
* `tools` if you want to work on tools which are not part of the main app
|
||||
|
||||
If you want to work on the Android app from within Eclipse, you can also import `android`. We don’t have instructions for that yet (feel free to contribute yours) but have been able to import that portion of the code into Eclipse. There are three main caveats:
|
||||
|
||||
* You need to import C++ and Java code separately
|
||||
* In Java, Eclipse may not be able to find Android-specific dependencies which are not part of the standard Java API
|
||||
* The code has been refactored since this was last tried successfully; Android code has been split into an app and an SDK portion; you may need to import each of these separately
|
||||
|
||||
## Import code dirs
|
||||
|
||||
Repeat these steps for each subdir you want to work with (`libs`, `qt`, `android`, tools` etc.).
|
||||
|
||||
From the menu, choose **File > Import**.
|
||||
|
||||
In the dialog that opens, select **C/C++ > Existing Code as Makefile Project** and click **Next**.
|
||||
|
||||
In the next dialog:
|
||||
|
||||
* Set the **Project Name** (we recommend using the name of the subdir)
|
||||
* Set the path for the **Existing Code Location** (a subdir of the CoMaps code dir, such as `libs`, `qt` or `tools`)
|
||||
* Ensure both C and C++ are selected under **Languages**
|
||||
* Under **Toolchain for Indexer Settings**, select **CMake driven**.
|
||||
* Click **Finish**.
|
||||
|
||||
After you have imported the code and open the first source files, Eclipse will flag lots of errors in the code, as it cannot find any of the included header files outside the project. We will rectify that in the next steps.
|
||||
|
||||
## Header files in project root
|
||||
|
||||
Some header files are located in the root dir of the source tree. You to import them into a location where Eclipse can find them.
|
||||
|
||||
Right-click the `libs` project and choose **Import** from the context menu.
|
||||
|
||||
In the dialog that opens, select **General > File System** and click **Next**.
|
||||
|
||||
In the **File System** dialog:
|
||||
|
||||
* In **From Directory**, enter (or browse to) the root dir of the CoMaps sources.
|
||||
* In the list of files below, check all header files (at the time of this writing, `defines.hpp`, `omim_config.h`, `precompiled_headers.hpp` and `private.h`).
|
||||
* Under **Options**, click **Advanced**.
|
||||
* Check **Create links in workspace**.
|
||||
* Click **Finish**.
|
||||
|
||||
The header files will now appear at the root of `libs`. These are links that point to the files in their original location.
|
||||
|
||||
Should any additional header files ever get added to the root dir, you will have to repeat this step.
|
||||
|
||||
## Dependencies
|
||||
|
||||
Right-click the project root in Package Explorer and select **Properties** from the context menu.
|
||||
|
||||
In the dialog that opens, select **C/C++ General > Paths and Symbols** from the tree on the left.
|
||||
|
||||
Click the **Includes** tab and add the following paths:
|
||||
|
||||
* The standard include paths of your system (these can be obtained by running `echo | g++ -v -x c++ -E -` and looking for the line which reads `#include <...> search starts here:`)
|
||||
* The following subdirs of `3party` (in the CoMaps source dir):
|
||||
* `boost`
|
||||
* `pugixml/pugixml/src`
|
||||
* For other dependencies, figure out where the header files are and how they are included – for example, if one of the source files includes `<foo/foo_base.hpp>` and you find the file in `3party/libfoo/headers/foo/foo_base.hpp`, include `3party/libfo/headers`
|
||||
* Qt6 headers – on Ubuntu 24.04, they are found in `/usr/include/x86_64-linux-gnu/qt6`. (Only for needed for `qt`; also for `tools` if you’re working on GUI tools.) You will also need at least the following subdirs:
|
||||
* `QtCore`
|
||||
* `QtGui`
|
||||
* `QtOpenGL`
|
||||
* `QtOpenGLWidgets`
|
||||
* `QtWidgets`
|
||||
* This list may be incomplete – if you spot anything missing and know how to add it, please add it here
|
||||
|
||||
On the **References** tab, check `libs` (except in the `libs` project itself, where this is not available and not needed).
|
||||
|
||||
## Building
|
||||
|
||||
> [!NOTE]
|
||||
> So far, we haven’t found a way to configure our toolchain as a builder in Eclipse (which would allow us to have Eclipse build the artifact as needed before running it) – if you know how to do this, your input is appreciated. Until then, the workaround is to configure the build command as an external tool. The build command must then be launched manually after making changes to the code. After that you can launch the build artifact using Run.
|
||||
|
||||
Build and run configurations are relative to a project. Since the code is spread across multiple projects, the recommendation is to configure the build for the project where the frontend resides – `qt` for the desktop app, `tools` for any tools.
|
||||
|
||||
### Configure the build command as an external command
|
||||
|
||||
From the menu, choose **Run > External Tools > External Tools Configurations...***
|
||||
|
||||
Right-click **Program** in the left pane and select **New configuration**. (One blank configuration may already have been created, which you can adapt to your needs.)
|
||||
|
||||
* Set a name for the external command (e.g. `Build`, followed by the artifact name and release or debug)
|
||||
* On the **Main** tab:
|
||||
* **Location**: `${workspace_loc:/tools/unix/build_omim.sh}`
|
||||
* **Working Directory**: `${workspace_loc:/qt}/..` or `${workspace_loc:/tools}/..`
|
||||
* **Arguments**: arguments to the build script (e.g. `-r desktop` for a desktop release build)
|
||||
* On the **Refresh** tab, uncheck **Refresh resources upon completion**.
|
||||
* On the **Build** tab, uncheck **Build before launch**.
|
||||
|
||||
### Configure a builder
|
||||
|
||||
> [!WARNING]
|
||||
> **This currently does not work, see above.**
|
||||
> * The prebuilt binary gets launched but no build happens, not even after changes.
|
||||
> * When explicitly starting a build, it fails with an error.
|
||||
> * Changes to the build config do not seem to take effect.
|
||||
> The steps here are for reference only; any input on getting this to work is welcome.
|
||||
|
||||
Right-click the project root in Package Explorer and select **Properties** from the context menu.
|
||||
|
||||
In the dialog that opens, select **C/C++ Build** from the tree on the left.
|
||||
|
||||
* Click **Manage Configurations** and create a new build configuration.
|
||||
* Make sure the new configuration is selected in the **Configuration** drop-down list.
|
||||
* On the **Builder Settings** tab:
|
||||
* Uncheck **Use default build command** and set the build command to `./tools/unix/build_omim.sh`.
|
||||
* Set the build directory to `${workspace_loc:/qt}/..` or `${workspace_loc:/tools}/..`.
|
||||
* On the **Behavior** tab:
|
||||
* Select **Use custom build arguments** and supply the arguments to the build script (e.g. `-r desktop` for a desktop release build).
|
||||
* Uncheck **Build (Incremental build)** and **Clean**
|
||||
|
||||
### Create a run configuration
|
||||
|
||||
To run the artifact, choose **Run > Run Configurations...** from the menu. In the dialog that opens, right-click **C/C++ Application** in the pane on the left and choose **New Configuration**. Make the following settings:
|
||||
* In the **Main** tab:
|
||||
* **Project**: one of the projects in the workspace, see recommendation above
|
||||
* **C/C++ Application**: path where the build artifact (the finished binary) resides
|
||||
* **Build Configuration**: choose the appropriate build configuration (see above)
|
||||
* In the **Arguments** tab, you can choose the working directory from which to launch the binary, and specify command line arguments.
|
||||
* In the **Environment** tab, you can set environment variables if you need this for your artifact.
|
||||
|
||||
### Building with CMake
|
||||
|
||||
The recommended toolchain is `build_omim.sh`. If nonetheless you need to build with CMake for some reason:
|
||||
* Specify `cmake` (with full path, as returned by `which cmake`) as the build command in the build configuration
|
||||
* Use the same build directory as you would for `build_omim.sh`, i.e. `${workspace_loc:/qt}/..` or `${workspace_loc:/tools}/..`.
|
||||
* Specify the build arguments for CMake. This would also include the `--build` dir. You will also need `--target` to specify the build target.
|
||||
|
||||
### Building for Android
|
||||
|
||||
Although we have not tested it yet, triggering an Android build from within Eclipse should be possible in the same way if you specify the `gradlew` script as the build tool. This should be pretty straightforward with the external tool workaround described above.
|
||||
|
||||
Installing, launching and debugging the Android app from Eclipse might be more difficult or not even possible, as there is no longer an actively maintained toolchain for Android development with Eclipse.
|
||||
@@ -41,6 +41,9 @@ NS_SWIFT_NAME(SettingsBridge)
|
||||
+ (NSString *)mapLanguageCode;
|
||||
+ (void)setMapLanguageCode:(NSString *)mapLanguageCode;
|
||||
|
||||
+ (BOOL)mapLanguageLimitAlternativesToLocal;
|
||||
+ (void)setMapLanguageLimitAlternativesToLocal:(BOOL)mapLanguageLimitAlternativesToLocal;
|
||||
|
||||
+ (BOOL)transliteration;
|
||||
+ (void)setTransliteration:(BOOL)transliteration;
|
||||
|
||||
|
||||
@@ -234,6 +234,20 @@ NSString * const kUDFileLoggingEnabledKey = @"FileLoggingEnabledKey";
|
||||
}
|
||||
}
|
||||
|
||||
+ (BOOL)mapLanguageLimitAlternativesToLocal
|
||||
{
|
||||
bool enabled = true;
|
||||
UNUSED_VALUE(settings::Get(settings::kMapLanguageLimitAlternativesToLocal, enabled));
|
||||
return enabled;
|
||||
}
|
||||
|
||||
+ (void)setMapLanguageLimitAlternativesToLocal:(BOOL)mapLanguageLimitAlternativesToLocal
|
||||
{
|
||||
settings::Set(settings::kMapLanguageLimitAlternativesToLocal, static_cast<bool>(mapLanguageLimitAlternativesToLocal));
|
||||
auto & f = GetFramework();
|
||||
f.InvalidateRect(f.GetCurrentViewport());
|
||||
}
|
||||
|
||||
+ (BOOL)transliteration { return GetFramework().LoadTransliteration(); }
|
||||
+ (void)setTransliteration:(BOOL)transliteration
|
||||
{
|
||||
|
||||
@@ -1095,6 +1095,7 @@
|
||||
"edit_track" = "Track bearbeiten";
|
||||
"pref_mapappearance_title" = "Kartendarstellung";
|
||||
"pref_maplanguage_title" = "Karten-Sprache";
|
||||
"limit_map_language_alternatives_to_local" = "Nutzung alternativer Sprachen auf lokale Sprachen begrenzen";
|
||||
"transliteration_title_disabled_summary" = "Bei der Nutzung der lokalen Sprache für die Karte ausgeschaltet";
|
||||
"pref_maplanguage_local" = "Lokale Sprache";
|
||||
"existence_confirmed_time_ago" = "Existenz bestätigt %@";
|
||||
|
||||
@@ -766,6 +766,7 @@
|
||||
"traffic_data_unavailable" = "Traffic data is not available";
|
||||
"enable_logging" = "Enable logging";
|
||||
"log_file_size" = "Log file size: %@";
|
||||
"limit_map_language_alternatives_to_local" = "Limit use of alternative languages to local ones";
|
||||
"transliteration_title" = "Transliterate into Latin alphabet";
|
||||
"transliteration_title_disabled_summary" = "Disabled when always using the local language for the map";
|
||||
|
||||
|
||||
@@ -786,6 +786,7 @@
|
||||
"traffic_data_unavailable" = "Traffic data is not available";
|
||||
"enable_logging" = "Enable logging";
|
||||
"log_file_size" = "Log file size: %@";
|
||||
"limit_map_language_alternatives_to_local" = "Limit use of alternative languages to local ones";
|
||||
"transliteration_title" = "Transliterate into Latin alphabet";
|
||||
"transliteration_title_disabled_summary" = "Disabled when always using the local language for the map";
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
165953942CB44B5600CFED7C /* symbols in Resources */ = {isa = PBXBuildFile; fileRef = 165953932CB44B3B00CFED7C /* symbols */; };
|
||||
1DFA2F6A20D3B57400FB2C66 /* UIColor+PartnerColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DFA2F6920D3B57400FB2C66 /* UIColor+PartnerColor.m */; };
|
||||
270C9C282E16AB6F00ABA688 /* Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270C9C252E16AB6300ABA688 /* Profile.swift */; };
|
||||
271186872F19467400FD7FF3 /* countries_meta.txt in Resources */ = {isa = PBXBuildFile; fileRef = 271186862F19467400FD7FF3 /* countries_meta.txt */; };
|
||||
27176A862E65B0150015F25F /* Icon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 27176A852E65B0150015F25F /* Icon.icon */; };
|
||||
27176A8A2E65B01B0015F25F /* Debug Icon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 27176A892E65B01B0015F25F /* Debug Icon.icon */; };
|
||||
272CA4492F127221005A3F5B /* subtypes.csv in Resources */ = {isa = PBXBuildFile; fileRef = 272CA4482F127221005A3F5B /* subtypes.csv */; };
|
||||
@@ -763,6 +764,7 @@
|
||||
1DFA2F6920D3B57400FB2C66 /* UIColor+PartnerColor.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = "UIColor+PartnerColor.m"; sourceTree = "<group>"; tabWidth = 2; };
|
||||
1DFA2F6E20D3CA9200FB2C66 /* UIColorRoutines.h */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = UIColorRoutines.h; sourceTree = "<group>"; tabWidth = 2; };
|
||||
270C9C252E16AB6300ABA688 /* Profile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Profile.swift; sourceTree = "<group>"; };
|
||||
271186862F19467400FD7FF3 /* countries_meta.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = countries_meta.txt; path = ../../data/countries_meta.txt; sourceTree = SOURCE_ROOT; };
|
||||
27176A852E65B0150015F25F /* Icon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = Icon.icon; sourceTree = "<group>"; };
|
||||
27176A892E65B01B0015F25F /* Debug Icon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = "Debug Icon.icon"; sourceTree = "<group>"; };
|
||||
272CA4482F127221005A3F5B /* subtypes.csv */ = {isa = PBXFileReference; lastKnownFileType = text; name = subtypes.csv; path = ../../data/subtypes.csv; sourceTree = SOURCE_ROOT; };
|
||||
@@ -3941,6 +3943,7 @@
|
||||
452FCA3A1B6A3DF7007019AB /* colors.txt */,
|
||||
97A5967E19B9CD47007A963F /* copyright.html */,
|
||||
FA46DA2B12D4166E00968C36 /* countries.txt */,
|
||||
271186862F19467400FD7FF3 /* countries_meta.txt */,
|
||||
4A23D1561B8B4DD700D4EB6F /* drules_proto_default_light.bin */,
|
||||
4A00DBDE1AB704C400113624 /* drules_proto_default_dark.bin */,
|
||||
FA637ECC29A500BE00D8921A /* drules_proto_outdoors_light.bin */,
|
||||
@@ -4179,6 +4182,7 @@
|
||||
files = (
|
||||
165953742CB1D85500CFED7C /* fonts in Resources */,
|
||||
165953942CB44B5600CFED7C /* symbols in Resources */,
|
||||
271186872F19467400FD7FF3 /* countries_meta.txt in Resources */,
|
||||
47AEF8402231249E00D20538 /* categories_brands.txt in Resources */,
|
||||
F6C3A1B221AC22810060EEC8 /* Alert 5.m4a in Resources */,
|
||||
3404F49A2028A20D0090E401 /* BMCCategoryCell.xib in Resources */,
|
||||
|
||||
@@ -167,6 +167,17 @@ import AVFoundation
|
||||
}
|
||||
|
||||
|
||||
/// If the alternative languages for the app only should be used when they are the local native language
|
||||
static var shouldLimitMapLanguageAlternativesToLocal: Bool {
|
||||
get {
|
||||
return SettingsBridge.mapLanguageLimitAlternativesToLocal()
|
||||
}
|
||||
set {
|
||||
SettingsBridge.setMapLanguageLimitAlternativesToLocal(newValue)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// If the compass should be calibrated
|
||||
@objc static var shouldCalibrateCompass: Bool {
|
||||
get {
|
||||
|
||||
@@ -36,6 +36,10 @@ struct SettingsView: View {
|
||||
@State var selectedLanguageForMap: Settings.MapLanguage.ID? = nil
|
||||
|
||||
|
||||
/// If the alternative languages for the app only should be used when they are the local native language
|
||||
@State private var shouldLimitMapLanguageAlternativesToLocal: Bool = true
|
||||
|
||||
|
||||
/// If names should be transliterated to Latin
|
||||
@State private var shouldTransliterateToLatin: Bool = true
|
||||
|
||||
@@ -153,6 +157,20 @@ struct SettingsView: View {
|
||||
Text("pref_maplanguage_title")
|
||||
}
|
||||
|
||||
Toggle(isOn: $shouldLimitMapLanguageAlternativesToLocal) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("limit_map_language_alternatives_to_local")
|
||||
|
||||
if selectedLanguageForMap == "default" {
|
||||
Text("transliteration_title_disabled_summary")
|
||||
.font(.footnote)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tint(.accent)
|
||||
.disabled(selectedLanguageForMap == "default")
|
||||
|
||||
Toggle(isOn: $shouldTransliterateToLatin) {
|
||||
VStack(alignment: .leading) {
|
||||
Text("transliteration_title")
|
||||
@@ -296,6 +314,7 @@ struct SettingsView: View {
|
||||
hasAutomaticDownload = Settings.hasAutomaticDownload
|
||||
hasIncreasedFontsize = Settings.hasIncreasedFontsize
|
||||
selectedLanguageForMap = Settings.languageForMap
|
||||
shouldLimitMapLanguageAlternativesToLocal = Settings.shouldLimitMapLanguageAlternativesToLocal
|
||||
shouldTransliterateToLatin = Settings.shouldTransliterateToLatin
|
||||
selectedMapAppearance = Settings.mapAppearance
|
||||
selectedAppearance = Settings.appearance
|
||||
@@ -328,6 +347,9 @@ struct SettingsView: View {
|
||||
Settings.languageForMap = changedSelectedLanguageForMap
|
||||
}
|
||||
}
|
||||
.onChange(of: shouldLimitMapLanguageAlternativesToLocal) { changedShouldLimitMapLanguageAlternativesToLocal in
|
||||
Settings.shouldLimitMapLanguageAlternativesToLocal = changedShouldLimitMapLanguageAlternativesToLocal
|
||||
}
|
||||
.onChange(of: shouldTransliterateToLatin) { changedShouldTransliterateToLatin in
|
||||
Settings.shouldTransliterateToLatin = changedShouldTransliterateToLatin
|
||||
}
|
||||
|
||||
@@ -72,6 +72,8 @@ set(SRC
|
||||
feature_impl.hpp
|
||||
feature_meta.cpp
|
||||
feature_meta.hpp
|
||||
feature_region_locator.cpp
|
||||
feature_region_locator.hpp
|
||||
feature_processor.hpp
|
||||
feature_source.cpp
|
||||
feature_source.hpp
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "indexer/classificator.hpp"
|
||||
#include "indexer/feature_algo.hpp"
|
||||
#include "indexer/feature_impl.hpp"
|
||||
#include "indexer/feature_region_locator.hpp"
|
||||
#include "indexer/feature_utils.hpp"
|
||||
#include "indexer/map_object.hpp"
|
||||
#include "indexer/shared_load_info.hpp"
|
||||
@@ -825,7 +826,16 @@ void FeatureType::GetReadableName(bool allowTranslit, int8_t deviceLang, feature
|
||||
|
||||
ParseCommon();
|
||||
|
||||
feature::GetReadableName({GetNames(), mwmInfo->GetRegionData(), deviceLang, allowTranslit}, out);
|
||||
auto regionData = mwmInfo->GetRegionData();
|
||||
if (regionData.IsWorldLevel())
|
||||
{
|
||||
if (GetGeomType() == feature::GeomType::Point)
|
||||
regionData.SetLanguages(RegionLocator::Instance().GetLocalLanguages(GetCenter()));
|
||||
else
|
||||
regionData.SetLanguages({"int_name", "en", "default"});
|
||||
}
|
||||
|
||||
feature::GetReadableName({GetNames(), regionData, deviceLang, allowTranslit}, out);
|
||||
}
|
||||
|
||||
string const & FeatureType::GetHouseNumber()
|
||||
|
||||
@@ -216,6 +216,11 @@ void Metadata::ClearPOIAttribs()
|
||||
++i;
|
||||
}
|
||||
|
||||
bool RegionData::IsWorldLevel() const
|
||||
{
|
||||
return Get(RegionData::Type::RD_LANGUAGES).empty();
|
||||
}
|
||||
|
||||
void RegionData::SetLanguages(vector<string> const & codes)
|
||||
{
|
||||
string value;
|
||||
|
||||
@@ -224,6 +224,7 @@ public:
|
||||
MetadataBase::Set(type, s);
|
||||
}
|
||||
|
||||
bool IsWorldLevel() const;
|
||||
void SetLanguages(std::vector<std::string> const & codes);
|
||||
void GetLanguages(std::vector<int8_t> & langs) const;
|
||||
bool HasLanguage(int8_t const lang) const;
|
||||
|
||||
26
libs/indexer/feature_region_locator.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "indexer/feature_region_locator.hpp"
|
||||
|
||||
#include "defines.hpp"
|
||||
#include "platform/platform.hpp"
|
||||
|
||||
namespace feature
|
||||
{
|
||||
/// Constructor
|
||||
RegionLocator::RegionLocator()
|
||||
{
|
||||
auto & platform = GetPlatform();
|
||||
m_infoGetter = storage::CountryInfoReader::CreateCountryInfoGetter(platform);
|
||||
|
||||
auto reader = platform.GetReader(COUNTRIES_META_FILE);
|
||||
string buffer;
|
||||
reader->ReadAsString(buffer);
|
||||
m_jsonRoot = base::Json(buffer.data());
|
||||
}
|
||||
|
||||
/// Static instance
|
||||
RegionLocator const & RegionLocator::Instance()
|
||||
{
|
||||
static RegionLocator instance;
|
||||
return instance;
|
||||
}
|
||||
} // namespace feature
|
||||
56
libs/indexer/feature_region_locator.hpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
#include "coding/reader.hpp"
|
||||
#include "cppjansson/cppjansson.hpp"
|
||||
#include "storage/storage.hpp"
|
||||
#include "storage/country_info_getter.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace feature
|
||||
{
|
||||
using namespace std;
|
||||
|
||||
class RegionLocator
|
||||
{
|
||||
public:
|
||||
/// Static instance
|
||||
static RegionLocator const & Instance();
|
||||
|
||||
/**
|
||||
* Find the local languages codes for a given point
|
||||
* @param point The point to check
|
||||
* @return The local language codes
|
||||
*/
|
||||
vector<string> GetLocalLanguages(m2::PointD const point) const
|
||||
{
|
||||
auto const regionId = m_infoGetter->GetRegionCountryId(point);
|
||||
|
||||
vector<string> regionIdParts;
|
||||
for (auto const regionIdPart : strings::Tokenize(regionId, "_")) {
|
||||
regionIdParts.push_back(string(regionIdPart));
|
||||
}
|
||||
|
||||
json_t const * jsonData = nullptr;
|
||||
vector<string> languages;
|
||||
while (languages.empty() && !regionIdParts.empty()) {
|
||||
string regionId = strings::JoinStrings(regionIdParts, "_");
|
||||
FromJSONObjectOptionalField(m_jsonRoot.get(), regionId, jsonData);
|
||||
if (jsonData)
|
||||
FromJSONObjectOptionalField(jsonData, "languages", languages);
|
||||
regionIdParts.pop_back();
|
||||
}
|
||||
return languages;
|
||||
}
|
||||
|
||||
private:
|
||||
/// Constructor
|
||||
RegionLocator();
|
||||
|
||||
/// Country info getter
|
||||
unique_ptr<storage::CountryInfoGetter> m_infoGetter;
|
||||
|
||||
/// JSON root
|
||||
base::Json m_jsonRoot;
|
||||
};
|
||||
} // namespace feature
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "platform/distance.hpp"
|
||||
#include "platform/localization.hpp"
|
||||
#include "platform/preferred_languages.hpp"
|
||||
#include "platform/settings.hpp"
|
||||
|
||||
#include "coding/string_utf8_multilang.hpp"
|
||||
#include "coding/transliteration.hpp"
|
||||
@@ -117,7 +118,7 @@ bool IsNativeLang(feature::RegionData const & regionData, int8_t deviceLang)
|
||||
return false;
|
||||
}
|
||||
|
||||
int8_t DefaultLanguage(feature::RegionData const & regionData, vector<int8_t> const & langs)
|
||||
int8_t DefaultLanguageFromRegionData(feature::RegionData const & regionData, vector<int8_t> const & langs)
|
||||
{
|
||||
for (auto const lang : langs)
|
||||
{
|
||||
@@ -132,18 +133,39 @@ int8_t DefaultLanguage(feature::RegionData const & regionData, vector<int8_t> co
|
||||
return StrUtf8::kDefaultCode;
|
||||
}
|
||||
|
||||
vector<int8_t> PrioritizedLanguages(vector<int8_t> const & langs, int8_t defaultLang)
|
||||
vector<int8_t> PrioritizedLanguages(optional<feature::RegionData> const & regionData = {})
|
||||
{
|
||||
bool limitAlternativesToLocal = true;
|
||||
UNUSED_VALUE(settings::Get(settings::kMapLanguageLimitAlternativesToLocal, limitAlternativesToLocal));
|
||||
|
||||
vector<int8_t> prioritizedLangs = {};
|
||||
|
||||
vector<int8_t> const langs = languages::GetPreferredLangIndexes();
|
||||
|
||||
int8_t defaultLang = StrUtf8::kUnsupportedLanguageCode;
|
||||
if (regionData.has_value())
|
||||
defaultLang = DefaultLanguageFromRegionData(regionData.value(), langs);
|
||||
|
||||
for (auto const lang : langs)
|
||||
{
|
||||
if (find(prioritizedLangs.begin(), prioritizedLangs.end(), lang) == prioritizedLangs.end())
|
||||
if (!limitAlternativesToLocal &&
|
||||
find(prioritizedLangs.begin(), prioritizedLangs.end(), lang) == prioritizedLangs.end())
|
||||
prioritizedLangs.push_back(lang);
|
||||
|
||||
if (defaultLang != StrUtf8::kUnsupportedLanguageCode && defaultLang == lang)
|
||||
prioritizedLangs.push_back(StrUtf8::kDefaultCode);
|
||||
|
||||
if (!limitAlternativesToLocal)
|
||||
{
|
||||
auto const similarLangs = GetSimilarLanguages(lang);
|
||||
prioritizedLangs.insert(prioritizedLangs.cend(), similarLangs.cbegin(), similarLangs.cend());
|
||||
}
|
||||
}
|
||||
|
||||
if (limitAlternativesToLocal)
|
||||
{
|
||||
auto lang = langs.front();
|
||||
prioritizedLangs.push_back(lang);
|
||||
auto const similarLangs = GetSimilarLanguages(lang);
|
||||
prioritizedLangs.insert(prioritizedLangs.cend(), similarLangs.cbegin(), similarLangs.cend());
|
||||
}
|
||||
@@ -157,8 +179,7 @@ vector<int8_t> PrioritizedLanguages(vector<int8_t> const & langs, int8_t default
|
||||
|
||||
void GetReadableNameImpl(NameParamsIn const & in, bool preferDefault, NameParamsOut & out)
|
||||
{
|
||||
auto const preferredLangs = languages::GetPreferredLangIndexes();
|
||||
auto const langPriority = PrioritizedLanguages(preferredLangs, DefaultLanguage(in.regionData, preferredLangs));
|
||||
auto const langPriority = PrioritizedLanguages(in.regionData);
|
||||
|
||||
if (GetBestName(in.src, langPriority, out.primary))
|
||||
return;
|
||||
@@ -361,8 +382,7 @@ void GetPreferredNames(NameParamsIn const & in, NameParamsOut & out)
|
||||
if (in.IsNativeOrSimilarLang())
|
||||
return GetReadableNameImpl(in, true /* preferDefault */, out);
|
||||
|
||||
auto const preferredLangs = languages::GetPreferredLangIndexes();
|
||||
auto const primaryCodes = PrioritizedLanguages(preferredLangs, DefaultLanguage(in.regionData, preferredLangs));
|
||||
auto const primaryCodes = PrioritizedLanguages(in.regionData);
|
||||
|
||||
if (!GetBestName(in.src, primaryCodes, out.primary) && in.allowTranslit)
|
||||
GetTransliteratedName(in.regionData, in.src, out.transliterated);
|
||||
@@ -427,17 +447,14 @@ int8_t GetNameForSearchOnBooking(RegionData const & regionData, StringUtf8Multil
|
||||
}
|
||||
*/
|
||||
|
||||
bool GetPreferredName(StringUtf8Multilang const & src, int8_t deviceLang, string_view & out)
|
||||
bool GetPreferredName(StringUtf8Multilang const & src, string_view & out)
|
||||
{
|
||||
auto const preferredLangs = languages::GetPreferredLangIndexes();
|
||||
auto const priorityList = PrioritizedLanguages(preferredLangs, StrUtf8::kUnsupportedLanguageCode);
|
||||
return GetBestName(src, priorityList, out);
|
||||
return GetBestName(src, PrioritizedLanguages(), out);
|
||||
}
|
||||
|
||||
vector<int8_t> GetDescriptionLangPriority(RegionData const & regionData)
|
||||
{
|
||||
auto const preferredLangs = languages::GetPreferredLangIndexes();
|
||||
return PrioritizedLanguages(preferredLangs, DefaultLanguage(regionData, preferredLangs));
|
||||
return PrioritizedLanguages(regionData);
|
||||
}
|
||||
|
||||
vector<string> GetCuisines(TypesHolder const & types)
|
||||
|
||||
@@ -137,7 +137,7 @@ std::string const GetReadableAddress(std::string const & address);
|
||||
// int8_t GetNameForSearchOnBooking(RegionData const & regionData, StringUtf8Multilang const & src, std::string & name);
|
||||
|
||||
/// Returns preferred name when only the device language is available.
|
||||
bool GetPreferredName(StringUtf8Multilang const & src, int8_t deviceLang, std::string_view & out);
|
||||
bool GetPreferredName(StringUtf8Multilang const & src, std::string_view & out);
|
||||
|
||||
/// Returns priority list of language codes for feature description,
|
||||
/// the priority is the following:
|
||||
|
||||
@@ -81,10 +81,12 @@ public:
|
||||
|
||||
MwmTypeT GetType() const;
|
||||
|
||||
// Switch to following simplified code after this pull request has been included in one release:
|
||||
// feature::RegionData GetRegionData() const { return m_data; }
|
||||
feature::RegionData GetRegionData() const {
|
||||
auto regionData = m_data;
|
||||
if (GetType() == MwmTypeT::WORLD || GetType() == MwmTypeT::COASTS) {
|
||||
regionData.SetLanguages({"int_name","en","default"});
|
||||
regionData.SetLanguages({});
|
||||
}
|
||||
return regionData;
|
||||
}
|
||||
|
||||
@@ -31,10 +31,8 @@ std::string GetPreferredBookmarkStr(LocalizableString const & name, std::string
|
||||
for (auto const & pair : name)
|
||||
nameMultilang.AddString(pair.first, pair.second);
|
||||
|
||||
auto const deviceLang = StringUtf8Multilang::GetLangIndex(languageNorm);
|
||||
|
||||
std::string_view preferredName;
|
||||
if (feature::GetPreferredName(nameMultilang, deviceLang, preferredName))
|
||||
if (feature::GetPreferredName(nameMultilang, preferredName))
|
||||
return std::string(preferredName);
|
||||
|
||||
return {};
|
||||
|
||||
@@ -22,6 +22,7 @@ using std::string;
|
||||
|
||||
std::string_view kMeasurementUnits = "Units";
|
||||
std::string_view kMapLanguageCode = "MapLanguageCode";
|
||||
std::string_view kMapLanguageLimitAlternativesToLocal = "MapLanguageLimitAlternativesToLocal";
|
||||
std::string_view kDeveloperMode = "DeveloperMode";
|
||||
std::string_view kDonateUrl = "DonateUrl";
|
||||
std::string_view kNY = "NY";
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace settings
|
||||
extern std::string_view kMeasurementUnits;
|
||||
extern std::string_view kDeveloperMode;
|
||||
extern std::string_view kMapLanguageCode;
|
||||
extern std::string_view kMapLanguageLimitAlternativesToLocal;
|
||||
// The following two settings are configured externally at the metaserver.
|
||||
extern std::string_view kDonateUrl;
|
||||
extern std::string_view kNY;
|
||||
|
||||
@@ -115,6 +115,7 @@ copy_resources(
|
||||
colors.txt
|
||||
copyright.html
|
||||
countries.txt
|
||||
countries_meta.txt
|
||||
drules_proto_default_light.bin
|
||||
drules_proto_default_dark.bin
|
||||
drules_proto_outdoors_light.bin
|
||||
|
||||
@@ -20,7 +20,7 @@ MAIN_OUT_PATH: /mnt/4tbexternal/osm-maps
|
||||
# Path to the data/ folder in the repository:
|
||||
USER_RESOURCE_PATH: ${Developer:OMIM_PATH}/data
|
||||
# Features stage only parallelism level. Set to 0 for auto detection.
|
||||
THREADS_COUNT_FEATURES_STAGE: 0
|
||||
THREADS_COUNT_FEATURES_STAGE: 52
|
||||
# Do not change it. This is determined automatically.
|
||||
NODE_STORAGE: mem
|
||||
|
||||
@@ -99,7 +99,7 @@ DIFF_VERSION_DEPTH: 2
|
||||
|
||||
[Common]
|
||||
# Default parallelism level for the most of jobs. Set to 0 for auto detection.
|
||||
THREADS_COUNT: 0
|
||||
THREADS_COUNT: 48
|
||||
|
||||
|
||||
[Stats]
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2711868B2F194FF000FD7FF3 /* feature_region_locator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2711868A2F194FCF00FD7FF3 /* feature_region_locator.hpp */; };
|
||||
2711868D2F194FF600FD7FF3 /* feature_region_locator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2711868C2F194FF400FD7FF3 /* feature_region_locator.cpp */; };
|
||||
272CA4462F126795005A3F5B /* ftypes_subtypes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 272CA4442F126795005A3F5B /* ftypes_subtypes.hpp */; };
|
||||
272CA4472F126795005A3F5B /* ftypes_subtypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 272CA4452F126795005A3F5B /* ftypes_subtypes.cpp */; };
|
||||
272CA44D2F12723B005A3F5B /* subtypes.csv in Resources */ = {isa = PBXBuildFile; fileRef = 272CA44C2F12723B005A3F5B /* subtypes.csv */; };
|
||||
@@ -233,6 +235,8 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2711868A2F194FCF00FD7FF3 /* feature_region_locator.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = feature_region_locator.hpp; sourceTree = "<group>"; };
|
||||
2711868C2F194FF400FD7FF3 /* feature_region_locator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = feature_region_locator.cpp; sourceTree = "<group>"; };
|
||||
272CA4442F126795005A3F5B /* ftypes_subtypes.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ftypes_subtypes.hpp; sourceTree = "<group>"; };
|
||||
272CA4452F126795005A3F5B /* ftypes_subtypes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ftypes_subtypes.cpp; sourceTree = "<group>"; };
|
||||
272CA44C2F12723B005A3F5B /* subtypes.csv */ = {isa = PBXFileReference; lastKnownFileType = text; name = subtypes.csv; path = ../../data/subtypes.csv; sourceTree = "<group>"; };
|
||||
@@ -677,6 +681,8 @@
|
||||
675340C71A3F540F00A0A8C3 /* feature_impl.hpp */,
|
||||
6726C1CF1A49DAAC005EEA39 /* feature_meta.cpp */,
|
||||
6726C1D01A49DAAC005EEA39 /* feature_meta.hpp */,
|
||||
2711868C2F194FF400FD7FF3 /* feature_region_locator.cpp */,
|
||||
2711868A2F194FCF00FD7FF3 /* feature_region_locator.hpp */,
|
||||
675340CC1A3F540F00A0A8C3 /* feature_processor.hpp */,
|
||||
675B562120D25C9800A521D2 /* feature_source.cpp */,
|
||||
675B562220D25C9800A521D2 /* feature_source.hpp */,
|
||||
@@ -794,6 +800,7 @@
|
||||
6753414C1A3F540F00A0A8C3 /* tree_structure.hpp in Headers */,
|
||||
F6DF5F311CD0FD9A00A87154 /* categories_index.hpp in Headers */,
|
||||
40662D32236059BF006A124D /* tree_node.hpp in Headers */,
|
||||
2711868B2F194FF000FD7FF3 /* feature_region_locator.hpp in Headers */,
|
||||
347F337D1C454242009758CC /* succinct_trie_builder.hpp in Headers */,
|
||||
675341381A3F540F00A0A8C3 /* mwm_set.hpp in Headers */,
|
||||
456E1B181F90E5B7009C32E1 /* cities_boundaries_serdes.hpp in Headers */,
|
||||
@@ -945,7 +952,7 @@
|
||||
3496ABA31DC1FA7200C5DDBA /* editor.config in Resources */,
|
||||
3496AB9D1DC1FA5200C5DDBA /* drules_proto_clear.bin in Resources */,
|
||||
3496AB9E1DC1FA5200C5DDBA /* drules_proto_dark.bin in Resources */,
|
||||
272CA44D2F12723B005A3F5B /* subtypes.csv in Resources */,
|
||||
272CA44D2F12723B005A3F5B /* subtypes.csv in Resources */,
|
||||
FA67C84F26BB36D700B33DCA /* categories_brands.txt in Resources */,
|
||||
FA67C84626BB356800B33DCA /* categories_cuisines.txt in Resources */,
|
||||
3496ABA11DC1FA5200C5DDBA /* drules_proto.bin in Resources */,
|
||||
@@ -1041,6 +1048,7 @@
|
||||
272CA4472F126795005A3F5B /* ftypes_subtypes.cpp in Sources */,
|
||||
BBB7060F23E46E0100A7F29A /* isolines_info.cpp in Sources */,
|
||||
408FE47724FEB95600F5D06D /* metadata_serdes.cpp in Sources */,
|
||||
2711868D2F194FF600FD7FF3 /* feature_region_locator.cpp in Sources */,
|
||||
34583BCB1C88552100F94664 /* map_object.cpp in Sources */,
|
||||
675B562320D25C9800A521D2 /* feature_source.cpp in Sources */,
|
||||
6753412E1A3F540F00A0A8C3 /* index_builder.cpp in Sources */,
|
||||
|
||||