mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 14:13:30 -07:00
Merge remote-tracking branch 'upstream/master' into Fix260
This commit is contained in:
commit
6fc723af8d
156 changed files with 3348 additions and 2259 deletions
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -6,36 +6,45 @@ labels: ''
|
|||
assignees: ''
|
||||
|
||||
---
|
||||
<!--Before filing a bug
|
||||
<!--
|
||||
Before filing a bug
|
||||
- Ensure the bug reproduces on the latest version of the app.
|
||||
- Search existing issues and make sure this issue is not already filed.-->
|
||||
- Search existing issues and make sure this issue is not already filed.
|
||||
-->
|
||||
|
||||
**Describe the bug**
|
||||
<!--A clear and concise description of what the bug is.-->
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
**Steps To Reproduce**
|
||||
<!--Steps to reproduce the behavior:
|
||||
<!--
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error-->
|
||||
4. See error
|
||||
-->
|
||||
|
||||
**Expected behavior**
|
||||
<!--A clear and concise description of what you expected to happen.-->
|
||||
<!-- A clear and concise description of what you expected to happen. -->
|
||||
|
||||
**Screenshots**
|
||||
<!--If applicable, add screenshots to help explain your problem.-->
|
||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||
|
||||
**Device and Application Information (please complete the following information):**
|
||||
**Device and Application Information**
|
||||
- OS Build:
|
||||
- Architecture:
|
||||
- Application Version:
|
||||
|
||||
<!--Run the following commands in Powershell and copy/paste the output.
|
||||
- Region:
|
||||
- Dev Version Installed:
|
||||
|
||||
<!--
|
||||
Run the following commands in Powershell and copy/paste the output.
|
||||
" - OS Build: $([Environment]::OSVersion.Version)"
|
||||
" - Architecture: $((Get-AppxPackage -Name Microsoft.WindowsCalculator).Architecture)"
|
||||
" - Application Version: $((Get-AppxPackage -Name Microsoft.WindowsCalculator).Version)"
|
||||
" - Region: $((Get-Culture).Name)"
|
||||
" - Dev Version Installed: $($null -ne (Get-AppxPackage -Name Microsoft.WindowsCalculator.Dev))"
|
||||
-->
|
||||
|
||||
**Additional context**
|
||||
<!--Add any other context about the problem here.-->
|
||||
<!-- Add any other context about the problem here. -->
|
||||
|
|
42
.github/ISSUE_TEMPLATE/feature_request.md
vendored
42
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -2,42 +2,42 @@
|
|||
name: Feature request
|
||||
about: Propose a new feature in the app
|
||||
title: ''
|
||||
labels: ''
|
||||
labels: 'Enhancement'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
|
||||
See https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md for
|
||||
suggestions on how to write a good feature pitch. Just want to submit an idea quickly? Try Feedback
|
||||
Hub instead: https://insider.windows.com/en-us/fb/?contextid=130
|
||||
|
||||
See https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md for suggestions on how to write a good feature pitch. Just want to submit an idea quickly? Try Feedback Hub instead: https://insider.windows.com/en-us/fb/?contextid=130
|
||||
-->
|
||||
|
||||
**Problem Statement**
|
||||
<!-- What problem are we trying to solve? Who’s the target audience? Is there a customer need or
|
||||
pain point we need to remedy? Is there a business goal or metric we are trying to improve? Do we
|
||||
have a hypothesis we want to prove or disprove? -->
|
||||
<!--
|
||||
What problem are we trying to solve? Who’s the target audience? Is there a customer need or pain point we need to remedy? Is there a business goal or metric we are trying to improve? Do we have a hypothesis we want to prove or disprove?
|
||||
-->
|
||||
|
||||
**Evidence or User Insights**
|
||||
<!-- Why should we do this? Potential sources of data: Feedback Hub, other GitHub issues, other
|
||||
anecdotes from listening to customers in person or online, request from another team, telemetry
|
||||
data, user research, market or competitive research -->
|
||||
<!--
|
||||
Why should we do this? Potential sources of data: Feedback Hub, other GitHub issues, other anecdotes from listening to customers in person or online, request from another team, telemetry data, user research, market or competitive research
|
||||
-->
|
||||
|
||||
**Proposal**
|
||||
<!-- How will the solution/feature help us solve the problem? How will it meet the target
|
||||
audience’s needs? If there are business goals or metrics, how does this improve them? -->
|
||||
<!--
|
||||
How will the solution/feature help us solve the problem? How will it meet the target audience’s needs? If there are business goals or metrics, how does this improve them?
|
||||
-->
|
||||
|
||||
**Goals**
|
||||
<!-- What you want to accomplish with this feature. Typical examples include
|
||||
“User Can *perform some task*” -->
|
||||
<!--
|
||||
What you want to accomplish with this feature. Typical examples include
|
||||
"User Can *perform some task*"
|
||||
-->
|
||||
|
||||
**Non-Goals**
|
||||
<!-- Things we are explicitly not doing or supporting or that are out of scope, including reasons
|
||||
why. -->
|
||||
<!--
|
||||
Things we are explicitly not doing or supporting or that are out of scope, including reasons why.
|
||||
-->
|
||||
|
||||
**Low-Fidelity Concept**
|
||||
<!-- Show as much of the experience as needed to explain the idea. This can be as simple as a
|
||||
napkin drawing but can also be a code prototype, a PowerPoint walkthrough, or a design
|
||||
comp. -->
|
||||
<!--
|
||||
Show as much of the experience as needed to explain the idea. This can be as simple as a napkin drawing but can also be a code prototype, or a design comp. Keep it simple at this stage, as it can be refined later during the pre-production stage.
|
||||
-->
|
||||
|
|
54
.github/ISSUE_TEMPLATE/localization_suggestion.md
vendored
Normal file
54
.github/ISSUE_TEMPLATE/localization_suggestion.md
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
name: Localization Suggestion
|
||||
about: Report a problem or suggested change to Calculator's localized content.
|
||||
title: '[Localization] '
|
||||
labels: 'Area: World-Readiness'
|
||||
assignees: ''
|
||||
---
|
||||
<!--
|
||||
PLEASE NOTE:
|
||||
We cannot _merge_ any suggested localization changes to our localized resources files. These files are automatically generated from an internal localization process. Any suggestion submitted this way will be duplicated into our internal localization system, and then closed here.
|
||||
|
||||
Alternatively, you can launch feedback-hub://, click on the "Language Community" tab on the left-side of the app, and follow the steps to submit a localization suggestion that way. (The "Language Community" tab currently will only be visible if your system is running a non-English language).
|
||||
|
||||
Before filing a bug
|
||||
- Ensure the bug reproduces on the latest version of the app.
|
||||
- Search existing issues and make sure this issue is not already filed.
|
||||
-->
|
||||
|
||||
**Describe the bug**
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
**Steps To Reproduce**
|
||||
<!--
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
-->
|
||||
|
||||
**Expected behavior**
|
||||
<!-- A clear and concise description of what you expected to happen. -->
|
||||
|
||||
**Screenshots**
|
||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||
|
||||
**Device and Application Information**
|
||||
- OS Build:
|
||||
- Architecture:
|
||||
- Application Version:
|
||||
- Region:
|
||||
- Dev Version Installed:
|
||||
|
||||
<!--
|
||||
Run the following commands in Powershell and copy/paste the output.
|
||||
" - OS Build: $([Environment]::OSVersion.Version)"
|
||||
" - Architecture: $((Get-AppxPackage -Name Microsoft.WindowsCalculator).Architecture)"
|
||||
" - Application Version: $((Get-AppxPackage -Name Microsoft.WindowsCalculator).Version)"
|
||||
" - Region: $((Get-Culture).Name)"
|
||||
" - Dev Version Installed: $($null -ne (Get-AppxPackage -Name Microsoft.WindowsCalculator.Dev))"
|
||||
-->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context about the problem here. -->
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -290,4 +290,5 @@ __pycache__/
|
|||
# Calculator specific
|
||||
Generated Files/
|
||||
!/build/config/TRexDefs/**
|
||||
!src/Calculator/TemporaryKey.pfx
|
||||
!src/CalculatorUnitTests/CalculatorUnitTests_TemporaryKey.pfx
|
|
@ -3,7 +3,8 @@ The Calculator team encourages community feedback and contributions. Thank you f
|
|||
making Calculator better! There are several ways you can get involved.
|
||||
|
||||
## Reporting issues and suggesting new features
|
||||
If Calculator is not working properly, please file a report in the [Feedback Hub](https://insider.windows.com/en-us/fb/?contextid=130&newFeedback=True).
|
||||
If Calculator is not working properly, please file a report in the
|
||||
[Feedback Hub](https://insider.windows.com/en-us/fb/?contextid=130&newFeedback=True).
|
||||
Feedback Hub reports automatically include diagnostic data, such as the version of Calculator
|
||||
you're using.
|
||||
|
||||
|
@ -17,21 +18,38 @@ all community interactions must abide by the [Code of Conduct](CODE_OF_CONDUCT.m
|
|||
|
||||
## Finding issues you can help with
|
||||
Looking for something to work on?
|
||||
[Issues marked *good first issue*](https://github.com/Microsoft/calculator/labels/good%20first%20issue)
|
||||
Issues marked [``good first issue``](https://github.com/Microsoft/calculator/labels/good%20first%20issue)
|
||||
are a good place to start.
|
||||
|
||||
You can also check [the *help wanted* tag](https://github.com/Microsoft/calculator/labels/help%20wanted)
|
||||
to find other issues to help with.
|
||||
You can also check the [``help wanted``](https://github.com/Microsoft/calculator/labels/help%20wanted) tag to find
|
||||
other issues to help with. If you're interested in working on a fix, leave a comment to let everyone know and to help
|
||||
avoid duplicated effort from others.
|
||||
|
||||
## Contributions we accept
|
||||
We welcome your contributions to the Calculator project, especially to fix bugs and to make
|
||||
improvements which address the top issues reported by Calculator users.
|
||||
improvements which address the top issues reported by Calculator users. Some general guidelines:
|
||||
|
||||
We have a high bar for new features and changes to the user experience. We prefer to evaluate
|
||||
*prototypes* to ensure that the design meets users' needs before we start discussing implementation
|
||||
details and reviewing code. We follow a [user-centered process for developing features](docs/NewFeatureProcess.md).
|
||||
New features need sponsorship from the Calculator team, but we welcome community contributions at
|
||||
many stages of the process.
|
||||
* **DO** create one pull request per Issue, and ensure that the Issue is linked in the pull request.
|
||||
* **DO** follow our [Coding and Style](#style-guidelines) guidelines, and keep code changes as small as possible.
|
||||
* **DO** include corresponding tests whenever possible.
|
||||
* **DO** check for additional occurrences of the same problem in other parts of the codebase before submitting your PR.
|
||||
* **DO** [link the issue](https://github.com/blog/957-introducing-issue-mentions) you are addressing in the
|
||||
pull request.
|
||||
* **DO** write a good description for your pull request. More detail is better. Describe *why* the change is being
|
||||
made and *why* you have chosen a particular solution. Describe any manual testing you performed to validate your change.
|
||||
* **DO NOT** submit a PR unless it is linked to an Issue marked
|
||||
[`triage approved`](https://github.com/Microsoft/calculator/issues?q=is%3Aissue+is%3Aopen+label%3A%22Triage%3A+Approved%22).
|
||||
This enables us to have a discussion on the idea before anyone invests time in an implementation.
|
||||
* **DO NOT** merge multiple changes into one PR unless they have the same root cause.
|
||||
* **DO NOT** submit pure formatting/typo changes to code that has not been modified otherwise.
|
||||
|
||||
We follow a [user-centered process for developing features](docs/NewFeatureProcess.md). New features
|
||||
need sponsorship from the Calculator team, but we welcome community contributions at many stages of
|
||||
the process.
|
||||
|
||||
> Submitting a pull request for an approved Issue is not a guarantee it will be approved.
|
||||
> The change must meet our high bar for code quality, architecture, and performance, as well as
|
||||
> [other requirements](#docs/NewFeatureProcess.md#technical-review).
|
||||
|
||||
## Making changes to the code
|
||||
|
||||
|
@ -41,7 +59,8 @@ To learn how to build the code and run tests, follow the instructions in the [RE
|
|||
### Style guidelines
|
||||
The code in this project uses several different coding styles, depending on the age and history of
|
||||
the code. Please attempt to match the style of surrounding code as much as possible. In new
|
||||
components, prefer the patterns described in the [C++ core guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
|
||||
components, prefer the patterns described in the
|
||||
[C++ core guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
|
||||
and the [modern C++/WinRT language projections](https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/).
|
||||
|
||||
### Testing
|
||||
|
@ -61,18 +80,9 @@ to group your changes into a small number of commits which we can review one at
|
|||
When completing a pull request, we will generally squash your changes into a single commit. Please
|
||||
let us know if your pull request needs to be merged as separate commits.
|
||||
|
||||
## Submitting a pull request and participating in code review
|
||||
Writing a good description for your pull request is crucial to help reviewers and future
|
||||
maintainers understand your change. More detail is better.
|
||||
- [Link the issue you're addressing in the pull request](https://github.com/blog/957-introducing-issue-mentions).
|
||||
- Describe *why* the change is being made and *why* you've chosen a particular solution.
|
||||
- Describe any manual testing you performed to validate your change.
|
||||
|
||||
Please submit one pull request per issue. Large pull requests which have unrelated changes can be
|
||||
difficult to review.
|
||||
|
||||
## Review Process
|
||||
After submitting a pull request, members of the calculator team will review your code. We will
|
||||
assign the request to an appropriate reviewer within two days. Any member of the community may
|
||||
assign the request to an appropriate reviewer. Any member of the community may
|
||||
participate in the review, but at least one member of the Calculator team will ultimately approve
|
||||
the request.
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ Calculator ships regularly with new features and bug fixes. You can get the late
|
|||
- Standard Calculator functionality which offers basic operations and evaluates commands immediately as they are entered.
|
||||
- Scientific Calculator functionality which offers expanded operations and evaluates commands using order of operations.
|
||||
- Programmer Calculator functionality which offers common mathematical operations for developers including conversion between common bases.
|
||||
- Date Calculation functionality which offers the difference between two dates, as well as the ability to add/subtract years, months and/or days to/from a given input date.
|
||||
- Calculation history and memory capabilities.
|
||||
- Conversion between many units of measurement.
|
||||
- Currency conversion based on data retrieved from [Bing](https://www.bing.com).
|
||||
|
|
|
@ -15,30 +15,33 @@ name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
|
|||
jobs:
|
||||
- job: Localize
|
||||
pool:
|
||||
name: Package ES Custom Demands Lab A
|
||||
demands:
|
||||
- ClientAlias -equals PKGESUTILAPPS
|
||||
workspace:
|
||||
clean: outputs
|
||||
vmImage: vs2017-win2016
|
||||
variables:
|
||||
skipComponentGovernanceDetection: true
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
||||
- task: PkgESSetupBuild@10
|
||||
displayName: Initialize Package ES
|
||||
- task: MicrosoftTDBuild.tdbuild-task.tdbuild-task.TouchdownBuildTask@1
|
||||
displayName: Send resources to Touchdown Build
|
||||
inputs:
|
||||
productName: Calculator
|
||||
branchVersion: true
|
||||
teamId: 86
|
||||
authId: d3dd8113-65b3-4526-bdca-a00a7d1c37ba
|
||||
authKey: $(LocServiceKey)
|
||||
isPreview: false
|
||||
relativePathRoot: src/Calculator/Resources/en-US/
|
||||
resourceFilePath: '*.resw'
|
||||
outputDirectoryRoot: src/Calculator/Resources/
|
||||
|
||||
- task: PkgESTouchdownLocService@10
|
||||
displayName: Package ES Touchdown Loc Service
|
||||
- script: |
|
||||
cd $(Build.SourcesDirectory)
|
||||
git add -A
|
||||
git diff --cached --exit-code
|
||||
echo ##vso[task.setvariable variable=hasChanges]%errorlevel%
|
||||
git diff --cached > $(Build.ArtifactStagingDirectory)\LocalizedStrings.patch
|
||||
displayName: Check for changes and create patch file
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: Publish patch file as artifact
|
||||
condition: eq(variables['hasChanges'], '1')
|
||||
inputs:
|
||||
IsCallToServiceStepSelected: true
|
||||
IsCheckedInFileSelected: true
|
||||
CheckinFilesAtOriginFilePath: true
|
||||
GitLocPath: Loc/Resources
|
||||
LocConfigFile: build/config/LocConfigPackageEs.xml
|
||||
AuthenticationMode: OAuth
|
||||
ClientApplicationID: d3dd8113-65b3-4526-bdca-a00a7d1c37ba
|
||||
ApplicationKeyID: $(LocServiceKey)
|
||||
SendToLoc: true
|
||||
artifactName: Patch
|
||||
targetPath: $(Build.ArtifactStagingDirectory)
|
|
@ -9,8 +9,8 @@ pr: none
|
|||
|
||||
variables:
|
||||
versionMajor: 10
|
||||
versionMinor: 1902
|
||||
versionBuild: $[counter('10.1902.*', 0)]
|
||||
versionMinor: 1904
|
||||
versionBuild: $[counter('10.1904.*', 0)]
|
||||
versionPatch: 0
|
||||
|
||||
name: '$(versionMajor).$(versionMinor).$(versionBuild).$(versionPatch)'
|
||||
|
|
|
@ -29,7 +29,7 @@ jobs:
|
|||
downloadDirectory: $(Build.SourcesDirectory)
|
||||
vstsFeed: WindowsApps
|
||||
vstsFeedPackage: calculator-internals
|
||||
vstsPackageVersion: 0.0.7
|
||||
vstsPackageVersion: 0.0.10
|
||||
|
||||
- template: ./build-single-architecture.yaml
|
||||
parameters:
|
||||
|
|
|
@ -20,6 +20,8 @@ jobs:
|
|||
vmImage: vs2017-win2016
|
||||
workspace:
|
||||
clean: outputs
|
||||
variables:
|
||||
skipComponentGovernanceDetection: true
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
|
|
@ -17,6 +17,8 @@ jobs:
|
|||
name: Package ES Lab E
|
||||
workspace:
|
||||
clean: outputs
|
||||
variables:
|
||||
skipComponentGovernanceDetection: true
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
|
@ -87,7 +89,7 @@ jobs:
|
|||
downloadDirectory: $(Build.SourcesDirectory)
|
||||
vstsFeed: WindowsApps
|
||||
vstsFeedPackage: calculator-internals
|
||||
vstsPackageVersion: 0.0.7
|
||||
vstsPackageVersion: 0.0.10
|
||||
|
||||
- task: PkgESStoreBrokerPackage@10
|
||||
displayName: Create StoreBroker Packages
|
||||
|
|
|
@ -14,6 +14,8 @@ jobs:
|
|||
name: Essential Experiences Interactive
|
||||
workspace:
|
||||
clean: outputs
|
||||
variables:
|
||||
skipComponentGovernanceDetection: true
|
||||
steps:
|
||||
- checkout: none
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# New feature process
|
||||
|
||||
## Where do I submit my idea for a new feature?
|
||||
The easiest way to submit new feature requests is through [Feedback Hub](https://insider.windows.com/en-us/fb/?contextid=130).
|
||||
The easiest way to submit new feature requests is through
|
||||
[Feedback Hub](https://insider.windows.com/en-us/fb/?contextid=130).
|
||||
In Feedback Hub, any Windows user (even if they aren't on GitHub) can upvote suggestions. The
|
||||
Calculator team reviews these suggestions regularly, and when we're ready to work on an idea we
|
||||
create [feature pitch issues here on GitHub](https://github.com/Microsoft/calculator/issues?q=is%3Aissue+is%3Aopen+project%3AMicrosoft%2Fcalculator%2F1).
|
||||
|
@ -12,73 +13,45 @@ product. The [Feature Tracking board](https://github.com/Microsoft/calculator/pr
|
|||
all the features we're working on and where they're at in the process.
|
||||
|
||||
## Do I need to follow this process? Can I just start coding and submit a PR?
|
||||
You *do not* need to follow this process for bug fixes, performance improvements, or changes to the
|
||||
development tools. To contribute these changes, [discuss the proposed change in an issue](https://github.com/Microsoft/calculator/issues/new)
|
||||
You **do not** need to follow this process for bug fixes, performance improvements, or changes to the
|
||||
development tools. To contribute these changes,
|
||||
[discuss the proposed change in an issue](https://github.com/Microsoft/calculator/issues/new)
|
||||
and then submit a pull request.
|
||||
|
||||
You *do* need to follow this process for any change which "users will notice". This applies
|
||||
You **do** need to follow this process for any change which "users will notice". This applies
|
||||
especially to new features and major visual changes.
|
||||
|
||||
## Step 1: Feature pitch
|
||||
The feature pitch concisely describes a point of view on the problem the new feature should solve.
|
||||
It will typically include these sections:
|
||||
Feature pitches are submitted as issues on GitHub using the
|
||||
[Feature Request template](https://github.com/Microsoft/calculator/issues/new?assignees=&labels=&template=feature_request.md&title=).
|
||||
We encourage discussion on open issues, and as discussion progresses we will edit the issue description to refine the
|
||||
idea until it is ready for review.
|
||||
|
||||
* **Problem Statement**: What problem are we trying to solve? Who’s the target audience? Is there a
|
||||
customer need or pain point we need to remedy? Is there a business goal or metric we are trying
|
||||
to improve? Do we have a hypothesis we want to prove or disprove?
|
||||
* **Evidence or User Insights**: Why should we do this? Potential sources of data: Feedback Hub,
|
||||
other GitHub issues, other anecdotes from listening to customers in person or online, request
|
||||
from another team, telemetry data, user research, market or competitive research
|
||||
* **Proposal**: How will the solution/feature help us solve the problem? How will it meet the
|
||||
target audience’s needs? If there are business goals or metrics, how does this improve them?
|
||||
* **Goals**: What you want to accomplish with this feature. Typical examples include “User Can
|
||||
*perform some task*”
|
||||
* **Non-Goals**: Things we are explicitly not doing or supporting or that are out of scope,
|
||||
including reasons why.
|
||||
* **Low-Fidelity Concept**: Show as much of the experience as needed to explain the idea. This
|
||||
can be as simple as a napkin drawing but can also be a code prototype, a PowerPoint walkthrough,
|
||||
or a design comp.
|
||||
|
||||
The low-fidelity concept should be kept simple at this stage and refined during the pre-production
|
||||
process.
|
||||
|
||||
Feature pitches are submitted as issues on GitHub. We encourage discussion on open issues, and as
|
||||
discussion progresses we will edit the issue description to refine the idea.
|
||||
We review pitches regularly, and will approve or close issues based on whether they broadly align with the
|
||||
[Calculator roadmap](https://github.com/Microsoft/calculator/blob/master/docs/Roadmap.md). Approved pitches are moved
|
||||
into [pre-production](https://github.com/Microsoft/calculator/projects/1) on the feature tracking board.
|
||||
|
||||
## Step 2: Pre-production
|
||||
In the pre-production phase, we experiment with a variety of ways to address the goals described in
|
||||
the feature pitch. The output of this phase is a specification which demonstrates how the feature
|
||||
will work, supported by design renderings and code prototypes as needed. Sometimes we'll learn new
|
||||
things about a feature proposal during pre-production, and we'll edit or close the original pitch.
|
||||
For most features, the output of this phase is a specification which describes how the feature will work, supported by
|
||||
design renderings and code prototypes as needed. The original issue will continue to track the overall progress of the
|
||||
feature, but we will create and iterate on spec documentation in the
|
||||
[Calculator Spec repo](https://github.com/Microsoft/calculator-specs). Sometimes we'll learn new things about a feature
|
||||
proposal during pre-production, and we'll edit or close the original pitch.
|
||||
|
||||
We welcome community participation in the pre-production process. The GitHub issue will be the
|
||||
primary place to share progress updates.
|
||||
|
||||
The best ideas often come from trying many ideas during the pre-production phase. To enable rapid
|
||||
We welcome community participation throughout pre-production. The best ideas often come from trying many ideas during
|
||||
the pre-production phase. To enable rapid
|
||||
experimentation, we encourage developing and sharing rough ideas—maybe even with pencil and
|
||||
paper—before making designs pixel-perfect or making code robust and maintainable.
|
||||
|
||||
### Spec review
|
||||
Once there is a high-fidelity design which addresses the goals described in the original pitch, the
|
||||
Microsoft product team will review the prototype and ensure all items on this checklist are
|
||||
addressed:
|
||||
|
||||
- [ ] Is there a high-fidelity design which gives reviewers a clear idea of how the feature will
|
||||
look and function when implemented?
|
||||
- [ ] Has the plan been shared with the community (documented on the wiki and updates posted in the
|
||||
original issue) and have others been given an opportunity to provide suggestions?
|
||||
- [ ] Are [Fluent design principles](https://docs.microsoft.com/en-us/windows/uwp/design/fluent-design-system/)
|
||||
followed? If we do something which deviates from the guidelines, do we have a good reason?
|
||||
- [ ] Does the design include provisions for [all users](https://docs.microsoft.com/en-us/windows/uwp/design/accessibility/designing-inclusive-software)
|
||||
and [all cultures](https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/guidelines-and-checklist-for-globalizing-your-app)?
|
||||
- [ ] Is it technically feasible to build this feature? Take a look at the "before committing"
|
||||
checklist below and identify any issues which are likely to be blockers.
|
||||
After the [spec review](https://github.com/Microsoft/calculator-specs#spec-review) is completed, we will move the issue
|
||||
into [production](https://github.com/Microsoft/calculator/projects/1) on the feature tracking board. In _some_ cases,
|
||||
all of the details of an idea can be captured concisely in original feature pitch. When that happens, we may move ideas
|
||||
directly into production.
|
||||
|
||||
## Step 3: Production
|
||||
A feature can be implemented by the original proposer, a Microsoft team member, or by other
|
||||
community members. Code contributions and testing help are greatly appreciated. Please let us know
|
||||
in the issue comments if you're actively working on a feature so we can ensure it's assigned to
|
||||
you.
|
||||
A feature can be implemented by the original submitter, a Microsoft team member, or by other
|
||||
community members. Code contributions and testing help are greatly appreciated. Please let everyone know if you're
|
||||
actively working on a feature to help avoid duplicated efforts from others.
|
||||
|
||||
You might be able to reuse code written during the prototype process, although there will typically
|
||||
be more work required to make the solution robust. Once the code is ready, you can begin
|
||||
|
@ -122,7 +95,8 @@ new features, the Microsoft team considers at least these items:
|
|||
- [ ] Run the perf tests to measure any increase in startup time. Move work out of the startup
|
||||
path if possible.
|
||||
- [ ] If the change adds additional logging:
|
||||
- [ ] All logging should use [TraceLogging](https://docs.microsoft.com/en-us/windows/desktop/tracelogging/trace-logging-about).
|
||||
- [ ] All logging should use
|
||||
[TraceLogging](https://docs.microsoft.com/en-us/windows/desktop/tracelogging/trace-logging-about).
|
||||
- [ ] Unnecessary log events should be removed, or configured so that they are collected only when
|
||||
needed to debug issues or measure feature usage.
|
||||
- [ ] If the change reads user data from files or app settings:
|
||||
|
|
|
@ -9,6 +9,7 @@ In 2019, the Windows Calculator team is focused on:
|
|||
* Iterating upon the existing app design based on the latest [Fluent Design guidelines](https://developer.microsoft.com/en-us/windows/apps/design)
|
||||
* Improving testing and diagnostics within the project
|
||||
* Investigating new features with a focus on addressing top user feedback, including:
|
||||
* Adding graphing mode
|
||||
* Adding the ability for users to pin Calculator on top of other windows
|
||||
* Providing additional customization options
|
||||
* [Your feature idea here] - please review our [new feature development process](https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md) to get started!
|
||||
|
|
|
@ -56,7 +56,7 @@ bool CalcInput::TryToggleSign(bool isIntegerMode, wstring_view maxNumStr)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CalcInput::TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMode, wstring_view maxNumStr, long wordBitWidth, int maxDigits)
|
||||
bool CalcInput::TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMode, wstring_view maxNumStr, int32_t wordBitWidth, int maxDigits)
|
||||
{
|
||||
// Convert from an integer into a character
|
||||
// This includes both normal digits and alpha 'digits' for radixes > 10
|
||||
|
|
|
@ -5,24 +5,24 @@
|
|||
#include "Header Files/CalcEngine.h"
|
||||
#include "Header Files/CalcUtils.h"
|
||||
|
||||
bool IsOpInRange(WPARAM op, uint32_t x, uint32_t y)
|
||||
bool IsOpInRange(OpCode op, uint32_t x, uint32_t y)
|
||||
{
|
||||
return ((op >= x) && (op <= y));
|
||||
}
|
||||
|
||||
bool IsBinOpCode(WPARAM opCode)
|
||||
bool IsBinOpCode(OpCode opCode)
|
||||
{
|
||||
return IsOpInRange(opCode, IDC_AND, IDC_PWR);
|
||||
}
|
||||
|
||||
// WARNING: IDC_SIGN is a special unary op but still this doesn't catch this. Caller has to be aware
|
||||
// of it and catch it themselves or not needing this
|
||||
bool IsUnaryOpCode(WPARAM opCode)
|
||||
bool IsUnaryOpCode(OpCode opCode)
|
||||
{
|
||||
return IsOpInRange(opCode, IDC_UNARYFIRST, IDC_UNARYLAST);
|
||||
}
|
||||
|
||||
bool IsDigitOpCode(WPARAM opCode)
|
||||
bool IsDigitOpCode(OpCode opCode)
|
||||
{
|
||||
return IsOpInRange(opCode, IDC_0, IDC_F);
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ bool IsDigitOpCode(WPARAM opCode)
|
|||
// so we abstract this as a separate routine. Note: There is another side to this. Some commands are not
|
||||
// gui mode setting to begin with, but once it is discovered it is invalid and we want to behave as though it
|
||||
// was never inout, we need to revert the state changes made as a result of this test
|
||||
bool IsGuiSettingOpCode(WPARAM opCode)
|
||||
bool IsGuiSettingOpCode(OpCode opCode)
|
||||
{
|
||||
if (IsOpInRange(opCode, IDM_HEX, IDM_BIN) ||
|
||||
IsOpInRange(opCode, IDM_QWORD, IDM_BYTE) ||
|
||||
|
|
|
@ -13,7 +13,7 @@ using namespace std;
|
|||
using namespace CalcEngine;
|
||||
|
||||
namespace {
|
||||
void IFT(HRESULT hr)
|
||||
void IFT(ResultCode hr)
|
||||
{
|
||||
if (FAILED(hr))
|
||||
{
|
||||
|
|
|
@ -28,10 +28,10 @@ namespace CalcEngine
|
|||
|
||||
PNUMBER Number::ToPNUMBER() const
|
||||
{
|
||||
PNUMBER ret = _createnum(static_cast<ULONG>(this->Mantissa().size()) + 1);
|
||||
PNUMBER ret = _createnum(static_cast<uint32_t>(this->Mantissa().size()) + 1);
|
||||
ret->sign = this->Sign();
|
||||
ret->exp = this->Exp();
|
||||
ret->cdigit = static_cast<long>(this->Mantissa().size());
|
||||
ret->cdigit = static_cast<int32_t>(this->Mantissa().size());
|
||||
|
||||
MANTTYPE *ptrRet = ret->mant;
|
||||
for (auto const& digit : this->Mantissa())
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace CalcEngine
|
|||
|
||||
Rational::Rational(int32_t i)
|
||||
{
|
||||
PRAT pr = longtorat(static_cast<long>(i));
|
||||
PRAT pr = i32torat(static_cast<int32_t>(i));
|
||||
|
||||
m_p = Number{ pr->pp };
|
||||
m_q = Number{ pr->pq };
|
||||
|
@ -41,7 +41,7 @@ namespace CalcEngine
|
|||
|
||||
Rational::Rational(uint32_t ui)
|
||||
{
|
||||
PRAT pr = Ulongtorat(static_cast<unsigned long>(ui));
|
||||
PRAT pr = Ui32torat(static_cast<uint32_t>(ui));
|
||||
|
||||
m_p = Number{ pr->pp };
|
||||
m_q = Number{ pr->pq };
|
||||
|
@ -100,7 +100,7 @@ namespace CalcEngine
|
|||
addrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -123,7 +123,7 @@ namespace CalcEngine
|
|||
subrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -146,7 +146,7 @@ namespace CalcEngine
|
|||
mulrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -169,7 +169,7 @@ namespace CalcEngine
|
|||
divrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -192,7 +192,7 @@ namespace CalcEngine
|
|||
modrat(&lhsRat, rhsRat);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -215,7 +215,7 @@ namespace CalcEngine
|
|||
lshrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -238,7 +238,7 @@ namespace CalcEngine
|
|||
rshrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -261,7 +261,7 @@ namespace CalcEngine
|
|||
andrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -283,7 +283,7 @@ namespace CalcEngine
|
|||
orrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -305,7 +305,7 @@ namespace CalcEngine
|
|||
xorrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(rhsRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -388,7 +388,7 @@ namespace CalcEngine
|
|||
{
|
||||
result = rat_equ(lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -416,7 +416,7 @@ namespace CalcEngine
|
|||
{
|
||||
result = rat_lt(lhsRat, rhsRat, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(lhsRat);
|
||||
destroyrat(rhsRat);
|
||||
|
@ -453,7 +453,7 @@ namespace CalcEngine
|
|||
{
|
||||
result = RatToString(rat, fmt, radix, precision);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(rat);
|
||||
throw(error);
|
||||
|
@ -470,9 +470,9 @@ namespace CalcEngine
|
|||
uint64_t result;
|
||||
try
|
||||
{
|
||||
result = rattoUlonglong(rat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
result = rattoUi64(rat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(rat);
|
||||
throw(error);
|
||||
|
|
|
@ -14,7 +14,7 @@ Rational RationalMath::Frac(Rational const& rat)
|
|||
{
|
||||
fracrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -33,7 +33,7 @@ Rational RationalMath::Integer(Rational const& rat)
|
|||
{
|
||||
intrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -55,7 +55,7 @@ Rational RationalMath::Pow(Rational const& base, Rational const& pow)
|
|||
powrat(&baseRat, powRat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
destroyrat(powRat);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(baseRat);
|
||||
destroyrat(powRat);
|
||||
|
@ -81,7 +81,7 @@ Rational RationalMath::Fact(Rational const& rat)
|
|||
{
|
||||
factrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -101,7 +101,7 @@ Rational RationalMath::Exp(Rational const& rat)
|
|||
{
|
||||
exprat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -121,7 +121,7 @@ Rational RationalMath::Log(Rational const& rat)
|
|||
{
|
||||
lograt(&prat, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -156,7 +156,7 @@ Rational RationalMath::Sin(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
sinanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -176,7 +176,7 @@ Rational RationalMath::Cos(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
cosanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -196,7 +196,7 @@ Rational RationalMath::Tan(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
tananglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -216,7 +216,7 @@ Rational RationalMath::ASin(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
asinanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -236,7 +236,7 @@ Rational RationalMath::ACos(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
acosanglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -256,7 +256,7 @@ Rational RationalMath::ATan(Rational const& rat, ANGLE_TYPE angletype)
|
|||
{
|
||||
atananglerat(&prat, angletype, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -276,7 +276,7 @@ Rational RationalMath::Sinh(Rational const& rat)
|
|||
{
|
||||
sinhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -296,7 +296,7 @@ Rational RationalMath::Cosh(Rational const& rat)
|
|||
{
|
||||
coshrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -316,7 +316,7 @@ Rational RationalMath::Tanh(Rational const& rat)
|
|||
{
|
||||
tanhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -336,7 +336,7 @@ Rational RationalMath::ASinh(Rational const& rat)
|
|||
{
|
||||
asinhrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -356,7 +356,7 @@ Rational RationalMath::ACosh(Rational const& rat)
|
|||
{
|
||||
acoshrat(&prat, RATIONAL_BASE, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
@ -376,7 +376,7 @@ Rational RationalMath::ATanh(Rational const& rat)
|
|||
{
|
||||
atanhrat(&prat, RATIONAL_PRECISION);
|
||||
}
|
||||
catch (DWORD error)
|
||||
catch (uint32_t error)
|
||||
{
|
||||
destroyrat(prat);
|
||||
throw(error);
|
||||
|
|
|
@ -15,7 +15,7 @@ using namespace CalcEngine;
|
|||
|
||||
static constexpr int DEFAULT_MAX_DIGITS = 32;
|
||||
static constexpr int DEFAULT_PRECISION = 32;
|
||||
static constexpr long DEFAULT_RADIX = 10;
|
||||
static constexpr int32_t DEFAULT_RADIX = 10;
|
||||
|
||||
static constexpr wchar_t DEFAULT_DEC_SEPARATOR = L'.';
|
||||
static constexpr wchar_t DEFAULT_GRP_SEPARATOR = L',';
|
||||
|
@ -25,13 +25,18 @@ static constexpr wstring_view DEFAULT_NUMBER_STR = L"0";
|
|||
// Read strings for keys, errors, trig types, etc.
|
||||
// These will be copied from the resources to local memory.
|
||||
|
||||
array<wstring, CSTRINGSENGMAX> CCalcEngine::s_engineStrings;
|
||||
unordered_map<wstring, wstring> CCalcEngine::s_engineStrings;
|
||||
|
||||
void CCalcEngine::LoadEngineStrings(CalculationManager::IResourceProvider& resourceProvider)
|
||||
{
|
||||
for (size_t i = 0; i < s_engineStrings.size(); i++)
|
||||
for (const auto& sid : g_sids)
|
||||
{
|
||||
s_engineStrings[i] = resourceProvider.GetCEngineString(g_sids[i]);
|
||||
auto locKey = wstring{ sid };
|
||||
auto locString = resourceProvider.GetCEngineString(locKey);
|
||||
if (!locString.empty())
|
||||
{
|
||||
s_engineStrings[locKey] = locString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -168,7 +173,7 @@ void CCalcEngine::SettingsChanged()
|
|||
m_HistoryCollector.SetDecimalSymbol(m_decimalSeparator);
|
||||
|
||||
// put the new decimal symbol into the table used to draw the decimal key
|
||||
s_engineStrings[IDS_DECIMAL] = m_decimalSeparator;
|
||||
s_engineStrings[SIDS_DECIMAL_SEPARATOR] = m_decimalSeparator;
|
||||
|
||||
// we need to redraw to update the decimal point button
|
||||
numChanged = true;
|
||||
|
|
|
@ -16,13 +16,6 @@
|
|||
#include "Header Files/CalcEngine.h"
|
||||
#include "Header Files/CalcUtils.h"
|
||||
|
||||
#define IDC_RADSIN IDC_UNARYLAST+1
|
||||
#define IDC_RADCOS IDC_UNARYLAST+2
|
||||
#define IDC_RADTAN IDC_UNARYLAST+3
|
||||
#define IDC_GRADSIN IDC_UNARYLAST+4
|
||||
#define IDC_GRADCOS IDC_UNARYLAST+5
|
||||
#define IDC_GRADTAN IDC_UNARYLAST+6
|
||||
|
||||
using namespace std;
|
||||
using namespace CalcEngine;
|
||||
|
||||
|
@ -31,9 +24,9 @@ namespace {
|
|||
//
|
||||
// returns a virtual number for precedence for the operator. We expect binary operator only, otherwise the lowest number
|
||||
// 0 is returned. Higher the number, higher the precedence of the operator.
|
||||
INT NPrecedenceOfOp(int nopCode)
|
||||
int NPrecedenceOfOp(int nopCode)
|
||||
{
|
||||
static BYTE rgbPrec[] = { 0,0, IDC_OR,0, IDC_XOR,0, IDC_AND,1,
|
||||
static uint8_t rgbPrec[] = { 0,0, IDC_OR,0, IDC_XOR,0, IDC_AND,1,
|
||||
IDC_ADD,2, IDC_SUB,2, IDC_RSHF,3, IDC_LSHF,3,
|
||||
IDC_MOD,3, IDC_DIV,3, IDC_MUL,3, IDC_PWR,4, IDC_ROOT, 4 };
|
||||
unsigned int iPrec;
|
||||
|
@ -56,7 +49,7 @@ namespace {
|
|||
//
|
||||
// When it is discovered by the state machine that at this point the input is not valid (eg. "1+)"), we want to proceed as though this input never
|
||||
// occurred and may be some feedback to user like Beep. The rest of input can then continue by just ignoring this command.
|
||||
void CCalcEngine::HandleErrorCommand(WPARAM idc)
|
||||
void CCalcEngine::HandleErrorCommand(OpCode idc)
|
||||
{
|
||||
if (!IsGuiSettingOpCode(idc))
|
||||
{
|
||||
|
@ -83,7 +76,7 @@ void CCalcEngine::ClearTemporaryValues()
|
|||
m_bError = false;
|
||||
}
|
||||
|
||||
void CCalcEngine::ProcessCommand(WPARAM wParam)
|
||||
void CCalcEngine::ProcessCommand(OpCode wParam)
|
||||
{
|
||||
if (wParam == IDC_SET_RESULT)
|
||||
{
|
||||
|
@ -94,9 +87,9 @@ void CCalcEngine::ProcessCommand(WPARAM wParam)
|
|||
ProcessCommandWorker(wParam);
|
||||
}
|
||||
|
||||
void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
||||
void CCalcEngine::ProcessCommandWorker(OpCode wParam)
|
||||
{
|
||||
INT nx, ni;
|
||||
int nx, ni;
|
||||
|
||||
// Save the last command. Some commands are not saved in this manor, these
|
||||
// commands are:
|
||||
|
@ -107,7 +100,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
if (!IsGuiSettingOpCode(wParam))
|
||||
{
|
||||
m_nLastCom = m_nTempCom;
|
||||
m_nTempCom = (INT)wParam;
|
||||
m_nTempCom = (int)wParam;
|
||||
}
|
||||
|
||||
if (m_bError)
|
||||
|
@ -185,10 +178,10 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
// Change the operation if last input was operation.
|
||||
if (IsBinOpCode(m_nLastCom))
|
||||
{
|
||||
INT nPrev;
|
||||
int nPrev;
|
||||
bool fPrecInvToHigher = false; // Is Precedence Inversion from lower to higher precedence happening ??
|
||||
|
||||
m_nOpCode = (INT)wParam;
|
||||
m_nOpCode = (int)wParam;
|
||||
|
||||
// Check to see if by changing this binop, a Precedence inversion is happening.
|
||||
// Eg. 1 * 2 + and + is getting changed to ^. The previous precedence rules would have already computed
|
||||
|
@ -285,7 +278,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
DisplayAnnounceBinaryOperator();
|
||||
|
||||
m_lastVal = m_currentVal;
|
||||
m_nOpCode = (INT)wParam;
|
||||
m_nOpCode = (int)wParam;
|
||||
m_HistoryCollector.AddBinOpToHistory(m_nOpCode);
|
||||
m_bNoPrevEqu = m_bChangeOp = true;
|
||||
return;
|
||||
|
@ -313,7 +306,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal);
|
||||
}
|
||||
|
||||
m_HistoryCollector.AddUnaryOpToHistory((INT)wParam, m_bInv, m_angletype);
|
||||
m_HistoryCollector.AddUnaryOpToHistory((int)wParam, m_bInv, m_angletype);
|
||||
}
|
||||
|
||||
if ((wParam == IDC_SIN) || (wParam == IDC_COS) || (wParam == IDC_TAN) || (wParam == IDC_SINH) || (wParam == IDC_COSH) || (wParam == IDC_TANH))
|
||||
|
@ -326,7 +319,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
}
|
||||
}
|
||||
|
||||
m_currentVal = SciCalcFunctions(m_currentVal, (DWORD)wParam);
|
||||
m_currentVal = SciCalcFunctions(m_currentVal, (uint32_t)wParam);
|
||||
|
||||
if (m_bError)
|
||||
return;
|
||||
|
@ -366,7 +359,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
|
||||
CheckAndAddLastBinOpToHistory();
|
||||
|
||||
if (TryToggleBit(m_currentVal, (DWORD)wParam - IDC_BINEDITSTART))
|
||||
if (TryToggleBit(m_currentVal, (uint32_t)wParam - IDC_BINEDITSTART))
|
||||
{
|
||||
DisplayNum();
|
||||
}
|
||||
|
@ -442,7 +435,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
m_nTempCom = m_nLastCom; // Put back this last saved command to the prev state so ) can be handled properly
|
||||
ProcessCommand(IDC_CLOSEP);
|
||||
m_nLastCom = m_nTempCom; // Actually this is IDC_CLOSEP
|
||||
m_nTempCom = (INT)wParam; // put back in the state where last op seen was IDC_CLOSEP, and current op is IDC_EQU
|
||||
m_nTempCom = (int)wParam; // put back in the state where last op seen was IDC_CLOSEP, and current op is IDC_EQU
|
||||
}
|
||||
|
||||
if (!m_bNoPrevEqu)
|
||||
|
@ -463,45 +456,12 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal);
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
if (m_nOpCode) /* Is there a valid operation around? */
|
||||
{
|
||||
/* If this is the first EQU in a string, set m_holdVal=m_currentVal */
|
||||
/* Otherwise let m_currentVal=m_holdVal. This keeps m_currentVal constant */
|
||||
/* through all EQUs in a row. */
|
||||
if (m_bNoPrevEqu)
|
||||
{
|
||||
m_holdVal = m_currentVal;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_currentVal = m_holdVal;
|
||||
DisplayNum(); // to update the m_numberString
|
||||
m_HistoryCollector.AddBinOpToHistory(m_nOpCode, false);
|
||||
m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal); // Adding the repeated last op to history
|
||||
}
|
||||
|
||||
// Do the current or last operation.
|
||||
m_currentVal = DoOperation(m_nOpCode, m_currentVal, m_lastVal);
|
||||
m_nPrevOpCode = m_nOpCode;
|
||||
m_lastVal = m_currentVal;
|
||||
|
||||
/* Check for errors. If this wasn't done, DisplayNum */
|
||||
/* would immediately overwrite any error message. */
|
||||
if (!m_bError)
|
||||
DisplayNum();
|
||||
|
||||
/* No longer the first EQU. */
|
||||
m_bNoPrevEqu = false;
|
||||
}
|
||||
else if (!m_bError)
|
||||
DisplayNum();
|
||||
|
||||
if (m_precedenceOpCount == 0 || !m_fPrecedence)
|
||||
break;
|
||||
|
||||
m_nOpCode = m_nPrecOp[--m_precedenceOpCount];
|
||||
// Evaluate the precedence stack.
|
||||
ResolveHighestPrecedenceOperation();
|
||||
while (m_fPrecedence && m_precedenceOpCount > 0)
|
||||
{
|
||||
m_precedenceOpCount--;
|
||||
m_nOpCode = m_nPrecOp[m_precedenceOpCount];
|
||||
m_lastVal = m_precedenceVals[m_precedenceOpCount];
|
||||
|
||||
// Precedence Inversion check
|
||||
|
@ -514,7 +474,9 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
m_HistoryCollector.PopLastOpndStart();
|
||||
|
||||
m_bNoPrevEqu = true;
|
||||
} while (m_precedenceOpCount >= 0);
|
||||
|
||||
ResolveHighestPrecedenceOperation();
|
||||
}
|
||||
|
||||
if (!m_bError)
|
||||
{
|
||||
|
@ -789,6 +751,48 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
|
|||
|
||||
}
|
||||
|
||||
// Helper function to resolve one item on the precedence stack.
|
||||
void CCalcEngine::ResolveHighestPrecedenceOperation()
|
||||
{
|
||||
// Is there a valid operation around?
|
||||
if (m_nOpCode)
|
||||
{
|
||||
// If this is the first EQU in a string, set m_holdVal=m_currentVal
|
||||
// Otherwise let m_currentVal=m_holdVal. This keeps m_currentVal constant
|
||||
// through all EQUs in a row.
|
||||
if (m_bNoPrevEqu)
|
||||
{
|
||||
m_holdVal = m_currentVal;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_currentVal = m_holdVal;
|
||||
DisplayNum(); // to update the m_numberString
|
||||
m_HistoryCollector.AddBinOpToHistory(m_nOpCode, false);
|
||||
m_HistoryCollector.AddOpndToHistory(m_numberString, m_currentVal); // Adding the repeated last op to history
|
||||
}
|
||||
|
||||
// Do the current or last operation.
|
||||
m_currentVal = DoOperation(m_nOpCode, m_currentVal, m_lastVal);
|
||||
m_nPrevOpCode = m_nOpCode;
|
||||
m_lastVal = m_currentVal;
|
||||
|
||||
// Check for errors. If this wasn't done, DisplayNum
|
||||
// would immediately overwrite any error message.
|
||||
if (!m_bError)
|
||||
{
|
||||
DisplayNum();
|
||||
}
|
||||
|
||||
// No longer the first EQU.
|
||||
m_bNoPrevEqu = false;
|
||||
}
|
||||
else if (!m_bError)
|
||||
{
|
||||
DisplayNum();
|
||||
}
|
||||
}
|
||||
|
||||
// CheckAndAddLastBinOpToHistory
|
||||
//
|
||||
// This is a very confusing helper routine to add the last entered binary operator to the history. This is expected to
|
||||
|
@ -857,155 +861,94 @@ void CCalcEngine::DisplayAnnounceBinaryOperator()
|
|||
// Unary operator Function Name table Element
|
||||
// since unary operators button names aren't exactly friendly for history purpose,
|
||||
// we have this separate table to get its localized name and for its Inv function if it exists.
|
||||
typedef struct
|
||||
struct FunctionNameElement
|
||||
{
|
||||
int idsFunc; // index of string for the unary op function. Can be NULL, in which case it same as button name
|
||||
int idsFuncInv; // index of string for Inv of unary op. Can be NULL, in case it is same as idsFunc
|
||||
bool fDontUseInExpEval; // true if this cant be used in reverse direction as well, ie. during expression evaluation
|
||||
} UFNE;
|
||||
wstring degreeString; // Used by default if there are no rad or grad specific strings.
|
||||
wstring inverseDegreeString; // Will fall back to degreeString if empty
|
||||
|
||||
wstring radString;
|
||||
wstring inverseRadString; // Will fall back to radString if empty
|
||||
|
||||
wstring gradString;
|
||||
wstring inverseGradString; // Will fall back to gradString if empty
|
||||
|
||||
bool hasAngleStrings = ((!radString.empty()) || (!inverseRadString.empty()) || (!gradString.empty()) || (!inverseGradString.empty()));
|
||||
};
|
||||
|
||||
// Table for each unary operator
|
||||
static const UFNE rgUfne[] =
|
||||
static const std::unordered_map<int, FunctionNameElement> unaryOperatorStringTable =
|
||||
{
|
||||
/* IDC_CHOP */{ 0, IDS_FRAC, false },
|
||||
/* IDC_ROL */{ 0, 0, true },
|
||||
/* IDC_ROR */{ 0, 0, true },
|
||||
{ IDC_CHOP, { L"", SIDS_FRAC} },
|
||||
|
||||
/* IDC_COM */{ 0, 0, true },
|
||||
/* IDC_SIN */{ IDS_SIND, IDS_ASIND, false }, // default in this table is degrees for sin,cos & tan
|
||||
/* IDC_COS */{ IDS_COSD, IDS_ACOSD, false },
|
||||
/* IDC_TAN */{ IDS_TAND, IDS_ATAND, false },
|
||||
{ IDC_SIN, { SIDS_SIND, SIDS_ASIND, SIDS_SINR, SIDS_ASINR, SIDS_SING, SIDS_ASING } },
|
||||
{ IDC_COS, { SIDS_COSD, SIDS_ACOSD, SIDS_COSR, SIDS_ACOSR, SIDS_COSG, SIDS_ACOSG } },
|
||||
{ IDC_TAN, { SIDS_TAND, SIDS_ATAND, SIDS_TANR, SIDS_ATANR, SIDS_TANG, SIDS_ATANG } },
|
||||
|
||||
/* IDC_SINH */{ 0, IDS_ASINH, false },
|
||||
/* IDC_COSH */{ 0, IDS_ACOSH, false },
|
||||
/* IDC_TANH */{ 0, IDS_ATANH, false },
|
||||
{ IDC_SINH, { L"", SIDS_ASINH } },
|
||||
{ IDC_COSH, { L"", SIDS_ACOSH } },
|
||||
{ IDC_TANH, { L"", SIDS_ATANH } },
|
||||
|
||||
/* IDC_LN */{ 0, IDS_POWE, false },
|
||||
/* IDC_LOG */{ 0, 0, false },
|
||||
/* IDC_SQRT */{ 0, 0, false },
|
||||
/* IDC_SQR */{ IDS_SQR, 0, false },
|
||||
/* IDC_CUB */{ IDS_CUBE, 0, false },
|
||||
/* IDC_FAC */{ IDS_FACT, 0, false },
|
||||
/* IDC_REC */{ IDS_REC, 0, false },
|
||||
/* IDC_DMS */{ 0, IDS_DEGREES, false },
|
||||
/* IDC_CUBEROOT */{ 0, 0, false },
|
||||
/* IDC_POW10 */{ 0, 0, false },
|
||||
/* IDC_PERCENT */{ 0, 0, false },
|
||||
|
||||
/* IDC_RADSIN */{ IDS_SINR, IDS_ASINR, false },
|
||||
/* IDC_RADCOS */{ IDS_COSR, IDS_ACOSR, false },
|
||||
/* IDC_RADTAN */{ IDS_TANR, IDS_ATANR, false },
|
||||
/* IDC_GRADCOS */{ IDS_SING, IDS_ASING, false },
|
||||
/* IDC_GRADCOS */{ IDS_COSG, IDS_ACOSG, false },
|
||||
/* IDC_GRADTAN */{ IDS_TANG, IDS_ATANG, false },
|
||||
{ IDC_LN , { L"", SIDS_POWE } },
|
||||
{ IDC_SQR, { SIDS_SQR } },
|
||||
{ IDC_CUB, { SIDS_CUBE } },
|
||||
{ IDC_FAC, { SIDS_FACT } },
|
||||
{ IDC_REC, { SIDS_RECIPROC } },
|
||||
{ IDC_DMS, { L"", SIDS_DEGREES } },
|
||||
{ IDC_SIGN, { SIDS_NEGATE } },
|
||||
{ IDC_DEGREES, { SIDS_DEGREES } }
|
||||
};
|
||||
|
||||
wstring_view CCalcEngine::OpCodeToUnaryString(int nOpCode, bool fInv, ANGLE_TYPE angletype)
|
||||
{
|
||||
// Special cases for Sign and Degrees
|
||||
if (IDC_SIGN == nOpCode)
|
||||
{
|
||||
return GetString(IDS_NEGATE);
|
||||
}
|
||||
if (IDC_DEGREES == nOpCode)
|
||||
{
|
||||
return GetString(IDS_DEGREES);
|
||||
}
|
||||
|
||||
// Correct the trigonometric functions with type of angle argument they take
|
||||
if (ANGLE_RAD == angletype)
|
||||
{
|
||||
switch (nOpCode)
|
||||
{
|
||||
case IDC_SIN:
|
||||
nOpCode = IDC_RADSIN;
|
||||
break;
|
||||
case IDC_COS:
|
||||
nOpCode = IDC_RADCOS;
|
||||
break;
|
||||
case IDC_TAN:
|
||||
nOpCode = IDC_RADTAN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (ANGLE_GRAD == angletype)
|
||||
{
|
||||
switch (nOpCode)
|
||||
{
|
||||
case IDC_SIN:
|
||||
nOpCode = IDC_GRADSIN;
|
||||
break;
|
||||
case IDC_COS:
|
||||
nOpCode = IDC_GRADCOS;
|
||||
break;
|
||||
case IDC_TAN:
|
||||
nOpCode = IDC_GRADTAN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Try to lookup the ID in the UFNE table
|
||||
int ids = 0;
|
||||
int iufne = nOpCode - IDC_UNARYFIRST;
|
||||
if (iufne >= 0 && (size_t)iufne < size(rgUfne))
|
||||
wstring ids = L"";
|
||||
|
||||
if (auto pair = unaryOperatorStringTable.find(nOpCode); pair != unaryOperatorStringTable.end())
|
||||
{
|
||||
if (fInv)
|
||||
const FunctionNameElement& element = pair->second;
|
||||
if (!element.hasAngleStrings || ANGLE_DEG == angletype)
|
||||
{
|
||||
ids = rgUfne[iufne].idsFuncInv;
|
||||
if (fInv)
|
||||
{
|
||||
ids = element.inverseDegreeString;
|
||||
}
|
||||
|
||||
if (ids.empty())
|
||||
{
|
||||
ids = element.degreeString;
|
||||
}
|
||||
}
|
||||
if (0 == ids)
|
||||
else if (ANGLE_RAD == angletype)
|
||||
{
|
||||
ids = rgUfne[iufne].idsFunc;
|
||||
if (fInv)
|
||||
{
|
||||
ids = element.inverseRadString;
|
||||
}
|
||||
if (ids.empty())
|
||||
{
|
||||
ids = element.radString;
|
||||
}
|
||||
}
|
||||
else if (ANGLE_GRAD == angletype)
|
||||
{
|
||||
if (fInv)
|
||||
{
|
||||
ids = element.inverseGradString;
|
||||
}
|
||||
if (ids.empty())
|
||||
{
|
||||
ids = element.gradString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ids.empty())
|
||||
{
|
||||
return GetString(ids);
|
||||
}
|
||||
|
||||
// If we didn't find an ID in the table, use the op code.
|
||||
if (0 == ids)
|
||||
{
|
||||
ids = IdStrFromCmdId(nOpCode);
|
||||
}
|
||||
|
||||
return GetString(ids);
|
||||
}
|
||||
|
||||
//
|
||||
// Sets the Angle Mode for special unary op IDC's which are used to index to the table rgUfne
|
||||
// and returns the equivalent plain IDC for trigonometric function. If it isn't a trigonometric function
|
||||
// returns the passed in idc itself.
|
||||
int CCalcEngine::IdcSetAngleTypeDecMode(int idc)
|
||||
{
|
||||
int idcAngleCmd = IDM_DEG;
|
||||
|
||||
switch (idc)
|
||||
{
|
||||
case IDC_RADSIN:
|
||||
idcAngleCmd = IDM_RAD;
|
||||
idc = IDC_SIN;
|
||||
break;
|
||||
case IDC_RADCOS:
|
||||
idcAngleCmd = IDM_RAD;
|
||||
idc = IDC_COS;
|
||||
break;
|
||||
case IDC_RADTAN:
|
||||
idcAngleCmd = IDM_RAD;
|
||||
idc = IDC_TAN;
|
||||
break;
|
||||
case IDC_GRADSIN:
|
||||
idcAngleCmd = IDM_GRAD;
|
||||
idc = IDC_SIN;
|
||||
break;
|
||||
case IDC_GRADCOS:
|
||||
idcAngleCmd = IDM_GRAD;
|
||||
idc = IDC_COS;
|
||||
break;
|
||||
case IDC_GRADTAN:
|
||||
idcAngleCmd = IDM_GRAD;
|
||||
idc = IDC_TAN;
|
||||
break;
|
||||
}
|
||||
ProcessCommand(idcAngleCmd);
|
||||
return idc;
|
||||
|
||||
return OpCodeToString(nOpCode);
|
||||
}
|
||||
|
||||
bool CCalcEngine::IsCurrentTooBigForTrig()
|
||||
|
@ -1060,7 +1003,7 @@ wstring CCalcEngine::GetStringForDisplay(Rational const& rat, uint32_t radix)
|
|||
|
||||
result = tempRat.ToString(radix, m_nFE, m_precision);
|
||||
}
|
||||
catch (DWORD)
|
||||
catch (uint32_t)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ typedef struct {
|
|||
Rational value;
|
||||
int32_t precision;
|
||||
uint32_t radix;
|
||||
INT nFE;
|
||||
int nFE;
|
||||
NUM_WIDTH numwidth;
|
||||
bool fIntMath;
|
||||
bool bRecord;
|
||||
|
|
|
@ -24,7 +24,7 @@ using namespace CalcEngine;
|
|||
using namespace CalcEngine::RationalMath;
|
||||
|
||||
/* Routines for more complex mathematical functions/error checking. */
|
||||
CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& rat, DWORD op)
|
||||
CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& rat, uint32_t op)
|
||||
{
|
||||
Rational result{};
|
||||
try
|
||||
|
@ -205,7 +205,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
|||
}
|
||||
} // end switch( op )
|
||||
}
|
||||
catch (DWORD nErrCode)
|
||||
catch (uint32_t nErrCode)
|
||||
{
|
||||
DisplayError(nErrCode);
|
||||
result = rat;
|
||||
|
@ -215,9 +215,9 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
|
|||
}
|
||||
|
||||
/* Routine to display error messages and set m_bError flag. Errors are */
|
||||
/* called with DisplayError (n), where n is a DWORD between 0 and 5. */
|
||||
/* called with DisplayError (n), where n is a uint32_t between 0 and 5. */
|
||||
|
||||
void CCalcEngine::DisplayError(DWORD nError)
|
||||
void CCalcEngine::DisplayError(uint32_t nError)
|
||||
{
|
||||
wstring errorString{ GetString(IDS_ERRORS_FIRST + SCODE_CODE(nError)) };
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa
|
|||
break;
|
||||
}
|
||||
}
|
||||
catch (DWORD dwErrCode)
|
||||
catch (uint32_t dwErrCode)
|
||||
{
|
||||
DisplayError(dwErrCode);
|
||||
|
||||
|
|
|
@ -51,10 +51,10 @@ void CCalcEngine::SetRadixTypeAndNumWidth(RADIX_TYPE radixtype, NUM_WIDTH numwid
|
|||
DisplayNum();
|
||||
}
|
||||
|
||||
LONG CCalcEngine::DwWordBitWidthFromeNumWidth(NUM_WIDTH /*numwidth*/)
|
||||
int32_t CCalcEngine::DwWordBitWidthFromeNumWidth(NUM_WIDTH /*numwidth*/)
|
||||
{
|
||||
static constexpr int nBitMax[] = { 64, 32, 16, 8 };
|
||||
LONG wmax = nBitMax[0];
|
||||
int32_t wmax = nBitMax[0];
|
||||
|
||||
if (m_numwidth >= 0 && (size_t)m_numwidth < size(nBitMax))
|
||||
{
|
||||
|
@ -77,9 +77,9 @@ uint32_t CCalcEngine::NRadixFromRadixType(RADIX_TYPE radixtype)
|
|||
}
|
||||
|
||||
// Toggles a given bit into the number representation. returns true if it changed it actually.
|
||||
bool CCalcEngine::TryToggleBit(CalcEngine::Rational& rat, DWORD wbitno)
|
||||
bool CCalcEngine::TryToggleBit(CalcEngine::Rational& rat, uint32_t wbitno)
|
||||
{
|
||||
DWORD wmax = DwWordBitWidthFromeNumWidth(m_numwidth);
|
||||
uint32_t wmax = DwWordBitWidthFromeNumWidth(m_numwidth);
|
||||
if (wbitno >= wmax)
|
||||
{
|
||||
return false; // ignore error cant happen
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
using namespace std;
|
||||
using namespace CalculationManager;
|
||||
|
||||
CalculatorHistory::CalculatorHistory(CALCULATOR_MODE eMode, size_t maxSize) :
|
||||
m_mode(eMode),
|
||||
CalculatorHistory::CalculatorHistory(size_t maxSize) :
|
||||
m_maxHistorySize(maxSize)
|
||||
{}
|
||||
|
||||
|
@ -35,15 +34,13 @@ unsigned int CalculatorHistory::AddToHistory(_In_ shared_ptr<CalculatorVector <p
|
|||
|
||||
unsigned int CalculatorHistory::AddItem(_In_ shared_ptr<HISTORYITEM> const &spHistoryItem)
|
||||
{
|
||||
int lastIndex;
|
||||
|
||||
if (m_historyItems.size() >= m_maxHistorySize)
|
||||
{
|
||||
m_historyItems.erase(m_historyItems.begin());
|
||||
}
|
||||
|
||||
m_historyItems.push_back(spHistoryItem);
|
||||
lastIndex = static_cast<unsigned>(m_historyItems.size() - 1);
|
||||
unsigned int lastIndex = static_cast<unsigned>(m_historyItems.size() - 1);
|
||||
return lastIndex;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,19 +31,18 @@ namespace CalculationManager
|
|||
{
|
||||
|
||||
public:
|
||||
CalculatorHistory(CALCULATOR_MODE eMode, const size_t maxSize);
|
||||
CalculatorHistory(const size_t maxSize);
|
||||
unsigned int AddToHistory(_In_ std::shared_ptr<CalculatorVector <std::pair<std::wstring, int>>> const &spTokens, _In_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &spCommands, std::wstring_view result);
|
||||
std::vector<std::shared_ptr<HISTORYITEM>> const& GetHistory();
|
||||
std::shared_ptr<HISTORYITEM> const& GetHistoryItem(unsigned int uIdx);
|
||||
void ClearHistory();
|
||||
unsigned int AddItem(_In_ std::shared_ptr<HISTORYITEM> const &spHistoryItem);
|
||||
bool RemoveItem(unsigned int uIdx);
|
||||
const size_t MaxHistorySize() const { return m_maxHistorySize; }
|
||||
size_t MaxHistorySize() const { return m_maxHistorySize; }
|
||||
~CalculatorHistory(void);
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr<HISTORYITEM>> m_historyItems;
|
||||
CALCULATOR_MODE m_mode;
|
||||
const size_t m_maxHistorySize;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include "pch.h"
|
||||
|
@ -24,15 +24,15 @@ namespace CalculationManager
|
|||
{
|
||||
CalculatorManager::CalculatorManager(_In_ ICalcDisplay* displayCallback, _In_ IResourceProvider* resourceProvider) :
|
||||
m_displayCallback(displayCallback),
|
||||
m_currentCalculatorEngine(nullptr),
|
||||
m_resourceProvider(resourceProvider),
|
||||
m_inHistoryItemLoadMode(false),
|
||||
m_persistedPrimaryValue(),
|
||||
m_isExponentialFormat(false),
|
||||
m_currentDegreeMode(Command::CommandNULL),
|
||||
m_savedDegreeMode(Command::CommandDEG),
|
||||
m_isExponentialFormat(false),
|
||||
m_persistedPrimaryValue(),
|
||||
m_currentCalculatorEngine(nullptr),
|
||||
m_pStdHistory(new CalculatorHistory(CM_STD, MAX_HISTORY_ITEMS)),
|
||||
m_pSciHistory(new CalculatorHistory(CM_SCI, MAX_HISTORY_ITEMS)),
|
||||
m_inHistoryItemLoadMode(false)
|
||||
m_pStdHistory(new CalculatorHistory(MAX_HISTORY_ITEMS)),
|
||||
m_pSciHistory(new CalculatorHistory(MAX_HISTORY_ITEMS))
|
||||
{
|
||||
CCalcEngine::InitialOneTimeOnlySetup(*m_resourceProvider);
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ namespace CalculationManager
|
|||
|
||||
/// <summary>
|
||||
/// Send command to the Calc Engine
|
||||
/// Cast Command Enum to WPARAM.
|
||||
/// Cast Command Enum to OpCode.
|
||||
/// Handle special commands such as mode change and combination of two commands.
|
||||
/// </summary>
|
||||
/// <param name="command">Enum Command</command>
|
||||
|
@ -235,7 +235,7 @@ namespace CalculationManager
|
|||
this->SetProgrammerMode();
|
||||
break;
|
||||
default:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(command));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(command));
|
||||
}
|
||||
|
||||
m_savedCommands.clear(); // Clear the previous command history
|
||||
|
@ -263,38 +263,38 @@ namespace CalculationManager
|
|||
switch (command)
|
||||
{
|
||||
case Command::CommandASIN:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandSIN));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandSIN));
|
||||
break;
|
||||
case Command::CommandACOS:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandCOS));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandCOS));
|
||||
break;
|
||||
case Command::CommandATAN:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandTAN));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandTAN));
|
||||
break;
|
||||
case Command::CommandPOWE:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandLN));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandLN));
|
||||
break;
|
||||
case Command::CommandASINH:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandSINH));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandSINH));
|
||||
break;
|
||||
case Command::CommandACOSH:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandCOSH));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandCOSH));
|
||||
break;
|
||||
case Command::CommandATANH:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(Command::CommandTANH));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandINV));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(Command::CommandTANH));
|
||||
break;
|
||||
case Command::CommandFE:
|
||||
m_isExponentialFormat = !m_isExponentialFormat;
|
||||
// fall through
|
||||
[[fallthrough]];
|
||||
default:
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<WPARAM>(command));
|
||||
m_currentCalculatorEngine->ProcessCommand(static_cast<OpCode>(command));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -308,7 +308,10 @@ namespace CalculationManager
|
|||
unsigned char CalculatorManager::MapCommandForSerialize(Command command)
|
||||
{
|
||||
unsigned int commandToSave = static_cast<unsigned int>(command);
|
||||
commandToSave > UCHAR_MAX ? commandToSave -= UCHAR_MAX : commandToSave;
|
||||
if (commandToSave > UCHAR_MAX)
|
||||
{
|
||||
commandToSave -= UCHAR_MAX;
|
||||
}
|
||||
return static_cast<unsigned char>(commandToSave);
|
||||
}
|
||||
|
||||
|
@ -360,7 +363,7 @@ namespace CalculationManager
|
|||
/// <param name = "serializedPrimaryDisplay">Serialized Rational of primary display</param>
|
||||
void CalculatorManager::DeSerializePrimaryDisplay(const vector<long> &serializedPrimaryDisplay)
|
||||
{
|
||||
if (serializedPrimaryDisplay.size() == 0)
|
||||
if (serializedPrimaryDisplay.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace CalculationManager
|
|||
MemorizedNumberClear = 335
|
||||
};
|
||||
|
||||
class CalculatorManager sealed : public ICalcDisplay
|
||||
class CalculatorManager final : public ICalcDisplay
|
||||
{
|
||||
private:
|
||||
ICalcDisplay* const m_displayCallback;
|
||||
|
@ -141,7 +141,7 @@ namespace CalculationManager
|
|||
std::shared_ptr<HISTORYITEM> const& GetHistoryItem(_In_ unsigned int uIdx);
|
||||
bool RemoveHistoryItem(_In_ unsigned int uIdx);
|
||||
void ClearHistory();
|
||||
const size_t MaxHistorySize() const { return m_pHistory->MaxHistorySize(); }
|
||||
size_t MaxHistorySize() const { return m_pHistory->MaxHistorySize(); }
|
||||
CalculationManager::Command GetCurrentDegreeMode();
|
||||
void SetHistory(_In_ CALCULATOR_MODE eMode, _In_ std::vector<std::shared_ptr<HISTORYITEM>> const& history);
|
||||
void SetInHistoryItemLoadMode(_In_ bool isHistoryItemLoadMode);
|
||||
|
|
|
@ -3,13 +3,15 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "Ratpack/CalcErr.h"
|
||||
|
||||
template <typename TType>
|
||||
class CalculatorVector
|
||||
{
|
||||
public:
|
||||
HRESULT GetAt(_In_opt_ unsigned int index, _Out_ TType *item)
|
||||
ResultCode GetAt(_In_opt_ unsigned int index, _Out_ TType *item)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
try
|
||||
{
|
||||
*item = m_vector.at(index);
|
||||
|
@ -21,15 +23,15 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT GetSize(_Out_ unsigned int *size)
|
||||
ResultCode GetSize(_Out_ unsigned int *size)
|
||||
{
|
||||
*size = static_cast<unsigned>(m_vector.size());
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SetAt(_In_ unsigned int index, _In_opt_ TType item)
|
||||
ResultCode SetAt(_In_ unsigned int index, _In_opt_ TType item)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
try
|
||||
{
|
||||
m_vector[index] = item;
|
||||
|
@ -41,9 +43,9 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT RemoveAt(_In_ unsigned int index)
|
||||
ResultCode RemoveAt(_In_ unsigned int index)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
if (index < m_vector.size())
|
||||
{
|
||||
m_vector.erase(m_vector.begin() + index);
|
||||
|
@ -55,9 +57,9 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT InsertAt(_In_ unsigned int index, _In_ TType item)
|
||||
ResultCode InsertAt(_In_ unsigned int index, _In_ TType item)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
try
|
||||
{
|
||||
auto iter = m_vector.begin() + index;
|
||||
|
@ -70,9 +72,9 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT Truncate(_In_ unsigned int index)
|
||||
ResultCode Truncate(_In_ unsigned int index)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
if (index < m_vector.size())
|
||||
{
|
||||
auto startIter = m_vector.begin() + index;
|
||||
|
@ -85,9 +87,9 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT Append(_In_opt_ TType item)
|
||||
ResultCode Append(_In_opt_ TType item)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
try
|
||||
{
|
||||
m_vector.push_back(item);
|
||||
|
@ -99,21 +101,21 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT RemoveAtEnd()
|
||||
ResultCode RemoveAtEnd()
|
||||
{
|
||||
m_vector.erase(--(m_vector.end()));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Clear()
|
||||
ResultCode Clear()
|
||||
{
|
||||
m_vector.clear();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT GetString(_Out_ std::wstring* expression)
|
||||
ResultCode GetString(_Out_ std::wstring* expression)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
ResultCode hr = S_OK;
|
||||
unsigned int nTokens = 0;
|
||||
std::pair <std::wstring, int> currentPair;
|
||||
hr = this->GetSize(&nTokens);
|
||||
|
@ -144,7 +146,7 @@ public:
|
|||
return hr;
|
||||
}
|
||||
|
||||
HRESULT GetExpressionSuffix(_Out_ std::wstring* suffix)
|
||||
ResultCode GetExpressionSuffix(_Out_ std::wstring* suffix)
|
||||
{
|
||||
*suffix = L" =";
|
||||
return S_OK;
|
||||
|
|
|
@ -98,8 +98,8 @@ void CBinaryCommand::Accept(_In_ ISerializeCommandVisitor &commandVisitor)
|
|||
COpndCommand::COpndCommand(shared_ptr<CalculatorVector<int>> const &commands, bool fNegative, bool fDecimal, bool fSciFmt) :
|
||||
m_commands(commands),
|
||||
m_fNegative(fNegative),
|
||||
m_fDecimal(fDecimal),
|
||||
m_fSciFmt(fSciFmt),
|
||||
m_fDecimal(fDecimal),
|
||||
m_fInitialized(false),
|
||||
m_value{}
|
||||
{}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "RadixType.h"
|
||||
#include "History.h" // for History Collector
|
||||
#include "CalcInput.h"
|
||||
#include "CalcUtils.h"
|
||||
#include "ICalcDisplay.h"
|
||||
#include "Rational.h"
|
||||
#include "RationalMath.h"
|
||||
|
@ -52,8 +53,8 @@ namespace CalculatorUnitTests
|
|||
class CCalcEngine {
|
||||
public:
|
||||
CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager::IResourceProvider* const pResourceProvider, __in_opt ICalcDisplay *pCalcDisplay, __in_opt std::shared_ptr<IHistoryDisplay> pHistoryDisplay);
|
||||
void ProcessCommand(WPARAM wID);
|
||||
void DisplayError (DWORD nError);
|
||||
void ProcessCommand(OpCode wID);
|
||||
void DisplayError (uint32_t nError);
|
||||
std::unique_ptr<CalcEngine::Rational> PersistedMemObject();
|
||||
void PersistedMemObject(CalcEngine::Rational const& memObject);
|
||||
bool FInErrorState() { return m_bError; }
|
||||
|
@ -71,7 +72,8 @@ public:
|
|||
// Static methods for the instance
|
||||
static void InitialOneTimeOnlySetup(CalculationManager::IResourceProvider& resourceProvider); // Once per load time to call to initialize all shared global variables
|
||||
// returns the ptr to string representing the operator. Mostly same as the button, but few special cases for x^y etc.
|
||||
static std::wstring_view GetString(int ids) { return s_engineStrings[ids]; }
|
||||
static std::wstring_view GetString(int ids) { return s_engineStrings[std::to_wstring(ids)]; }
|
||||
static std::wstring_view GetString(std::wstring ids) { return s_engineStrings[ids]; }
|
||||
static std::wstring_view OpCodeToString(int nOpCode) { return GetString(IdStrFromCmdId(nOpCode)); }
|
||||
static std::wstring_view OpCodeToUnaryString(int nOpCode, bool fInv, ANGLE_TYPE angletype);
|
||||
|
||||
|
@ -116,19 +118,20 @@ private:
|
|||
int m_nLastCom; // Last command entered.
|
||||
ANGLE_TYPE m_angletype; // Current Angle type when in dec mode. one of deg, rad or grad
|
||||
NUM_WIDTH m_numwidth; // one of qword, dword, word or byte mode.
|
||||
LONG m_dwWordBitWidth; // # of bits in currently selected word size
|
||||
int32_t m_dwWordBitWidth; // # of bits in currently selected word size
|
||||
|
||||
CHistoryCollector m_HistoryCollector; // Accumulator of each line of history as various commands are processed
|
||||
|
||||
std::array<CalcEngine::Rational, NUM_WIDTH_LENGTH> m_chopNumbers; // word size enforcement
|
||||
std::array<std::wstring, NUM_WIDTH_LENGTH> m_maxDecimalValueStrings; // maximum values represented by a given word width based off m_chopNumbers
|
||||
static std::array<std::wstring, CSTRINGSENGMAX> s_engineStrings; // the string table shared across all instances
|
||||
static std::unordered_map<std::wstring, std::wstring> s_engineStrings; // the string table shared across all instances
|
||||
wchar_t m_decimalSeparator;
|
||||
wchar_t m_groupSeparator;
|
||||
|
||||
private:
|
||||
void ProcessCommandWorker(WPARAM wParam);
|
||||
void HandleErrorCommand(WPARAM idc);
|
||||
void ProcessCommandWorker(OpCode wParam);
|
||||
void ResolveHighestPrecedenceOperation();
|
||||
void HandleErrorCommand(OpCode idc);
|
||||
void HandleMaxDigitsReached();
|
||||
void DisplayNum(void);
|
||||
int IsNumberInvalid(const std::wstring& numberString, int iMaxExp, int iMaxMantissa, uint32_t radix) const;
|
||||
|
@ -136,20 +139,19 @@ private:
|
|||
void SetPrimaryDisplay(const std::wstring& szText, bool isError = false);
|
||||
void ClearTemporaryValues();
|
||||
CalcEngine::Rational TruncateNumForIntMath(CalcEngine::Rational const& rat);
|
||||
CalcEngine::Rational SciCalcFunctions(CalcEngine::Rational const& rat, DWORD op);
|
||||
CalcEngine::Rational SciCalcFunctions(CalcEngine::Rational const& rat, uint32_t op);
|
||||
CalcEngine::Rational DoOperation(int operation, CalcEngine::Rational const& lhs, CalcEngine::Rational const& rhs);
|
||||
void SetRadixTypeAndNumWidth(RADIX_TYPE radixtype, NUM_WIDTH numwidth);
|
||||
LONG DwWordBitWidthFromeNumWidth(NUM_WIDTH numwidth);
|
||||
int32_t DwWordBitWidthFromeNumWidth(NUM_WIDTH numwidth);
|
||||
uint32_t NRadixFromRadixType( RADIX_TYPE radixtype);
|
||||
|
||||
bool TryToggleBit(CalcEngine::Rational& rat, DWORD wbitno);
|
||||
bool TryToggleBit(CalcEngine::Rational& rat, uint32_t wbitno);
|
||||
void CheckAndAddLastBinOpToHistory(bool addToHistory = true);
|
||||
int IdcSetAngleTypeDecMode(int idc);
|
||||
|
||||
void InitChopNumbers();
|
||||
|
||||
static void LoadEngineStrings(CalculationManager::IResourceProvider& resourceProvider);
|
||||
static int IdStrFromCmdId(int id) { return id - IDC_FIRSTCONTROL + IDS_FIRSTENGSTR; }
|
||||
static int IdStrFromCmdId(int id) { return id - IDC_FIRSTCONTROL + IDS_ENGINESTR_FIRST; }
|
||||
|
||||
static std::vector<uint32_t> DigitGroupingStringToGroupingVector(std::wstring_view groupingString);
|
||||
std::wstring GroupDigits(std::wstring_view delimiter, std::vector<uint32_t> const& grouping, std::wstring_view displayString, bool isNumNegative = false);
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace CalcEngine
|
|||
|
||||
void Clear();
|
||||
bool TryToggleSign(bool isIntegerMode, std::wstring_view maxNumStr);
|
||||
bool TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMode, std::wstring_view maxNumStr, long wordBitWidth, int maxDigits);
|
||||
bool TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMode, std::wstring_view maxNumStr, int32_t wordBitWidth, int maxDigits);
|
||||
bool TryAddDecimalPt();
|
||||
bool HasDecimalPt();
|
||||
bool TryBeginExponent();
|
||||
|
|
|
@ -3,11 +3,13 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
bool IsOpInRange(WPARAM op, uint32_t x, uint32_t y);
|
||||
bool IsBinOpCode(WPARAM opCode);
|
||||
using OpCode = uintptr_t;
|
||||
|
||||
bool IsOpInRange(OpCode op, uint32_t x, uint32_t y);
|
||||
bool IsBinOpCode(OpCode opCode);
|
||||
|
||||
// WARNING: IDC_SIGN is a special unary op but still this doesn't catch this. Caller has to be aware
|
||||
// of it and catch it themselves or not needing this
|
||||
bool IsUnaryOpCode(WPARAM opCode);
|
||||
bool IsDigitOpCode(WPARAM opCode);
|
||||
bool IsGuiSettingOpCode(WPARAM opCode);
|
||||
bool IsUnaryOpCode(OpCode opCode);
|
||||
bool IsDigitOpCode(OpCode opCode);
|
||||
bool IsGuiSettingOpCode(OpCode opCode);
|
||||
|
|
|
@ -13,327 +13,279 @@
|
|||
* Created: 13-Feb-2008
|
||||
*
|
||||
\****************************************************************************/
|
||||
#define IDS_FIRSTENGSTR IDS_ENGINESTR_FIRST
|
||||
|
||||
#define IDS_DECIMAL 4
|
||||
|
||||
// All unary op function names for easy history reading
|
||||
// This is where the first string after all the commands in order have been placed, should be placed
|
||||
// keeping in consecutive helps us to allocate 1 string table and index them
|
||||
#define IDS_FNSZFIRST (IDC_F -IDC_FIRSTCONTROL)+1
|
||||
|
||||
#define IDS_FRAC IDS_FNSZFIRST
|
||||
|
||||
#define IDS_SIND IDS_FNSZFIRST+1
|
||||
#define IDS_COSD IDS_FNSZFIRST+2
|
||||
#define IDS_TAND IDS_FNSZFIRST+3
|
||||
#define IDS_ASIND IDS_FNSZFIRST+4
|
||||
#define IDS_ACOSD IDS_FNSZFIRST+5
|
||||
#define IDS_ATAND IDS_FNSZFIRST+6
|
||||
|
||||
#define IDS_SINR IDS_FNSZFIRST+7
|
||||
#define IDS_COSR IDS_FNSZFIRST+8
|
||||
#define IDS_TANR IDS_FNSZFIRST+9
|
||||
#define IDS_ASINR IDS_FNSZFIRST+10
|
||||
#define IDS_ACOSR IDS_FNSZFIRST+11
|
||||
#define IDS_ATANR IDS_FNSZFIRST+12
|
||||
|
||||
#define IDS_SING IDS_FNSZFIRST+13
|
||||
#define IDS_COSG IDS_FNSZFIRST+14
|
||||
#define IDS_TANG IDS_FNSZFIRST+15
|
||||
#define IDS_ASING IDS_FNSZFIRST+16
|
||||
#define IDS_ACOSG IDS_FNSZFIRST+17
|
||||
#define IDS_ATANG IDS_FNSZFIRST+18
|
||||
|
||||
#define IDS_ASINH IDS_FNSZFIRST+19
|
||||
#define IDS_ACOSH IDS_FNSZFIRST+20
|
||||
#define IDS_ATANH IDS_FNSZFIRST+21
|
||||
#define IDS_POWE IDS_FNSZFIRST+22
|
||||
#define IDS_POW10 IDS_FNSZFIRST+23
|
||||
#define IDS_SQRT IDS_FNSZFIRST+24
|
||||
#define IDS_SQR IDS_FNSZFIRST+25
|
||||
#define IDS_CUBE IDS_FNSZFIRST+26
|
||||
#define IDS_CUBERT IDS_FNSZFIRST+27
|
||||
#define IDS_FACT IDS_FNSZFIRST+28
|
||||
#define IDS_REC IDS_FNSZFIRST+29
|
||||
#define IDS_DEGREES IDS_FNSZFIRST+30
|
||||
#define IDS_NEGATE IDS_FNSZFIRST+31
|
||||
#define IDS_RSH IDS_FNSZFIRST+32
|
||||
|
||||
#define IDS_FNSZLAST IDS_RSH
|
||||
|
||||
#define IDS_ERRORS_FIRST IDS_FNSZLAST+1
|
||||
inline constexpr auto IDS_ERRORS_FIRST = 99;
|
||||
|
||||
// This is the list of error strings corresponding to SCERR_DIVIDEZERO..
|
||||
|
||||
#define IDS_DIVBYZERO IDS_ERRORS_FIRST
|
||||
#define IDS_DOMAIN IDS_ERRORS_FIRST+1
|
||||
#define IDS_UNDEFINED IDS_ERRORS_FIRST+2
|
||||
#define IDS_POS_INFINITY IDS_ERRORS_FIRST+3
|
||||
#define IDS_NEG_INFINITY IDS_ERRORS_FIRST+4
|
||||
#define IDS_NOMEM IDS_ERRORS_FIRST+6
|
||||
#define IDS_TOOMANY IDS_ERRORS_FIRST+7
|
||||
#define IDS_OVERFLOW IDS_ERRORS_FIRST+8
|
||||
#define IDS_NORESULT IDS_ERRORS_FIRST+9
|
||||
#define IDS_INSUFFICIENT_DATA IDS_ERRORS_FIRST+10
|
||||
inline constexpr auto IDS_DIVBYZERO = IDS_ERRORS_FIRST;
|
||||
inline constexpr auto IDS_DOMAIN = IDS_ERRORS_FIRST + 1;
|
||||
inline constexpr auto IDS_UNDEFINED = IDS_ERRORS_FIRST + 2;
|
||||
inline constexpr auto IDS_POS_INFINITY = IDS_ERRORS_FIRST + 3;
|
||||
inline constexpr auto IDS_NEG_INFINITY = IDS_ERRORS_FIRST + 4;
|
||||
inline constexpr auto IDS_NOMEM = IDS_ERRORS_FIRST + 6;
|
||||
inline constexpr auto IDS_TOOMANY = IDS_ERRORS_FIRST + 7;
|
||||
inline constexpr auto IDS_OVERFLOW = IDS_ERRORS_FIRST + 8;
|
||||
inline constexpr auto IDS_NORESULT = IDS_ERRORS_FIRST + 9;
|
||||
inline constexpr auto IDS_INSUFFICIENT_DATA = IDS_ERRORS_FIRST + 10;
|
||||
|
||||
#define CSTRINGSENGMAX IDS_INSUFFICIENT_DATA+1
|
||||
inline constexpr auto CSTRINGSENGMAX = IDS_INSUFFICIENT_DATA + 1;
|
||||
|
||||
// Arithmetic expression evaluator error strings
|
||||
#define IDS_ERR_UNK_CH CSTRINGSENGMAX+1
|
||||
#define IDS_ERR_UNK_FN CSTRINGSENGMAX+2
|
||||
#define IDS_ERR_UNEX_NUM CSTRINGSENGMAX+3
|
||||
#define IDS_ERR_UNEX_CH CSTRINGSENGMAX+4
|
||||
#define IDS_ERR_UNEX_SZ CSTRINGSENGMAX+5
|
||||
#define IDS_ERR_MISMATCH_CLOSE CSTRINGSENGMAX+6
|
||||
#define IDS_ERR_UNEX_END CSTRINGSENGMAX+7
|
||||
#define IDS_ERR_SG_INV_ERROR CSTRINGSENGMAX+8
|
||||
#define IDS_ERR_INPUT_OVERFLOW CSTRINGSENGMAX+9
|
||||
#define IDS_ERR_OUTPUT_OVERFLOW CSTRINGSENGMAX+10
|
||||
inline constexpr auto IDS_ERR_UNK_CH = CSTRINGSENGMAX + 1;
|
||||
inline constexpr auto IDS_ERR_UNK_FN = CSTRINGSENGMAX + 2;
|
||||
inline constexpr auto IDS_ERR_UNEX_NUM = CSTRINGSENGMAX + 3;
|
||||
inline constexpr auto IDS_ERR_UNEX_CH = CSTRINGSENGMAX + 4;
|
||||
inline constexpr auto IDS_ERR_UNEX_SZ = CSTRINGSENGMAX + 5;
|
||||
inline constexpr auto IDS_ERR_MISMATCH_CLOSE = CSTRINGSENGMAX + 6;
|
||||
inline constexpr auto IDS_ERR_UNEX_END = CSTRINGSENGMAX + 7;
|
||||
inline constexpr auto IDS_ERR_SG_INV_ERROR = CSTRINGSENGMAX + 8;
|
||||
inline constexpr auto IDS_ERR_INPUT_OVERFLOW = CSTRINGSENGMAX + 9;
|
||||
inline constexpr auto IDS_ERR_OUTPUT_OVERFLOW = CSTRINGSENGMAX + 10;
|
||||
|
||||
|
||||
#define SIDS_PLUS_MINUS L"0"
|
||||
#define SIDS_CLEAR L"1"
|
||||
#define SIDS_CE L"2"
|
||||
#define SIDS_BACKSPACE L"3"
|
||||
#define SIDS_DECIMAL_SEPARATOR L"4"
|
||||
#define SIDS_EMPTY_STRING L"5"
|
||||
#define SIDS_AND L"6"
|
||||
#define SIDS_OR L"7"
|
||||
#define SIDS_XOR L"8"
|
||||
#define SIDS_LSH L"9"
|
||||
#define SIDS_RSH L"10"
|
||||
#define SIDS_DIVIDE L"11"
|
||||
#define SIDS_MULTIPLY L"12"
|
||||
#define SIDS_PLUS L"13"
|
||||
#define SIDS_MINUS L"14"
|
||||
#define SIDS_MOD L"15"
|
||||
#define SIDS_YROOT L"16"
|
||||
#define SIDS_POW_HAT L"17"
|
||||
#define SIDS_INT L"18"
|
||||
#define SIDS_ROL L"19"
|
||||
#define SIDS_ROR L"20"
|
||||
#define SIDS_NOT L"21"
|
||||
#define SIDS_SIN L"22"
|
||||
#define SIDS_COS L"23"
|
||||
#define SIDS_TAN L"24"
|
||||
#define SIDS_SINH L"25"
|
||||
#define SIDS_COSH L"26"
|
||||
#define SIDS_TANH L"27"
|
||||
#define SIDS_LN L"28"
|
||||
#define SIDS_LOG L"29"
|
||||
#define SIDS_SQRT L"30"
|
||||
#define SIDS_XPOW2 L"31"
|
||||
#define SIDS_XPOW3 L"32"
|
||||
#define SIDS_NFACTORIAL L"33"
|
||||
#define SIDS_RECIPROCAL L"34"
|
||||
#define SIDS_DMS L"35"
|
||||
#define SIDS_CUBEROOT L"36"
|
||||
#define SIDS_POWTEN L"37"
|
||||
#define SIDS_PERCENT L"38"
|
||||
#define SIDS_SCIENTIFIC_NOTATION L"39"
|
||||
#define SIDS_PI L"40"
|
||||
#define SIDS_EQUAL L"41"
|
||||
#define SIDS_MC L"42"
|
||||
#define SIDS_MR L"43"
|
||||
#define SIDS_MS L"44"
|
||||
#define SIDS_MPLUS L"45"
|
||||
#define SIDS_MMINUS L"46"
|
||||
#define SIDS_EXP L"47"
|
||||
#define SIDS_OPEN_PAREN L"48"
|
||||
#define SIDS_CLOSE_PAREN L"49"
|
||||
#define SIDS_0 L"50"
|
||||
#define SIDS_1 L"51"
|
||||
#define SIDS_2 L"52"
|
||||
#define SIDS_3 L"53"
|
||||
#define SIDS_4 L"54"
|
||||
#define SIDS_5 L"55"
|
||||
#define SIDS_6 L"56"
|
||||
#define SIDS_7 L"57"
|
||||
#define SIDS_8 L"58"
|
||||
#define SIDS_9 L"59"
|
||||
#define SIDS_A L"60"
|
||||
#define SIDS_B L"61"
|
||||
#define SIDS_C L"62"
|
||||
#define SIDS_D L"63"
|
||||
#define SIDS_E L"64"
|
||||
#define SIDS_F L"65"
|
||||
#define SIDS_FRAC L"66"
|
||||
#define SIDS_SIND L"67"
|
||||
#define SIDS_COSD L"68"
|
||||
#define SIDS_TAND L"69"
|
||||
#define SIDS_ASIND L"70"
|
||||
#define SIDS_ACOSD L"71"
|
||||
#define SIDS_ATAND L"72"
|
||||
#define SIDS_SINR L"73"
|
||||
#define SIDS_COSR L"74"
|
||||
#define SIDS_TANR L"75"
|
||||
#define SIDS_ASINR L"76"
|
||||
#define SIDS_ACOSR L"77"
|
||||
#define SIDS_ATANR L"78"
|
||||
#define SIDS_SING L"79"
|
||||
#define SIDS_COSG L"80"
|
||||
#define SIDS_TANG L"81"
|
||||
#define SIDS_ASING L"82"
|
||||
#define SIDS_ACOSG L"83"
|
||||
#define SIDS_ATANG L"84"
|
||||
#define SIDS_ASINH L"85"
|
||||
#define SIDS_ACOSH L"86"
|
||||
#define SIDS_ATANH L"87"
|
||||
#define SIDS_POWE L"88"
|
||||
#define SIDS_POWTEN2 L"89"
|
||||
#define SIDS_SQRT2 L"90"
|
||||
#define SIDS_SQR L"91"
|
||||
#define SIDS_CUBE L"92"
|
||||
#define SIDS_CUBERT L"93"
|
||||
#define SIDS_FACT L"94"
|
||||
#define SIDS_RECIPROC L"95"
|
||||
#define SIDS_DEGREES L"96"
|
||||
#define SIDS_NEGATE L"97"
|
||||
#define SIDS_RSH2 L"98"
|
||||
#define SIDS_DIVIDEBYZERO L"99"
|
||||
#define SIDS_DOMAIN L"100"
|
||||
#define SIDS_UNDEFINED L"101"
|
||||
#define SIDS_POS_INFINITY L"102"
|
||||
#define SIDS_NEG_INFINITY L"103"
|
||||
#define SIDS_ABORTED L"104"
|
||||
#define SIDS_NOMEM L"105"
|
||||
#define SIDS_TOOMANY L"106"
|
||||
#define SIDS_OVERFLOW L"107"
|
||||
#define SIDS_NORESULT L"108"
|
||||
#define SIDS_INSUFFICIENT_DATA L"109"
|
||||
// Resource keys for CEngineStrings.resw
|
||||
inline constexpr auto SIDS_PLUS_MINUS = L"0";
|
||||
inline constexpr auto SIDS_CLEAR = L"1";
|
||||
inline constexpr auto SIDS_CE = L"2";
|
||||
inline constexpr auto SIDS_BACKSPACE = L"3";
|
||||
inline constexpr auto SIDS_DECIMAL_SEPARATOR = L"4";
|
||||
inline constexpr auto SIDS_EMPTY_STRING = L"5";
|
||||
inline constexpr auto SIDS_AND = L"6";
|
||||
inline constexpr auto SIDS_OR = L"7";
|
||||
inline constexpr auto SIDS_XOR = L"8";
|
||||
inline constexpr auto SIDS_LSH = L"9";
|
||||
inline constexpr auto SIDS_RSH = L"10";
|
||||
inline constexpr auto SIDS_DIVIDE = L"11";
|
||||
inline constexpr auto SIDS_MULTIPLY = L"12";
|
||||
inline constexpr auto SIDS_PLUS = L"13";
|
||||
inline constexpr auto SIDS_MINUS = L"14";
|
||||
inline constexpr auto SIDS_MOD = L"15";
|
||||
inline constexpr auto SIDS_YROOT = L"16";
|
||||
inline constexpr auto SIDS_POW_HAT = L"17";
|
||||
inline constexpr auto SIDS_INT = L"18";
|
||||
inline constexpr auto SIDS_ROL = L"19";
|
||||
inline constexpr auto SIDS_ROR = L"20";
|
||||
inline constexpr auto SIDS_NOT = L"21";
|
||||
inline constexpr auto SIDS_SIN = L"22";
|
||||
inline constexpr auto SIDS_COS = L"23";
|
||||
inline constexpr auto SIDS_TAN = L"24";
|
||||
inline constexpr auto SIDS_SINH = L"25";
|
||||
inline constexpr auto SIDS_COSH = L"26";
|
||||
inline constexpr auto SIDS_TANH = L"27";
|
||||
inline constexpr auto SIDS_LN = L"28";
|
||||
inline constexpr auto SIDS_LOG = L"29";
|
||||
inline constexpr auto SIDS_SQRT = L"30";
|
||||
inline constexpr auto SIDS_XPOW2 = L"31";
|
||||
inline constexpr auto SIDS_XPOW3 = L"32";
|
||||
inline constexpr auto SIDS_NFACTORIAL = L"33";
|
||||
inline constexpr auto SIDS_RECIPROCAL = L"34";
|
||||
inline constexpr auto SIDS_DMS = L"35";
|
||||
inline constexpr auto SIDS_CUBEROOT = L"36";
|
||||
inline constexpr auto SIDS_POWTEN = L"37";
|
||||
inline constexpr auto SIDS_PERCENT = L"38";
|
||||
inline constexpr auto SIDS_SCIENTIFIC_NOTATION = L"39";
|
||||
inline constexpr auto SIDS_PI = L"40";
|
||||
inline constexpr auto SIDS_EQUAL = L"41";
|
||||
inline constexpr auto SIDS_MC = L"42";
|
||||
inline constexpr auto SIDS_MR = L"43";
|
||||
inline constexpr auto SIDS_MS = L"44";
|
||||
inline constexpr auto SIDS_MPLUS = L"45";
|
||||
inline constexpr auto SIDS_MMINUS = L"46";
|
||||
inline constexpr auto SIDS_EXP = L"47";
|
||||
inline constexpr auto SIDS_OPEN_PAREN = L"48";
|
||||
inline constexpr auto SIDS_CLOSE_PAREN = L"49";
|
||||
inline constexpr auto SIDS_0 = L"50";
|
||||
inline constexpr auto SIDS_1 = L"51";
|
||||
inline constexpr auto SIDS_2 = L"52";
|
||||
inline constexpr auto SIDS_3 = L"53";
|
||||
inline constexpr auto SIDS_4 = L"54";
|
||||
inline constexpr auto SIDS_5 = L"55";
|
||||
inline constexpr auto SIDS_6 = L"56";
|
||||
inline constexpr auto SIDS_7 = L"57";
|
||||
inline constexpr auto SIDS_8 = L"58";
|
||||
inline constexpr auto SIDS_9 = L"59";
|
||||
inline constexpr auto SIDS_A = L"60";
|
||||
inline constexpr auto SIDS_B = L"61";
|
||||
inline constexpr auto SIDS_C = L"62";
|
||||
inline constexpr auto SIDS_D = L"63";
|
||||
inline constexpr auto SIDS_E = L"64";
|
||||
inline constexpr auto SIDS_F = L"65";
|
||||
inline constexpr auto SIDS_FRAC = L"66";
|
||||
inline constexpr auto SIDS_SIND = L"67";
|
||||
inline constexpr auto SIDS_COSD = L"68";
|
||||
inline constexpr auto SIDS_TAND = L"69";
|
||||
inline constexpr auto SIDS_ASIND = L"70";
|
||||
inline constexpr auto SIDS_ACOSD = L"71";
|
||||
inline constexpr auto SIDS_ATAND = L"72";
|
||||
inline constexpr auto SIDS_SINR = L"73";
|
||||
inline constexpr auto SIDS_COSR = L"74";
|
||||
inline constexpr auto SIDS_TANR = L"75";
|
||||
inline constexpr auto SIDS_ASINR = L"76";
|
||||
inline constexpr auto SIDS_ACOSR = L"77";
|
||||
inline constexpr auto SIDS_ATANR = L"78";
|
||||
inline constexpr auto SIDS_SING = L"79";
|
||||
inline constexpr auto SIDS_COSG = L"80";
|
||||
inline constexpr auto SIDS_TANG = L"81";
|
||||
inline constexpr auto SIDS_ASING = L"82";
|
||||
inline constexpr auto SIDS_ACOSG = L"83";
|
||||
inline constexpr auto SIDS_ATANG = L"84";
|
||||
inline constexpr auto SIDS_ASINH = L"85";
|
||||
inline constexpr auto SIDS_ACOSH = L"86";
|
||||
inline constexpr auto SIDS_ATANH = L"87";
|
||||
inline constexpr auto SIDS_POWE = L"88";
|
||||
inline constexpr auto SIDS_POWTEN2 = L"89";
|
||||
inline constexpr auto SIDS_SQRT2 = L"90";
|
||||
inline constexpr auto SIDS_SQR = L"91";
|
||||
inline constexpr auto SIDS_CUBE = L"92";
|
||||
inline constexpr auto SIDS_CUBERT = L"93";
|
||||
inline constexpr auto SIDS_FACT = L"94";
|
||||
inline constexpr auto SIDS_RECIPROC = L"95";
|
||||
inline constexpr auto SIDS_DEGREES = L"96";
|
||||
inline constexpr auto SIDS_NEGATE = L"97";
|
||||
inline constexpr auto SIDS_RSH2 = L"98";
|
||||
inline constexpr auto SIDS_DIVIDEBYZERO = L"99";
|
||||
inline constexpr auto SIDS_DOMAIN = L"100";
|
||||
inline constexpr auto SIDS_UNDEFINED = L"101";
|
||||
inline constexpr auto SIDS_POS_INFINITY = L"102";
|
||||
inline constexpr auto SIDS_NEG_INFINITY = L"103";
|
||||
inline constexpr auto SIDS_ABORTED = L"104";
|
||||
inline constexpr auto SIDS_NOMEM = L"105";
|
||||
inline constexpr auto SIDS_TOOMANY = L"106";
|
||||
inline constexpr auto SIDS_OVERFLOW = L"107";
|
||||
inline constexpr auto SIDS_NORESULT = L"108";
|
||||
inline constexpr auto SIDS_INSUFFICIENT_DATA = L"109";
|
||||
// 110 is skipped by CSTRINGSENGMAX
|
||||
#define SIDS_ERR_UNK_CH L"111"
|
||||
#define SIDS_ERR_UNK_FN L"112"
|
||||
#define SIDS_ERR_UNEX_NUM L"113"
|
||||
#define SIDS_ERR_UNEX_CH L"114"
|
||||
#define SIDS_ERR_UNEX_SZ L"115"
|
||||
#define SIDS_ERR_MISMATCH_CLOSE L"116"
|
||||
#define SIDS_ERR_UNEX_END L"117"
|
||||
#define SIDS_ERR_SG_INV_ERROR L"118"
|
||||
#define SIDS_ERR_INPUT_OVERFLOW L"119"
|
||||
#define SIDS_ERR_OUTPUT_OVERFLOW L"120"
|
||||
inline constexpr auto SIDS_ERR_UNK_CH = L"111";
|
||||
inline constexpr auto SIDS_ERR_UNK_FN = L"112";
|
||||
inline constexpr auto SIDS_ERR_UNEX_NUM = L"113";
|
||||
inline constexpr auto SIDS_ERR_UNEX_CH = L"114";
|
||||
inline constexpr auto SIDS_ERR_UNEX_SZ = L"115";
|
||||
inline constexpr auto SIDS_ERR_MISMATCH_CLOSE = L"116";
|
||||
inline constexpr auto SIDS_ERR_UNEX_END = L"117";
|
||||
inline constexpr auto SIDS_ERR_SG_INV_ERROR = L"118";
|
||||
inline constexpr auto SIDS_ERR_INPUT_OVERFLOW = L"119";
|
||||
inline constexpr auto SIDS_ERR_OUTPUT_OVERFLOW = L"120";
|
||||
|
||||
__declspec(selectany) std::wstring g_sids[] =
|
||||
// Include the resource key ID from above into this vector to load it into memory for the engine to use
|
||||
inline constexpr std::array<std::wstring_view, 120> g_sids =
|
||||
{
|
||||
std::wstring(SIDS_PLUS_MINUS),
|
||||
std::wstring(SIDS_C),
|
||||
std::wstring(SIDS_CE),
|
||||
std::wstring(SIDS_BACKSPACE),
|
||||
std::wstring(SIDS_DECIMAL_SEPARATOR),
|
||||
std::wstring(SIDS_EMPTY_STRING),
|
||||
std::wstring(SIDS_AND),
|
||||
std::wstring(SIDS_OR),
|
||||
std::wstring(SIDS_XOR),
|
||||
std::wstring(SIDS_LSH),
|
||||
std::wstring(SIDS_RSH),
|
||||
std::wstring(SIDS_DIVIDE),
|
||||
std::wstring(SIDS_MULTIPLY),
|
||||
std::wstring(SIDS_PLUS),
|
||||
std::wstring(SIDS_MINUS),
|
||||
std::wstring(SIDS_MOD),
|
||||
std::wstring(SIDS_YROOT),
|
||||
std::wstring(SIDS_POW_HAT),
|
||||
std::wstring(SIDS_INT),
|
||||
std::wstring(SIDS_ROL),
|
||||
std::wstring(SIDS_ROR),
|
||||
std::wstring(SIDS_NOT),
|
||||
std::wstring(SIDS_SIN),
|
||||
std::wstring(SIDS_COS),
|
||||
std::wstring(SIDS_TAN),
|
||||
std::wstring(SIDS_SINH),
|
||||
std::wstring(SIDS_COSH),
|
||||
std::wstring(SIDS_TANH),
|
||||
std::wstring(SIDS_LN),
|
||||
std::wstring(SIDS_LOG),
|
||||
std::wstring(SIDS_SQRT),
|
||||
std::wstring(SIDS_XPOW2),
|
||||
std::wstring(SIDS_XPOW3),
|
||||
std::wstring(SIDS_NFACTORIAL),
|
||||
std::wstring(SIDS_RECIPROCAL),
|
||||
std::wstring(SIDS_DMS),
|
||||
std::wstring(SIDS_CUBEROOT),
|
||||
std::wstring(SIDS_POWTEN),
|
||||
std::wstring(SIDS_PERCENT),
|
||||
std::wstring(SIDS_SCIENTIFIC_NOTATION),
|
||||
std::wstring(SIDS_PI),
|
||||
std::wstring(SIDS_EQUAL),
|
||||
std::wstring(SIDS_MC),
|
||||
std::wstring(SIDS_MR),
|
||||
std::wstring(SIDS_MS),
|
||||
std::wstring(SIDS_MPLUS),
|
||||
std::wstring(SIDS_MMINUS),
|
||||
std::wstring(SIDS_EXP),
|
||||
std::wstring(SIDS_OPEN_PAREN),
|
||||
std::wstring(SIDS_CLOSE_PAREN),
|
||||
std::wstring(SIDS_0),
|
||||
std::wstring(SIDS_1),
|
||||
std::wstring(SIDS_2),
|
||||
std::wstring(SIDS_3),
|
||||
std::wstring(SIDS_4),
|
||||
std::wstring(SIDS_5),
|
||||
std::wstring(SIDS_6),
|
||||
std::wstring(SIDS_7),
|
||||
std::wstring(SIDS_8),
|
||||
std::wstring(SIDS_9),
|
||||
std::wstring(SIDS_A),
|
||||
std::wstring(SIDS_B),
|
||||
std::wstring(SIDS_C),
|
||||
std::wstring(SIDS_D),
|
||||
std::wstring(SIDS_E),
|
||||
std::wstring(SIDS_F),
|
||||
std::wstring(SIDS_FRAC),
|
||||
std::wstring(SIDS_SIND),
|
||||
std::wstring(SIDS_COSD),
|
||||
std::wstring(SIDS_TAND),
|
||||
std::wstring(SIDS_ASIND),
|
||||
std::wstring(SIDS_ACOSD),
|
||||
std::wstring(SIDS_ATAND),
|
||||
std::wstring(SIDS_SINR),
|
||||
std::wstring(SIDS_COSR),
|
||||
std::wstring(SIDS_TANR),
|
||||
std::wstring(SIDS_ASINR),
|
||||
std::wstring(SIDS_ACOSR),
|
||||
std::wstring(SIDS_ATANR),
|
||||
std::wstring(SIDS_SING),
|
||||
std::wstring(SIDS_COSG),
|
||||
std::wstring(SIDS_TANG),
|
||||
std::wstring(SIDS_ASING),
|
||||
std::wstring(SIDS_ACOSG),
|
||||
std::wstring(SIDS_ATANG),
|
||||
std::wstring(SIDS_ASINH),
|
||||
std::wstring(SIDS_ACOSH),
|
||||
std::wstring(SIDS_ATANH),
|
||||
std::wstring(SIDS_POWE),
|
||||
std::wstring(SIDS_POWTEN2),
|
||||
std::wstring(SIDS_SQRT2),
|
||||
std::wstring(SIDS_SQR),
|
||||
std::wstring(SIDS_CUBE),
|
||||
std::wstring(SIDS_CUBERT),
|
||||
std::wstring(SIDS_FACT),
|
||||
std::wstring(SIDS_RECIPROC),
|
||||
std::wstring(SIDS_DEGREES),
|
||||
std::wstring(SIDS_NEGATE),
|
||||
std::wstring(SIDS_RSH),
|
||||
std::wstring(SIDS_DIVIDEBYZERO),
|
||||
std::wstring(SIDS_DOMAIN),
|
||||
std::wstring(SIDS_UNDEFINED),
|
||||
std::wstring(SIDS_POS_INFINITY),
|
||||
std::wstring(SIDS_NEG_INFINITY),
|
||||
std::wstring(SIDS_ABORTED),
|
||||
std::wstring(SIDS_NOMEM),
|
||||
std::wstring(SIDS_TOOMANY),
|
||||
std::wstring(SIDS_OVERFLOW),
|
||||
std::wstring(SIDS_NORESULT),
|
||||
std::wstring(SIDS_INSUFFICIENT_DATA),
|
||||
std::wstring(SIDS_ERR_UNK_CH),
|
||||
std::wstring(SIDS_ERR_UNK_FN),
|
||||
std::wstring(SIDS_ERR_UNEX_NUM),
|
||||
std::wstring(SIDS_ERR_UNEX_CH),
|
||||
std::wstring(SIDS_ERR_UNEX_SZ),
|
||||
std::wstring(SIDS_ERR_MISMATCH_CLOSE),
|
||||
std::wstring(SIDS_ERR_UNEX_END),
|
||||
std::wstring(SIDS_ERR_SG_INV_ERROR),
|
||||
std::wstring(SIDS_ERR_INPUT_OVERFLOW),
|
||||
std::wstring(SIDS_ERR_OUTPUT_OVERFLOW)
|
||||
SIDS_PLUS_MINUS,
|
||||
SIDS_C,
|
||||
SIDS_CE,
|
||||
SIDS_BACKSPACE,
|
||||
SIDS_DECIMAL_SEPARATOR,
|
||||
SIDS_EMPTY_STRING,
|
||||
SIDS_AND,
|
||||
SIDS_OR,
|
||||
SIDS_XOR,
|
||||
SIDS_LSH,
|
||||
SIDS_RSH,
|
||||
SIDS_DIVIDE,
|
||||
SIDS_MULTIPLY,
|
||||
SIDS_PLUS,
|
||||
SIDS_MINUS,
|
||||
SIDS_MOD,
|
||||
SIDS_YROOT,
|
||||
SIDS_POW_HAT,
|
||||
SIDS_INT,
|
||||
SIDS_ROL,
|
||||
SIDS_ROR,
|
||||
SIDS_NOT,
|
||||
SIDS_SIN,
|
||||
SIDS_COS,
|
||||
SIDS_TAN,
|
||||
SIDS_SINH,
|
||||
SIDS_COSH,
|
||||
SIDS_TANH,
|
||||
SIDS_LN,
|
||||
SIDS_LOG,
|
||||
SIDS_SQRT,
|
||||
SIDS_XPOW2,
|
||||
SIDS_XPOW3,
|
||||
SIDS_NFACTORIAL,
|
||||
SIDS_RECIPROCAL,
|
||||
SIDS_DMS,
|
||||
SIDS_CUBEROOT,
|
||||
SIDS_POWTEN,
|
||||
SIDS_PERCENT,
|
||||
SIDS_SCIENTIFIC_NOTATION,
|
||||
SIDS_PI,
|
||||
SIDS_EQUAL,
|
||||
SIDS_MC,
|
||||
SIDS_MR,
|
||||
SIDS_MS,
|
||||
SIDS_MPLUS,
|
||||
SIDS_MMINUS,
|
||||
SIDS_EXP,
|
||||
SIDS_OPEN_PAREN,
|
||||
SIDS_CLOSE_PAREN,
|
||||
SIDS_0,
|
||||
SIDS_1,
|
||||
SIDS_2,
|
||||
SIDS_3,
|
||||
SIDS_4,
|
||||
SIDS_5,
|
||||
SIDS_6,
|
||||
SIDS_7,
|
||||
SIDS_8,
|
||||
SIDS_9,
|
||||
SIDS_A,
|
||||
SIDS_B,
|
||||
SIDS_C,
|
||||
SIDS_D,
|
||||
SIDS_E,
|
||||
SIDS_F,
|
||||
SIDS_FRAC,
|
||||
SIDS_SIND,
|
||||
SIDS_COSD,
|
||||
SIDS_TAND,
|
||||
SIDS_ASIND,
|
||||
SIDS_ACOSD,
|
||||
SIDS_ATAND,
|
||||
SIDS_SINR,
|
||||
SIDS_COSR,
|
||||
SIDS_TANR,
|
||||
SIDS_ASINR,
|
||||
SIDS_ACOSR,
|
||||
SIDS_ATANR,
|
||||
SIDS_SING,
|
||||
SIDS_COSG,
|
||||
SIDS_TANG,
|
||||
SIDS_ASING,
|
||||
SIDS_ACOSG,
|
||||
SIDS_ATANG,
|
||||
SIDS_ASINH,
|
||||
SIDS_ACOSH,
|
||||
SIDS_ATANH,
|
||||
SIDS_POWE,
|
||||
SIDS_POWTEN2,
|
||||
SIDS_SQRT2,
|
||||
SIDS_SQR,
|
||||
SIDS_CUBE,
|
||||
SIDS_CUBERT,
|
||||
SIDS_FACT,
|
||||
SIDS_RECIPROC,
|
||||
SIDS_DEGREES,
|
||||
SIDS_NEGATE,
|
||||
SIDS_RSH,
|
||||
SIDS_DIVIDEBYZERO,
|
||||
SIDS_DOMAIN,
|
||||
SIDS_UNDEFINED,
|
||||
SIDS_POS_INFINITY,
|
||||
SIDS_NEG_INFINITY,
|
||||
SIDS_ABORTED,
|
||||
SIDS_NOMEM,
|
||||
SIDS_TOOMANY,
|
||||
SIDS_OVERFLOW,
|
||||
SIDS_NORESULT,
|
||||
SIDS_INSUFFICIENT_DATA,
|
||||
SIDS_ERR_UNK_CH,
|
||||
SIDS_ERR_UNK_FN,
|
||||
SIDS_ERR_UNEX_NUM,
|
||||
SIDS_ERR_UNEX_CH,
|
||||
SIDS_ERR_UNEX_SZ,
|
||||
SIDS_ERR_MISMATCH_CLOSE,
|
||||
SIDS_ERR_UNEX_END,
|
||||
SIDS_ERR_SG_INV_ERROR,
|
||||
SIDS_ERR_INPUT_OVERFLOW,
|
||||
SIDS_ERR_OUTPUT_OVERFLOW
|
||||
};
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#pragma once
|
||||
|
||||
// CalcErr.h
|
||||
//
|
||||
// Defines the error codes thrown by ratpak and caught by Calculator
|
||||
|
@ -24,7 +26,7 @@
|
|||
// R - Reserved - not currently used for anything
|
||||
//
|
||||
// r - reserved portion of the facility code. Reserved for internal
|
||||
// use. Used to indicate HRESULT values that are not status
|
||||
// use. Used to indicate int32_t values that are not status
|
||||
// values, but are instead message ids for display strings.
|
||||
//
|
||||
// Facility - is the facility code
|
||||
|
@ -34,49 +36,51 @@
|
|||
// This format is based loosely on an OLE HRESULT and is compatible with the
|
||||
// SUCCEEDED and FAILED macros as well as the HRESULT_CODE macro
|
||||
|
||||
typedef int32_t ResultCode;
|
||||
|
||||
// CALC_E_DIVIDEBYZERO
|
||||
//
|
||||
// The current operation would require a divide by zero to complete
|
||||
#define CALC_E_DIVIDEBYZERO ((DWORD)0x80000000)
|
||||
#define CALC_E_DIVIDEBYZERO ((uint32_t)0x80000000)
|
||||
|
||||
// CALC_E_DOMAIN
|
||||
//
|
||||
// The given input is not within the domain of this function
|
||||
#define CALC_E_DOMAIN ((DWORD)0x80000001)
|
||||
#define CALC_E_DOMAIN ((uint32_t)0x80000001)
|
||||
|
||||
// CALC_E_INDEFINITE
|
||||
//
|
||||
// The result of this function is undefined
|
||||
#define CALC_E_INDEFINITE ((DWORD)0x80000002)
|
||||
#define CALC_E_INDEFINITE ((uint32_t)0x80000002)
|
||||
|
||||
// CALC_E_POSINFINITY
|
||||
//
|
||||
// The result of this function is Positive Infinity.
|
||||
#define CALC_E_POSINFINITY ((DWORD)0x80000003)
|
||||
#define CALC_E_POSINFINITY ((uint32_t)0x80000003)
|
||||
|
||||
// CALC_E_NEGINFINITY
|
||||
//
|
||||
// The result of this function is Negative Infinity
|
||||
#define CALC_E_NEGINFINITY ((DWORD)0x80000004)
|
||||
#define CALC_E_NEGINFINITY ((uint32_t)0x80000004)
|
||||
|
||||
// CALC_E_INVALIDRANGE
|
||||
//
|
||||
// The given input is within the domain of the function but is beyond
|
||||
// the range for which calc can successfully compute the answer
|
||||
#define CALC_E_INVALIDRANGE ((DWORD)0x80000006)
|
||||
#define CALC_E_INVALIDRANGE ((uint32_t)0x80000006)
|
||||
|
||||
// CALC_E_OUTOFMEMORY
|
||||
//
|
||||
// There is not enough free memory to complete the requested function
|
||||
#define CALC_E_OUTOFMEMORY ((DWORD)0x80000007)
|
||||
#define CALC_E_OUTOFMEMORY ((uint32_t)0x80000007)
|
||||
|
||||
// CALC_E_OVERFLOW
|
||||
//
|
||||
// The result of this operation is an overflow
|
||||
#define CALC_E_OVERFLOW ((DWORD)0x80000008)
|
||||
#define CALC_E_OVERFLOW ((uint32_t)0x80000008)
|
||||
|
||||
// CALC_E_NORESULT
|
||||
//
|
||||
// The result of this operation is undefined
|
||||
#define CALC_E_NORESULT ((DWORD)0x80000009)
|
||||
#define CALC_E_NORESULT ((uint32_t)0x80000009)
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ void __inline mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
else
|
||||
{
|
||||
// if pa is one and b isn't just copy b. and adjust the sign.
|
||||
long sign = (*pa)->sign;
|
||||
int32_t sign = (*pa)->sign;
|
||||
DUPNUM(*pa,b);
|
||||
(*pa)->sign *= sign;
|
||||
}
|
||||
|
@ -86,14 +86,14 @@ void _mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
MANTTYPE *ptrc; // ptrc is a pointer to the mantissa of c.
|
||||
MANTTYPE *ptrcoffset; // ptrcoffset, is the anchor location of the next
|
||||
// single digit multiply partial result.
|
||||
long iadigit=0; // Index of digit being used in the first number.
|
||||
long ibdigit=0; // Index of digit being used in the second number.
|
||||
int32_t iadigit=0; // Index of digit being used in the first number.
|
||||
int32_t ibdigit=0; // Index of digit being used in the second number.
|
||||
MANTTYPE da=0; // da is the digit from the fist number.
|
||||
TWO_MANTTYPE cy=0; // cy is the carry resulting from the addition of
|
||||
// a multiplied row into the result.
|
||||
TWO_MANTTYPE mcy=0; // mcy is the resultant from a single
|
||||
// multiply, AND the carry of that multiply.
|
||||
long icdigit=0; // Index of digit being calculated in final result.
|
||||
int32_t icdigit=0; // Index of digit being calculated in final result.
|
||||
|
||||
a=*pa;
|
||||
|
||||
|
@ -117,7 +117,7 @@ void _mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
for ( ibdigit = b->cdigit; ibdigit > 0; ibdigit-- )
|
||||
{
|
||||
cy = 0;
|
||||
mcy = (DWORDLONG)da * (*ptrb);
|
||||
mcy = (uint64_t)da * (*ptrb);
|
||||
if ( mcy )
|
||||
{
|
||||
icdigit = 0;
|
||||
|
@ -132,10 +132,10 @@ void _mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
{
|
||||
|
||||
// update carry from addition(s) and multiply.
|
||||
cy += (TWO_MANTTYPE)ptrc[icdigit]+((DWORD)mcy&((DWORD)~BASEX));
|
||||
cy += (TWO_MANTTYPE)ptrc[icdigit]+((uint32_t)mcy&((uint32_t)~BASEX));
|
||||
|
||||
// update result digit from
|
||||
ptrc[icdigit++]=(MANTTYPE)((DWORD)cy&((DWORD)~BASEX));
|
||||
ptrc[icdigit++]=(MANTTYPE)((uint32_t)cy&((uint32_t)~BASEX));
|
||||
|
||||
// update carries from
|
||||
mcy >>= BASEXPWR;
|
||||
|
@ -160,9 +160,9 @@ void _mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: numpowlongx
|
||||
// FUNCTION: numpowi32x
|
||||
//
|
||||
// ARGUMENTS: root as number power as long
|
||||
// ARGUMENTS: root as number power as int32_t
|
||||
// number.
|
||||
//
|
||||
// RETURN: None root is changed.
|
||||
|
@ -174,10 +174,10 @@ void _mulnumx( PNUMBER *pa, PNUMBER b )
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void numpowlongx( _Inout_ PNUMBER *proot, _In_ long power )
|
||||
void numpowi32x( _Inout_ PNUMBER *proot, _In_ int32_t power )
|
||||
|
||||
{
|
||||
PNUMBER lret = longtonum( 1, BASEX );
|
||||
PNUMBER lret = i32tonum( 1, BASEX );
|
||||
|
||||
// Once the power remaining is zero we are done.
|
||||
while ( power > 0 )
|
||||
|
@ -232,7 +232,7 @@ void __inline divnumx( PNUMBER *pa, PNUMBER b, int32_t precision)
|
|||
else
|
||||
{
|
||||
// if pa is one and b is not one, just copy b, and adjust the sign.
|
||||
long sign = (*pa)->sign;
|
||||
int32_t sign = (*pa)->sign;
|
||||
DUPNUM(*pa,b);
|
||||
(*pa)->sign *= sign;
|
||||
}
|
||||
|
@ -266,10 +266,10 @@ void _divnumx( PNUMBER *pa, PNUMBER b, int32_t precision)
|
|||
// guesses one bit too far.
|
||||
PNUMBER tmp = nullptr; // current guess being worked on for divide.
|
||||
PNUMBER rem = nullptr; // remainder after applying guess.
|
||||
long cdigits; // count of digits for answer.
|
||||
int32_t cdigits; // count of digits for answer.
|
||||
MANTTYPE *ptrc; // ptrc is a pointer to the mantissa of c.
|
||||
|
||||
long thismax = precision + g_ratio; // set a maximum number of internal digits
|
||||
int32_t thismax = precision + g_ratio; // set a maximum number of internal digits
|
||||
// to shoot for in the divide.
|
||||
|
||||
a=*pa;
|
||||
|
@ -301,14 +301,14 @@ void _divnumx( PNUMBER *pa, PNUMBER b, int32_t precision)
|
|||
|
||||
while ( cdigits++ < thismax && !zernum(rem) )
|
||||
{
|
||||
long digit = 0;
|
||||
int32_t digit = 0;
|
||||
*ptrc = 0;
|
||||
while ( !lessnum( rem, b ) )
|
||||
{
|
||||
digit = 1;
|
||||
DUPNUM( tmp, b );
|
||||
destroynum( lasttmp );
|
||||
lasttmp=longtonum( 0, BASEX );
|
||||
lasttmp=i32tonum( 0, BASEX );
|
||||
while ( lessnum( tmp, rem ) )
|
||||
{
|
||||
destroynum( lasttmp );
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
// Description
|
||||
//
|
||||
// Contains conversion, input and output routines for numbers rationals
|
||||
// and longs.
|
||||
// and i32s.
|
||||
//
|
||||
//
|
||||
//
|
||||
|
@ -29,12 +29,87 @@ static constexpr wstring_view DIGITS = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabc
|
|||
|
||||
// ratio of internal 'digits' to output 'digits'
|
||||
// Calculated elsewhere as part of initialization and when base is changed
|
||||
long g_ratio; // int(log(2L^BASEXPWR)/log(radix))
|
||||
int32_t g_ratio; // int(log(2L^BASEXPWR)/log(radix))
|
||||
// Default decimal separator
|
||||
wchar_t g_decimalSeparator = L'.';
|
||||
|
||||
// The following defines and Calc_ULong* functions were taken from
|
||||
// https://github.com/dotnet/coreclr/blob/8b1595b74c943b33fa794e63e440e6f4c9679478/src/pal/inc/rt/intsafe.h
|
||||
// under MIT License
|
||||
// See also
|
||||
// * https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
|
||||
// * https://sourceforge.net/p/predef/wiki/Architectures/
|
||||
#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \
|
||||
|| defined(_M_AMD64) || defined(__ARM_ARCH) || defined(__x86_64__) || defined(_M_ARM64)
|
||||
|
||||
#ifndef Calc_UInt32x32To64
|
||||
#define Calc_UInt32x32To64(a, b) ((uint64_t)((uint32_t)(a)) * (uint64_t)((uint32_t)(b)))
|
||||
#endif
|
||||
|
||||
#elif defined(_M_IX86) || defined(__i386__) || defined(_M_ARM)
|
||||
|
||||
#ifndef Calc_UInt32x32To64
|
||||
#define Calc_UInt32x32To64(a, b) (uint64_t)((uint64_t)(uint32_t)(a) * (uint32_t)(b))
|
||||
#endif
|
||||
#else
|
||||
|
||||
#error Must define a target architecture.
|
||||
|
||||
#endif
|
||||
|
||||
#define CALC_INTSAFE_E_ARITHMETIC_OVERFLOW ((int32_t)0x80070216L) // 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW
|
||||
#define CALC_ULONG_ERROR ((uint32_t)0xffffffffU)
|
||||
|
||||
namespace {
|
||||
int32_t
|
||||
Calc_ULongAdd(
|
||||
_In_ uint32_t ulAugend,
|
||||
_In_ uint32_t ulAddend,
|
||||
_Out_ uint32_t* pulResult)
|
||||
{
|
||||
int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW;
|
||||
*pulResult = CALC_ULONG_ERROR;
|
||||
|
||||
if ((ulAugend + ulAddend) >= ulAugend)
|
||||
{
|
||||
*pulResult = (ulAugend + ulAddend);
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
int32_t
|
||||
Calc_ULongLongToULong(
|
||||
_In_ uint64_t ullOperand,
|
||||
_Out_ uint32_t* pulResult)
|
||||
{
|
||||
int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW;
|
||||
*pulResult = CALC_ULONG_ERROR;
|
||||
|
||||
if (ullOperand <= UINT32_MAX)
|
||||
{
|
||||
*pulResult = (uint32_t)ullOperand;
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
int32_t
|
||||
Calc_ULongMult(
|
||||
_In_ uint32_t ulMultiplicand,
|
||||
_In_ uint32_t ulMultiplier,
|
||||
_Out_ uint32_t* pulResult)
|
||||
{
|
||||
uint64_t ull64Result = Calc_UInt32x32To64(ulMultiplicand, ulMultiplier);
|
||||
|
||||
return Calc_ULongLongToULong(ull64Result, pulResult);
|
||||
}
|
||||
}
|
||||
|
||||
// Used to strip trailing zeros, and prevent combinatorial explosions
|
||||
bool stripzeroesnum(_Inout_ PNUMBER pnum, long starting);
|
||||
bool stripzeroesnum(_Inout_ PNUMBER pnum, int32_t starting);
|
||||
|
||||
void SetDecimalSeparator(wchar_t decimalSeparator)
|
||||
{
|
||||
|
@ -125,16 +200,16 @@ void _destroyrat( _In_ PRAT prat )
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PNUMBER _createnum( _In_ ULONG size )
|
||||
PNUMBER _createnum( _In_ uint32_t size )
|
||||
|
||||
{
|
||||
PNUMBER pnumret= nullptr;
|
||||
ULONG cbAlloc;
|
||||
uint32_t cbAlloc;
|
||||
|
||||
// sizeof( MANTTYPE ) is the size of a 'digit'
|
||||
if (SUCCEEDED(ULongAdd(size, 1, &cbAlloc)) &&
|
||||
SUCCEEDED(ULongMult(cbAlloc, sizeof(MANTTYPE), &cbAlloc)) &&
|
||||
SUCCEEDED(ULongAdd(cbAlloc, sizeof(NUMBER), &cbAlloc)))
|
||||
if (SUCCEEDED(Calc_ULongAdd(size, 1, &cbAlloc)) &&
|
||||
SUCCEEDED(Calc_ULongMult(cbAlloc, sizeof(MANTTYPE), &cbAlloc)) &&
|
||||
SUCCEEDED(Calc_ULongAdd(cbAlloc, sizeof(NUMBER), &cbAlloc)))
|
||||
{
|
||||
pnumret = (PNUMBER)zmalloc( cbAlloc );
|
||||
if ( pnumret == nullptr)
|
||||
|
@ -203,7 +278,7 @@ PRAT numtorat( _In_ PNUMBER pin, uint32_t radix)
|
|||
PNUMBER pnRadixn= nullptr;
|
||||
DUPNUM( pnRadixn, pin );
|
||||
|
||||
PNUMBER qnRadixn=longtonum( 1, radix);
|
||||
PNUMBER qnRadixn=i32tonum( 1, radix);
|
||||
|
||||
// Ensure p and q start out as integers.
|
||||
if ( pnRadixn->exp < 0 )
|
||||
|
@ -245,24 +320,24 @@ PRAT numtorat( _In_ PNUMBER pin, uint32_t radix)
|
|||
PNUMBER nRadixxtonum( _In_ PNUMBER a, uint32_t radix, int32_t precision)
|
||||
|
||||
{
|
||||
unsigned long bitmask;
|
||||
unsigned long cdigits;
|
||||
uint32_t bitmask;
|
||||
uint32_t cdigits;
|
||||
MANTTYPE *ptr;
|
||||
|
||||
PNUMBER sum = longtonum( 0, radix );
|
||||
PNUMBER powofnRadix = longtonum( BASEX, radix );
|
||||
PNUMBER sum = i32tonum( 0, radix );
|
||||
PNUMBER powofnRadix = i32tonum( BASEX, radix );
|
||||
|
||||
// A large penalty is paid for conversion of digits no one will see anyway.
|
||||
// limit the digits to the minimum of the existing precision or the
|
||||
// requested precision.
|
||||
cdigits = precision + 1;
|
||||
if ( cdigits > (unsigned long)a->cdigit )
|
||||
if ( cdigits > (uint32_t)a->cdigit )
|
||||
{
|
||||
cdigits = (unsigned long)a->cdigit;
|
||||
cdigits = (uint32_t)a->cdigit;
|
||||
}
|
||||
|
||||
// scale by the internal base to the internal exponent offset of the LSD
|
||||
numpowlong( &powofnRadix, a->exp + (a->cdigit - cdigits), radix, precision);
|
||||
numpowi32( &powofnRadix, a->exp + (a->cdigit - cdigits), radix, precision);
|
||||
|
||||
// Loop over all the relative digits from MSD to LSD
|
||||
for ( ptr = &(a->mant[a->cdigit-1]); cdigits > 0;
|
||||
|
@ -303,8 +378,8 @@ PNUMBER nRadixxtonum( _In_ PNUMBER a, uint32_t radix, int32_t precision)
|
|||
|
||||
PNUMBER numtonRadixx(_In_ PNUMBER a, uint32_t radix)
|
||||
{
|
||||
PNUMBER pnumret = longtonum(0, BASEX); // pnumret is the number in internal form.
|
||||
PNUMBER num_radix = longtonum(radix, BASEX);
|
||||
PNUMBER pnumret = i32tonum(0, BASEX); // pnumret is the number in internal form.
|
||||
PNUMBER num_radix = i32tonum(radix, BASEX);
|
||||
MANTTYPE *ptrdigit = a->mant; // pointer to digit being worked on.
|
||||
|
||||
// Digits are in reverse order, back over them LSD first.
|
||||
|
@ -312,20 +387,20 @@ PNUMBER numtonRadixx(_In_ PNUMBER a, uint32_t radix)
|
|||
|
||||
PNUMBER thisdigit = nullptr; // thisdigit holds the current digit of a
|
||||
// being summed into result.
|
||||
long idigit; // idigit is the iterate of digits in a.
|
||||
int32_t idigit; // idigit is the iterate of digits in a.
|
||||
for ( idigit = 0; idigit < a->cdigit; idigit++ )
|
||||
{
|
||||
mulnumx( &pnumret, num_radix);
|
||||
// WARNING:
|
||||
// This should just smack in each digit into a 'special' thisdigit.
|
||||
// and not do the overhead of recreating the number type each time.
|
||||
thisdigit = longtonum( *ptrdigit--, BASEX );
|
||||
thisdigit = i32tonum( *ptrdigit--, BASEX );
|
||||
addnum( &pnumret, thisdigit, BASEX );
|
||||
destroynum( thisdigit );
|
||||
}
|
||||
|
||||
// Calculate the exponent of the external base for scaling.
|
||||
numpowlongx( &num_radix, a->exp );
|
||||
numpowi32x( &num_radix, a->exp );
|
||||
|
||||
// ... and scale the result.
|
||||
mulnumx( &pnumret, num_radix);
|
||||
|
@ -391,7 +466,7 @@ PRAT StringToRat(bool mantissaIsNegative, wstring_view mantissa, bool exponentIs
|
|||
}
|
||||
|
||||
// Deal with exponent
|
||||
long expt = 0;
|
||||
int32_t expt = 0;
|
||||
if (!exponent.empty())
|
||||
{
|
||||
// Exponent specified, convert to number form.
|
||||
|
@ -404,18 +479,18 @@ PRAT StringToRat(bool mantissaIsNegative, wstring_view mantissa, bool exponentIs
|
|||
}
|
||||
|
||||
// Convert exponent number form to native integral form, and cleanup.
|
||||
expt = numtolong(numExp, radix);
|
||||
expt = numtoi32(numExp, radix);
|
||||
destroynum(numExp);
|
||||
}
|
||||
|
||||
// Convert native integral exponent form to rational multiplier form.
|
||||
PNUMBER pnumexp = longtonum(radix, BASEX);
|
||||
numpowlongx(&pnumexp, abs(expt));
|
||||
PNUMBER pnumexp = i32tonum(radix, BASEX);
|
||||
numpowi32x(&pnumexp, abs(expt));
|
||||
|
||||
PRAT pratexp = nullptr;
|
||||
createrat(pratexp);
|
||||
DUPNUM(pratexp->pp, pnumexp);
|
||||
pratexp->pq = longtonum(1, BASEX);
|
||||
pratexp->pq = i32tonum(1, BASEX);
|
||||
destroynum(pnumexp);
|
||||
|
||||
if (exponentIsNegative)
|
||||
|
@ -574,11 +649,11 @@ wchar_t NormalizeCharDigit(wchar_t c, uint32_t radix)
|
|||
|
||||
PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precision)
|
||||
{
|
||||
long expSign = 1L; // expSign is exponent sign ( +/- 1 )
|
||||
long expValue = 0L; // expValue is exponent mantissa, should be unsigned
|
||||
int32_t expSign = 1L; // expSign is exponent sign ( +/- 1 )
|
||||
int32_t expValue = 0L; // expValue is exponent mantissa, should be unsigned
|
||||
|
||||
PNUMBER pnumret = nullptr;
|
||||
createnum(pnumret, static_cast<ULONG>(numberString.length()));
|
||||
createnum(pnumret, static_cast<uint32_t>(numberString.length()));
|
||||
pnumret->sign = 1L;
|
||||
pnumret->cdigit = 0;
|
||||
pnumret->exp = 0;
|
||||
|
@ -637,7 +712,7 @@ PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precis
|
|||
if (pos != wstring_view::npos)
|
||||
{
|
||||
expValue *= radix;
|
||||
expValue += static_cast<long>(pos);
|
||||
expValue += static_cast<int32_t>(pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -683,7 +758,7 @@ PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precis
|
|||
}
|
||||
else
|
||||
{
|
||||
while (pnumret->cdigit < static_cast<long>(numberString.length()))
|
||||
while (pnumret->cdigit < static_cast<int32_t>(numberString.length()))
|
||||
{
|
||||
pnumret->cdigit++;
|
||||
pnumret->exp--;
|
||||
|
@ -706,65 +781,65 @@ PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precis
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: longtorat
|
||||
// FUNCTION: i32torat
|
||||
//
|
||||
// ARGUMENTS: long
|
||||
// ARGUMENTS: int32_t
|
||||
//
|
||||
// RETURN: Rational representation of long input.
|
||||
// RETURN: Rational representation of int32_t input.
|
||||
//
|
||||
// DESCRIPTION: Converts long input to rational (p over q)
|
||||
// form, where q is 1 and p is the long.
|
||||
// DESCRIPTION: Converts int32_t input to rational (p over q)
|
||||
// form, where q is 1 and p is the int32_t.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PRAT longtorat( _In_ long inlong )
|
||||
PRAT i32torat( _In_ int32_t ini32 )
|
||||
|
||||
{
|
||||
PRAT pratret= nullptr;
|
||||
createrat( pratret );
|
||||
pratret->pp = longtonum(inlong, BASEX );
|
||||
pratret->pq = longtonum(1L, BASEX );
|
||||
pratret->pp = i32tonum(ini32, BASEX );
|
||||
pratret->pq = i32tonum(1L, BASEX );
|
||||
return( pratret );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: Ulongtorat
|
||||
// FUNCTION: Ui32torat
|
||||
//
|
||||
// ARGUMENTS: ulong
|
||||
// ARGUMENTS: ui32
|
||||
//
|
||||
// RETURN: Rational representation of unsigned long input.
|
||||
// RETURN: Rational representation of uint32_t input.
|
||||
//
|
||||
// DESCRIPTION: Converts unsigned long input to rational (p over q)
|
||||
// form, where q is 1 and p is the unsigned long. Being unsigned cant take negative
|
||||
// DESCRIPTION: Converts uint32_t input to rational (p over q)
|
||||
// form, where q is 1 and p is the uint32_t. Being unsigned cant take negative
|
||||
// numbers, but the full range of unsigned numbers
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PRAT Ulongtorat( _In_ unsigned long inulong )
|
||||
PRAT Ui32torat( _In_ uint32_t inui32 )
|
||||
|
||||
{
|
||||
PRAT pratret= nullptr;
|
||||
createrat( pratret );
|
||||
pratret->pp = Ulongtonum(inulong, BASEX );
|
||||
pratret->pq = longtonum(1L, BASEX );
|
||||
pratret->pp = Ui32tonum(inui32, BASEX );
|
||||
pratret->pq = i32tonum(1L, BASEX );
|
||||
return( pratret );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: longtonum
|
||||
// FUNCTION: i32tonum
|
||||
//
|
||||
// ARGUMENTS: long input and radix requested.
|
||||
// ARGUMENTS: int32_t input and radix requested.
|
||||
//
|
||||
// RETURN: number
|
||||
//
|
||||
// DESCRIPTION: Returns a number representation in the
|
||||
// base requested of the long value passed in.
|
||||
// base requested of the int32_t value passed in.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PNUMBER longtonum( long inlong, uint32_t radix)
|
||||
PNUMBER i32tonum( int32_t ini32, uint32_t radix)
|
||||
|
||||
{
|
||||
MANTTYPE *pmant;
|
||||
|
@ -774,10 +849,10 @@ PNUMBER longtonum( long inlong, uint32_t radix)
|
|||
pmant = pnumret->mant;
|
||||
pnumret->cdigit = 0;
|
||||
pnumret->exp = 0;
|
||||
if ( inlong < 0 )
|
||||
if ( ini32 < 0 )
|
||||
{
|
||||
pnumret->sign = -1;
|
||||
inlong *= -1;
|
||||
ini32 *= -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -785,30 +860,30 @@ PNUMBER longtonum( long inlong, uint32_t radix)
|
|||
}
|
||||
|
||||
do {
|
||||
*pmant++ = (MANTTYPE)(inlong % radix);
|
||||
inlong /= radix;
|
||||
*pmant++ = (MANTTYPE)(ini32 % radix);
|
||||
ini32 /= radix;
|
||||
pnumret->cdigit++;
|
||||
} while ( inlong );
|
||||
} while ( ini32 );
|
||||
|
||||
return( pnumret );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: Ulongtonum
|
||||
// FUNCTION: Ui32tonum
|
||||
//
|
||||
// ARGUMENTS: ULONG input and radix requested.
|
||||
// ARGUMENTS: uint32_t input and radix requested.
|
||||
//
|
||||
// RETURN: number
|
||||
//
|
||||
// DESCRIPTION: Returns a number representation in the
|
||||
// base requested of the unsigned long value passed in. Being unsigned number it has no
|
||||
// base requested of the uint32_t value passed in. Being unsigned number it has no
|
||||
// negative number and takes the full range of unsigned number
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
PNUMBER Ulongtonum(unsigned long inlong, uint32_t radix)
|
||||
PNUMBER Ui32tonum(uint32_t ini32, uint32_t radix)
|
||||
{
|
||||
MANTTYPE *pmant;
|
||||
PNUMBER pnumret= nullptr;
|
||||
|
@ -820,10 +895,10 @@ PNUMBER Ulongtonum(unsigned long inlong, uint32_t radix)
|
|||
pnumret->sign = 1;
|
||||
|
||||
do {
|
||||
*pmant++ = (MANTTYPE)(inlong % radix);
|
||||
inlong /= radix;
|
||||
*pmant++ = (MANTTYPE)(ini32 % radix);
|
||||
ini32 /= radix;
|
||||
pnumret->cdigit++;
|
||||
} while ( inlong );
|
||||
} while ( ini32 );
|
||||
|
||||
return( pnumret );
|
||||
}
|
||||
|
@ -831,23 +906,23 @@ PNUMBER Ulongtonum(unsigned long inlong, uint32_t radix)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: rattolong
|
||||
// FUNCTION: rattoi32
|
||||
//
|
||||
// ARGUMENTS: rational number in internal base, integer radix and int32_t precision.
|
||||
//
|
||||
// RETURN: long
|
||||
// RETURN: int32_t
|
||||
//
|
||||
// DESCRIPTION: returns the long representation of the
|
||||
// DESCRIPTION: returns the int32_t representation of the
|
||||
// number input. Assumes that the number is in the internal
|
||||
// base.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
long rattolong( _In_ PRAT prat , uint32_t radix, int32_t precision)
|
||||
int32_t rattoi32( _In_ PRAT prat , uint32_t radix, int32_t precision)
|
||||
{
|
||||
if ( rat_gt( prat, rat_max_long, precision) || rat_lt( prat, rat_min_long, precision) )
|
||||
if ( rat_gt( prat, rat_max_i32, precision) || rat_lt( prat, rat_min_i32, precision) )
|
||||
{
|
||||
// Don't attempt rattolong of anything too big or small
|
||||
// Don't attempt rattoi32 of anything too big or small
|
||||
throw( CALC_E_DOMAIN );
|
||||
}
|
||||
|
||||
|
@ -858,7 +933,7 @@ long rattolong( _In_ PRAT prat , uint32_t radix, int32_t precision)
|
|||
divnumx( &(pint->pp), pint->pq, precision);
|
||||
DUPNUM( pint->pq, num_one );
|
||||
|
||||
long lret = numtolong( pint->pp, BASEX );
|
||||
int32_t lret = numtoi32( pint->pp, BASEX );
|
||||
|
||||
destroyrat(pint);
|
||||
|
||||
|
@ -867,22 +942,22 @@ long rattolong( _In_ PRAT prat , uint32_t radix, int32_t precision)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: rattoUlong
|
||||
// FUNCTION: rattoUi32
|
||||
//
|
||||
// ARGUMENTS: rational number in internal base, integer radix and int32_t precision.
|
||||
//
|
||||
// RETURN: Ulong
|
||||
// RETURN: Ui32
|
||||
//
|
||||
// DESCRIPTION: returns the Ulong representation of the
|
||||
// DESCRIPTION: returns the Ui32 representation of the
|
||||
// number input. Assumes that the number is in the internal
|
||||
// base.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
unsigned long rattoUlong( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
||||
uint32_t rattoUi32( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
||||
{
|
||||
if ( rat_gt( prat, rat_dword, precision) || rat_lt( prat, rat_zero, precision) )
|
||||
{
|
||||
// Don't attempt rattoulong of anything too big or small
|
||||
// Don't attempt rattoui32 of anything too big or small
|
||||
throw( CALC_E_DOMAIN );
|
||||
}
|
||||
|
||||
|
@ -893,7 +968,7 @@ unsigned long rattoUlong( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
|||
divnumx( &(pint->pp), pint->pq, precision);
|
||||
DUPNUM( pint->pq, num_one );
|
||||
|
||||
unsigned long lret = numtolong( pint->pp, BASEX ); // This happens to work even if it is only signed
|
||||
uint32_t lret = numtoi32( pint->pp, BASEX ); // This happens to work even if it is only signed
|
||||
|
||||
destroyrat(pint);
|
||||
|
||||
|
@ -903,11 +978,11 @@ unsigned long rattoUlong( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: rattoUlonglong
|
||||
// FUNCTION: rattoUi64
|
||||
//
|
||||
// ARGUMENTS: rational number in internal base, integer radix and int32_t precision
|
||||
//
|
||||
// RETURN: Ulonglong
|
||||
// RETURN: Ui64
|
||||
//
|
||||
// DESCRIPTION: returns the 64 bit (irrespective of which processor this is running in) representation of the
|
||||
// number input. Assumes that the number is in the internal
|
||||
|
@ -916,50 +991,50 @@ unsigned long rattoUlong( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
|||
// internal base chosen happens to be 2^32, this is easier.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
ULONGLONG rattoUlonglong( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
||||
uint64_t rattoUi64( _In_ PRAT prat, uint32_t radix, int32_t precision)
|
||||
{
|
||||
PRAT pint = nullptr;
|
||||
|
||||
// first get the LO 32 bit word
|
||||
DUPRAT(pint, prat);
|
||||
andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1)
|
||||
unsigned long lo = rattoUlong(pint, radix, precision); // wont throw exception because already hi-dword chopped off
|
||||
uint32_t lo = rattoUi32(pint, radix, precision); // wont throw exception because already hi-dword chopped off
|
||||
|
||||
DUPRAT(pint, prat); // previous pint will get freed by this as well
|
||||
PRAT prat32 = longtorat(32);
|
||||
PRAT prat32 = i32torat(32);
|
||||
rshrat(&pint, prat32, radix, precision);
|
||||
intrat( &pint, radix, precision);
|
||||
andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1)
|
||||
unsigned long hi = rattoUlong(pint, radix, precision);
|
||||
uint32_t hi = rattoUi32(pint, radix, precision);
|
||||
|
||||
destroyrat(prat32);
|
||||
destroyrat(pint);
|
||||
|
||||
return (((ULONGLONG)hi << 32) | lo);
|
||||
return (((uint64_t)hi << 32) | lo);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: numtolong
|
||||
// FUNCTION: numtoi32
|
||||
//
|
||||
// ARGUMENTS: number input and base of that number.
|
||||
//
|
||||
// RETURN: long
|
||||
// RETURN: int32_t
|
||||
//
|
||||
// DESCRIPTION: returns the long representation of the
|
||||
// DESCRIPTION: returns the int32_t representation of the
|
||||
// number input. Assumes that the number is really in the
|
||||
// base claimed.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
long numtolong( _In_ PNUMBER pnum, uint32_t radix )
|
||||
int32_t numtoi32( _In_ PNUMBER pnum, uint32_t radix )
|
||||
{
|
||||
long lret = 0;
|
||||
int32_t lret = 0;
|
||||
|
||||
MANTTYPE *pmant = pnum->mant;
|
||||
pmant += pnum->cdigit - 1;
|
||||
|
||||
long expt = pnum->exp;
|
||||
for (long length = pnum->cdigit; length > 0 && length + expt > 0; length--)
|
||||
int32_t expt = pnum->exp;
|
||||
for (int32_t length = pnum->cdigit; length > 0 && length + expt > 0; length--)
|
||||
{
|
||||
lret *= radix;
|
||||
lret += *(pmant--);
|
||||
|
@ -986,10 +1061,10 @@ long numtolong( _In_ PNUMBER pnum, uint32_t radix )
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
bool stripzeroesnum(_Inout_ PNUMBER pnum, long starting)
|
||||
bool stripzeroesnum(_Inout_ PNUMBER pnum, int32_t starting)
|
||||
{
|
||||
MANTTYPE *pmant;
|
||||
long cdigits;
|
||||
int32_t cdigits;
|
||||
bool fstrip = false;
|
||||
|
||||
// point pmant to the LeastCalculatedDigit
|
||||
|
@ -1042,10 +1117,10 @@ bool stripzeroesnum(_Inout_ PNUMBER pnum, long starting)
|
|||
wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_t precision)
|
||||
{
|
||||
stripzeroesnum(pnum, precision + 2);
|
||||
long length = pnum->cdigit;
|
||||
long exponent = pnum->exp + length; // Actual number of digits to the left of decimal
|
||||
int32_t length = pnum->cdigit;
|
||||
int32_t exponent = pnum->exp + length; // Actual number of digits to the left of decimal
|
||||
|
||||
long oldFormat = format;
|
||||
int32_t oldFormat = format;
|
||||
if (exponent > precision && format == FMT_FLOAT)
|
||||
{
|
||||
// Force scientific mode to prevent user from assuming 33rd digit is exact.
|
||||
|
@ -1065,7 +1140,7 @@ wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_
|
|||
if (!zernum(pnum) && (pnum->cdigit >= precision || (length - exponent > precision && exponent >= -MAX_ZEROS_AFTER_DECIMAL)))
|
||||
{
|
||||
// Otherwise round.
|
||||
round = longtonum(radix, radix);
|
||||
round = i32tonum(radix, radix);
|
||||
divnum(&round, num_two, radix, precision);
|
||||
|
||||
// Make round number exponent one below the LSD for the number.
|
||||
|
@ -1110,7 +1185,7 @@ wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_
|
|||
if (round != nullptr)
|
||||
{
|
||||
addnum(&pnum, round, radix);
|
||||
long offset = (pnum->cdigit + pnum->exp) - (round->cdigit + round->exp);
|
||||
int32_t offset = (pnum->cdigit + pnum->exp) - (round->cdigit + round->exp);
|
||||
destroynum(round);
|
||||
if (stripzeroesnum(pnum, offset))
|
||||
{
|
||||
|
@ -1126,7 +1201,7 @@ wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_
|
|||
|
||||
// Set up all the post rounding stuff.
|
||||
bool useSciForm = false;
|
||||
long eout = exponent - 1; // Displayed exponent.
|
||||
int32_t eout = exponent - 1; // Displayed exponent.
|
||||
MANTTYPE *pmant = pnum->mant + pnum->cdigit - 1;
|
||||
// Case where too many digits are to the left of the decimal or
|
||||
// FMT_SCIENTIFIC or FMT_ENGINEERING was specified.
|
||||
|
@ -1240,7 +1315,7 @@ wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_
|
|||
//
|
||||
// ARGUMENTS:
|
||||
// PRAT *representation of a number.
|
||||
// long representation of base to dump to screen.
|
||||
// i32 representation of base to dump to screen.
|
||||
// fmt, one of FMT_FLOAT FMT_SCIENTIFIC or FMT_ENGINEERING
|
||||
// precision uint32_t
|
||||
//
|
||||
|
@ -1270,8 +1345,8 @@ PNUMBER RatToNumber(_In_ PRAT prat, uint32_t radix, int32_t precision)
|
|||
DUPRAT(temprat, prat);
|
||||
// Convert p and q of rational form from internal base to requested base.
|
||||
// Scale by largest power of BASEX possible.
|
||||
long scaleby = min(temprat->pp->exp, temprat->pq->exp);
|
||||
scaleby = max(scaleby, 0);
|
||||
int32_t scaleby = min(temprat->pp->exp, temprat->pq->exp);
|
||||
scaleby = max<int32_t>(scaleby, 0);
|
||||
|
||||
temprat->pp->exp -= scaleby;
|
||||
temprat->pq->exp -= scaleby;
|
||||
|
@ -1359,12 +1434,12 @@ PNUMBER gcd( _In_ PNUMBER a, _In_ PNUMBER b)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: longfactnum
|
||||
// FUNCTION: i32factnum
|
||||
//
|
||||
// ARGUMENTS:
|
||||
// long integer to factorialize.
|
||||
// long integer representing base of answer.
|
||||
// unsigned long integer for radix
|
||||
// int32_t integer to factorialize.
|
||||
// int32_t integer representing base of answer.
|
||||
// uint32_t integer for radix
|
||||
//
|
||||
// RETURN: Factorial of input in radix PNUMBER form.
|
||||
//
|
||||
|
@ -1372,17 +1447,17 @@ PNUMBER gcd( _In_ PNUMBER a, _In_ PNUMBER b)
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PNUMBER longfactnum(long inlong, uint32_t radix)
|
||||
PNUMBER i32factnum(int32_t ini32, uint32_t radix)
|
||||
|
||||
{
|
||||
PNUMBER lret= nullptr;
|
||||
PNUMBER tmp= nullptr;
|
||||
|
||||
lret = longtonum( 1, radix);
|
||||
lret = i32tonum( 1, radix);
|
||||
|
||||
while ( inlong > 0 )
|
||||
while ( ini32 > 0 )
|
||||
{
|
||||
tmp = longtonum( inlong--, radix);
|
||||
tmp = i32tonum( ini32--, radix);
|
||||
mulnum( &lret, tmp, radix);
|
||||
destroynum( tmp );
|
||||
}
|
||||
|
@ -1391,30 +1466,30 @@ PNUMBER longfactnum(long inlong, uint32_t radix)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: longprodnum
|
||||
// FUNCTION: i32prodnum
|
||||
//
|
||||
// ARGUMENTS:
|
||||
// long integer to factorialize.
|
||||
// long integer representing base of answer.
|
||||
// unsigned long integer for radix
|
||||
// int32_t integer to factorialize.
|
||||
// int32_t integer representing base of answer.
|
||||
// uint32_t integer for radix
|
||||
//
|
||||
// RETURN: Factorial of input in base PNUMBER form.
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
PNUMBER longprodnum(long start, long stop, uint32_t radix)
|
||||
PNUMBER i32prodnum(int32_t start, int32_t stop, uint32_t radix)
|
||||
|
||||
{
|
||||
PNUMBER lret= nullptr;
|
||||
PNUMBER tmp= nullptr;
|
||||
|
||||
lret = longtonum( 1, radix);
|
||||
lret = i32tonum( 1, radix);
|
||||
|
||||
while ( start <= stop )
|
||||
{
|
||||
if ( start )
|
||||
{
|
||||
tmp = longtonum( start, radix);
|
||||
tmp = i32tonum( start, radix);
|
||||
mulnum( &lret, tmp, radix);
|
||||
destroynum( tmp );
|
||||
}
|
||||
|
@ -1425,10 +1500,10 @@ PNUMBER longprodnum(long start, long stop, uint32_t radix)
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: numpowlong
|
||||
// FUNCTION: numpowi32
|
||||
//
|
||||
// ARGUMENTS: root as number power as long and radix of
|
||||
// number along with the precision value in long.
|
||||
// ARGUMENTS: root as number power as int32_t and radix of
|
||||
// number along with the precision value in int32_t.
|
||||
//
|
||||
// RETURN: None root is changed.
|
||||
//
|
||||
|
@ -1437,9 +1512,9 @@ PNUMBER longprodnum(long start, long stop, uint32_t radix)
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void numpowlong( _Inout_ PNUMBER *proot, long power, uint32_t radix, int32_t precision)
|
||||
void numpowi32( _Inout_ PNUMBER *proot, int32_t power, uint32_t radix, int32_t precision)
|
||||
{
|
||||
PNUMBER lret = longtonum( 1, radix );
|
||||
PNUMBER lret = i32tonum( 1, radix );
|
||||
|
||||
while ( power > 0 )
|
||||
{
|
||||
|
@ -1458,9 +1533,9 @@ void numpowlong( _Inout_ PNUMBER *proot, long power, uint32_t radix, int32_t pre
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: ratpowlong
|
||||
// FUNCTION: ratpowi32
|
||||
//
|
||||
// ARGUMENTS: root as rational, power as long and precision as uint32_t.
|
||||
// ARGUMENTS: root as rational, power as int32_t and precision as int32_t.
|
||||
//
|
||||
// RETURN: None root is changed.
|
||||
//
|
||||
|
@ -1469,14 +1544,14 @@ void numpowlong( _Inout_ PNUMBER *proot, long power, uint32_t radix, int32_t pre
|
|||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void ratpowlong( _Inout_ PRAT *proot, long power, int32_t precision)
|
||||
void ratpowi32( _Inout_ PRAT *proot, int32_t power, int32_t precision)
|
||||
|
||||
{
|
||||
if ( power < 0 )
|
||||
{
|
||||
// Take the positive power and invert answer.
|
||||
PNUMBER pnumtemp = nullptr;
|
||||
ratpowlong( proot, -power, precision);
|
||||
ratpowi32( proot, -power, precision);
|
||||
pnumtemp = (*proot)->pp;
|
||||
(*proot)->pp = (*proot)->pq;
|
||||
(*proot)->pq = pnumtemp;
|
||||
|
@ -1485,7 +1560,7 @@ void ratpowlong( _Inout_ PRAT *proot, long power, int32_t precision)
|
|||
{
|
||||
PRAT lret= nullptr;
|
||||
|
||||
lret = longtorat( 1 );
|
||||
lret = i32torat( 1 );
|
||||
|
||||
while ( power > 0 )
|
||||
{
|
||||
|
|
|
@ -50,7 +50,7 @@ void _exprat( PRAT *px, int32_t precision)
|
|||
addnum(&(pret->pq),num_one, BASEX);
|
||||
DUPRAT(thisterm,pret);
|
||||
|
||||
n2=longtonum(0L, BASEX);
|
||||
n2=i32tonum(0L, BASEX);
|
||||
|
||||
do {
|
||||
NEXTTERM(*px, INC(n2) DIVNUM(n2), precision);
|
||||
|
@ -64,7 +64,7 @@ void exprat( PRAT *px, uint32_t radix, int32_t precision)
|
|||
{
|
||||
PRAT pwr= nullptr;
|
||||
PRAT pint= nullptr;
|
||||
long intpwr;
|
||||
int32_t intpwr;
|
||||
|
||||
if ( rat_gt( *px, rat_max_exp, precision) || rat_lt( *px, rat_min_exp, precision) )
|
||||
{
|
||||
|
@ -77,8 +77,8 @@ void exprat( PRAT *px, uint32_t radix, int32_t precision)
|
|||
|
||||
intrat(&pint, radix, precision);
|
||||
|
||||
intpwr = rattolong(pint, radix, precision);
|
||||
ratpowlong( &pwr, intpwr, precision);
|
||||
intpwr = rattoi32(pint, radix, precision);
|
||||
ratpowi32( &pwr, intpwr, precision);
|
||||
|
||||
subrat(px, pint, precision);
|
||||
|
||||
|
@ -140,7 +140,7 @@ void _lograt( PRAT *px, int32_t precision)
|
|||
DUPRAT(pret,*px);
|
||||
DUPRAT(thisterm,*px);
|
||||
|
||||
n2=longtonum(1L, BASEX);
|
||||
n2=i32tonum(1L, BASEX);
|
||||
(*px)->pp->sign *= -1;
|
||||
|
||||
do {
|
||||
|
@ -183,10 +183,10 @@ void lograt( PRAT *px, int32_t precision)
|
|||
{
|
||||
// Take advantage of px's base BASEX to scale quickly down to
|
||||
// a reasonable range.
|
||||
long intpwr;
|
||||
int32_t intpwr;
|
||||
intpwr=LOGRAT2(*px)-1;
|
||||
(*px)->pq->exp += intpwr;
|
||||
pwr=longtorat(intpwr*BASEXPWR);
|
||||
pwr=i32torat(intpwr*BASEXPWR);
|
||||
mulrat(&pwr, ln_two, precision);
|
||||
// ln(x+e)-ln(x) looks close to e when x is close to one using some
|
||||
// expansions. This means we can trim past precision digits+1.
|
||||
|
@ -309,7 +309,7 @@ void powratNumeratorDenominator(PRAT *px, PRAT y, uint32_t radix, int32_t precis
|
|||
|
||||
// Calculate the following use the Powers of Powers rule:
|
||||
// px ^ (yNum/yDenom) == px ^ yNum ^ (1/yDenom)
|
||||
// 1. For px ^ yNum, we call powratcomp directly which will call ratpowlong
|
||||
// 1. For px ^ yNum, we call powratcomp directly which will call ratpowi32
|
||||
// and store the result in pxPowNum
|
||||
// 2. For pxPowNum ^ (1/yDenom), we call powratcomp
|
||||
// 3. Validate the result of 2 by adding/subtracting 0.5, flooring and call powratcomp with yDenom
|
||||
|
@ -408,7 +408,7 @@ void powratNumeratorDenominator(PRAT *px, PRAT y, uint32_t radix, int32_t precis
|
|||
//---------------------------------------------------------------------------
|
||||
void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision)
|
||||
{
|
||||
long sign = ((*px)->pp->sign * (*px)->pq->sign);
|
||||
int32_t sign = ((*px)->pp->sign * (*px)->pq->sign);
|
||||
|
||||
// Take the absolute value
|
||||
(*px)->pp->sign = 1;
|
||||
|
@ -451,12 +451,12 @@ void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision)
|
|||
fracrat(&podd, radix, precision);
|
||||
if ( rat_gt( podd, rat_negsmallest, precision) && rat_lt( podd, rat_smallest, precision) )
|
||||
{
|
||||
// If power is an integer let ratpowlong deal with it.
|
||||
// If power is an integer let ratpowi32 deal with it.
|
||||
PRAT iy = nullptr;
|
||||
long inty;
|
||||
int32_t inty;
|
||||
DUPRAT(iy,y);
|
||||
subrat(&iy, podd, precision);
|
||||
inty = rattolong(iy, radix, precision);
|
||||
inty = rattoi32(iy, radix, precision);
|
||||
|
||||
PRAT plnx = nullptr;
|
||||
DUPRAT(plnx,*px);
|
||||
|
@ -472,7 +472,7 @@ void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision)
|
|||
throw( CALC_E_DOMAIN );
|
||||
}
|
||||
destroyrat(plnx);
|
||||
ratpowlong(px, inty, precision);
|
||||
ratpowi32(px, inty, precision);
|
||||
if ( ( inty & 1 ) == 0 )
|
||||
{
|
||||
sign=1;
|
||||
|
|
|
@ -72,14 +72,14 @@ void _gamma( PRAT *pn, uint32_t radix, int32_t precision)
|
|||
PRAT mpy= nullptr;
|
||||
PRAT ratprec = nullptr;
|
||||
PRAT ratRadix = nullptr;
|
||||
long oldprec;
|
||||
int32_t oldprec;
|
||||
|
||||
// Set up constants and initial conditions
|
||||
oldprec = precision;
|
||||
ratprec = longtorat( oldprec );
|
||||
ratprec = i32torat( oldprec );
|
||||
|
||||
// Find the best 'A' for convergence to the required precision.
|
||||
a=longtorat( radix );
|
||||
a=i32torat( radix );
|
||||
lograt(&a, precision);
|
||||
mulrat(&a, ratprec, precision);
|
||||
|
||||
|
@ -96,7 +96,7 @@ void _gamma( PRAT *pn, uint32_t radix, int32_t precision)
|
|||
// The following code is equivalent to
|
||||
// precision += ln(exp(a)*pow(a,n+1.5))-ln(radix));
|
||||
DUPRAT(tmp,*pn);
|
||||
one_pt_five=longtorat( 3L );
|
||||
one_pt_five=i32torat( 3L );
|
||||
divrat( &one_pt_five, rat_two, precision);
|
||||
addrat( &tmp, one_pt_five, precision);
|
||||
DUPRAT(term,a);
|
||||
|
@ -105,15 +105,15 @@ void _gamma( PRAT *pn, uint32_t radix, int32_t precision)
|
|||
exprat( &tmp, radix, precision);
|
||||
mulrat( &term, tmp, precision);
|
||||
lograt( &term, precision);
|
||||
ratRadix = longtorat(radix);
|
||||
ratRadix = i32torat(radix);
|
||||
DUPRAT(tmp,ratRadix);
|
||||
lograt( &tmp, precision);
|
||||
subrat( &term, tmp, precision);
|
||||
precision += rattolong( term, radix, precision);
|
||||
precision += rattoi32( term, radix, precision);
|
||||
|
||||
// Set up initial terms for series, refer to series in above comment block.
|
||||
DUPRAT(factorial,rat_one); // Start factorial out with one
|
||||
count = longtonum( 0L, BASEX );
|
||||
count = i32tonum( 0L, BASEX );
|
||||
|
||||
DUPRAT(mpy,a);
|
||||
powratcomp(&mpy,*pn, radix, precision);
|
||||
|
|
|
@ -92,7 +92,7 @@ void asinanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32
|
|||
void asinrat( PRAT *px, uint32_t radix, int32_t precision)
|
||||
|
||||
{
|
||||
long sgn;
|
||||
int32_t sgn;
|
||||
PRAT pret= nullptr;
|
||||
PRAT phack= nullptr;
|
||||
|
||||
|
@ -186,8 +186,8 @@ void _acosrat( PRAT *px, int32_t precision)
|
|||
CREATETAYLOR();
|
||||
|
||||
createrat(thisterm);
|
||||
thisterm->pp=longtonum( 1L, BASEX );
|
||||
thisterm->pq=longtonum( 1L, BASEX );
|
||||
thisterm->pp=i32tonum( 1L, BASEX );
|
||||
thisterm->pq=i32tonum( 1L, BASEX );
|
||||
|
||||
DUPNUM(n2,num_one);
|
||||
|
||||
|
@ -204,7 +204,7 @@ void _acosrat( PRAT *px, int32_t precision)
|
|||
void acosrat( PRAT *px, uint32_t radix, int32_t precision)
|
||||
|
||||
{
|
||||
long sgn;
|
||||
int32_t sgn;
|
||||
|
||||
sgn = (*px)->pp->sign*(*px)->pq->sign;
|
||||
|
||||
|
@ -291,7 +291,7 @@ void _atanrat( PRAT *px, int32_t precision)
|
|||
void atanrat( PRAT *px, uint32_t radix, int32_t precision)
|
||||
|
||||
{
|
||||
long sgn;
|
||||
int32_t sgn;
|
||||
PRAT tmpx= nullptr;
|
||||
|
||||
sgn = (*px)->pp->sign * (*px)->pq->sign;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -16,13 +16,13 @@
|
|||
#include "pch.h"
|
||||
#include "ratpak.h"
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
void lshrat( PRAT *pa, PRAT b, uint32_t radix, int32_t precision)
|
||||
|
||||
{
|
||||
PRAT pwr= nullptr;
|
||||
long intb;
|
||||
int32_t intb;
|
||||
|
||||
intrat(pa, radix, precision);
|
||||
if ( !zernum( (*pa)->pp ) )
|
||||
|
@ -33,9 +33,9 @@ void lshrat( PRAT *pa, PRAT b, uint32_t radix, int32_t precision)
|
|||
// Don't attempt lsh of anything big
|
||||
throw( CALC_E_DOMAIN );
|
||||
}
|
||||
intb = rattolong(b, radix, precision);
|
||||
intb = rattoi32(b, radix, precision);
|
||||
DUPRAT(pwr,rat_two);
|
||||
ratpowlong(&pwr, intb, precision);
|
||||
ratpowi32(&pwr, intb, precision);
|
||||
mulrat(pa, pwr, precision);
|
||||
destroyrat(pwr);
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ void rshrat( PRAT *pa, PRAT b, uint32_t radix, int32_t precision)
|
|||
|
||||
{
|
||||
PRAT pwr= nullptr;
|
||||
long intb;
|
||||
int32_t intb;
|
||||
|
||||
intrat(pa, radix, precision);
|
||||
if ( !zernum( (*pa)->pp ) )
|
||||
|
@ -56,9 +56,9 @@ void rshrat( PRAT *pa, PRAT b, uint32_t radix, int32_t precision)
|
|||
// Don't attempt rsh of anything big and negative.
|
||||
throw( CALC_E_DOMAIN );
|
||||
}
|
||||
intb = rattolong(b, radix, precision);
|
||||
intb = rattoi32(b, radix, precision);
|
||||
DUPRAT(pwr,rat_two);
|
||||
ratpowlong(&pwr, intb, precision);
|
||||
ratpowi32(&pwr, intb, precision);
|
||||
divrat(pa, pwr, precision);
|
||||
destroyrat(pwr);
|
||||
}
|
||||
|
@ -138,8 +138,8 @@ void boolnum( PNUMBER *pa, PNUMBER b, int func )
|
|||
MANTTYPE *pcha;
|
||||
MANTTYPE *pchb;
|
||||
MANTTYPE *pchc;
|
||||
long cdigits;
|
||||
long mexp;
|
||||
int32_t cdigits;
|
||||
int32_t mexp;
|
||||
MANTTYPE da;
|
||||
MANTTYPE db;
|
||||
|
||||
|
|
|
@ -66,14 +66,14 @@ void _addnum( PNUMBER *pa, PNUMBER b, uint32_t radix)
|
|||
MANTTYPE *pcha; // pcha is a pointer to the mantissa of a.
|
||||
MANTTYPE *pchb; // pchb is a pointer to the mantissa of b.
|
||||
MANTTYPE *pchc; // pchc is a pointer to the mantissa of c.
|
||||
long cdigits; // cdigits is the max count of the digits results
|
||||
int32_t cdigits; // cdigits is the max count of the digits results
|
||||
// used as a counter.
|
||||
long mexp; // mexp is the exponent of the result.
|
||||
int32_t mexp; // mexp is the exponent of the result.
|
||||
MANTTYPE da; // da is a single 'digit' after possible padding.
|
||||
MANTTYPE db; // db is a single 'digit' after possible padding.
|
||||
MANTTYPE cy=0; // cy is the value of a carry after adding two 'digits'
|
||||
long fcompla = 0; // fcompla is a flag to signal a is negative.
|
||||
long fcomplb = 0; // fcomplb is a flag to signal b is negative.
|
||||
int32_t fcompla = 0; // fcompla is a flag to signal a is negative.
|
||||
int32_t fcomplb = 0; // fcomplb is a flag to signal b is negative.
|
||||
|
||||
a=*pa;
|
||||
|
||||
|
@ -205,7 +205,7 @@ void __inline mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix)
|
|||
}
|
||||
else
|
||||
{ // if pa is one and b isn't just copy b, and adjust the sign.
|
||||
long sign = (*pa)->sign;
|
||||
int32_t sign = (*pa)->sign;
|
||||
DUPNUM(*pa,b);
|
||||
(*pa)->sign *= sign;
|
||||
}
|
||||
|
@ -226,14 +226,14 @@ void _mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix)
|
|||
MANTTYPE *pchc; // pchc is a pointer to the mantissa of c.
|
||||
MANTTYPE *pchcoffset; // pchcoffset, is the anchor location of the next
|
||||
// single digit multiply partial result.
|
||||
long iadigit = 0; // Index of digit being used in the first number.
|
||||
long ibdigit = 0; // Index of digit being used in the second number.
|
||||
int32_t iadigit = 0; // Index of digit being used in the first number.
|
||||
int32_t ibdigit = 0; // Index of digit being used in the second number.
|
||||
MANTTYPE da = 0; // da is the digit from the fist number.
|
||||
TWO_MANTTYPE cy = 0; // cy is the carry resulting from the addition of
|
||||
// a multiplied row into the result.
|
||||
TWO_MANTTYPE mcy = 0; // mcy is the resultant from a single
|
||||
// multiply, AND the carry of that multiply.
|
||||
long icdigit = 0; // Index of digit being calculated in final result.
|
||||
int32_t icdigit = 0; // Index of digit being calculated in final result.
|
||||
|
||||
a=*pa;
|
||||
ibdigit = a->cdigit + b->cdigit - 1;
|
||||
|
@ -334,7 +334,7 @@ void remnum( PNUMBER *pa, PNUMBER b, uint32_t radix)
|
|||
}
|
||||
|
||||
destroynum( lasttmp );
|
||||
lasttmp=longtonum( 0, radix);
|
||||
lasttmp=i32tonum( 0, radix);
|
||||
|
||||
while ( lessnum( tmp, *pa ) )
|
||||
{
|
||||
|
@ -394,7 +394,7 @@ void __inline divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision)
|
|||
void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision)
|
||||
{
|
||||
PNUMBER a = *pa;
|
||||
long thismax = precision + 2;
|
||||
int32_t thismax = precision + 2;
|
||||
if (thismax < a->cdigit)
|
||||
{
|
||||
thismax = a->cdigit;
|
||||
|
@ -420,8 +420,8 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision)
|
|||
|
||||
// Build a table of multiplications of the divisor, this is quicker for
|
||||
// more than radix 'digits'
|
||||
list<PNUMBER> numberList{ longtonum(0L, radix) };
|
||||
for (unsigned long i = 1; i < radix; i++)
|
||||
list<PNUMBER> numberList{ i32tonum(0L, radix) };
|
||||
for (uint32_t i = 1; i < radix; i++)
|
||||
{
|
||||
PNUMBER newValue = nullptr;
|
||||
DUPNUM(newValue, numberList.front());
|
||||
|
@ -431,8 +431,8 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision)
|
|||
}
|
||||
destroynum(tmp);
|
||||
|
||||
long digit;
|
||||
long cdigits = 0;
|
||||
int32_t digit;
|
||||
int32_t cdigits = 0;
|
||||
while (cdigits++ < thismax && !zernum(rem))
|
||||
{
|
||||
digit = radix - 1;
|
||||
|
@ -505,11 +505,11 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision)
|
|||
bool equnum( PNUMBER a, PNUMBER b )
|
||||
|
||||
{
|
||||
long diff;
|
||||
int32_t diff;
|
||||
MANTTYPE *pa;
|
||||
MANTTYPE *pb;
|
||||
long cdigits;
|
||||
long ccdigits;
|
||||
int32_t cdigits;
|
||||
int32_t ccdigits;
|
||||
MANTTYPE da;
|
||||
MANTTYPE db;
|
||||
|
||||
|
@ -573,11 +573,11 @@ bool equnum( PNUMBER a, PNUMBER b )
|
|||
bool lessnum( PNUMBER a, PNUMBER b )
|
||||
|
||||
{
|
||||
long diff;
|
||||
int32_t diff;
|
||||
MANTTYPE *pa;
|
||||
MANTTYPE *pb;
|
||||
long cdigits;
|
||||
long ccdigits;
|
||||
int32_t cdigits;
|
||||
int32_t ccdigits;
|
||||
MANTTYPE da;
|
||||
MANTTYPE db;
|
||||
|
||||
|
@ -635,7 +635,7 @@ bool lessnum( PNUMBER a, PNUMBER b )
|
|||
bool zernum( PNUMBER a )
|
||||
|
||||
{
|
||||
long length;
|
||||
int32_t length;
|
||||
MANTTYPE *pcha;
|
||||
length = a->cdigit;
|
||||
pcha = a->mant;
|
||||
|
|
|
@ -325,26 +325,26 @@ inline const NUMBER init_q_rat_dword = {
|
|||
{ 1,}
|
||||
};
|
||||
// Autogenerated by _dumprawrat in support.cpp
|
||||
inline const NUMBER init_p_rat_max_long = {
|
||||
inline const NUMBER init_p_rat_max_i32 = {
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
{ 2147483647,}
|
||||
};
|
||||
inline const NUMBER init_q_rat_max_long = {
|
||||
inline const NUMBER init_q_rat_max_i32 = {
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
{ 1,}
|
||||
};
|
||||
// Autogenerated by _dumprawrat in support.cpp
|
||||
inline const NUMBER init_p_rat_min_long = {
|
||||
inline const NUMBER init_p_rat_min_i32 = {
|
||||
-1,
|
||||
2,
|
||||
0,
|
||||
{ 0, 1,}
|
||||
};
|
||||
inline const NUMBER init_q_rat_min_long = {
|
||||
inline const NUMBER init_q_rat_min_i32 = {
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
|
|
|
@ -24,8 +24,8 @@ static constexpr uint32_t BASEX = 0x80000000; // Internal radix used in calculat
|
|||
// this to 2^32 after solving scaling problems with
|
||||
// overflow detection esp. in mul
|
||||
|
||||
typedef unsigned long MANTTYPE;
|
||||
typedef unsigned __int64 TWO_MANTTYPE;
|
||||
typedef uint32_t MANTTYPE;
|
||||
typedef uint64_t TWO_MANTTYPE;
|
||||
|
||||
enum eNUMOBJ_FMT {
|
||||
FMT_FLOAT, // returns floating point, or exponential if number is too big
|
||||
|
@ -54,10 +54,10 @@ typedef enum eANGLE_TYPE ANGLE_TYPE;
|
|||
#pragma warning(disable:4200) // nonstandard extension used : zero-sized array in struct/union
|
||||
typedef struct _number
|
||||
{
|
||||
long sign; // The sign of the mantissa, +1, or -1
|
||||
long cdigit; // The number of digits, or what passes for digits in the
|
||||
int32_t sign; // The sign of the mantissa, +1, or -1
|
||||
int32_t cdigit; // The number of digits, or what passes for digits in the
|
||||
// radix being used.
|
||||
long exp; // The offset of digits from the radix point
|
||||
int32_t exp; // The offset of digits from the radix point
|
||||
// (decimal point in radix 10)
|
||||
MANTTYPE mant[];
|
||||
// This is actually allocated as a continuation of the
|
||||
|
@ -127,8 +127,8 @@ extern PRAT rat_max_exp;
|
|||
extern PRAT rat_min_exp;
|
||||
extern PRAT rat_max_fact;
|
||||
extern PRAT rat_min_fact;
|
||||
extern PRAT rat_max_long;
|
||||
extern PRAT rat_min_long;
|
||||
extern PRAT rat_max_i32;
|
||||
extern PRAT rat_min_i32;
|
||||
|
||||
// DUPNUM Duplicates a number taking care of allocation and internals
|
||||
#define DUPNUM(a,b) destroynum(a);createnum( a, (b)->cdigit );_dupnum(a, b);
|
||||
|
@ -208,7 +208,7 @@ _destroynum(x),(x)=nullptr
|
|||
|
||||
// TRIMNUM ASSUMES the number is in radix form NOT INTERNAL BASEX!!!
|
||||
#define TRIMNUM(x, precision) if ( !g_ftrueinfinite ) { \
|
||||
long trim = (x)->cdigit - precision-g_ratio;\
|
||||
int32_t trim = (x)->cdigit - precision-g_ratio;\
|
||||
if ( trim > 1 ) \
|
||||
{ \
|
||||
memmove( (x)->mant, &((x)->mant[trim]), sizeof(MANTTYPE)*((x)->cdigit-trim) ); \
|
||||
|
@ -218,14 +218,14 @@ memmove( (x)->mant, &((x)->mant[trim]), sizeof(MANTTYPE)*((x)->cdigit-trim) ); \
|
|||
}
|
||||
// TRIMTOP ASSUMES the number is in INTERNAL BASEX!!!
|
||||
#define TRIMTOP(x, precision) if ( !g_ftrueinfinite ) { \
|
||||
long trim = (x)->pp->cdigit - (precision/g_ratio) - 2;\
|
||||
int32_t trim = (x)->pp->cdigit - (precision/g_ratio) - 2;\
|
||||
if ( trim > 1 ) \
|
||||
{ \
|
||||
memmove( (x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE)*((x)->pp->cdigit-trim) ); \
|
||||
(x)->pp->cdigit -= trim; \
|
||||
(x)->pp->exp += trim; \
|
||||
} \
|
||||
trim = min((x)->pp->exp,(x)->pq->exp);\
|
||||
trim = std::min((x)->pp->exp,(x)->pq->exp);\
|
||||
(x)->pp->exp -= trim;\
|
||||
(x)->pq->exp -= trim;\
|
||||
}
|
||||
|
@ -246,8 +246,8 @@ memmove( (x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE)*((x)->pp->cdigi
|
|||
DUPRAT(xx,*px); \
|
||||
mulrat(&xx,*px, precision); \
|
||||
createrat(pret); \
|
||||
pret->pp=longtonum( 0L, BASEX ); \
|
||||
pret->pq=longtonum( 0L, BASEX );
|
||||
pret->pp=i32tonum( 0L, BASEX ); \
|
||||
pret->pq=i32tonum( 0L, BASEX );
|
||||
|
||||
#define DESTROYTAYLOR() destroynum( n2 ); \
|
||||
destroyrat( xx );\
|
||||
|
@ -294,7 +294,7 @@ extern bool g_ftrueinfinite; // set to true to allow infinite precision
|
|||
// don't use unless you know what you are doing
|
||||
// used to help decide when to stop calculating.
|
||||
|
||||
extern long g_ratio; // Internally calculated ratio of internal radix
|
||||
extern int32_t g_ratio; // Internally calculated ratio of internal radix
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
|
@ -321,10 +321,10 @@ extern PNUMBER RatToNumber(_In_ PRAT prat, uint32_t radix, int32_t precision);
|
|||
// flattens a PRAT by converting it to a PNUMBER and back to a PRAT
|
||||
extern void flatrat(_Inout_ PRAT& prat, uint32_t radix, int32_t precision);
|
||||
|
||||
extern long numtolong(_In_ PNUMBER pnum, uint32_t radix );
|
||||
extern long rattolong(_In_ PRAT prat, uint32_t radix, int32_t precision);
|
||||
ULONGLONG rattoUlonglong(_In_ PRAT prat, uint32_t radix, int32_t precision);
|
||||
extern PNUMBER _createnum(_In_ ULONG size ); // returns an empty number structure with size digits
|
||||
extern int32_t numtoi32(_In_ PNUMBER pnum, uint32_t radix );
|
||||
extern int32_t rattoi32(_In_ PRAT prat, uint32_t radix, int32_t precision);
|
||||
uint64_t rattoUi64(_In_ PRAT prat, uint32_t radix, int32_t precision);
|
||||
extern PNUMBER _createnum(_In_ uint32_t size ); // returns an empty number structure with size digits
|
||||
extern PNUMBER nRadixxtonum(_In_ PNUMBER a, uint32_t radix, int32_t precision);
|
||||
extern PNUMBER gcd(_In_ PNUMBER a, _In_ PNUMBER b );
|
||||
extern PNUMBER StringToNumber(std::wstring_view numberString, uint32_t radix, int32_t precision); // takes a text representation of a number and returns a number.
|
||||
|
@ -332,10 +332,10 @@ extern PNUMBER StringToNumber(std::wstring_view numberString, uint32_t radix, in
|
|||
// takes a text representation of a number as a mantissa with sign and an exponent with sign.
|
||||
extern PRAT StringToRat(bool mantissaIsNegative, std::wstring_view mantissa, bool exponentIsNegative, std::wstring_view exponent, uint32_t radix, int32_t precision);
|
||||
|
||||
extern PNUMBER longfactnum(long inlong, uint32_t radix);
|
||||
extern PNUMBER longprodnum(long start, long stop, uint32_t radix);
|
||||
extern PNUMBER longtonum(long inlong, uint32_t radix);
|
||||
extern PNUMBER Ulongtonum(unsigned long inlong, uint32_t radix);
|
||||
extern PNUMBER i32factnum(int32_t ini32, uint32_t radix);
|
||||
extern PNUMBER i32prodnum(int32_t start, int32_t stop, uint32_t radix);
|
||||
extern PNUMBER i32tonum(int32_t ini32, uint32_t radix);
|
||||
extern PNUMBER Ui32tonum(uint32_t ini32, uint32_t radix);
|
||||
extern PNUMBER numtonRadixx(PNUMBER a, uint32_t radix);
|
||||
|
||||
// creates a empty/undefined rational representation (p/q)
|
||||
|
@ -393,8 +393,8 @@ extern void log10rat( _Inout_ PRAT *px, int32_t precision);
|
|||
// returns a new rat structure with the natural log of x->p/x->q
|
||||
extern void lograt( _Inout_ PRAT *px, int32_t precision);
|
||||
|
||||
extern PRAT longtorat( long inlong );
|
||||
extern PRAT Ulongtorat( unsigned long inulong );
|
||||
extern PRAT i32torat( int32_t ini32 );
|
||||
extern PRAT Ui32torat( uint32_t inui32 );
|
||||
extern PRAT numtorat( _In_ PNUMBER pin, uint32_t radix);
|
||||
|
||||
extern void sinhrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision);
|
||||
|
@ -429,13 +429,13 @@ extern void intrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision);
|
|||
extern void mulnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix);
|
||||
extern void mulnumx( _Inout_ PNUMBER *pa, _In_ PNUMBER b );
|
||||
extern void mulrat( _Inout_ PRAT *pa, _In_ PRAT b, int32_t precision);
|
||||
extern void numpowlong( _Inout_ PNUMBER *proot, long power, uint32_t radix, int32_t precision);
|
||||
extern void numpowlongx( _Inout_ PNUMBER *proot, long power );
|
||||
extern void numpowi32( _Inout_ PNUMBER *proot, int32_t power, uint32_t radix, int32_t precision);
|
||||
extern void numpowi32x( _Inout_ PNUMBER *proot, int32_t power );
|
||||
extern void orrat( _Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision);
|
||||
extern void powrat( _Inout_ PRAT *pa, _In_ PRAT b , uint32_t radix, int32_t precision);
|
||||
extern void powratNumeratorDenominator(_Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision);
|
||||
extern void powratcomp(_Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision);
|
||||
extern void ratpowlong( _Inout_ PRAT *proot, long power, int32_t precision);
|
||||
extern void ratpowi32( _Inout_ PRAT *proot, int32_t power, int32_t precision);
|
||||
extern void remnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix);
|
||||
extern void rootrat( _Inout_ PRAT *pa, _In_ PRAT b , uint32_t radix, int32_t precision);
|
||||
extern void scale2pi( _Inout_ PRAT *px, uint32_t radix, int32_t precision);
|
||||
|
|
|
@ -45,8 +45,8 @@ static int cbitsofprecision = 0;
|
|||
DUPNUM((v)->pq,(&(init_q_##v)));
|
||||
#define READRAWNUM(v) DUPNUM(v,(&(init_##v)))
|
||||
|
||||
#define INIT_AND_DUMP_RAW_NUM_IF_NULL(r, v) if (r == nullptr) { r = longtonum(v, BASEX); DUMPRAWNUM(v); }
|
||||
#define INIT_AND_DUMP_RAW_RAT_IF_NULL(r, v) if (r == nullptr) { r = longtorat(v); DUMPRAWRAT(v); }
|
||||
#define INIT_AND_DUMP_RAW_NUM_IF_NULL(r, v) if (r == nullptr) { r = i32tonum(v, BASEX); DUMPRAWNUM(v); }
|
||||
#define INIT_AND_DUMP_RAW_RAT_IF_NULL(r, v) if (r == nullptr) { r = i32torat(v); DUMPRAWRAT(v); }
|
||||
|
||||
static constexpr int RATIO_FOR_DECIMAL = 9;
|
||||
static constexpr int DECIMAL = 10;
|
||||
|
@ -87,7 +87,7 @@ PRAT rat_exp= nullptr;
|
|||
PRAT rad_to_deg= nullptr;
|
||||
PRAT rad_to_grad= nullptr;
|
||||
PRAT rat_qword= nullptr;
|
||||
PRAT rat_dword= nullptr; // unsigned max ulong
|
||||
PRAT rat_dword= nullptr; // unsigned max ui32
|
||||
PRAT rat_word= nullptr;
|
||||
PRAT rat_byte= nullptr;
|
||||
PRAT rat_360= nullptr;
|
||||
|
@ -101,8 +101,8 @@ PRAT rat_max_exp= nullptr;
|
|||
PRAT rat_min_exp= nullptr;
|
||||
PRAT rat_max_fact = nullptr;
|
||||
PRAT rat_min_fact = nullptr;
|
||||
PRAT rat_min_long= nullptr; // min signed long
|
||||
PRAT rat_max_long= nullptr; // max signed long
|
||||
PRAT rat_min_i32= nullptr; // min signed i32
|
||||
PRAT rat_max_i32= nullptr; // max signed i32
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
|
@ -132,7 +132,7 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
g_ratio += !g_ratio;
|
||||
|
||||
destroyrat(rat_nRadix);
|
||||
rat_nRadix=longtorat( radix );
|
||||
rat_nRadix=i32torat( radix );
|
||||
|
||||
// Check to see what we have to recalculate and what we don't
|
||||
if (cbitsofprecision < (g_ratio * static_cast<int32_t>(radix) * precision))
|
||||
|
@ -166,7 +166,7 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
INIT_AND_DUMP_RAW_RAT_IF_NULL(rat_min_fact, -1000);
|
||||
|
||||
DUPRAT(rat_smallest, rat_nRadix);
|
||||
ratpowlong(&rat_smallest, -precision, precision);
|
||||
ratpowi32(&rat_smallest, -precision, precision);
|
||||
DUPRAT(rat_negsmallest, rat_smallest);
|
||||
rat_negsmallest->pp->sign = -1;
|
||||
DUMPRAWRAT(rat_smallest);
|
||||
|
@ -183,29 +183,29 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
if (pt_eight_five == nullptr)
|
||||
{
|
||||
createrat(pt_eight_five);
|
||||
pt_eight_five->pp = longtonum(85L, BASEX);
|
||||
pt_eight_five->pq = longtonum(100L, BASEX);
|
||||
pt_eight_five->pp = i32tonum(85L, BASEX);
|
||||
pt_eight_five->pq = i32tonum(100L, BASEX);
|
||||
DUMPRAWRAT(pt_eight_five);
|
||||
}
|
||||
|
||||
DUPRAT(rat_qword, rat_two);
|
||||
numpowlong(&(rat_qword->pp), 64, BASEX, precision);
|
||||
numpowi32(&(rat_qword->pp), 64, BASEX, precision);
|
||||
subrat(&rat_qword, rat_one, precision);
|
||||
DUMPRAWRAT(rat_qword);
|
||||
|
||||
DUPRAT(rat_dword, rat_two);
|
||||
numpowlong(&(rat_dword->pp), 32, BASEX, precision);
|
||||
numpowi32(&(rat_dword->pp), 32, BASEX, precision);
|
||||
subrat(&rat_dword, rat_one, precision);
|
||||
DUMPRAWRAT(rat_dword);
|
||||
|
||||
DUPRAT(rat_max_long, rat_two);
|
||||
numpowlong(&(rat_max_long->pp), 31, BASEX, precision);
|
||||
DUPRAT(rat_min_long, rat_max_long);
|
||||
subrat(&rat_max_long, rat_one, precision); // rat_max_long = 2^31 -1
|
||||
DUMPRAWRAT(rat_max_long);
|
||||
DUPRAT(rat_max_i32, rat_two);
|
||||
numpowi32(&(rat_max_i32->pp), 31, BASEX, precision);
|
||||
DUPRAT(rat_min_i32, rat_max_i32);
|
||||
subrat(&rat_max_i32, rat_one, precision); // rat_max_i32 = 2^31 -1
|
||||
DUMPRAWRAT(rat_max_i32);
|
||||
|
||||
rat_min_long->pp->sign *= -1; // rat_min_long = -2^31
|
||||
DUMPRAWRAT(rat_min_long);
|
||||
rat_min_i32->pp->sign *= -1; // rat_min_i32 = -2^31
|
||||
DUMPRAWRAT(rat_min_i32);
|
||||
|
||||
DUPRAT(rat_min_exp, rat_max_exp);
|
||||
rat_min_exp->pp->sign *= -1;
|
||||
|
@ -215,7 +215,7 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
|
||||
// Apparently when dividing 180 by pi, another (internal) digit of
|
||||
// precision is needed.
|
||||
long extraPrecision = precision + g_ratio;
|
||||
int32_t extraPrecision = precision + g_ratio;
|
||||
DUPRAT(pi, rat_half);
|
||||
asinrat(&pi, radix, extraPrecision);
|
||||
mulrat(&pi, rat_six, extraPrecision);
|
||||
|
@ -253,12 +253,12 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
|
||||
|
||||
destroyrat(rad_to_deg);
|
||||
rad_to_deg = longtorat(180L);
|
||||
rad_to_deg = i32torat(180L);
|
||||
divrat(&rad_to_deg, pi, extraPrecision);
|
||||
DUMPRAWRAT(rad_to_deg);
|
||||
|
||||
destroyrat(rad_to_grad);
|
||||
rad_to_grad = longtorat(200L);
|
||||
rad_to_grad = i32torat(200L);
|
||||
divrat(&rad_to_grad, pi, extraPrecision);
|
||||
DUMPRAWRAT(rad_to_grad);
|
||||
}
|
||||
|
@ -267,7 +267,7 @@ void ChangeConstants(uint32_t radix, int32_t precision)
|
|||
_readconstants();
|
||||
|
||||
DUPRAT(rat_smallest, rat_nRadix);
|
||||
ratpowlong(&rat_smallest, -precision, precision);
|
||||
ratpowi32(&rat_smallest, -precision, precision);
|
||||
DUPRAT(rat_negsmallest, rat_smallest);
|
||||
rat_negsmallest->pp->sign = -1;
|
||||
}
|
||||
|
@ -333,7 +333,7 @@ bool rat_equ( PRAT a, PRAT b, int32_t precision)
|
|||
//
|
||||
// FUNCTION: rat_ge
|
||||
//
|
||||
// ARGUMENTS: PRAT a, PRAT b and long precision
|
||||
// ARGUMENTS: PRAT a, PRAT b and int32_t precision
|
||||
//
|
||||
// RETURN: true if a is greater than or equal to b
|
||||
//
|
||||
|
@ -384,7 +384,7 @@ bool rat_gt( PRAT a, PRAT b, int32_t precision)
|
|||
//
|
||||
// FUNCTION: rat_le
|
||||
//
|
||||
// ARGUMENTS: PRAT a, PRAT b and long precision
|
||||
// ARGUMENTS: PRAT a, PRAT b and int32_t precision
|
||||
//
|
||||
// RETURN: true if a is less than or equal to b
|
||||
//
|
||||
|
@ -411,7 +411,7 @@ bool rat_le( PRAT a, PRAT b, int32_t precision)
|
|||
//
|
||||
// FUNCTION: rat_lt
|
||||
//
|
||||
// ARGUMENTS: PRAT a, PRAT b and long precision
|
||||
// ARGUMENTS: PRAT a, PRAT b and int32_t precision
|
||||
//
|
||||
// RETURN: true if a is less than b
|
||||
//
|
||||
|
@ -475,7 +475,7 @@ void scale( PRAT *px, PRAT scalefact, uint32_t radix, int32_t precision )
|
|||
|
||||
// Logscale is a quick way to tell how much extra precision is needed for
|
||||
// scaling by scalefact.
|
||||
long logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) -
|
||||
int32_t logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) -
|
||||
(pret->pq->cdigit+pret->pq->exp) );
|
||||
if ( logscale > 0 )
|
||||
{
|
||||
|
@ -510,7 +510,7 @@ void scale2pi( PRAT *px, uint32_t radix, int32_t precision )
|
|||
|
||||
// Logscale is a quick way to tell how much extra precision is needed for
|
||||
// scaling by 2 pi.
|
||||
long logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) -
|
||||
int32_t logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) -
|
||||
(pret->pq->cdigit+pret->pq->exp) );
|
||||
if ( logscale > 0 )
|
||||
{
|
||||
|
@ -652,15 +652,15 @@ void _readconstants( void )
|
|||
READRAWRAT(rat_min_exp);
|
||||
READRAWRAT(rat_max_fact);
|
||||
READRAWRAT(rat_min_fact);
|
||||
READRAWRAT(rat_min_long);
|
||||
READRAWRAT(rat_max_long);
|
||||
READRAWRAT(rat_min_i32);
|
||||
READRAWRAT(rat_max_i32);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// FUNCTION: trimit
|
||||
//
|
||||
// ARGUMENTS: PRAT *px, long precision
|
||||
// ARGUMENTS: PRAT *px, int32_t precision
|
||||
//
|
||||
//
|
||||
// DESCRIPTION: Chops off digits from rational numbers to avoid time
|
||||
|
@ -681,7 +681,7 @@ void trimit( PRAT *px, int32_t precision)
|
|||
{
|
||||
if ( !g_ftrueinfinite )
|
||||
{
|
||||
long trim;
|
||||
int32_t trim;
|
||||
PNUMBER pp=(*px)->pp;
|
||||
PNUMBER pq=(*px)->pq;
|
||||
trim = g_ratio * (min((pp->cdigit+pp->exp),(pq->cdigit+pq->exp))-1) - precision;
|
||||
|
|
|
@ -168,12 +168,12 @@ void _cosrat( PRAT *px, uint32_t radix, int32_t precision)
|
|||
destroynum(pret->pp);
|
||||
destroynum(pret->pq);
|
||||
|
||||
pret->pp=longtonum( 1L, radix);
|
||||
pret->pq=longtonum( 1L, radix);
|
||||
pret->pp=i32tonum( 1L, radix);
|
||||
pret->pq=i32tonum( 1L, radix);
|
||||
|
||||
DUPRAT(thisterm,pret)
|
||||
|
||||
n2=longtonum(0L, radix);
|
||||
n2=i32tonum(0L, radix);
|
||||
xx->pp->sign *= -1;
|
||||
|
||||
do {
|
||||
|
|
|
@ -159,12 +159,12 @@ void _coshrat( PRAT *px, uint32_t radix, int32_t precision)
|
|||
|
||||
CREATETAYLOR();
|
||||
|
||||
pret->pp=longtonum( 1L, radix);
|
||||
pret->pq=longtonum( 1L, radix);
|
||||
pret->pp=i32tonum( 1L, radix);
|
||||
pret->pq=i32tonum( 1L, radix);
|
||||
|
||||
DUPRAT(thisterm,pret)
|
||||
|
||||
n2=longtonum(0L, radix);
|
||||
n2=i32tonum(0L, radix);
|
||||
|
||||
do {
|
||||
NEXTTERM(xx,INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#pragma once
|
||||
|
@ -7,6 +7,10 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
// Windows headers define min/max macros.
|
||||
// Disable it for project code.
|
||||
#define NOMINMAX
|
||||
|
||||
#include <assert.h>
|
||||
#include <windows.h>
|
||||
#include <winerror.h>
|
||||
|
@ -17,6 +21,7 @@
|
|||
#include <memory>
|
||||
#include <vector>
|
||||
#include <limits>
|
||||
#include <list>
|
||||
#include <regex>
|
||||
#include <unordered_map>
|
||||
#include <intsafe.h>
|
||||
|
|
|
@ -32,14 +32,11 @@ using namespace Windows::UI::Xaml::Data;
|
|||
using namespace Windows::UI::Xaml::Input;
|
||||
using namespace Windows::UI::Xaml::Media;
|
||||
|
||||
namespace CalculatorApp::ViewModel::ApplicationViewModelProperties
|
||||
namespace
|
||||
{
|
||||
StringReference Mode(L"Mode");
|
||||
StringReference PreviousMode(L"PreviousMode");
|
||||
StringReference ClearMemoryVisibility(L"ClearMemoryVisibility");
|
||||
StringReference AppBarVisibility(L"AppBarVisibility");
|
||||
StringReference CategoryName(L"CategoryName");
|
||||
StringReference Categories(L"Categories");
|
||||
StringReference CategoriesPropertyName(L"Categories");
|
||||
StringReference ClearMemoryVisibilityPropertyName(L"ClearMemoryVisibility");
|
||||
StringReference AppBarVisibilityPropertyName(L"AppBarVisibility");
|
||||
}
|
||||
|
||||
ApplicationViewModel::ApplicationViewModel() :
|
||||
|
@ -60,7 +57,7 @@ void ApplicationViewModel::Mode::set(ViewMode value)
|
|||
PreviousMode = m_mode;
|
||||
m_mode = value;
|
||||
OnModeChanged();
|
||||
RaisePropertyChanged(ApplicationViewModelProperties::Mode);
|
||||
RaisePropertyChanged(ModePropertyName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,7 +66,7 @@ void ApplicationViewModel::Categories::set(IObservableVector<NavCategoryGroup^>^
|
|||
if (m_categories != value)
|
||||
{
|
||||
m_categories = value;
|
||||
RaisePropertyChanged(ApplicationViewModelProperties::Categories);
|
||||
RaisePropertyChanged(CategoriesPropertyName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,11 +160,11 @@ void ApplicationViewModel::OnModeChanged()
|
|||
//
|
||||
// Save the changed mode, so that the new window launches in this mode.
|
||||
// Don't save until after we have adjusted to the new mode, so we don't save a mode that fails to load.
|
||||
ApplicationData::Current->LocalSettings->Values->Insert(ApplicationViewModelProperties::Mode, NavCategory::Serialize(m_mode));
|
||||
ApplicationData::Current->LocalSettings->Values->Insert(ModePropertyName, NavCategory::Serialize(m_mode));
|
||||
|
||||
TraceLogger::GetInstance().LogModeChangeEnd(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
RaisePropertyChanged(ApplicationViewModelProperties::ClearMemoryVisibility);
|
||||
RaisePropertyChanged(ApplicationViewModelProperties::AppBarVisibility);
|
||||
RaisePropertyChanged(ClearMemoryVisibilityPropertyName);
|
||||
RaisePropertyChanged(AppBarVisibilityPropertyName);
|
||||
}
|
||||
|
||||
void ApplicationViewModel::OnCopyCommand(Object^ parameter)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#pragma once
|
||||
|
@ -11,16 +11,6 @@ namespace CalculatorApp
|
|||
{
|
||||
namespace ViewModel
|
||||
{
|
||||
namespace ApplicationViewModelProperties
|
||||
{
|
||||
extern Platform::StringReference Mode;
|
||||
extern Platform::StringReference PreviousMode;
|
||||
extern Platform::StringReference ClearMemoryVisibility;
|
||||
extern Platform::StringReference AppBarVisibility;
|
||||
extern Platform::StringReference CategoryName;
|
||||
extern Platform::StringReference Categories;
|
||||
}
|
||||
|
||||
[Windows::UI::Xaml::Data::Bindable]
|
||||
public ref class ApplicationViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
|
||||
{
|
||||
|
@ -32,9 +22,9 @@ namespace CalculatorApp
|
|||
OBSERVABLE_OBJECT();
|
||||
OBSERVABLE_PROPERTY_RW(StandardCalculatorViewModel^, CalculatorViewModel);
|
||||
OBSERVABLE_PROPERTY_RW(DateCalculatorViewModel^, DateCalcViewModel);
|
||||
OBSERVABLE_PROPERTY_RW(CalculatorApp::ViewModel::UnitConverterViewModel^, ConverterViewModel);
|
||||
OBSERVABLE_PROPERTY_RW(UnitConverterViewModel^, ConverterViewModel);
|
||||
OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::ViewMode, PreviousMode);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CategoryName);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(Platform::String^, CategoryName);
|
||||
|
||||
COMMAND_FOR_METHOD(CopyCommand, ApplicationViewModel::OnCopyCommand);
|
||||
COMMAND_FOR_METHOD(PasteCommand, ApplicationViewModel::OnPasteCommand);
|
||||
|
@ -48,6 +38,13 @@ namespace CalculatorApp
|
|||
|
||||
void set(CalculatorApp::Common::ViewMode value);
|
||||
}
|
||||
static property Platform::String^ ModePropertyName
|
||||
{
|
||||
Platform::String^ get()
|
||||
{
|
||||
return Platform::StringReference(L"Mode");
|
||||
}
|
||||
}
|
||||
|
||||
property Windows::Foundation::Collections::IObservableVector<CalculatorApp::Common::NavCategoryGroup^>^ Categories
|
||||
{
|
||||
|
|
|
@ -26,6 +26,7 @@ constexpr wstring_view c_validCharacterSet{ L"0123456789()+-*/.abcdefABCDEF" };
|
|||
// [\s\x85] means white-space characters
|
||||
static const wstring c_wspc = L"[\\s\\x85]*";
|
||||
static const wstring c_wspcLParens = c_wspc + L"[(]*" + c_wspc;
|
||||
static const wstring c_wspcLParenSigned = c_wspc + L"([-+]?[(])*" + c_wspc;
|
||||
static const wstring c_wspcRParens = c_wspc + L"[)]*" + c_wspc;
|
||||
static const wstring c_signedDecFloat = L"[-+]?\\d*(\\d|[.])\\d*";
|
||||
|
||||
|
@ -44,8 +45,8 @@ static const array<wregex, 1> standardModePatterns =
|
|||
};
|
||||
static const array<wregex, 2> scientificModePatterns =
|
||||
{
|
||||
wregex(c_wspcLParens + c_signedDecFloat + c_wspcRParens),
|
||||
wregex(c_wspcLParens + c_signedDecFloat + L"[e]([+]|[-])+\\d+" + c_wspcRParens)
|
||||
wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + c_wspcRParens),
|
||||
wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + L"[e]([+]|[-])+\\d+" + c_wspcRParens)
|
||||
};
|
||||
static const array<array<wregex, 5>, 4> programmerModePatterns =
|
||||
{ {
|
||||
|
@ -402,7 +403,7 @@ pair<size_t, uint64_t> CopyPasteManager::GetMaxOperandLengthAndValue(ViewMode mo
|
|||
|
||||
wstring CopyPasteManager::SanitizeOperand(const wstring& operand)
|
||||
{
|
||||
wchar_t unWantedChars[] = { L'\'', L'_', L'`', L'(', L')', L'-' };
|
||||
wchar_t unWantedChars[] = { L'\'', L'_', L'`', L'(', L')', L'-', L'+' };
|
||||
|
||||
return Utils::RemoveUnwantedCharsFromWstring(operand, unWantedChars, static_cast<int>(size(unWantedChars)));
|
||||
}
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
const ULONGLONG c_millisecond = 10000;
|
||||
const ULONGLONG c_second = 1000 * c_millisecond;
|
||||
const ULONGLONG c_minute = 60 * c_second;
|
||||
const ULONGLONG c_hour = 60 * c_minute;
|
||||
const ULONGLONG c_day = 24 * c_hour;
|
||||
const uint64_t c_millisecond = 10000;
|
||||
const uint64_t c_second = 1000 * c_millisecond;
|
||||
const uint64_t c_minute = 60 * c_second;
|
||||
const uint64_t c_hour = 60 * c_minute;
|
||||
const uint64_t c_day = 24 * c_hour;
|
||||
|
||||
const int c_unitsOfDate = 4; // Units Year,Month,Week,Day
|
||||
const int c_unitsGreaterThanDays = 3; // Units Greater than Days (Year/Month/Week) 3
|
||||
|
|
|
@ -42,10 +42,16 @@
|
|||
}\
|
||||
} private: t m_##n; public:
|
||||
|
||||
#define NAMED_OBSERVABLE_PROPERTY_RW(t, n)\
|
||||
#define OBSERVABLE_NAMED_PROPERTY_R(t, n)\
|
||||
OBSERVABLE_PROPERTY_R(t, n)\
|
||||
internal: static property Platform::String^ n##PropertyName {\
|
||||
Platform::String^ get() { return Platform::StringReference(L#n); }\
|
||||
} public:
|
||||
|
||||
#define OBSERVABLE_NAMED_PROPERTY_RW(t, n)\
|
||||
OBSERVABLE_PROPERTY_RW(t, n)\
|
||||
private: property Platform::StringReference n##_PropertyName {\
|
||||
Platform::StringReference get() { return Platform::StringReference(L#n); }\
|
||||
internal: static property Platform::String^ n##PropertyName {\
|
||||
Platform::String^ get() { return Platform::StringReference(L#n); }\
|
||||
} public:
|
||||
|
||||
#define OBSERVABLE_PROPERTY_FIELD(n) m_##n
|
||||
|
|
|
@ -22,14 +22,14 @@ using namespace Windows::Globalization;
|
|||
using namespace Windows::Globalization::DateTimeFormatting;
|
||||
using namespace Windows::System::UserProfile;
|
||||
|
||||
namespace CalculatorApp::ViewModel::DateCalculatorViewModelProperties
|
||||
namespace
|
||||
{
|
||||
StringReference StrDateDiffResult(L"StrDateDiffResult");
|
||||
StringReference StrDateDiffResultAutomationName(L"StrDateDiffResultAutomationName");
|
||||
StringReference StrDateDiffResultInDays(L"StrDateDiffResultInDays");
|
||||
StringReference StrDateResult(L"StrDateResult");
|
||||
StringReference StrDateResultAutomationName(L"StrDateResultAutomationName");
|
||||
StringReference IsDiffInDays(L"IsDiffInDays");
|
||||
StringReference StrDateDiffResultPropertyName(L"StrDateDiffResult");
|
||||
StringReference StrDateDiffResultAutomationNamePropertyName(L"StrDateDiffResultAutomationName");
|
||||
StringReference StrDateDiffResultInDaysPropertyName(L"StrDateDiffResultInDays");
|
||||
StringReference StrDateResultPropertyName(L"StrDateResult");
|
||||
StringReference StrDateResultAutomationNamePropertyName(L"StrDateResultAutomationName");
|
||||
StringReference IsDiffInDaysPropertyName(L"IsDiffInDays");
|
||||
}
|
||||
|
||||
DateCalculatorViewModel::DateCalculatorViewModel() :
|
||||
|
@ -97,18 +97,18 @@ DateCalculatorViewModel::DateCalculatorViewModel() :
|
|||
|
||||
void DateCalculatorViewModel::OnPropertyChanged(_In_ String^ prop)
|
||||
{
|
||||
if (prop == DateCalculatorViewModelProperties::StrDateDiffResult)
|
||||
if (prop == StrDateDiffResultPropertyName)
|
||||
{
|
||||
UpdateStrDateDiffResultAutomationName();
|
||||
}
|
||||
else if (prop == DateCalculatorViewModelProperties::StrDateResult)
|
||||
else if (prop == StrDateResultPropertyName)
|
||||
{
|
||||
UpdateStrDateResultAutomationName();
|
||||
}
|
||||
else if (prop != DateCalculatorViewModelProperties::StrDateDiffResultAutomationName
|
||||
&& prop != DateCalculatorViewModelProperties::StrDateDiffResultInDays
|
||||
&& prop != DateCalculatorViewModelProperties::StrDateResultAutomationName
|
||||
&& prop != DateCalculatorViewModelProperties::IsDiffInDays)
|
||||
else if (prop != StrDateDiffResultAutomationNamePropertyName
|
||||
&& prop != StrDateDiffResultInDaysPropertyName
|
||||
&& prop != StrDateResultAutomationNamePropertyName
|
||||
&& prop != IsDiffInDaysPropertyName)
|
||||
{
|
||||
OnInputsChanged();
|
||||
}
|
||||
|
|
|
@ -30,40 +30,34 @@ constexpr int StandardModePrecision = 16;
|
|||
constexpr int ScientificModePrecision = 32;
|
||||
constexpr int ProgrammerModePrecision = 64;
|
||||
|
||||
namespace CalculatorApp::ViewModel
|
||||
namespace
|
||||
{
|
||||
namespace CalculatorViewModelProperties
|
||||
{
|
||||
StringReference IsMemoryEmpty(L"IsMemoryEmpty");
|
||||
StringReference IsScientific(L"IsScientific");
|
||||
StringReference IsStandard(L"IsStandard");
|
||||
StringReference IsProgrammer(L"IsProgrammer");
|
||||
StringReference DisplayValue(L"DisplayValue");
|
||||
StringReference IsInError(L"IsInError");
|
||||
StringReference BinaryDisplayValue(L"BinaryDisplayValue");
|
||||
StringReference OpenParenthesisCount(L"OpenParenthesisCount");
|
||||
}
|
||||
StringReference IsStandardPropertyName(L"IsStandard");
|
||||
StringReference IsScientificPropertyName(L"IsScientific");
|
||||
StringReference IsProgrammerPropertyName(L"IsProgrammer");
|
||||
StringReference DisplayValuePropertyName(L"DisplayValue");
|
||||
StringReference CalculationResultAutomationNamePropertyName(L"CalculationResultAutomationName");
|
||||
}
|
||||
|
||||
namespace CalculatorResourceKeys
|
||||
{
|
||||
StringReference CalculatorExpression(L"Format_CalculatorExpression");
|
||||
StringReference CalculatorResults(L"Format_CalculatorResults");
|
||||
StringReference CalculatorResults_DecimalSeparator_Announced(L"Format_CalculatorResults_Decimal");
|
||||
StringReference HexButton(L"Format_HexButtonValue");
|
||||
StringReference DecButton(L"Format_DecButtonValue");
|
||||
StringReference OctButton(L"Format_OctButtonValue");
|
||||
StringReference BinButton(L"Format_BinButtonValue");
|
||||
StringReference LeftParenthesisAutomationFormat(L"Format_OpenParenthesisAutomationNamePrefix");
|
||||
StringReference OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix");
|
||||
StringReference NoParenthesisAdded(L"NoRightParenthesisAdded_Announcement");
|
||||
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
|
||||
StringReference ButtonPressFeedbackFormat(L"Format_ButtonPressAuditoryFeedback");
|
||||
StringReference MemorySave(L"Format_MemorySave");
|
||||
StringReference MemoryItemChanged(L"Format_MemorySlotChanged");
|
||||
StringReference MemoryItemCleared(L"Format_MemorySlotCleared");
|
||||
StringReference MemoryCleared(L"Memory_Cleared");
|
||||
StringReference DisplayCopied(L"Display_Copied");
|
||||
}
|
||||
namespace CalculatorResourceKeys
|
||||
{
|
||||
StringReference CalculatorExpression(L"Format_CalculatorExpression");
|
||||
StringReference CalculatorResults(L"Format_CalculatorResults");
|
||||
StringReference CalculatorResults_DecimalSeparator_Announced(L"Format_CalculatorResults_Decimal");
|
||||
StringReference HexButton(L"Format_HexButtonValue");
|
||||
StringReference DecButton(L"Format_DecButtonValue");
|
||||
StringReference OctButton(L"Format_OctButtonValue");
|
||||
StringReference BinButton(L"Format_BinButtonValue");
|
||||
StringReference LeftParenthesisAutomationFormat(L"Format_OpenParenthesisAutomationNamePrefix");
|
||||
StringReference OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix");
|
||||
StringReference NoParenthesisAdded(L"NoRightParenthesisAdded_Announcement");
|
||||
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
|
||||
StringReference ButtonPressFeedbackFormat(L"Format_ButtonPressAuditoryFeedback");
|
||||
StringReference MemorySave(L"Format_MemorySave");
|
||||
StringReference MemoryItemChanged(L"Format_MemorySlotChanged");
|
||||
StringReference MemoryItemCleared(L"Format_MemorySlotCleared");
|
||||
StringReference MemoryCleared(L"Memory_Cleared");
|
||||
StringReference DisplayCopied(L"Display_Copied");
|
||||
}
|
||||
|
||||
StandardCalculatorViewModel::StandardCalculatorViewModel() :
|
||||
|
@ -584,8 +578,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
|
|||
|
||||
bool StandardCalculatorViewModel::IsOperator(Command cmdenum)
|
||||
{
|
||||
if ((cmdenum == Command::Command0) || (cmdenum == Command::Command1) || (cmdenum == Command::Command2) || (cmdenum == Command::Command3) || (cmdenum == Command::Command4) || (cmdenum == Command::Command5)
|
||||
|| (cmdenum == Command::Command6) || (cmdenum == Command::Command7) || (cmdenum == Command::Command8) || (cmdenum == Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK)
|
||||
if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK)
|
||||
|| (cmdenum == Command::CommandEXP) || (cmdenum == Command::CommandFE) || (cmdenum == Command::ModeBasic) || (cmdenum == Command::ModeProgrammer) || (cmdenum == Command::ModeScientific)
|
||||
|| (cmdenum == Command::CommandINV) || (cmdenum == Command::CommandCENTR) || (cmdenum == Command::CommandDEG) || (cmdenum == Command::CommandRAD) || (cmdenum == Command::CommandGRAD)
|
||||
|| ((cmdenum >= Command::CommandBINEDITSTART) && (cmdenum <= Command::CommandBINEDITEND)))
|
||||
|
@ -658,8 +651,7 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter)
|
|||
{
|
||||
m_CurrentAngleType = numOpEnum;
|
||||
}
|
||||
if ((cmdenum == Command::Command0) || (cmdenum == Command::Command1) || (cmdenum == Command::Command2) || (cmdenum == Command::Command3) || (cmdenum == Command::Command4) || (cmdenum == Command::Command5)
|
||||
|| (cmdenum == Command::Command6) || (cmdenum == Command::Command7) || (cmdenum == Command::Command8) || (cmdenum == Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK) || (cmdenum == Command::CommandEXP))
|
||||
if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK) || (cmdenum == Command::CommandEXP))
|
||||
{
|
||||
IsOperatorCommand = false;
|
||||
}
|
||||
|
@ -1276,30 +1268,30 @@ void StandardCalculatorViewModel::Deserialize(Array<unsigned char>^ state)
|
|||
|
||||
void StandardCalculatorViewModel::OnPropertyChanged(String^ propertyname)
|
||||
{
|
||||
if (propertyname == CalculatorViewModelProperties::IsScientific)
|
||||
if (propertyname == IsScientificPropertyName)
|
||||
{
|
||||
if (IsScientific)
|
||||
{
|
||||
OnButtonPressed(NumbersAndOperatorsEnum::IsScientificMode);
|
||||
}
|
||||
}
|
||||
else if (propertyname == CalculatorViewModelProperties::IsProgrammer)
|
||||
else if (propertyname == IsProgrammerPropertyName)
|
||||
{
|
||||
if (IsProgrammer)
|
||||
{
|
||||
OnButtonPressed(NumbersAndOperatorsEnum::IsProgrammerMode);
|
||||
}
|
||||
}
|
||||
else if (propertyname == CalculatorViewModelProperties::IsStandard)
|
||||
else if (propertyname == IsStandardPropertyName)
|
||||
{
|
||||
if (IsStandard)
|
||||
{
|
||||
OnButtonPressed(NumbersAndOperatorsEnum::IsStandardMode);
|
||||
}
|
||||
}
|
||||
else if (propertyname == CalculatorViewModelProperties::DisplayValue)
|
||||
else if (propertyname == DisplayValuePropertyName)
|
||||
{
|
||||
RaisePropertyChanged(CalculationResultAutomationName_PropertyName);
|
||||
RaisePropertyChanged(CalculationResultAutomationNamePropertyName);
|
||||
Announcement = GetDisplayUpdatedNarratorAnnouncement();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,13 +31,6 @@ namespace CalculatorApp
|
|||
#define ASCII_0 48
|
||||
public delegate void HideMemoryClickedHandler();
|
||||
public delegate void ProgModeRadixChangeHandler();
|
||||
namespace CalculatorViewModelProperties
|
||||
{
|
||||
extern Platform::StringReference IsMemoryEmpty;
|
||||
extern Platform::StringReference IsInError;
|
||||
extern Platform::StringReference BinaryDisplayValue;
|
||||
extern Platform::StringReference OpenParenthesisCount;
|
||||
}
|
||||
|
||||
[Windows::UI::Xaml::Data::Bindable]
|
||||
public ref class StandardCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
|
||||
|
@ -52,14 +45,14 @@ namespace CalculatorApp
|
|||
OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, DisplayValue);
|
||||
OBSERVABLE_PROPERTY_RW(HistoryViewModel^, HistoryVM);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsInError);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsInError);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsOperatorCommand);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, DisplayStringExpression);
|
||||
OBSERVABLE_PROPERTY_RW(Windows::Foundation::Collections::IVector<Common::DisplayExpressionToken^>^, ExpressionTokens);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, DecimalDisplayValue);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, HexDisplayValue);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, OctalDisplayValue);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, BinaryDisplayValue);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(Platform::String^, BinaryDisplayValue);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, HexDisplayValue_AutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, DecDisplayValue_AutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, OctDisplayValue_AutomationName);
|
||||
|
@ -70,19 +63,19 @@ namespace CalculatorApp
|
|||
OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsCurrentViewPinned);
|
||||
OBSERVABLE_PROPERTY_RW(Windows::Foundation::Collections::IVector<MemoryItemViewModel^>^, MemorizedNumbers);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsMemoryEmpty);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsMemoryEmpty);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsFToEChecked);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsFToEEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsHyperbolicChecked);
|
||||
OBSERVABLE_PROPERTY_RW(bool, AreHEXButtonsEnabled);
|
||||
NAMED_OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationResultAutomationName);
|
||||
NAMED_OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationExpressionAutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationResultAutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationExpressionAutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsShiftProgrammerChecked);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsQwordEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsDwordEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsWordEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsByteEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, OpenParenthesisCount);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(Platform::String^, OpenParenthesisCount);
|
||||
OBSERVABLE_PROPERTY_RW(int, CurrentRadixType);
|
||||
OBSERVABLE_PROPERTY_RW(bool, AreTokensUpdated);
|
||||
OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled);
|
||||
|
|
|
@ -56,47 +56,37 @@ constexpr unsigned int CONVERSION_FINALIZED_DELAY_IN_MS = 1000;
|
|||
const wregex regexTrimSpacesStart = wregex(L"^\\s+");
|
||||
const wregex regexTrimSpacesEnd = wregex(L"\\s+$");
|
||||
|
||||
namespace CalculatorApp::ViewModel
|
||||
namespace
|
||||
{
|
||||
namespace UnitConverterViewModelProperties
|
||||
{
|
||||
StringReference CurrentCategory(L"CurrentCategory");
|
||||
StringReference Unit1(L"Unit1");
|
||||
StringReference Unit2(L"Unit2");
|
||||
StringReference Value1Active(L"Value1Active");
|
||||
StringReference Value2Active(L"Value2Active");
|
||||
StringReference Value1(L"Value1");
|
||||
StringReference Value2(L"Value2");
|
||||
StringReference Value1AutomationName(L"Value1AutomationName");
|
||||
StringReference Value2AutomationName(L"Value2AutomationName");
|
||||
StringReference SupplementaryVisibility(L"SupplementaryVisibility");
|
||||
StringReference SupplementaryResults(L"SupplementaryResults");
|
||||
StringReference Unit1AutomationName(L"Unit1AutomationName");
|
||||
StringReference Unit2AutomationName(L"Unit2AutomationName");
|
||||
StringReference CurrencySymbol1(L"CurrencySymbol1");
|
||||
StringReference CurrencySymbol2(L"CurrencySymbol2");
|
||||
StringReference CurrencySymbolVisibility(L"CurrencySymbolVisibility");
|
||||
StringReference CurrencyRatioEquality(L"CurrencyRatioEquality");
|
||||
StringReference CurrencyRatioEqualityAutomationName(L"CurrencyRatioEqualityAutomationName");
|
||||
StringReference NetworkBehavior(L"NetworkBehavior");
|
||||
StringReference CurrencyDataLoadFailed(L"CurrencyDataLoadFailed");
|
||||
StringReference CurrencyDataIsWeekOld(L"CurrencyDataIsWeekOld");
|
||||
StringReference IsCurrencyLoadingVisible(L"IsCurrencyLoadingVisible");
|
||||
}
|
||||
StringReference CurrentCategoryPropertyName(L"CurrentCategory");
|
||||
StringReference Unit1AutomationNamePropertyName(L"Unit1AutomationName");
|
||||
StringReference Unit2AutomationNamePropertyName(L"Unit2AutomationName");
|
||||
StringReference Unit1PropertyName(L"Unit1");
|
||||
StringReference Unit2PropertyName(L"Unit2");
|
||||
StringReference Value1PropertyName(L"Value1");
|
||||
StringReference Value2PropertyName(L"Value2");
|
||||
StringReference Value1ActivePropertyName(L"Value1Active");
|
||||
StringReference Value2ActivePropertyName(L"Value2Active");
|
||||
StringReference Value1AutomationNamePropertyName(L"Value1AutomationName");
|
||||
StringReference Value2AutomationNamePropertyName(L"Value2AutomationName");
|
||||
StringReference CurrencySymbol1PropertyName(L"CurrencySymbol1");
|
||||
StringReference CurrencySymbol2PropertyName(L"CurrencySymbol2");
|
||||
StringReference CurrencySymbolVisibilityPropertyName(L"CurrencySymbolVisibility");
|
||||
StringReference SupplementaryVisibilityPropertyName(L"SupplementaryVisibility");
|
||||
}
|
||||
|
||||
namespace UnitConverterResourceKeys
|
||||
{
|
||||
StringReference ValueFromFormat(L"Format_ValueFrom");
|
||||
StringReference ValueFromDecimalFormat(L"Format_ValueFrom_Decimal");
|
||||
StringReference ValueToFormat(L"Format_ValueTo");
|
||||
StringReference ConversionResultFormat(L"Format_ConversionResult");
|
||||
StringReference InputUnit_Name(L"InputUnit_Name");
|
||||
StringReference OutputUnit_Name(L"OutputUnit_Name");
|
||||
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
|
||||
StringReference UpdatingCurrencyRates(L"UpdatingCurrencyRates");
|
||||
StringReference CurrencyRatesUpdated(L"CurrencyRatesUpdated");
|
||||
StringReference CurrencyRatesUpdateFailed(L"CurrencyRatesUpdateFailed");
|
||||
}
|
||||
namespace CalculatorApp::ViewModel::UnitConverterResourceKeys
|
||||
{
|
||||
StringReference ValueFromFormat(L"Format_ValueFrom");
|
||||
StringReference ValueFromDecimalFormat(L"Format_ValueFrom_Decimal");
|
||||
StringReference ValueToFormat(L"Format_ValueTo");
|
||||
StringReference ConversionResultFormat(L"Format_ConversionResult");
|
||||
StringReference InputUnit_Name(L"InputUnit_Name");
|
||||
StringReference OutputUnit_Name(L"OutputUnit_Name");
|
||||
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
|
||||
StringReference UpdatingCurrencyRates(L"UpdatingCurrencyRates");
|
||||
StringReference CurrencyRatesUpdated(L"CurrencyRatesUpdated");
|
||||
StringReference CurrencyRatesUpdateFailed(L"CurrencyRatesUpdateFailed");
|
||||
}
|
||||
|
||||
UnitConverterViewModel::UnitConverterViewModel(const shared_ptr<UCM::IUnitConverter>& model) :
|
||||
|
@ -285,8 +275,8 @@ void UnitConverterViewModel::OnSwitchActive(Platform::Object^ unused)
|
|||
Utils::Swap(&m_localizedValueFromFormat, &m_localizedValueToFormat);
|
||||
|
||||
Utils::Swap(&m_Unit1AutomationName, &m_Unit2AutomationName);
|
||||
RaisePropertyChanged(UnitConverterViewModelProperties::Unit1AutomationName);
|
||||
RaisePropertyChanged(UnitConverterViewModelProperties::Unit2AutomationName);
|
||||
RaisePropertyChanged(Unit1AutomationNamePropertyName);
|
||||
RaisePropertyChanged(Unit2AutomationNamePropertyName);
|
||||
|
||||
m_isInputBlocked = false;
|
||||
m_model->SwitchActive(m_valueFromUnlocalized);
|
||||
|
@ -408,7 +398,7 @@ String^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& str
|
|||
|
||||
void UnitConverterViewModel::DisplayPasteError()
|
||||
{
|
||||
String^ errorMsg = AppResourceProvider::GetInstance().GetCEngineString(SIDS_DOMAIN); /*SIDS_DOMAIN is for "invalid input"*/
|
||||
String^ errorMsg = AppResourceProvider::GetInstance().GetCEngineString(StringReference(SIDS_DOMAIN)); /*SIDS_DOMAIN is for "invalid input"*/
|
||||
Value1 = errorMsg;
|
||||
Value2 = errorMsg;
|
||||
m_relocalizeStringOnSwitch = false;
|
||||
|
@ -565,13 +555,13 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
{
|
||||
static bool isCategoryChanging = false;
|
||||
|
||||
if (prop->Equals(UnitConverterViewModelProperties::CurrentCategory))
|
||||
if (prop == CurrentCategoryPropertyName)
|
||||
{
|
||||
isCategoryChanging = true;
|
||||
CategoryChanged->Execute(nullptr);
|
||||
isCategoryChanging = false;
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Unit1) || prop->Equals(UnitConverterViewModelProperties::Unit2))
|
||||
else if (prop == Unit1PropertyName || prop == Unit2PropertyName)
|
||||
{
|
||||
// Category changes will handle updating units after they've both been updated.
|
||||
// This event should only be used to update units from explicit user interaction.
|
||||
|
@ -580,7 +570,7 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
UnitChanged->Execute(nullptr);
|
||||
}
|
||||
// Get the localized automation name for each CalculationResults field
|
||||
if (prop->Equals(UnitConverterViewModelProperties::Unit1))
|
||||
if (prop == Unit1PropertyName)
|
||||
{
|
||||
UpdateValue1AutomationName();
|
||||
}
|
||||
|
@ -589,15 +579,15 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
UpdateValue2AutomationName();
|
||||
}
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Value1))
|
||||
else if (prop == Value1PropertyName)
|
||||
{
|
||||
UpdateValue1AutomationName();
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Value2))
|
||||
else if (prop == Value2PropertyName)
|
||||
{
|
||||
UpdateValue2AutomationName();
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Value1Active) || prop->Equals(UnitConverterViewModelProperties::Value2Active))
|
||||
else if (prop == Value1ActivePropertyName || prop == Value2ActivePropertyName)
|
||||
{
|
||||
// if one of the values is activated, and as a result both are true, it means
|
||||
// that we're trying to switch.
|
||||
|
@ -609,11 +599,11 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
UpdateValue1AutomationName();
|
||||
UpdateValue2AutomationName();
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::SupplementaryResults))
|
||||
else if (prop == SupplementaryResultsPropertyName)
|
||||
{
|
||||
RaisePropertyChanged(UnitConverterViewModelProperties::SupplementaryVisibility);
|
||||
RaisePropertyChanged(SupplementaryVisibilityPropertyName);
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Value1AutomationName))
|
||||
else if (prop == Value1AutomationNamePropertyName)
|
||||
{
|
||||
m_isValue1Updating = false;
|
||||
if (!m_isValue2Updating)
|
||||
|
@ -621,7 +611,7 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
AnnounceConversionResult();
|
||||
}
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::Value2AutomationName))
|
||||
else if (prop == Value2AutomationNamePropertyName)
|
||||
{
|
||||
m_isValue2Updating = false;
|
||||
if (!m_isValue1Updating)
|
||||
|
@ -629,9 +619,9 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop)
|
|||
AnnounceConversionResult();
|
||||
}
|
||||
}
|
||||
else if (prop->Equals(UnitConverterViewModelProperties::CurrencySymbol1) || prop->Equals(UnitConverterViewModelProperties::CurrencySymbol2))
|
||||
else if (prop == CurrencySymbol1PropertyName || prop == CurrencySymbol2PropertyName)
|
||||
{
|
||||
RaisePropertyChanged(UnitConverterViewModelProperties::CurrencySymbolVisibility);
|
||||
RaisePropertyChanged(CurrencySymbolVisibilityPropertyName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -858,7 +848,7 @@ void UnitConverterViewModel::RefreshSupplementaryResults()
|
|||
}
|
||||
|
||||
m_cacheMutex.unlock();
|
||||
RaisePropertyChanged(UnitConverterViewModelProperties::SupplementaryResults);
|
||||
RaisePropertyChanged(SupplementaryResultsPropertyName);
|
||||
//EventWriteConverterSupplementaryResultsUpdated();
|
||||
}
|
||||
|
||||
|
|
|
@ -138,25 +138,6 @@ namespace CalculatorApp
|
|||
return ref new Activatable<TActivatable>(activatable);
|
||||
}
|
||||
|
||||
namespace UnitConverterViewModelProperties
|
||||
{
|
||||
extern Platform::StringReference CurrentCategory;
|
||||
extern Platform::StringReference Unit1;
|
||||
extern Platform::StringReference Unit2;
|
||||
extern Platform::StringReference Value1Active;
|
||||
extern Platform::StringReference Value2Active;
|
||||
extern Platform::StringReference SupplementaryVisibility;
|
||||
extern Platform::StringReference SupplementaryResults;
|
||||
extern Platform::StringReference CurrencySymbol1;
|
||||
extern Platform::StringReference CurrencySymbol2;
|
||||
extern Platform::StringReference CurrencySymbolVisibility;
|
||||
extern Platform::StringReference CurrencyRatioEquality;
|
||||
extern Platform::StringReference NetworkBehavior;
|
||||
extern Platform::StringReference CurrencyDataLoadFailed;
|
||||
extern Platform::StringReference CurrencyDataIsWeekOld;
|
||||
extern Platform::StringReference IsCurrencyLoadingVisible;
|
||||
}
|
||||
|
||||
[Windows::UI::Xaml::Data::Bindable]
|
||||
public ref class UnitConverterViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
|
||||
{
|
||||
|
@ -176,7 +157,7 @@ namespace CalculatorApp
|
|||
OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencySymbol2);
|
||||
OBSERVABLE_PROPERTY_RW(Unit^, Unit2);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, Value2);
|
||||
OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector<SupplementaryResult^>^, SupplementaryResults);
|
||||
OBSERVABLE_NAMED_PROPERTY_R(Windows::Foundation::Collections::IObservableVector<SupplementaryResult^>^, SupplementaryResults);
|
||||
OBSERVABLE_PROPERTY_RW(bool, Value1Active);
|
||||
OBSERVABLE_PROPERTY_RW(bool, Value2Active);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, Value1AutomationName);
|
||||
|
@ -187,14 +168,14 @@ namespace CalculatorApp
|
|||
OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsDropDownOpen);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsDropDownEnabled);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsCurrencyLoadingVisible);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsCurrencyLoadingVisible);
|
||||
OBSERVABLE_PROPERTY_RW(bool, IsCurrencyCurrentCategory);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyRatioEquality);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyRatioEqualityAutomationName);
|
||||
OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyTimestamp);
|
||||
OBSERVABLE_PROPERTY_RW(CalculatorApp::NetworkAccessBehavior, NetworkBehavior);
|
||||
OBSERVABLE_PROPERTY_RW(bool, CurrencyDataLoadFailed);
|
||||
OBSERVABLE_PROPERTY_RW(bool, CurrencyDataIsWeekOld);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(CalculatorApp::NetworkAccessBehavior, NetworkBehavior);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, CurrencyDataLoadFailed);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, CurrencyDataIsWeekOld);
|
||||
|
||||
property Windows::UI::Xaml::Visibility SupplementaryVisibility
|
||||
{
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
// Windows headers define min/max macros.
|
||||
// Disable it for project code.
|
||||
#define NOMINMAX
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <collection.h>
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<Paragraph>
|
||||
<Run x:Name="AboutFlyoutVersion"/>
|
||||
<LineBreak/>
|
||||
<Run x:Uid="AboutControlCopyright"/>
|
||||
<Run x:Name="AboutControlCopyrightRun"/>
|
||||
</Paragraph>
|
||||
</RichTextBlock>
|
||||
<HyperlinkButton x:Name="AboutFlyoutEULA"
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "CalcViewModel/Common/LocalizationStringUtil.h"
|
||||
#include "CalcViewModel/Common/TraceLogger.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace CalculatorApp;
|
||||
using namespace CalculatorApp::Common;
|
||||
using namespace Platform;
|
||||
|
@ -19,6 +20,10 @@ using namespace Windows::UI::Xaml::Controls;
|
|||
using namespace Windows::UI::Xaml::Controls::Primitives;
|
||||
using namespace Windows::UI::Xaml::Data;
|
||||
|
||||
#ifndef BUILD_YEAR
|
||||
#define BUILD_YEAR 2019
|
||||
#endif
|
||||
|
||||
AboutFlyout::AboutFlyout()
|
||||
{
|
||||
auto locService = LocalizationService::GetInstance();
|
||||
|
@ -31,6 +36,10 @@ AboutFlyout::AboutFlyout()
|
|||
this->SetVersionString();
|
||||
|
||||
Header->Text = resourceLoader.GetResourceString("AboutButton/Content");
|
||||
|
||||
auto copyrightText = LocalizationStringUtil::GetLocalizedString(resourceLoader.GetResourceString("AboutControlCopyright")->Data(), to_wstring(BUILD_YEAR).c_str());
|
||||
AboutControlCopyrightRun->Text = ref new String(copyrightText.c_str());
|
||||
|
||||
}
|
||||
|
||||
void AboutFlyout::FeedbackButton_Click(_In_ Object^ sender, _In_ RoutedEventArgs^ e)
|
||||
|
|
|
@ -34,7 +34,11 @@
|
|||
FallbackColor="Transparent"
|
||||
TargetTheme="Dark"
|
||||
Color="Transparent"/>
|
||||
<RevealBackgroundBrush x:Key="AppControlHighlightAltListAccentHighRevealBackgroundBrush"
|
||||
<RevealBackgroundBrush x:Key="AppControlHighlightAccentRevealBackgroundBrush"
|
||||
FallbackColor="{ThemeResource SystemAccentColor}"
|
||||
TargetTheme="Dark"
|
||||
Color="{ThemeResource SystemAccentColor}"/>
|
||||
<RevealBackgroundBrush x:Key="AppControlBackgroundListAccentHighRevealBackgroundBrush"
|
||||
FallbackColor="{ThemeResource SystemAccentColorDark3}"
|
||||
TargetTheme="Dark"
|
||||
Color="{ThemeResource SystemAccentColorDark3}"/>
|
||||
|
@ -66,7 +70,11 @@
|
|||
FallbackColor="Transparent"
|
||||
TargetTheme="Light"
|
||||
Color="Transparent"/>
|
||||
<RevealBackgroundBrush x:Key="AppControlHighlightAltListAccentHighRevealBackgroundBrush"
|
||||
<RevealBackgroundBrush x:Key="AppControlHighlightAccentRevealBackgroundBrush"
|
||||
FallbackColor="{ThemeResource SystemAccentColor}"
|
||||
TargetTheme="Light"
|
||||
Color="{ThemeResource SystemAccentColor}"/>
|
||||
<RevealBackgroundBrush x:Key="AppControlBackgroundListAccentHighRevealBackgroundBrush"
|
||||
FallbackColor="{ThemeResource SystemAccentColorLight3}"
|
||||
TargetTheme="Light"
|
||||
Color="{ThemeResource SystemAccentColorLight3}"/>
|
||||
|
@ -93,7 +101,8 @@
|
|||
<SolidColorBrush x:Key="AppControlPageTextBaseHighColorBrush" Color="{ThemeResource SystemColorWindowTextColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlPageTextRedColorBrush" Color="{ThemeResource SystemColorWindowTextColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlForegroundTransparentRevealBorderBrush" Color="{ThemeResource SystemColorButtonTextColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlHighlightAltListAccentHighRevealBackgroundBrush" Color="{ThemeResource SystemColorHighlightTextColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlHighlightAccentRevealBackgroundBrush" Color="{ThemeResource SystemColorHighlightColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlBackgroundListAccentHighRevealBackgroundBrush" Color="{ThemeResource SystemColorButtonFaceColor}"/>
|
||||
<SolidColorBrush x:Key="AppControlListLowRevealHighlightBrush" Color="{ThemeResource SystemColorHighlightColor}"/>
|
||||
<SolidColorBrush x:Key="AppChromeAcrylicHostBackdropMediumLowBrush" Color="{ThemeResource SystemColorWindowColor}"/>
|
||||
</ResourceDictionary>
|
||||
|
@ -125,10 +134,6 @@
|
|||
<!-- Standard Operators Standard/Scientific in Fill/Full -->
|
||||
<x:Double x:Key="CalcOperatorCaptionSize">15</x:Double>
|
||||
|
||||
<x:Double x:Key="CalcResultFontSizeL">72</x:Double>
|
||||
<x:Double x:Key="CalcResultFontSizeM">46</x:Double>
|
||||
<x:Double x:Key="CalcResultFontSizeS">28</x:Double>
|
||||
|
||||
<!-- Base style for calc buttons -->
|
||||
<Style x:Key="CalcButtonStyle" TargetType="Controls:CalculatorButton">
|
||||
<Setter Property="MinWidth" Value="24"/>
|
||||
|
@ -326,9 +331,9 @@
|
|||
<Style x:Key="AccentCalcButtonStyle"
|
||||
BasedOn="{StaticResource SymbolOperatorButtonStyle}"
|
||||
TargetType="Controls:CalculatorButton">
|
||||
<Setter Property="HoverBackground" Value="{ThemeResource SystemControlHighlightAccentRevealBackgroundBrush}"/>
|
||||
<Setter Property="HoverBackground" Value="{ThemeResource AppControlHighlightAccentRevealBackgroundBrush}"/>
|
||||
<Setter Property="HoverForeground" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}"/>
|
||||
<Setter Property="PressBackground" Value="{ThemeResource AppControlHighlightAltListAccentHighRevealBackgroundBrush}"/>
|
||||
<Setter Property="PressBackground" Value="{ThemeResource AppControlBackgroundListAccentHighRevealBackgroundBrush}"/>
|
||||
<Setter Property="PressForeground" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}"/>
|
||||
</Style>
|
||||
|
||||
|
@ -351,7 +356,7 @@
|
|||
<Setter Property="ZoomMode" Value="Disabled"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="CalculationResultStyleL" TargetType="Controls:CalculationResult">
|
||||
<Style x:Key="CalculationResultStyle" TargetType="Controls:CalculationResult">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="{ThemeResource SystemControlPageTextBaseHighBrush}"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
|
@ -438,181 +443,6 @@
|
|||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
<Style x:Key="CalculationResultStyleM" TargetType="Controls:CalculationResult">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="{ThemeResource SystemControlPageTextBaseHighBrush}"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
<Setter Property="VerticalAlignment" Value="Stretch"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Right"/>
|
||||
<Setter Property="VerticalContentAlignment" Value="Top"/>
|
||||
<Setter Property="IsTextScaleFactorEnabled" Value="False"/>
|
||||
<Setter Property="UseSystemFocusVisuals" Value="True"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Controls:CalculationResult">
|
||||
<Grid x:Name="border" Background="{TemplateBinding Background}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<VisualStateManager.VisualStateGroups>
|
||||
<VisualStateGroup x:Name="ActiveStates">
|
||||
<VisualState x:Name="Active">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="normalOutput.IsTextSelectionEnabled" Value="True"/>
|
||||
<Setter Target="normalOutput.FontWeight" Value="SemiBold"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="Normal"/>
|
||||
</VisualStateGroup>
|
||||
</VisualStateManager.VisualStateGroups>
|
||||
<ScrollViewer x:Name="textContainer"
|
||||
Grid.Column="1"
|
||||
Padding="0,0,0,0"
|
||||
Style="{ThemeResource ResultsScrollerSnapped}"
|
||||
AutomationProperties.AccessibilityView="Raw">
|
||||
<TextBlock x:Name="normalOutput"
|
||||
Margin="{TemplateBinding DisplayMargin}"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Foreground="{TemplateBinding Foreground}"
|
||||
FontSize="{TemplateBinding FontSize}"
|
||||
FontWeight="Light"
|
||||
AutomationProperties.AccessibilityView="Raw"
|
||||
Text="{TemplateBinding DisplayValue}"
|
||||
TextAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
TextWrapping="NoWrap"/>
|
||||
</ScrollViewer>
|
||||
<HyperlinkButton x:Name="scrollLeft"
|
||||
Grid.Column="0"
|
||||
Width="20"
|
||||
MinWidth="20"
|
||||
MinHeight="24"
|
||||
Margin="-4,0,-4,0"
|
||||
Padding="0,-3,0,4"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Foreground="{ThemeResource SystemControlForegroundAccentBrush}"
|
||||
BorderThickness="0"
|
||||
Visibility="Collapsed">
|
||||
<FontIcon x:Name="scrollLeftText"
|
||||
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="12"
|
||||
Glyph=""/>
|
||||
</HyperlinkButton>
|
||||
<HyperlinkButton x:Name="scrollRight"
|
||||
Grid.Column="2"
|
||||
Width="20"
|
||||
MinWidth="20"
|
||||
MinHeight="24"
|
||||
Margin="-4,0,-4,0"
|
||||
Padding="0,-3,0,4"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Foreground="{ThemeResource SystemControlForegroundAccentBrush}"
|
||||
BorderThickness="0"
|
||||
Visibility="Collapsed">
|
||||
<FontIcon x:Name="scrollRightText"
|
||||
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="12"
|
||||
Glyph=""/>
|
||||
</HyperlinkButton>
|
||||
</Grid>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
<Style x:Key="CalculationResultStyleS" TargetType="Controls:CalculationResult">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="Foreground" Value="{ThemeResource SystemControlPageTextBaseHighBrush}"/>
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
<Setter Property="VerticalAlignment" Value="Stretch"/>
|
||||
<Setter Property="HorizontalContentAlignment" Value="Right"/>
|
||||
<Setter Property="VerticalContentAlignment" Value="Top"/>
|
||||
<Setter Property="MinHeight" Value="12"/>
|
||||
<Setter Property="IsTextScaleFactorEnabled" Value="False"/>
|
||||
<Setter Property="UseSystemFocusVisuals" Value="True"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Controls:CalculationResult">
|
||||
<Grid x:Name="border" Background="{TemplateBinding Background}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="12"/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="12"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<VisualStateManager.VisualStateGroups>
|
||||
<VisualStateGroup x:Name="ActiveStates">
|
||||
<VisualState x:Name="Active">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="normalOutput.FontWeight" Value="SemiBold"/>
|
||||
<Setter Target="normalOutput.IsTextSelectionEnabled" Value="True"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="Normal"/>
|
||||
</VisualStateGroup>
|
||||
</VisualStateManager.VisualStateGroups>
|
||||
<ScrollViewer x:Name="textContainer"
|
||||
Grid.Column="1"
|
||||
Padding="0,0,0,0"
|
||||
Style="{ThemeResource ResultsScrollerSnapped}"
|
||||
AutomationProperties.AccessibilityView="Raw">
|
||||
<TextBlock x:Name="normalOutput"
|
||||
Margin="{TemplateBinding DisplayMargin}"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Foreground="{TemplateBinding Foreground}"
|
||||
FontSize="{TemplateBinding FontSize}"
|
||||
FontWeight="Light"
|
||||
AutomationProperties.AccessibilityView="Raw"
|
||||
Text="{TemplateBinding DisplayValue}"
|
||||
TextAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
TextWrapping="NoWrap"/>
|
||||
</ScrollViewer>
|
||||
<HyperlinkButton x:Name="scrollLeft"
|
||||
Grid.Column="0"
|
||||
Width="20"
|
||||
MinWidth="20"
|
||||
MinHeight="24"
|
||||
Margin="-4,0,-4,0"
|
||||
Padding="0,-3,0,4"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Foreground="{ThemeResource SystemControlForegroundAccentBrush}"
|
||||
BorderThickness="0"
|
||||
Visibility="Collapsed">
|
||||
<FontIcon x:Name="scrollLeftText"
|
||||
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="12"
|
||||
Glyph=""/>
|
||||
</HyperlinkButton>
|
||||
<HyperlinkButton x:Name="scrollRight"
|
||||
Grid.Column="2"
|
||||
Width="20"
|
||||
MinWidth="20"
|
||||
MinHeight="24"
|
||||
Margin="-4,0,-4,0"
|
||||
Padding="0,-3,0,4"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalContentAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
Foreground="{ThemeResource SystemControlForegroundAccentBrush}"
|
||||
BorderThickness="0"
|
||||
Visibility="Collapsed">
|
||||
<FontIcon x:Name="scrollRightText"
|
||||
FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="12"
|
||||
Glyph=""/>
|
||||
</HyperlinkButton>
|
||||
</Grid>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="CaptionButtonStyle" TargetType="Button">
|
||||
<Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
|
||||
|
@ -701,7 +531,7 @@
|
|||
<VisualState x:Name="Pressed">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="RootGrid.(RevealBrush.State)" Value="Pressed"/>
|
||||
<Setter Target="RootGrid.Background" Value="{ThemeResource AppControlHighlightAltListAccentHighRevealBackgroundBrush}"/>
|
||||
<Setter Target="RootGrid.Background" Value="{ThemeResource AppControlBackgroundListAccentHighRevealBackgroundBrush}"/>
|
||||
<Setter Target="ContentPresenter.Foreground" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
|
|
|
@ -15,6 +15,10 @@
|
|||
<AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>
|
||||
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
|
||||
<AppxDefaultResourceQualifierUAP_Contrast>black</AppxDefaultResourceQualifierUAP_Contrast>
|
||||
<AppxBundle>Always</AppxBundle>
|
||||
<PackageCertificateKeyFile>TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
<AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
|
||||
<AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<!-- This has to be exactly in this place for this to work -->
|
||||
|
@ -126,16 +130,6 @@
|
|||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition="Exists('TemporaryKey.pfx')">
|
||||
<PackageCertificateKeyFile>TemporaryKey.pfx</PackageCertificateKeyFile>
|
||||
<AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
|
||||
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
|
||||
<AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="!Exists('TemporaryKey.pfx')">
|
||||
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
|
||||
<AppxBundle>Never</AppxBundle>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<AdditionalOptions>/bigobj /await /std:c++17 </AdditionalOptions>
|
||||
|
@ -257,6 +251,7 @@
|
|||
<ClInclude Include="Converters\ItemSizeToVisibilityConverter.h" />
|
||||
<ClInclude Include="Converters\RadixToStringConverter.h" />
|
||||
<ClInclude Include="Converters\VisibilityNegationConverter.h" />
|
||||
<ClInclude Include="Controls\HorizontalNoOverflowStackPanel.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="App.xaml.h">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
|
@ -360,7 +355,7 @@
|
|||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="Exists('TemporaryKey.pfx')">
|
||||
<ItemGroup>
|
||||
<None Include="TemporaryKey.pfx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -390,6 +385,7 @@
|
|||
<ClCompile Include="Converters\ItemSizeToVisibilityConverter.cpp" />
|
||||
<ClCompile Include="Converters\RadixToStringConverter.cpp" />
|
||||
<ClCompile Include="Converters\VisibilityNegationConverter.cpp" />
|
||||
<ClCompile Include="Controls\HorizontalNoOverflowStackPanel.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
|
@ -459,142 +455,138 @@
|
|||
<ClCompile Include="WindowFrameService.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PRIResource Include="Resources\af-ZA\CEngineStrings.resw" Condition="Exists('Resources\af-ZA\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\af-ZA\Resources.resw" Condition="Exists('Resources\af-ZA\Resources.resw')" />
|
||||
<PRIResource Include="Resources\am-et\CEngineStrings.resw" Condition="Exists('Resources\am-et\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\am-et\Resources.resw" Condition="Exists('Resources\am-et\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ar-sa\CEngineStrings.resw" Condition="Exists('Resources\ar-sa\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ar-sa\Resources.resw" Condition="Exists('Resources\ar-sa\Resources.resw')" />
|
||||
<PRIResource Include="Resources\az-Latn-AZ\CEngineStrings.resw" Condition="Exists('Resources\az-Latn-AZ\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\az-Latn-AZ\Resources.resw" Condition="Exists('Resources\az-Latn-AZ\Resources.resw')" />
|
||||
<PRIResource Include="Resources\be-BY\CEngineStrings.resw" Condition="Exists('Resources\be-BY\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\be-BY\Resources.resw" Condition="Exists('Resources\be-BY\Resources.resw')" />
|
||||
<PRIResource Include="Resources\bg-BG\CEngineStrings.resw" Condition="Exists('Resources\bg-BG\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\bg-BG\Resources.resw" Condition="Exists('Resources\bg-BG\Resources.resw')" />
|
||||
<PRIResource Include="Resources\bn-BD\CEngineStrings.resw" Condition="Exists('Resources\bn-BD\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\bn-BD\Resources.resw" Condition="Exists('Resources\bn-BD\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ca-es\CEngineStrings.resw" Condition="Exists('Resources\ca-es\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ca-es\Resources.resw" Condition="Exists('Resources\ca-es\Resources.resw')" />
|
||||
<PRIResource Include="Resources\cs-cz\CEngineStrings.resw" Condition="Exists('Resources\cs-cz\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\cs-cz\Resources.resw" Condition="Exists('Resources\cs-cz\Resources.resw')" />
|
||||
<PRIResource Include="Resources\da-DK\CEngineStrings.resw" Condition="Exists('Resources\da-DK\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\da-DK\Resources.resw" Condition="Exists('Resources\da-DK\Resources.resw')" />
|
||||
<PRIResource Include="Resources\de-de\CEngineStrings.resw" Condition="Exists('Resources\de-de\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\de-de\Resources.resw" Condition="Exists('Resources\de-de\Resources.resw')" />
|
||||
<PRIResource Include="Resources\el-GR\CEngineStrings.resw" Condition="Exists('Resources\el-GR\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\el-GR\Resources.resw" Condition="Exists('Resources\el-GR\Resources.resw')" />
|
||||
<PRIResource Include="Resources\en-gb\CEngineStrings.resw" Condition="Exists('Resources\en-gb\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\en-gb\Resources.resw" Condition="Exists('Resources\en-gb\Resources.resw')" />
|
||||
<PRIResource Include="Resources\af-ZA\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\af-ZA\Resources.resw" />
|
||||
<PRIResource Include="Resources\am-et\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\am-et\Resources.resw" />
|
||||
<PRIResource Include="Resources\ar-sa\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ar-sa\Resources.resw" />
|
||||
<PRIResource Include="Resources\az-Latn-AZ\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\az-Latn-AZ\Resources.resw" />
|
||||
<PRIResource Include="Resources\be-BY\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\be-BY\Resources.resw" />
|
||||
<PRIResource Include="Resources\bg-BG\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\bg-BG\Resources.resw" />
|
||||
<PRIResource Include="Resources\bn-BD\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\bn-BD\Resources.resw" />
|
||||
<PRIResource Include="Resources\ca-es\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ca-es\Resources.resw" />
|
||||
<PRIResource Include="Resources\cs-cz\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\cs-cz\Resources.resw" />
|
||||
<PRIResource Include="Resources\da-DK\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\da-DK\Resources.resw" />
|
||||
<PRIResource Include="Resources\de-de\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\de-de\Resources.resw" />
|
||||
<PRIResource Include="Resources\el-GR\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\el-GR\Resources.resw" />
|
||||
<PRIResource Include="Resources\en-gb\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\en-gb\Resources.resw" />
|
||||
<PRIResource Include="Resources\en-US\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\en-US\Resources.resw">
|
||||
<SubType>Designer</SubType>
|
||||
</PRIResource>
|
||||
<PRIResource Include="Resources\es-es\CEngineStrings.resw" Condition="Exists('Resources\es-es\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\es-es\Resources.resw" Condition="Exists('Resources\es-es\Resources.resw')" />
|
||||
<PRIResource Include="Resources\es-mx\CEngineStrings.resw" Condition="Exists('Resources\es-mx\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\es-mx\resources.resw" Condition="Exists('Resources\es-mx\Resources.resw')" />
|
||||
<PRIResource Include="Resources\et-EE\CEngineStrings.resw" Condition="Exists('Resources\et-EE\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\et-EE\Resources.resw" Condition="Exists('Resources\et-EE\Resources.resw')" />
|
||||
<PRIResource Include="Resources\eu-ES\CEngineStrings.resw" Condition="Exists('Resources\eu-ES\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\eu-ES\Resources.resw" Condition="Exists('Resources\eu-ES\Resources.resw')" />
|
||||
<PRIResource Include="Resources\fa-IR\CEngineStrings.resw" Condition="Exists('Resources\fa-IR\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\fa-IR\Resources.resw" Condition="Exists('Resources\fa-IR\Resources.resw')" />
|
||||
<PRIResource Include="Resources\fi-fi\CEngineStrings.resw" Condition="Exists('Resources\fi-fi\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\fi-fi\Resources.resw" Condition="Exists('Resources\fi-fi\Resources.resw')" />
|
||||
<PRIResource Include="Resources\fil-PH\CEngineStrings.resw" Condition="Exists('Resources\fil-PH\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\fil-PH\Resources.resw" Condition="Exists('Resources\fil-PH\Resources.resw')" />
|
||||
<PRIResource Include="Resources\fr-ca\CEngineStrings.resw" Condition="Exists('Resources\fr-ca\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\fr-ca\resources.resw" Condition="Exists('Resources\fr-ca\Resources.resw')" />
|
||||
<PRIResource Include="Resources\fr-fr\CEngineStrings.resw" Condition="Exists('Resources\fr-fr\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\fr-fr\Resources.resw" Condition="Exists('Resources\fr-fr\Resources.resw')" />
|
||||
<PRIResource Include="Resources\gl-ES\CEngineStrings.resw" Condition="Exists('Resources\gl-ES\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\gl-ES\Resources.resw" Condition="Exists('Resources\gl-ES\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ha-Latn-NG\CEngineStrings.resw" Condition="Exists('Resources\ha-Latn-NG\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ha-Latn-NG\Resources.resw" Condition="Exists('Resources\ha-Latn-NG\Resources.resw')" />
|
||||
<PRIResource Include="Resources\he-IL\CEngineStrings.resw" Condition="Exists('Resources\he-IL\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\he-IL\Resources.resw" Condition="Exists('Resources\he-IL\Resources.resw')" />
|
||||
<PRIResource Include="Resources\hi-in\CEngineStrings.resw" Condition="Exists('Resources\hi-in\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\hi-in\Resources.resw" Condition="Exists('Resources\hi-in\Resources.resw')" />
|
||||
<PRIResource Include="Resources\hr-HR\CEngineStrings.resw" Condition="Exists('Resources\hr-HR\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\hr-HR\Resources.resw" Condition="Exists('Resources\hr-HR\Resources.resw')" />
|
||||
<PRIResource Include="Resources\hu-HU\CEngineStrings.resw" Condition="Exists('Resources\hu-HU\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\hu-HU\Resources.resw" Condition="Exists('Resources\hu-HU\Resources.resw')" />
|
||||
<PRIResource Include="Resources\id-ID\CEngineStrings.resw" Condition="Exists('Resources\id-ID\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\id-ID\Resources.resw" Condition="Exists('Resources\id-ID\Resources.resw')" />
|
||||
<PRIResource Include="Resources\is-IS\CEngineStrings.resw" Condition="Exists('Resources\is-IS\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\is-IS\Resources.resw" Condition="Exists('Resources\is-IS\Resources.resw')" />
|
||||
<PRIResource Include="Resources\it-it\CEngineStrings.resw" Condition="Exists('Resources\it-it\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\it-it\Resources.resw" Condition="Exists('Resources\it-it\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ja-jp\CEngineStrings.resw" Condition="Exists('Resources\ja-jp\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ja-jp\Resources.resw" Condition="Exists('Resources\ja-jp\Resources.resw')" />
|
||||
<PRIResource Include="Resources\kk-KZ\CEngineStrings.resw" Condition="Exists('Resources\kk-KZ\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\kk-KZ\Resources.resw" Condition="Exists('Resources\kk-KZ\Resources.resw')" />
|
||||
<PRIResource Include="Resources\km-KH\CEngineStrings.resw" Condition="Exists('Resources\km-KH\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\km-KH\Resources.resw" Condition="Exists('Resources\km-KH\Resources.resw')" />
|
||||
<PRIResource Include="Resources\kn-IN\CEngineStrings.resw" Condition="Exists('Resources\kn-IN\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\kn-IN\Resources.resw" Condition="Exists('Resources\kn-IN\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ko-kr\CEngineStrings.resw" Condition="Exists('Resources\ko-kr\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ko-kr\Resources.resw" Condition="Exists('Resources\ko-kr\Resources.resw')" />
|
||||
<PRIResource Include="Resources\lo-LA\CEngineStrings.resw" Condition="Exists('Resources\lo-LA\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\lo-LA\Resources.resw" Condition="Exists('Resources\lo-LA\Resources.resw')" />
|
||||
<PRIResource Include="Resources\lt-LT\CEngineStrings.resw" Condition="Exists('Resources\lt-LT\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\lt-LT\Resources.resw" Condition="Exists('Resources\lt-LT\Resources.resw')" />
|
||||
<PRIResource Include="Resources\lv-LV\CEngineStrings.resw" Condition="Exists('Resources\lv-LV\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\lv-LV\Resources.resw" Condition="Exists('Resources\lv-LV\Resources.resw')" />
|
||||
<PRIResource Include="Resources\mk-MK\CEngineStrings.resw" Condition="Exists('Resources\mk-MK\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\mk-MK\Resources.resw" Condition="Exists('Resources\mk-MK\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ml-IN\CEngineStrings.resw" Condition="Exists('Resources\ml-IN\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ml-IN\Resources.resw" Condition="Exists('Resources\ml-IN\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ms-MY\CEngineStrings.resw" Condition="Exists('Resources\ms-MY\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ms-MY\Resources.resw" Condition="Exists('Resources\ms-MY\Resources.resw')" />
|
||||
<PRIResource Include="Resources\nb-NO\CEngineStrings.resw" Condition="Exists('Resources\nb-NO\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\nb-NO\Resources.resw" Condition="Exists('Resources\nb-NO\Resources.resw')" />
|
||||
<PRIResource Include="Resources\nl-nl\CEngineStrings.resw" Condition="Exists('Resources\nl-nl\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\nl-nl\Resources.resw" Condition="Exists('Resources\nl-nl\Resources.resw')" />
|
||||
<PRIResource Include="Resources\pl-pl\CEngineStrings.resw" Condition="Exists('Resources\pl-pl\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\pl-pl\Resources.resw" Condition="Exists('Resources\pl-pl\Resources.resw')" />
|
||||
<PRIResource Include="Resources\pt-br\CEngineStrings.resw" Condition="Exists('Resources\pt-br\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\pt-br\Resources.resw" Condition="Exists('Resources\pt-br\Resources.resw')" />
|
||||
<PRIResource Include="Resources\pt-PT\CEngineStrings.resw" Condition="Exists('Resources\pt-PT\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\pt-PT\Resources.resw" Condition="Exists('Resources\pt-PT\Resources.resw')" />
|
||||
<PRIResource Include="Resources\qps-plocm\CEngineStrings.resw" Condition="Exists('Resources\qps-plocm\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\qps-plocm\Resources.resw" Condition="Exists('Resources\qps-plocm\Resources.resw')" />
|
||||
<PRIResource Include="Resources\qps-ploc\CEngineStrings.resw" Condition="Exists('Resources\qps-ploc\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\qps-ploc\Resources.resw" Condition="Exists('Resources\qps-ploc\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ro-RO\CEngineStrings.resw" Condition="Exists('Resources\ro-RO\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ro-RO\Resources.resw" Condition="Exists('Resources\ro-RO\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ru-ru\CEngineStrings.resw" Condition="Exists('Resources\ru-ru\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ru-ru\Resources.resw" Condition="Exists('Resources\ru-ru\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sk-SK\CEngineStrings.resw" Condition="Exists('Resources\sk-SK\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sk-SK\Resources.resw" Condition="Exists('Resources\sk-SK\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sl-SI\CEngineStrings.resw" Condition="Exists('Resources\sl-SI\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sl-SI\Resources.resw" Condition="Exists('Resources\sl-SI\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sq-AL\CEngineStrings.resw" Condition="Exists('Resources\sq-AL\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sq-AL\Resources.resw" Condition="Exists('Resources\sq-AL\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sr-Latn-RS\CEngineStrings.resw" Condition="Exists('Resources\sr-Latn-RS\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sr-Latn-RS\Resources.resw" Condition="Exists('Resources\sr-Latn-RS\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sv-se\CEngineStrings.resw" Condition="Exists('Resources\sv-se\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sv-se\Resources.resw" Condition="Exists('Resources\sv-se\Resources.resw')" />
|
||||
<PRIResource Include="Resources\sw-KE\CEngineStrings.resw" Condition="Exists('Resources\sw-KE\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\sw-KE\Resources.resw" Condition="Exists('Resources\sw-KE\Resources.resw')" />
|
||||
<PRIResource Include="Resources\ta-IN\CEngineStrings.resw" Condition="Exists('Resources\ta-IN\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\ta-IN\Resources.resw" Condition="Exists('Resources\ta-IN\Resources.resw')" />
|
||||
<PRIResource Include="Resources\te-IN\CEngineStrings.resw" Condition="Exists('Resources\te-IN\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\te-IN\Resources.resw" Condition="Exists('Resources\te-IN\Resources.resw')" />
|
||||
<PRIResource Include="Resources\th-th\CEngineStrings.resw" Condition="Exists('Resources\th-th\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\th-th\Resources.resw" Condition="Exists('Resources\th-th\Resources.resw')" />
|
||||
<PRIResource Include="Resources\tr-tr\CEngineStrings.resw" Condition="Exists('Resources\tr-tr\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\tr-tr\Resources.resw" Condition="Exists('Resources\tr-tr\Resources.resw')" />
|
||||
<PRIResource Include="Resources\uk-UA\CEngineStrings.resw" Condition="Exists('Resources\uk-UA\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\uk-UA\Resources.resw" Condition="Exists('Resources\uk-UA\Resources.resw')" />
|
||||
<PRIResource Include="Resources\uz-Latn-UZ\CEngineStrings.resw" Condition="Exists('Resources\uz-Latn-UZ\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\uz-Latn-UZ\Resources.resw" Condition="Exists('Resources\uz-Latn-UZ\Resources.resw')" />
|
||||
<PRIResource Include="Resources\vi-vn\CEngineStrings.resw" Condition="Exists('Resources\vi-vn\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\vi-vn\Resources.resw" Condition="Exists('Resources\vi-vn\Resources.resw')" />
|
||||
<PRIResource Include="Resources\zh-cn\CEngineStrings.resw" Condition="Exists('Resources\zh-cn\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\zh-cn\Resources.resw" Condition="Exists('Resources\zh-cn\Resources.resw')" />
|
||||
<PRIResource Include="Resources\zh-tw\CEngineStrings.resw" Condition="Exists('Resources\zh-tw\CEngineStrings.resw')" />
|
||||
<PRIResource Include="Resources\zh-tw\Resources.resw" Condition="Exists('Resources\zh-tw\Resources.resw')" />
|
||||
<PRIResource Include="Resources\es-es\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\es-es\Resources.resw" />
|
||||
<PRIResource Include="Resources\es-mx\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\es-mx\resources.resw" />
|
||||
<PRIResource Include="Resources\et-EE\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\et-EE\Resources.resw" />
|
||||
<PRIResource Include="Resources\eu-ES\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\eu-ES\Resources.resw" />
|
||||
<PRIResource Include="Resources\fa-IR\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\fa-IR\Resources.resw" />
|
||||
<PRIResource Include="Resources\fi-fi\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\fi-fi\Resources.resw" />
|
||||
<PRIResource Include="Resources\fil-PH\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\fil-PH\Resources.resw" />
|
||||
<PRIResource Include="Resources\fr-ca\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\fr-ca\resources.resw" />
|
||||
<PRIResource Include="Resources\fr-fr\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\fr-fr\Resources.resw" />
|
||||
<PRIResource Include="Resources\gl-ES\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\gl-ES\Resources.resw" />
|
||||
<PRIResource Include="Resources\ha-Latn-NG\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ha-Latn-NG\Resources.resw" />
|
||||
<PRIResource Include="Resources\he-IL\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\he-IL\Resources.resw" />
|
||||
<PRIResource Include="Resources\hi-in\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\hi-in\Resources.resw" />
|
||||
<PRIResource Include="Resources\hr-HR\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\hr-HR\Resources.resw" />
|
||||
<PRIResource Include="Resources\hu-HU\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\hu-HU\Resources.resw" />
|
||||
<PRIResource Include="Resources\id-ID\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\id-ID\Resources.resw" />
|
||||
<PRIResource Include="Resources\is-IS\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\is-IS\Resources.resw" />
|
||||
<PRIResource Include="Resources\it-it\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\it-it\Resources.resw" />
|
||||
<PRIResource Include="Resources\ja-jp\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ja-jp\Resources.resw" />
|
||||
<PRIResource Include="Resources\kk-KZ\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\kk-KZ\Resources.resw" />
|
||||
<PRIResource Include="Resources\km-KH\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\km-KH\Resources.resw" />
|
||||
<PRIResource Include="Resources\kn-IN\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\kn-IN\Resources.resw" />
|
||||
<PRIResource Include="Resources\ko-kr\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ko-kr\Resources.resw" />
|
||||
<PRIResource Include="Resources\lo-LA\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\lo-LA\Resources.resw" />
|
||||
<PRIResource Include="Resources\lt-LT\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\lt-LT\Resources.resw" />
|
||||
<PRIResource Include="Resources\lv-LV\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\lv-LV\Resources.resw" />
|
||||
<PRIResource Include="Resources\mk-MK\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\mk-MK\Resources.resw" />
|
||||
<PRIResource Include="Resources\ml-IN\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ml-IN\Resources.resw" />
|
||||
<PRIResource Include="Resources\ms-MY\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ms-MY\Resources.resw" />
|
||||
<PRIResource Include="Resources\nb-NO\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\nb-NO\Resources.resw" />
|
||||
<PRIResource Include="Resources\nl-nl\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\nl-nl\Resources.resw" />
|
||||
<PRIResource Include="Resources\pl-pl\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\pl-pl\Resources.resw" />
|
||||
<PRIResource Include="Resources\pt-br\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\pt-br\Resources.resw" />
|
||||
<PRIResource Include="Resources\pt-PT\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\pt-PT\Resources.resw" />
|
||||
<PRIResource Include="Resources\ro-RO\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ro-RO\Resources.resw" />
|
||||
<PRIResource Include="Resources\ru-ru\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ru-ru\Resources.resw" />
|
||||
<PRIResource Include="Resources\sk-SK\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sk-SK\Resources.resw" />
|
||||
<PRIResource Include="Resources\sl-SI\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sl-SI\Resources.resw" />
|
||||
<PRIResource Include="Resources\sq-AL\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sq-AL\Resources.resw" />
|
||||
<PRIResource Include="Resources\sr-Latn-RS\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sr-Latn-RS\Resources.resw" />
|
||||
<PRIResource Include="Resources\sv-se\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sv-se\Resources.resw" />
|
||||
<PRIResource Include="Resources\sw-KE\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\sw-KE\Resources.resw" />
|
||||
<PRIResource Include="Resources\ta-IN\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\ta-IN\Resources.resw" />
|
||||
<PRIResource Include="Resources\te-IN\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\te-IN\Resources.resw" />
|
||||
<PRIResource Include="Resources\th-th\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\th-th\Resources.resw" />
|
||||
<PRIResource Include="Resources\tr-tr\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\tr-tr\Resources.resw" />
|
||||
<PRIResource Include="Resources\uk-UA\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\uk-UA\Resources.resw" />
|
||||
<PRIResource Include="Resources\uz-Latn-UZ\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\uz-Latn-UZ\Resources.resw" />
|
||||
<PRIResource Include="Resources\vi-vn\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\vi-vn\Resources.resw" />
|
||||
<PRIResource Include="Resources\zh-cn\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\zh-cn\Resources.resw" />
|
||||
<PRIResource Include="Resources\zh-tw\CEngineStrings.resw" />
|
||||
<PRIResource Include="Resources\zh-tw\Resources.resw" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="Assets\CalculatorAppList.contrast-black_scale-100.png" />
|
||||
|
|
|
@ -308,6 +308,9 @@
|
|||
<ClCompile Include="Common\AppLifecycleLogger.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Controls\HorizontalNoOverflowStackPanel.cpp">
|
||||
<Filter>Controls</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h" />
|
||||
|
@ -407,12 +410,16 @@
|
|||
<ClInclude Include="Common\AppLifecycleLogger.h">
|
||||
<Filter>Common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Controls\HorizontalNoOverflowStackPanel.h">
|
||||
<Filter>Controls</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AppxManifest Include="Package.appxmanifest" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="TemporaryKey.pfx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="Views\Calculator.xaml">
|
||||
|
|
|
@ -28,6 +28,7 @@ using namespace std;
|
|||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, IsActive);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, AccentColor);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, MinFontSize);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, MaxFontSize);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, DisplayMargin);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, MaxExpressionHistoryCharacters);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, ExpressionVisibility);
|
||||
|
@ -50,7 +51,6 @@ StringReference CalculationResult::s_FocusedState(L"Focused");
|
|||
StringReference CalculationResult::s_UnfocusedState(L"Unfocused");
|
||||
|
||||
CalculationResult::CalculationResult():
|
||||
m_startingFontSize(0.0),
|
||||
m_isScalingText(false),
|
||||
m_haveCalculatedMax(false)
|
||||
{
|
||||
|
@ -95,7 +95,6 @@ void CalculationResult::OnApplyTemplate()
|
|||
if (m_textBlock)
|
||||
{
|
||||
m_textBlock->Visibility = ::Visibility::Visible;
|
||||
m_startingFontSize = m_textBlock->FontSize;
|
||||
}
|
||||
}
|
||||
UpdateAllState();
|
||||
|
@ -143,6 +142,16 @@ void CalculationResult::OnDisplayValuePropertyChanged(String^ /*oldValue*/, Stri
|
|||
UpdateTextState();
|
||||
}
|
||||
|
||||
void CalculationResult::OnMinFontSizePropertyChanged(double /*oldValue*/, double /*newValue*/)
|
||||
{
|
||||
UpdateTextState();
|
||||
}
|
||||
|
||||
void CalculationResult::OnMaxFontSizePropertyChanged(double /*oldValue*/, double /*newValue*/)
|
||||
{
|
||||
UpdateTextState();
|
||||
}
|
||||
|
||||
void CalculationResult::OnIsInErrorPropertyChanged(bool /*oldValue*/, bool newValue)
|
||||
{
|
||||
// We need to have a good template for this to work
|
||||
|
@ -210,9 +219,9 @@ void CalculationResult::UpdateTextState()
|
|||
|
||||
if (widthDiff > WIDTHCUTOFF)
|
||||
{
|
||||
fontSizeChange = min(max(floor(WIDTHTOFONTSCALAR * widthDiff) - WIDTHTOFONTOFFSET, INCREMENTOFFSET), MAXFONTINCREMENT);
|
||||
fontSizeChange = min<double>(max<double>(floor(WIDTHTOFONTSCALAR * widthDiff) - WIDTHTOFONTOFFSET, INCREMENTOFFSET), MAXFONTINCREMENT);
|
||||
}
|
||||
if (m_textBlock->ActualWidth < containerSize && abs(m_textBlock->FontSize - m_startingFontSize) > FONTTOLERANCE && !m_haveCalculatedMax)
|
||||
if (m_textBlock->ActualWidth < containerSize && abs(m_textBlock->FontSize - MaxFontSize) > FONTTOLERANCE && !m_haveCalculatedMax)
|
||||
{
|
||||
ModifyFontAndMargin(m_textBlock, fontSizeChange);
|
||||
m_textBlock->InvalidateArrange();
|
||||
|
@ -228,7 +237,7 @@ void CalculationResult::UpdateTextState()
|
|||
m_textBlock->InvalidateArrange();
|
||||
return;
|
||||
}
|
||||
assert(m_textBlock->FontSize >= MinFontSize && m_textBlock->FontSize <= m_startingFontSize);
|
||||
assert(m_textBlock->FontSize >= MinFontSize && m_textBlock->FontSize <= MaxFontSize);
|
||||
m_isScalingText = false;
|
||||
if (IsOperatorCommand)
|
||||
{
|
||||
|
@ -361,24 +370,15 @@ void CalculationResult::ModifyFontAndMargin(TextBlock^ textBox, double fontChang
|
|||
{
|
||||
double cur = textBox->FontSize;
|
||||
double newFontSize = 0.0;
|
||||
Thickness t = textBox->Margin;
|
||||
double scaleFactor = SCALEFACTOR;
|
||||
if (m_textContainer->ActualHeight <= HEIGHTCUTOFF)
|
||||
{
|
||||
scaleFactor = SMALLHEIGHTSCALEFACTOR;
|
||||
}
|
||||
if (fontChange < 0)
|
||||
{
|
||||
newFontSize = max(cur + fontChange, MinFontSize);
|
||||
t.Bottom += scaleFactor * abs(cur - newFontSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
newFontSize = min(cur + fontChange, m_startingFontSize);
|
||||
t.Bottom -= scaleFactor * abs(cur - newFontSize);
|
||||
}
|
||||
|
||||
newFontSize = min(max(cur + fontChange, MinFontSize), MaxFontSize);
|
||||
m_textContainer->Padding = Thickness(0, 0, 0, scaleFactor * abs(cur - newFontSize));
|
||||
textBox->FontSize = newFontSize;
|
||||
textBox->Margin = t;
|
||||
}
|
||||
|
||||
void CalculationResult::UpdateAllState()
|
||||
|
|
|
@ -19,7 +19,8 @@ namespace CalculatorApp
|
|||
DEPENDENCY_PROPERTY_OWNER(CalculationResult);
|
||||
|
||||
DEPENDENCY_PROPERTY(Windows::UI::Xaml::Visibility, ExpressionVisibility);
|
||||
DEPENDENCY_PROPERTY(double, MinFontSize);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(double, MinFontSize, 0.0);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(double, MaxFontSize, 30.0);
|
||||
DEPENDENCY_PROPERTY(Windows::UI::Xaml::Thickness, DisplayMargin);
|
||||
DEPENDENCY_PROPERTY(int, MaxExpressionHistoryCharacters);
|
||||
DEPENDENCY_PROPERTY_WITH_CALLBACK(bool, IsActive);
|
||||
|
@ -52,6 +53,8 @@ namespace CalculatorApp
|
|||
void OnAccentColorPropertyChanged(Windows::UI::Xaml::Media::Brush^ oldValue, Windows::UI::Xaml::Media::Brush^ newValue);
|
||||
void OnDisplayValuePropertyChanged(Platform::String^ oldValue, Platform::String^ newValue);
|
||||
void OnIsInErrorPropertyChanged(bool oldValue, bool newValue);
|
||||
void OnMinFontSizePropertyChanged(double oldValue, double newValue);
|
||||
void OnMaxFontSizePropertyChanged(double oldValue, double newValue);
|
||||
void TextContainerSizeChanged(Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e);
|
||||
void OnTextContainerLayoutUpdated(Object^ sender, Object^ e);
|
||||
void UpdateVisualState();
|
||||
|
@ -74,7 +77,6 @@ namespace CalculatorApp
|
|||
Windows::UI::Xaml::Controls::TextBlock^ m_textBlock;
|
||||
Windows::UI::Xaml::Controls::HyperlinkButton^ m_scrollLeft;
|
||||
Windows::UI::Xaml::Controls::HyperlinkButton^ m_scrollRight;
|
||||
double m_startingFontSize;
|
||||
double scrollRatio = 0.7;
|
||||
bool m_isScalingText;
|
||||
bool m_haveCalculatedMax;
|
||||
|
|
70
src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp
Normal file
70
src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp
Normal file
|
@ -0,0 +1,70 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//
|
||||
// HorizontalNoOverflowStackPanel.xaml.cpp
|
||||
// Implementation of the HorizontalNoOverflowStackPanel class
|
||||
//
|
||||
|
||||
#include "pch.h"
|
||||
#include "HorizontalNoOverflowStackPanel.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace CalculatorApp::Controls;
|
||||
using namespace Windows::Foundation;
|
||||
|
||||
Size HorizontalNoOverflowStackPanel::MeasureOverride(Size availableSize)
|
||||
{
|
||||
float maxHeight = 0;
|
||||
float width = 0;
|
||||
for (auto child : Children)
|
||||
{
|
||||
child->Measure(Size(numeric_limits<float>::infinity(), numeric_limits<float>::infinity()));
|
||||
maxHeight = max(maxHeight, child->DesiredSize.Height);
|
||||
width += child->DesiredSize.Width;
|
||||
}
|
||||
return Size(min(width, availableSize.Width), min(availableSize.Height, maxHeight));
|
||||
}
|
||||
|
||||
bool HorizontalNoOverflowStackPanel::ShouldPrioritizeLastItem()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Size HorizontalNoOverflowStackPanel::ArrangeOverride(Size finalSize)
|
||||
{
|
||||
if (Children->Size == 0)
|
||||
{
|
||||
return finalSize;
|
||||
}
|
||||
|
||||
float posX = 0;
|
||||
auto lastChild = Children->GetAt(Children->Size - 1);
|
||||
float lastChildWidth = 0;
|
||||
if (Children->Size > 2 && ShouldPrioritizeLastItem())
|
||||
{
|
||||
lastChildWidth = lastChild->DesiredSize.Width;
|
||||
}
|
||||
for (auto item : Children)
|
||||
{
|
||||
auto widthAvailable = finalSize.Width - posX;
|
||||
if (item != lastChild)
|
||||
{
|
||||
widthAvailable -= lastChildWidth;
|
||||
}
|
||||
float itemWidth = item->DesiredSize.Width;
|
||||
if (widthAvailable > 0 && itemWidth <= widthAvailable)
|
||||
{
|
||||
//stack the items horizontally (left to right)
|
||||
item->Arrange(Rect(posX, 0, itemWidth, finalSize.Height));
|
||||
posX += item->RenderSize.Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Not display the item
|
||||
item->Arrange(Rect(0, 0, 0, 0));
|
||||
}
|
||||
}
|
||||
return finalSize;
|
||||
}
|
||||
|
28
src/Calculator/Controls/HorizontalNoOverflowStackPanel.h
Normal file
28
src/Calculator/Controls/HorizontalNoOverflowStackPanel.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//
|
||||
// HorizontalNoOverflowStackPanel.h
|
||||
// Declaration of the HorizontalNoOverflowStackPanel class
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#include "CalcViewModel/Common/Utils.h"
|
||||
|
||||
namespace CalculatorApp
|
||||
{
|
||||
namespace Controls
|
||||
{
|
||||
public ref class HorizontalNoOverflowStackPanel : public Windows::UI::Xaml::Controls::Panel
|
||||
{
|
||||
DEPENDENCY_PROPERTY_OWNER(HorizontalNoOverflowStackPanel);
|
||||
//Prioritize the last item over all other items (except the first one)
|
||||
internal:
|
||||
HorizontalNoOverflowStackPanel() {}
|
||||
protected:
|
||||
virtual Windows::Foundation::Size MeasureOverride(Windows::Foundation::Size availableSize) override;
|
||||
virtual Windows::Foundation::Size ArrangeOverride(Windows::Foundation::Size finalSize) override;
|
||||
virtual bool ShouldPrioritizeLastItem();
|
||||
};
|
||||
}
|
||||
}
|
|
@ -38,5 +38,3 @@ void SupplementaryItemsControl::PrepareContainerForItemOverride(DependencyObject
|
|||
{
|
||||
return ref new SupplementaryContentPresenterAP(this);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Sakrekenaar</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Sakrekenaar [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows-Sakrekenaar</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows-Sakrekenaar [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Sakrekenaar</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Sakrekenaar [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopieer</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Hakies regs</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Aantal oop hakies %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Daar is geen oop hakies om te sluit nie.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Wetenskaplike notering</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft-Privaatheidstelling</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Alle regte voorbehou.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Alle regte voorbehou.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Inligting oor</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x of</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>en</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>ማስሊያ</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>ማስሊያ [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows ማስሊያ</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows ማስሊያ [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>ማስሊያ</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>ማስሊያ [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>ቅዳ</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>የቀኝ ቅንፍ</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>የክፍት ቅንፎች ብዛት %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>ምንም የሚዘጋ ክፍት ቅንፍ የለም።</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>ሳይንሳዊ እሳቤ</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -918,7 +938,7 @@
|
|||
<comment>Screen reader prompt for the Calculator cos button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="tanButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>ሰያፍ</value>
|
||||
<value>ሰዓት</value>
|
||||
<comment>Screen reader prompt for the Calculator tan button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="sinhButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -1082,7 +1102,7 @@
|
|||
<comment>Unit conversion category name called Power (eg. the power of an engine or a light bulb)</comment>
|
||||
</data>
|
||||
<data name="CategoryName_SpeedText" xml:space="preserve">
|
||||
<value>ቶሎታ</value>
|
||||
<value>ፍጥነት</value>
|
||||
<comment>Unit conversion category name called Speed</comment>
|
||||
</data>
|
||||
<data name="CategoryName_TimeText" xml:space="preserve">
|
||||
|
@ -1090,7 +1110,7 @@
|
|||
<comment>Unit conversion category name called Time</comment>
|
||||
</data>
|
||||
<data name="CategoryName_VolumeText" xml:space="preserve">
|
||||
<value>ድምጽ መጠን</value>
|
||||
<value>የድምጽ መጠን</value>
|
||||
<comment>Unit conversion category name called Volume (eg. cups, teaspoons, milliliters)</comment>
|
||||
</data>
|
||||
<data name="CategoryName_TemperatureText" xml:space="preserve">
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>የ Microsoft ግላዊነት መግለጫ</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. ሁሉም መብቱ የተጠበቀ።</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. ሁሉም መብቶች በህግ የተከበሩ ናቸው።</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>ስለ</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x ወይም</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>እና</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>የዝማኔ ክፍያዎች</value>
|
||||
<value>የዝማኔ ፍጥነቶች</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
@ -2688,11 +2708,11 @@
|
|||
<comment>AccessKey for the currency converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_DataAccessKey" xml:space="preserve">
|
||||
<value>ው</value>
|
||||
<value>D</value>
|
||||
<comment>AccessKey for the data converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_EnergyAccessKey" xml:space="preserve">
|
||||
<value>ጉ</value>
|
||||
<value>E</value>
|
||||
<comment>AccessKey for the energy converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_LengthAccessKey" xml:space="preserve">
|
||||
|
@ -2708,7 +2728,7 @@
|
|||
<comment>AccessKey for the pressure converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_SpeedAccessKey" xml:space="preserve">
|
||||
<value>ቶ</value>
|
||||
<value>S</value>
|
||||
<comment>AccessKey for the speed converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_TimeAccessKey" xml:space="preserve">
|
||||
|
@ -2716,7 +2736,7 @@
|
|||
<comment>AccessKey for the time converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_VolumeAccessKey" xml:space="preserve">
|
||||
<value>ድመ</value>
|
||||
<value>ዕ</value>
|
||||
<comment>AccessKey for the volume converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="CategoryName_WeightAccessKey" xml:space="preserve">
|
||||
|
@ -2728,7 +2748,7 @@
|
|||
<comment>AccessKey for the temperature converter navbar item. {StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="ClearHistory.AccessKey" xml:space="preserve">
|
||||
<value>አጽ</value>
|
||||
<value>C</value>
|
||||
<comment>Access key for the Clear history button.{StringCategory="Accelerator"}</comment>
|
||||
</data>
|
||||
<data name="ClearMemory.AccessKey" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>الحاسبة</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>الحاسبة [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>الحاسبة في Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>الحاسبة في Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>الحاسبة</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>الحاسبة [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>نسخ</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>أقواس يمنى</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>عدد الأقواس المفتوحة %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>لا توجد أي أقواس مفتوحة لإغلاقها.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>رموز علمية</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2266,9 +2286,9 @@
|
|||
<value>بيان الخصوصية الخاص بشركة Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. جميع الحقوق محفوظة.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>حقوق النشر © محفوظة لشركة Microsoft لعام %1. جميع الحقوق محفوظة.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>حول</value>
|
||||
|
@ -2602,7 +2622,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x or</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>و</value>
|
||||
|
|
|
@ -150,7 +150,7 @@
|
|||
<comment>Same 107</comment>
|
||||
</data>
|
||||
<data name="99" xml:space="preserve">
|
||||
<value>Sıfırla bölmək mümkün deyil</value>
|
||||
<value>Sıfra bölmək mümkün deyil</value>
|
||||
<comment>Error string shown when a divide by zero condition happens during the calculation</comment>
|
||||
</data>
|
||||
</root>
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Kalkulyator</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Kalkulyator [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulyator</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulyator [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Kalkulyator</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Kalkulyator [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Köçür</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Sağ mötərizə</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Açıq mötərizənin sayı %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Bağlamaq üçün açıq mötərizələr yoxdur.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Eksponensial format</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft Məxfilik Bildirişi</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Bütün hüquqlar qorunur.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Bütün hüquqlar qorunur.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Haqqında</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x, yaxud</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>və</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Калькулятар</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Калькулятар [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Калькулятар Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Калькулятар Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Калькулятар</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Калькулятар [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Капіяваць</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Правая дужка</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Лік адсутных дужак %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Няма незакрытых дужак.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Экспанентавы запіс</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Заява аб канфідэнцыйнасці Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© Microsoft, 2018. Усе правы абароненыя.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© Microsoft, %1. Усе правы абароненыя.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Інфармацыя</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>выключальнае або</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>пабітавае і</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>Абнавіць курсы</value>
|
||||
<value>Абнавіць тарыфы</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Калкулатор</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Калкулатор [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Калкулатор на Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Калкулатор на Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Калкулатор</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Калкулатор [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Копиране</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Дясна скоба</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Брой отворени скоби: %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Няма отворени скоби за затваряне.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Експоненциален запис</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Декларация за поверителност на Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Всички права запазени.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Всички права запазени.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Относно</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x или</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>и</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>ক্যালকুলেটর</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>ক্যালকুলেটর [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows ক্যালকুলেটর</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows ক্যালকুলেটর [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>ক্যালকুলেটর</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>ক্যালকুলেটর [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>প্রতিলিপি</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>ডান বন্ধনী</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>বন্ধনী গণনা খুলুন %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>বন্ধ করার জন্য এখানে কোনো খোলা বন্ধনী নেই।</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>বৈজ্ঞানিক নোটেশন</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft গোপনীয়তার বিবৃতি</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. সর্বস্বত্ব সংরক্ষিত।</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft। সর্বস্বত্ব সংরক্ষিত।</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>বিষয়ক</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x বা</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>এবং</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>হালনাগাদ হার</value>
|
||||
<value>হালনাগাদের হার</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculadora del Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculadora del Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copia</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Parèntesi de tancament</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Recompte de parèntesis oberts: %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>No hi ha cap parèntesi obert per tancar.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notació científica</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Declaració de privadesa de Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Tots els drets reservats.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Tots els drets reservats.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Sobre</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x o</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>i</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Kalkulačka</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Kalkulačka [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulačka</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulačka [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Kalkulačka</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Kalkulačka [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopírovat</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Pravá závorka</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Počet levých okrouhlých závorek %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Nenašly se žádné levé okrouhlé závorky, ke kterým by bylo třeba přidat pravou závorku.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Vědecký zápis</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Prohlášení společnosti Microsoft o zásadách ochrany osobních údajů</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Všechna práva vyhrazena.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Všechna práva vyhrazena.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>O aplikaci</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>XOR</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>AND</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Lommeregner</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Lommeregner [Udvikling]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Lommeregner</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Lommeregner [Udvikling]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Lommeregner</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Lommeregner [Udvikling]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopiér</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Højreparentes</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Åbn parentesantal %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Der er ingen åbne parenteser at lukke.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Videnskabelig notation</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsofts erklæring om beskyttelse af personlige oplysninger</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Alle rettigheder forbeholdes.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Alle rettigheder forbeholdes.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Om</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x eller</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>og</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>Opdater valutakurser</value>
|
||||
<value>Opdater satser</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Rechner</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Rechner [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows-Rechner</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows-Rechner [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Rechner</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Rechner [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopieren</value>
|
||||
|
@ -422,7 +434,7 @@
|
|||
<comment>This is the automation name and label for the memory button when the memory flyout is open.</comment>
|
||||
</data>
|
||||
<data name="MemoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Arbeitsspeicher</value>
|
||||
<value>Speicher</value>
|
||||
<comment>This is the tool tip automation name for the memory button.</comment>
|
||||
</data>
|
||||
<data name="HistoryButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
|
@ -442,11 +454,11 @@
|
|||
<comment>This is the tool tip automation name for the Clear Memory (MC) button.</comment>
|
||||
</data>
|
||||
<data name="MemoryLabel.Text" xml:space="preserve">
|
||||
<value>Arbeitsspeicher</value>
|
||||
<value>Speicher</value>
|
||||
<comment>The text that shows as the header for the memory list</comment>
|
||||
</data>
|
||||
<data name="MemoryPivotItem.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Speicher</value>
|
||||
<value>Arbeitsspeicher</value>
|
||||
<comment>The automation name for the Memory pivot item that is shown when Calculator is in wide layout.</comment>
|
||||
</data>
|
||||
<data name="HistoryLabel.Text" xml:space="preserve">
|
||||
|
@ -550,7 +562,7 @@
|
|||
<comment>Screen reader prompt for the history flyout</comment>
|
||||
</data>
|
||||
<data name="MemoryPane" xml:space="preserve">
|
||||
<value>Arbeitsspeicher</value>
|
||||
<value>Speicher</value>
|
||||
<comment>Screen reader prompt for the memory flyout</comment>
|
||||
</data>
|
||||
<data name="Format_HexButtonValue" xml:space="preserve">
|
||||
|
@ -594,7 +606,7 @@
|
|||
<comment>Screen reader prompt for the Calculator Memory button</comment>
|
||||
</data>
|
||||
<data name="memButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Gespeicherten Wert speichern (STRG+M)</value>
|
||||
<value>Speicher (STRG+M)</value>
|
||||
<comment>This is the tool tip automation name for the Memory Store (MS) button.</comment>
|
||||
</data>
|
||||
<data name="ClearMemoryButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -770,23 +782,23 @@
|
|||
<comment>Screen reader prompt for the Calculator number "F" button</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>And</value>
|
||||
<value>UND</value>
|
||||
<comment>Screen reader prompt for the Calculator And button</comment>
|
||||
</data>
|
||||
<data name="orButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Or</value>
|
||||
<value>ODER</value>
|
||||
<comment>Screen reader prompt for the Calculator Or button</comment>
|
||||
</data>
|
||||
<data name="notButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Not</value>
|
||||
<value>NICHT</value>
|
||||
<comment>Screen reader prompt for the Calculator Not button</comment>
|
||||
</data>
|
||||
<data name="rolButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Nach links drehen</value>
|
||||
<value>Nach links verschieben</value>
|
||||
<comment>Screen reader prompt for the Calculator ROL button</comment>
|
||||
</data>
|
||||
<data name="rorButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Nach rechts drehen</value>
|
||||
<value>Nach rechts verschieben</value>
|
||||
<comment>Screen reader prompt for the Calculator ROR button</comment>
|
||||
</data>
|
||||
<data name="lshButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Schließende Klammer</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Anzahl geöffneter Klammern %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Es sind keine zu schließenden Klammern vorhanden.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Wissenschaftliche Schreibweise</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -918,7 +938,7 @@
|
|||
<comment>Screen reader prompt for the Calculator cos button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="tanButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Tagens</value>
|
||||
<value>Tangens</value>
|
||||
<comment>Screen reader prompt for the Calculator tan button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="sinhButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -938,19 +958,19 @@
|
|||
<comment>Screen reader prompt for the x squared on the scientific operator keypad. </comment>
|
||||
</data>
|
||||
<data name="xpower3Button.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Würfel</value>
|
||||
<value>Kubik</value>
|
||||
<comment>Screen reader prompt for the x cubed on the scientific operator keypad. </comment>
|
||||
</data>
|
||||
<data name="invsinButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Arcussinus</value>
|
||||
<value>Arkussinus</value>
|
||||
<comment>Screen reader prompt for the inverted sin on the scientific operator keypad.</comment>
|
||||
</data>
|
||||
<data name="invcosButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Arcuscosinus</value>
|
||||
<value>Arkuskosinus</value>
|
||||
<comment>Screen reader prompt for the inverted cos on the scientific operator keypad.</comment>
|
||||
</data>
|
||||
<data name="invtanButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Arcustangens</value>
|
||||
<value>Arkustangens</value>
|
||||
<comment>Screen reader prompt for the inverted tan on the scientific operator keypad.</comment>
|
||||
</data>
|
||||
<data name="invsinhButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -1150,7 +1170,7 @@
|
|||
<comment>A measurement unit for volume. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Liter" xml:space="preserve">
|
||||
<value>L</value>
|
||||
<value>l</value>
|
||||
<comment>An abbreviation for a measurement unit of volume</comment>
|
||||
</data>
|
||||
<data name="UnitName_Milliliter" xml:space="preserve">
|
||||
|
@ -1158,7 +1178,7 @@
|
|||
<comment>A measurement unit for volume. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Milliliter" xml:space="preserve">
|
||||
<value>mL</value>
|
||||
<value>ml</value>
|
||||
<comment>An abbreviation for a measurement unit of volume</comment>
|
||||
</data>
|
||||
<data name="UnitName_PintUK" xml:space="preserve">
|
||||
|
@ -1494,7 +1514,7 @@
|
|||
<comment>An abbreviation for a measurement unit of power</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Week" xml:space="preserve">
|
||||
<value>wo</value>
|
||||
<value>w</value>
|
||||
<comment>An abbreviation for a measurement unit of time</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Yard" xml:space="preserve">
|
||||
|
@ -1866,7 +1886,7 @@
|
|||
<comment>A measurement unit for time. (Please choose the most appropriate plural form to fit any number between 0 and 999,999,999,999,999)</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Carat" xml:space="preserve">
|
||||
<value>cd</value>
|
||||
<value>kt</value>
|
||||
<comment>An abbreviation for a measurement unit of weight</comment>
|
||||
</data>
|
||||
<data name="UnitAbbreviation_Degree" xml:space="preserve">
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Datenschutzbestimmungen von Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Alle Rechte vorbehalten.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Alle Rechte vorbehalten.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Info</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x oder</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>und</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Αριθμομηχανή</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Αριθμομηχανή [προγραμματιστές]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Αριθμομηχανή των Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Αριθμομηχανή των Windows [προγραμματιστές]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Αριθμομηχανή</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Αριθμομηχανή [προγραμματιστές]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Αντιγραφή</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Δεξιά παρένθεση</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Πλήθος ανοιχτών παρενθέσεων %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Δεν υπάρχουν ανοιχτές παρενθέσεις για κλείσιμο.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Επιστημονική σημειογραφία</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Δήλωση προστασίας προσωπικών δεδομένων της Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Με επιφύλαξη κάθε νόμιμου δικαιώματος.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Με επιφύλαξη κάθε νόμιμου δικαιώματος.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Πληροφορίες</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x or</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>και</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculator</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculator [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Calculator</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Calculator [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculator</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculator [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copy</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Right parenthesis</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Open parenthesis count %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>There are no open parentheses to close.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Scientific notation</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft Privacy Statement</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. All rights reserved.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. All rights reserved.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>About</value>
|
||||
|
|
|
@ -2709,9 +2709,9 @@
|
|||
<value>Microsoft Privacy Statement</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. All rights reserved.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. All rights reserved.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>About</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copiar</value>
|
||||
|
@ -798,7 +810,7 @@
|
|||
<comment>Screen reader prompt for the Calculator RSH button</comment>
|
||||
</data>
|
||||
<data name="xorButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Exclusivo o</value>
|
||||
<value>O exclusivo</value>
|
||||
<comment>Screen reader prompt for the Calculator XOR button</comment>
|
||||
</data>
|
||||
<data name="qwordButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Paréntesis de cierre</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Número de paréntesis abiertos %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>No hay ningún paréntesis abierto para cerrar.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notación científica</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Declaración de privacidad de Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Todos los derechos reservados.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Todos los derechos reservados.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Acerca de</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x o</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>y</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copiar</value>
|
||||
|
@ -798,7 +810,7 @@
|
|||
<comment>Screen reader prompt for the Calculator RSH button</comment>
|
||||
</data>
|
||||
<data name="xorButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Exclusivo o</value>
|
||||
<value>O exclusivo</value>
|
||||
<comment>Screen reader prompt for the Calculator XOR button</comment>
|
||||
</data>
|
||||
<data name="qwordButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Paréntesis de cierre</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Recuento de paréntesis de apertura: %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>No hay ningún paréntesis de apertura para cerrar.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notación científica</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Declaración de privacidad de Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Todos los derechos reservados.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Todos los derechos reservados.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Acerca de</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x o</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>y</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Kalkulaator</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Kalkulaator [arendusversioon]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windowsi kalkulaator</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windowsi kalkulaator [arendusversioon]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Kalkulaator</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Kalkulaator [arendusversioon]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopeeri</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Paremsulg</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Avavate sulgude arv %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Avavaid sulge, mis vajavad sulgemist, ei ole.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Teaduskuju</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsofti privaatsusavaldus</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Kõik õigused on reserveeritud.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Kõik õigused on reserveeritud.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Teave</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>välistav või</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>ja</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Kalkulagailua</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Kalkulagailua [Gar.]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulagailua</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Kalkulagailua [Gar.]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Kalkulagailua</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Kalkulagailua [Gar.]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopiatu</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Eskuineko parentesia</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Ireki %1. parentesia</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Ez dago irekitako parentesirik ixteko.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notazio zientifikoa</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft Pribatutasun-adierazpena</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Eskubide guztiak erreserbatuta.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Eskubide guztiak erreserbatuta.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Honi buruz</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x edo</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>eta</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>ماشین حساب</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>ماشین حساب [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>ماشین حساب Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>ماشین حساب Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>ماشین حساب</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>ماشین حساب [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>کپی</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>پرانتز سمت راست</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>تعداد پرانتز باز %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>هیچ پرانتز بازی برای بستن وجود ندارد.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>نماد علمی</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>بیانیه حریم خصوصی Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. کلیه حقوق محفوظ است.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. کلیه حقوق محفوظ است.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>درباره</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>برابر یا</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>و</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>بهروزرسانی نرخها</value>
|
||||
<value>بهروزرسانی نرخها</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Laskin</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Laskin [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windowsin laskin</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windowsin laskin [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Laskin</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Laskin [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopioi</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Oikea sulje</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Avaavien sulkeiden määrä %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Suljettavia avaavia sulkeita ei ole.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Tieteellinen merkintätapa</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoftin tietosuojatiedot</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Kaikki oikeudet pidätetään.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Kaikki oikeudet pidätetään.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Tietoja</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x tai</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>ja</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculator</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculator [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows Calculator</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows Calculator [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculator</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculator [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopyahin</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Kanang parenthesis</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Bilang ng bukas na parenthesis %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Walang mga bukas na parenthesis na masasara.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Scientific notation</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Pahayag ng Pagiging Pribado ng Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Nakalaan ang lahat ng karapatan.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Reserbado ang lahat ng karapatan.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Tungkol Dito</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x o</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>at</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculatrice</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculatrice [Dév]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculatrice Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculatrice Windows [Dév]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculatrice</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculatrice [Dév]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copier</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Parenthèse droite</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Nombre de parenthèses ouvertes : %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Aucune parenthèse ouverte ne doit être fermée.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notation scientifique</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Énoncé de confidentialité Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Tous droits réservés.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Tous droits réservés.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>À propos de</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x ou</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>et</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculatrice</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculatrice [Dév.]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculatrice Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculatrice Windows [Dév.]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculatrice</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculatrice [Dév.]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copier</value>
|
||||
|
@ -518,7 +530,7 @@
|
|||
<comment>The text that shows in the dropdown navigation control for the converter group in upper case. The previous key for this was "ConverterMode.Text".</comment>
|
||||
</data>
|
||||
<data name="CalculatorModeTextCaps" xml:space="preserve">
|
||||
<value>Calculette</value>
|
||||
<value>Calculatrice</value>
|
||||
<comment>The text that shows in the dropdown navigation control for the calculator group in upper case.</comment>
|
||||
</data>
|
||||
<data name="ConverterModePluralText" xml:space="preserve">
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Parenthèse droite</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Nombre de parenthèses ouvrantes %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Il n’y a pas de parenthèses ouvertes à fermer.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notation scientifique</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Déclaration de confidentialité Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Tous droits réservés.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Tous droits réservés.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>À propos de</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x ou</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>et</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Calculadora de Windows [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Calculadora</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Calculadora [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Copiar</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Paréntese dereita</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Número de parénteses abertos %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Non hai ningún paréntese aberto para pechar.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Notación científica</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Declaración de privacidade de Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. Todos os dereitos reservados.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Todos os dereitos reservados.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>Acerca de</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x ou</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>e</value>
|
||||
|
|
|
@ -119,7 +119,7 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Manahajar lissafi</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Manahajar lissafi Windows</value>
|
||||
|
@ -127,7 +127,7 @@
|
|||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Manahajar lissafi</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kwafa</value>
|
||||
|
@ -421,10 +421,6 @@
|
|||
<value>Shingen alƙaluma na kilisawa bit</value>
|
||||
<comment>This is the tool tip automation name for the bitFlip button.</comment>
|
||||
</data>
|
||||
<data name="fullKeypad.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
|
||||
<value>Cikakken shingen alƙaluma</value>
|
||||
<comment>This is the tool tip automation name for the numberPad button.</comment>
|
||||
</data>
|
||||
<data name="HistoryLabel.Text" xml:space="preserve">
|
||||
<value>Tarihi</value>
|
||||
<comment>The text that shows as the header for the history list</comment>
|
||||
|
@ -605,10 +601,6 @@
|
|||
<value>Shingen alƙaluma na kilisawa bit</value>
|
||||
<comment>Screen reader prompt for the Calculator bitFlip button</comment>
|
||||
</data>
|
||||
<data name="fullKeypad.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Cikakken shingen alƙaluma</value>
|
||||
<comment>Screen reader prompt for the Calculator numberPad button</comment>
|
||||
</data>
|
||||
<data name="decimalSeparatorButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Mai Rabewar Gomiya</value>
|
||||
<comment>Screen reader prompt for the "." button</comment>
|
||||
|
@ -2132,20 +2124,4 @@
|
|||
<value>%1 %2</value>
|
||||
<comment>{Locked='%1','%2'} Formatting string for a Narrator announcement when user presses a button with auditory feedback. "%1" is the display value and "%2" is the button press feedback. Example, user presses "plus" and hears "Display is 7 plus".</comment>
|
||||
</data>
|
||||
<data name="minusButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>Deɓewa</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 minus" when the button is pressed.</comment>
|
||||
</data>
|
||||
<data name="plusButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>Tara da</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 plus" when the button is pressed.</comment>
|
||||
</data>
|
||||
<data name="lshButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>Matsawa ta hagu</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 left shift" when the button is pressed.</comment>
|
||||
</data>
|
||||
<data name="rshButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>Matsawa ta dama</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 right shift" when the button is pressed.</comment>
|
||||
</data>
|
||||
</root>
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>מחשבון</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>מחשבון [פיתוח]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>מחשבון Windows</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>מחשבון Windows [פיתוח]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>מחשבון</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>מחשבון [פיתוח]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>העתק</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>סוגר ימני</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>ספירת תווי סוגריים פותחים %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>אין תווי סוגריים פותחים לסגירה.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>הערה מדעית</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>הצהרת הפרטיות של Microsoft</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. כל הזכויות שמורות.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. כל הזכויות שמורות.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>אודות</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x או</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>וגם</value>
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>कैल्क्यूलेटर</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>कैल्क्यूलेटर [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows कैल्क्यूलेटर</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows कैल्क्यूलेटर [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>कैल्क्यूलेटर</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>कैल्क्यूलेटर [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>प्रतिलिपि बनाएँ</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>दायाँ कोष्ठक</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>खुला कोष्ठक संख्या %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>बंद करने के लिए कोई खुला कोष्ठक नहीं है.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>वैज्ञानिक नोटेशन</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoft गोपनीयता कथन</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018 Microsoft. सर्वाधिकार सुरक्षित.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft। सर्वाधिकार सुरक्षित।</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>के बारे में</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x या</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>और</value>
|
||||
|
@ -2616,7 +2636,7 @@
|
|||
<comment>The timestamp of currency conversion ratios fetched from an online service. %1 is the date. %2 is the time. Example: "Updated Sep 28, 2016 5:42 PM"</comment>
|
||||
</data>
|
||||
<data name="RefreshButtonText.Content" xml:space="preserve">
|
||||
<value>दरों को अपडेट करें</value>
|
||||
<value>दरों को अद्यतन करें</value>
|
||||
<comment>The text displayed for a hyperlink button that refreshes currency converter ratios.</comment>
|
||||
</data>
|
||||
<data name="DataChargesMayApply" xml:space="preserve">
|
||||
|
|
|
@ -119,15 +119,27 @@
|
|||
</resheader>
|
||||
<data name="AppName" xml:space="preserve">
|
||||
<value>Kalkulator</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"}</comment>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the title of the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppName" xml:space="preserve">
|
||||
<value>Kalkulator [Dev]</value>
|
||||
<comment>{@Appx_ShortDisplayName@}{StringCategory="Feature Title"} This is the name of the application when built by a user via GitHub. We use a different name to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="AppStoreName" xml:space="preserve">
|
||||
<value>Windows kalkulator</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps.</comment>
|
||||
</data>
|
||||
<data name="DevAppStoreName" xml:space="preserve">
|
||||
<value>Windows kalkulator [Dev]</value>
|
||||
<comment>{@Appx_DisplayName@}{StringCategory="Feature Title"} Name that shows up in the app store. It contains "Windows" to distinguish it from 3rd party calculator apps. This is the the version of the name used when the app is built by a user via GitHub.</comment>
|
||||
</data>
|
||||
<data name="AppDescription" xml:space="preserve">
|
||||
<value>Kalkulator</value>
|
||||
<comment>{@Appx_Description@}</comment>
|
||||
<comment>{@Appx_Description@} This description is used for the official application when published through Windows Store.</comment>
|
||||
</data>
|
||||
<data name="DevAppDescription" xml:space="preserve">
|
||||
<value>Kalkulator [Dev]</value>
|
||||
<comment>{@Appx_Description@} This is the description of the application when built by a user via GitHub. We use a different description to make it easier for users to distinguish the apps when both this version and the Store version are installed on the same device.</comment>
|
||||
</data>
|
||||
<data name="copyMenuItem" xml:space="preserve">
|
||||
<value>Kopiraj</value>
|
||||
|
@ -897,6 +909,14 @@
|
|||
<value>Desna zagrada</value>
|
||||
<comment>Screen reader prompt for the Calculator ")" button on the scientific operator keypad</comment>
|
||||
</data>
|
||||
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
|
||||
<value>Broj otvorenih zagrada %1</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
|
||||
</data>
|
||||
<data name="NoRightParenthesisAdded_Announcement" xml:space="preserve">
|
||||
<value>Trenutno nema otvorenih zagrada koje treba zatvoriti.</value>
|
||||
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
|
||||
</data>
|
||||
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Znanstvena notacija</value>
|
||||
<comment>Screen reader prompt for the Calculator F-E the scientific operator keypad</comment>
|
||||
|
@ -2265,9 +2285,9 @@
|
|||
<value>Microsoftova izjava o zaštiti privatnosti</value>
|
||||
<comment>Displayed on a link to the Microsoft Privacy Statement on the About panel</comment>
|
||||
</data>
|
||||
<data name="AboutControlCopyright.Text" xml:space="preserve">
|
||||
<value>© 2018. Microsoft. Sva prava pridržana.</value>
|
||||
<comment>Copyright statement, displayed on the About panel</comment>
|
||||
<data name="AboutControlCopyright" xml:space="preserve">
|
||||
<value>© %1 Microsoft. Sva prava pridržana.</value>
|
||||
<comment>{Locked="%1"}. Copyright statement, displayed on the About panel. %1 = the current year (4 digits)</comment>
|
||||
</data>
|
||||
<data name="AboutButton.Content" xml:space="preserve">
|
||||
<value>O programu</value>
|
||||
|
@ -2601,7 +2621,7 @@
|
|||
</data>
|
||||
<data name="xorButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>x ili</value>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronounciation.</comment>
|
||||
<comment>Auditory feedback for Screen Reader users. Users will hear "Display is 7 x or" when the button is pressed. XOR is a mathematical operation on two binary values. Here the feedback is "x or" in order to get the correct pronunciation.</comment>
|
||||
</data>
|
||||
<data name="andButton.[using:CalculatorApp.Controls]CalculatorButton.AuditoryFeedback" xml:space="preserve">
|
||||
<value>i</value>
|
||||
|
@ -2876,7 +2896,7 @@
|
|||
<comment>Name for the y root function. Used by screen readers.</comment>
|
||||
</data>
|
||||
<data name="NavCategoryItem_AutomationNameFormat" xml:space="preserve">
|
||||
<value>%1, %2</value>
|
||||
<value>%1 %2</value>
|
||||
<comment>{Locked='%1','%2'}. Format string for the accessible name of a Calculator menu item, used by screen readers. "%1" is the item name, e.g. Standard, Programmer, etc. %2 is the category name, e.g. Calculator, Converter. An example when formatted is "Standard Calculator" or "Currency Converter".</comment>
|
||||
</data>
|
||||
<data name="NavCategoryHeader_AutomationNameFormat" xml:space="preserve">
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue