{"id":21924863,"url":"https://github.com/suconbu/dentacs","last_synced_at":"2026-04-18T02:31:29.454Z","repository":{"id":61365215,"uuid":"274721624","full_name":"suconbu/dentacs","owner":"suconbu","description":"The dentacs is text-box based calculator for Windows Desktop. It's developing with WPF and C# .NET Framework 4.7.2.","archived":false,"fork":false,"pushed_at":"2022-10-19T14:06:26.000Z","size":1640,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T11:28:25.485Z","etag":null,"topics":["calculator","csharp","wpf"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/suconbu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-24T16:51:23.000Z","updated_at":"2024-02-02T06:27:18.000Z","dependencies_parsed_at":"2023-01-20T08:30:30.224Z","dependency_job_id":null,"html_url":"https://github.com/suconbu/dentacs","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/suconbu/dentacs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suconbu%2Fdentacs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suconbu%2Fdentacs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suconbu%2Fdentacs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suconbu%2Fdentacs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suconbu","download_url":"https://codeload.github.com/suconbu/dentacs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suconbu%2Fdentacs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["calculator","csharp","wpf"],"created_at":"2024-11-28T21:16:13.621Z","updated_at":"2026-04-18T02:31:29.438Z","avatar_url":"https://github.com/suconbu.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dentacs\r\n\r\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/suconbu/dentacs)](https://github.com/suconbu/dentacs/releases)\r\n[![Build Status](https://suconbu.visualstudio.com/dentacs/_apis/build/status/suconbu.dentacs?branchName=master)](https://suconbu.visualstudio.com/dentacs/_build/latest?definitionId=2\u0026branchName=master)\r\n\r\nThe dentacs is text-box based calculator for Windows Desktop.  \r\nIt's developing with WPF and C# .NET Framework 4.7.2.\r\n\r\nExecutable binaries are available:  \r\nhttps://github.com/suconbu/dentacs/releases\r\n\r\n## Table of contents\r\n\r\n* [Demo](#demo) | [Features](#features)\r\n* [Shortcut keys](#shortcut-keys)\r\n* [Numbers](#numbers) | [DateTime and TimeSpan](#datetime-and-timespan) | [Unicode codepoint](#unicode-codepoint) | [Color](#color)\r\n* [Operators](#operators)\r\n* [Variables](#variables) | [Functions](#functions) | [Constants](#constants)\r\n* [Reserved keywords](#reserved-keywords)\r\n* [License](#license)\r\n\r\n## Demo\r\n\r\n![screenshot](image/demo1.gif)\r\n\r\n![screenshot](image/demo2.gif)\r\n\r\n## Features\r\n\r\n* Multiline expression editor\r\n* Can be mix different radix numbers in a expression\r\n* Display calculation result in 3 different radix numbers at once\r\n* Character code information (CodePoint, UTF-16, UTF-8) is displayed in status bar\r\n* Operation for DateTime and TimeSpan -\u003e [DateTime and TimeSpan](#DateTime-and-TimeSpan)\r\n\r\n## Shortcut keys\r\n\r\nKey               | Description\r\n------------------|------------------------\r\nTab               | Toggle keypad\r\nF11               | Toggle full-screen mode\r\nCtrl + MouseWheel | Zooming text\r\nCtrl + A          | Select all lines\r\nCtrl + Z          | Undo\r\nCtrl + Y          | Redo\r\n\r\n## Numbers\r\n\r\nNumbers can be integer and floating point, which are usually not distinct.  \r\n(but bitwise operations can only use integers)  \r\nThe integer part can represent a signed 64-bit, and the fraction part in floating point can represent up to 16 digits.  \r\n\r\nNumerical values can be expressed in follows.  \r\nOnly decimal numbers can have fraction part.  \r\n\r\nType        | Representation of '1234'\r\n------------|-------------------\r\nDecimal     | 1234, 1234.0\r\nHexadecimal | 0x04d2, 0x4D2\r\nOctal       | 0o2322\r\nBinary      | 0b0000010011010010\r\n\r\n## DateTime and TimeSpan\r\n\r\nDateTime and TimeSpan describe as quoted string.  \r\nDouble quotes (`\"`) or single quotes (`'`) can be used as the quotation mark.\r\n\r\n### DateTime\r\n\r\nDateTime represents a point on the timeline.\r\n```\r\n----------x----------\u003e Passage of time\r\n          ^          \r\n       DateTime   \r\n```\r\n\r\nThere are following types of specification methods.\r\n\r\n1. [General style](#DateTime---General-style)\r\n2. [Standard style](#DateTime---Standard-style)\r\n3. [Week number style](#DateTime---Week-number-style)\r\n\r\n#### DateTime - General style\r\n\r\nThis is a general notation with separated by a slash and colons.  \r\nThe year and date part can be omitted, in which case the current year/day will be used.\r\n\r\nInput                 | Result\r\n----------------------|----------------------\r\n'2019/8/18 7:36:13'   | '2019/08/18 07:36:13'\r\n'2019/8/18 7:36'      | '2019/08/18 07:36:00'\r\n'2019/8/18 7'         | '2019/08/18 07:00:00'\r\n'2019/8/18'           | '2019/08/18 00:00:00'\r\n'2019/8'              | '2019/08/01 00:00:00'\r\n'08/18 7:36:13'       | '2020/08/18 07:36:13'\r\n'7:36:13'             | '2020/04/01 07:36:13'\r\n\r\n#### DateTime - Standard style\r\n\r\nThis style is according as ISO8601.  \r\nThe year and date part cannot be omitted in this style.\r\n\r\nInput                      | Result\r\n---------------------------|----------------------\r\n'20190818T073613+0700'     | '2019/08/18 00:36:13'\r\n'20190818T073613'          | '2019/08/18 07:36:13'\r\n'20190818T0736'            | '2020/04/01 07:36:00'\r\n'20190818T07'              | '2020/04/01 07:00:00'\r\n'2019-08-18T07:36:13+7:00' | '2019/08/18 00:36:13'\r\n'2019-08-18T07:36:13'      | '2019/08/18 07:36:13'\r\n'2019-08-18T07:36'         | '2019/08/18 07:36:00'\r\n'2019-08-18T07'            | '2019/08/18 07:00:00'\r\n'2019-08-18'               | '2019/08/18 00:00:00'\r\n'2019-08'                  | '2019/08/01 00:00:00'\r\n\r\n#### DateTime - Week number style\r\n\r\nSpecify the date by the week number of the year.  \r\n'CW01' is the week with the year's first Thursday in it.  \r\nThe fraction part represents the day of week, begening at 1:Monday and ending at 7:Sunday.  \r\nIf the year part is omitted, the current year will be used.  \r\n\r\nInput                 | Result\r\n----------------------|----------------------\r\n'CW33.7/2019'         | '2019/08/18 00:00:00'\r\n'CW33.7'              | '2020/08/16 00:00:00'\r\n'CW33/2019'           | '2019/08/12 00:00:00'\r\n'CW33'                | '2020/08/10 00:00:00'\r\n\r\n### TimeSpan\r\n\r\nTimeSpan represents the length between two points on the timeline.  \r\nTimeSpan can be negative value.\r\n```\r\n-----x================x---x============x-----\u003e Passage of time\r\n     -----TimeSpan----\u003e   \u003c--TimeSpan---\r\n         (Positive)         (Negative)\r\n```\r\n\r\nThere are following types of specification methods.\r\n\r\n1. [Comma separated style](#TimeSpan---Comma-separated-style)\r\n2. [Unit specified style](#TimeSpan---Unit-specified-style)\r\n\r\n#### TimeSpan - Coron separated style\r\n\r\nThis style must start with a sign (+/-).  \r\nIf the value is less than 24 hours, can be omit the date part.\r\n\r\nInput                          | Result\r\n-------------------------------|-------------------\r\n'+7:36:13.123'                 | '+7:36:13.123'\r\n'-7:36:13'                     | '-07:36:13'\r\n'+7:36'                        | '+07:36:00'\r\n'+7:96'                        | '+08:36:00'\r\n'+1d 7:36:13'                  | '+1d 07:36:13'\r\n\r\n#### TimeSpan - Unit specified style\r\n\r\nSpecify the value as combination of numbers and units.  \r\nCan be use fraction part and negative number in each unit.\r\n\r\nInput                          | Result\r\n-------------------------------|-------------------\r\n'1w1d7h36m13s123ms'            | '+8d 7:36:13.123'\r\n'1week 1day 7hour 36min 13sec' | '+8d 7:36:13'\r\n'1.5h 300sec'                  | '+01:35:00'\r\n'1day -4hour 30min -10sec'     | '+20:29:50'\r\n\r\nThis style spoorts the following units.\r\n\r\nUnit        | Specifier\r\n------------|----------\r\nWeek        | 'week', 'w'\r\nDay         | 'day', 'd'\r\nHour        | 'hour', 'h'\r\nMinute      | 'minute', 'min', 'm'\r\nSecond      | 'second', 'sec', 's'\r\nMillisecond | 'millisecond', 'msec', 'ms'\r\n\r\n### Supported operations for DateTime and TimeSpan\r\n\r\nLeft hand side | Operator   | Right hand side | Result\r\n---------------|------------|-----------------|-------\r\nDateTime       | -          | DateTime        | TimeSpan\r\nDateTime       | +, -       | TimeSpan        | DateTime\r\nTimeSpan       | +, -       | TimeSpan        | TimeSpan\r\nTimeSpan       | *, /       | Number          | TimeSpan\r\n\r\nExample of use:\r\n```py\r\n'2000/4/1 12:00' - '1999/4/1 12:00'  # '366d 00:00:00'\r\n'2000/4/1 12:00' + '+15:00'           # '2000/04/02 03:00:00'\r\n'4/1'   + '40day'                    # '2020/05/11 00:00:00' (In 2020)\r\n'15:00' - '300min'                   # '10:00:00'\r\n'3day'  - '10.5h'                    # '2d 13:30:00'\r\n'1day'  * 1.5                        # '+1d 12:00:00'\r\n```\r\n\r\n## Unicode codepoint\r\n\r\nRepresent a single unicode character as a number starting with \"U+\".\r\n\r\nExample:\r\n* \"U+41\" -\u003e 'A'\r\n* \"U+3042\" -\u003e 'あ'\r\n* \"U+1F333\" -\u003e '🌳'\r\n\r\n![screenshot](image/unicode_codepoint.png)\r\n\r\nAlso can be represented using variables like this.\r\n\r\n![screenshot](image/unicode_codepoint_variable.png)\r\n\r\n## Color\r\n\r\nRecognizes hex triplet colors (3, 4, 6 and 8 digits) starts with \"#\" and displays color sample on result.\r\n\r\n![screenshot](image/color_hextriplet.png)\r\n\r\n## Operators\r\n\r\nThe followings the supported operators in dentacs, from highest to lowest precedence.\r\n\r\nPrecedence | Operation           | Token | Examples\r\n-----------|---------------------|-------|-------------------\r\n1          | Exponentiation      | **    | 5 ** 3 -\u003e 125\r\n2          | Positive sign       | +     | +5     -\u003e 5\r\n2          | Negative sign       | -     | -5     -\u003e -5\r\n2          | Bitwise NOT         | ~     | ~5     -\u003e -6 (~0b0101 -\u003e 0b1111...1010)\r\n3          | Multiplication      | *     | 5 * 3  -\u003e 15\r\n3          | Division            | /     | 5 / 3  -\u003e 1.666...\r\n3          | FloorDivision       | //    | 5 // 3 -\u003e 1\r\n3          | Reminder            | %     | 5 % 3  -\u003e 2\r\n4          | Addition            | +     | 5 + 3  -\u003e 8\r\n4          | Subtraction         | -     | 5 - 3  -\u003e 2\r\n5          | Bitwise left shift  | \u003c\u003c    | 5 \u003c\u003c 3 -\u003e 40 (0b0101 \u003c\u003c 3 -\u003e 0b00101000)\r\n5          | Bitwise right shift | \u003e\u003e    | 5 \u003e\u003e 3 -\u003e 0  (0b0101 \u003e\u003e 3 -\u003e 0b0000)\r\n6          | Bitwise AND         | \u0026     | 5 \u0026 3  -\u003e 1 (0b0101 \u0026 0b0011 -\u003e 0b0001)\r\n7          | Bitwise OR          | \\|    | 5 \\| 3 -\u003e 7 (0b0101 \\| 0b0011 -\u003e 0b0111)\r\n8          | Bitwise XOR         | ^     | 5 ^ 3  -\u003e 6 (0b0101 ^ 0b0011 -\u003e 0b0110)\r\n9          | Assignment          | =     | x = 5 + 3 -\u003e 8\r\n\r\n## Variables\r\n\r\nVariable can store calculated value temporary.  \r\nWhen you delete the expression of assignment, the variable value also delete.  \r\nConstants, functions and keywords cannot be used variable names.  \r\n\r\n```py\r\nx = 10     # x:10\r\ny = x ** 2 # y:100\r\n\r\nPI = 3  # Error: 'PI' is a constant\r\npi = 3  # OK: It is case sensitive\r\n```\r\n\r\n## Functions\r\n\r\n### Arithmetic\r\n\r\nIdentifier | Parameters  | Description                                                         | Examples\r\n-----------|-------------|---------------------------------------------------------------------|--------------------\r\ntrunc      | (n)         | Returns the integer part of a number by removing any fractional     | trunc(1.5) -\u003e 1, trunc(-1.5) -\u003e -1\r\nfloor      | (n)         | Returns the largest integer less than or equal to a given number    | floor(1.5) -\u003e 1, floor(-1.5) -\u003e -2\r\nceil       | (n)         | Returns the number of rounded up to the next largest integer        |  ceil(1.5) -\u003e 2,  ceil(-1.5) -\u003e -1\r\nround      | (n)         | Returns the value of a number rounded to the nearest integer        | round(1.5) -\u003e 2, round(-1.5) -\u003e -2\r\nsin        | (n)         | Returns the sine of a number of degrees                             |\r\ncos        | (n)         | Returns the cosine of a number of degrees                           |\r\ntan        | (n)         | Returns the tangent of a number of degrees                          |\r\nasin       | (n)         | Returns the arcsine (in degrees) of a number                        |\r\nacos       | (n)         | Returns the arccosine (in degrees) of a number                      |\r\natan       | (n)         | Returns the arctangent (in degrees) of a number                     |\r\natan2      | (n1, n2)    | Returns the arctangent (in degrees) of a y (n2) and x (n1)          | atan2(1, 1) -\u003e 45)\r\nlog10      | (n)         | Returns the base 10 logarithm of a number                           | log10(1000) -\u003e 3\r\nlog2       | (n)         | Returns the base 2 logarithm of a number                            | log2(256) -\u003e 8\r\nlog        | (n1, n2)    | Returns the natural logarithms or logarithm of a number (n1) with specified base (n2) | log(9, 3) -\u003e 2)\r\n\r\n### DateTime/TimeSpan\r\n\r\nIdentifier | Parameters  | Description                                          | Examples\r\n-----------|-------------|------------------------------------------------------|---------------------------------\r\ntoday      | ()          | Returns DateTime of the beginning of the current day | today() -\u003e '2020/04/01 00:00:00'\r\nnow        | ()          | Returns DateTime of the current time                 | now() -\u003e '2020/04/01 07:36:13'\r\ndayofyear  | (datetime)  | Returns day of the year in a DateTime                | dayofyear('2020/04/01') -\u003e 92\r\nweekofyear | (datetime)  | Returns week number of specified DateTime | weekofyear(\"2010/04/01\") -\u003e 14\r\ncw         | (datetime)  | Returns week number and day of week of specified DateTime | weekofyear(\"2010/04/01\") -\u003e \"14.3/2020\"\r\ndayofweek  | (datetime)  | Returns day of the week in a DateTime                | dayofweek('2020/04/01') -\u003e 'wed'\r\ndaysinyear | (datetime)  | Returns how many days in specified year              | daysinyear('2020/04/01') -\u003e 366\r\ndaysinmonth| (datetime)  | Returns how many days in specified month             | daysinmonth('2020/04/01') -\u003e 30\r\nwareki     | (datetime)  | Returns date of Japanese calendars, Kanshi (干支) and Rokuyo (六曜) | wareki('2020/04/01') -\u003e '令和02年04月01日 庚子 大安'\r\nkyureki    | (datetime)  | Returns date of old Japanese calendars, Kanshi (干支) and Rokuyo (六曜) | kyureki('2020/04/01') -\u003e '令和02年03月09日 庚子 大安'\r\nseconds    | (timespan)  | Returns total seconds of TimeSpan                    | seconds('+01:01:01') -\u003e 3661\r\nminutes    | (timespan)  | Returns total minutes of TimeSpan                    | minutes('+01:01:01') -\u003e 61.016...\r\nhours      | (timespan)  | Returns total hours of TimeSpan                      | hours('+01:01:01') -\u003e 1.01694...\r\ndays       | (timespan)  | Returns total days of TimeSpan                       | days('+36:00:00') -\u003e 1.5\r\nweeks      | (timespan)  | Returns total weeks of TimeSpan                      | weeks('+3d 12:01:01') -\u003e 0.5\r\n\r\n## Constants\r\n\r\nIdentifier | Description\r\n-----------|----------------------------------------------------------------------\r\nPI         | The ratio of the circumference of a circle to its diameter (3.141...)\r\nE          | The base of natural logarithms (2.718...)\r\n\r\n## Reserved keywords\r\n\r\nThe following identifiers are reserved words and cannot be used as variable names.\r\n\r\n```\r\nif        elif      else      then      for\r\nin        to        repeat    do        end\r\ncontinue  break     exit      or        and\r\nnot\r\n```\r\n\r\n## License\r\n\r\nMIT License\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuconbu%2Fdentacs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuconbu%2Fdentacs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuconbu%2Fdentacs/lists"}