master cd0b6bfab2d3 cached
21 files
63.6 KB
20.2k tokens
14 symbols
1 requests
Download .txt
Repository: shimohq/chinese-programmer-wrong-pronunciation
Branch: master
Commit: cd0b6bfab2d3
Files: 21
Total size: 63.6 KB

Directory structure:
gitextract_c8hfxxzq/

├── .editorconfig
├── .github/
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── README.md
└── tools/
    ├── addword.py
    └── chromium_extension/
        ├── README.md
        ├── css/
        │   └── app.css
        ├── format-code.sh
        ├── images/
        │   └── README.md
        ├── js/
        │   ├── app/
        │   │   ├── box.js
        │   │   ├── components.js
        │   │   ├── init.js
        │   │   ├── pretty-box.js
        │   │   ├── search-engine.js
        │   │   └── utils.js
        │   └── content-script.js
        ├── manifest.json
        ├── package.json
        ├── rules/
        │   └── remove_content_security_policy.json
        └── web-components/
            ├── README.md
            └── x-custom-box.html

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
PR说明:
1. 尽量提交常用的单词和中国程序员容易读错的单词。
1. 选择合适的Labels。
1. 音标目前为[海词](http://dict.cn/)英式发音, 使用 [DJ 音标写法](https://zh.wikipedia.org/wiki/DJ%E9%9F%B3%E6%A8%99)。
1. 音频地址 英音:http://dict.youdao.com/dictvoice?audio=${word}&type=1,美音:http://dict.youdao.com/dictvoice?audio=${word}&type=2 ,如果没有或者发音不准确再使用其他音频。
1. 音标到这个有道网页找 http://dict.youdao.com/w/eng/{word}。
1. 音标使用斜线 `/.../`。
1. tools目录下有个python程序可以从有道网站创建单词信息。
   - Usage: `tools/addword.py <word>`
-->


================================================
FILE: .gitignore
================================================
/tools/chromium_extension/_metadata
/tools/chromium_extension/node_modules
/tools/chromium_extension/package-lock.json
/.idea


================================================
FILE: README.md
================================================
## Words Commonly Mispronounced by Chinese Programmers
## 中国程序员容易发音错误的单词(点击🔊收听正确读音)

### 重要更新
- 我们团队最新推出了一款新产品 **[@OfficeSDK](https://officesdk.com)**,拥有强大的文档预览与编辑功能,欢迎了解!

- chromium扩展:无页面跳转,实时检索英语发音
  -  安装 [chromium 扩展](tools/chromium_extension/README.md) 或者
  - [外部独立库](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git)
- 简洁的单词列表,正确读音不用再打开新网页:https://cpwp.netlify.app/
- [iOS应用](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291)



| 单词            | 正确发音(英音)                                                                                                      | 正确发音(美音)                                                                                            | 错误发音                    | 中文释义                |
| ------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ----------------------- | ------------------- |
| access        | [🔊](https://dict.youdao.com/dictvoice?audio=access&type=1)  /'ækses/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=access&type=2)  /ˈækses/                               | ❌ /ək'ses/              | 访问                  |
| Adobe         | [🔊](https://dict.youdao.com/dictvoice?audio=Adobe&type=1)  /ə'dəʊbi/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=Adobe&type=2)  /ə'dəʊbi/                               | ❌ /əˈdub/               | 奥多比(公司名)            |
| admin         | [🔊](https://dict.youdao.com/dictvoice?audio=admin&type=1)  /'ædmɪn/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=admin&type=2)  /ˈædmɪn/                                | ❌ /ɜ:d'mɪn/             | 管理员                 |
| adversarial   | [🔊](https://dict.youdao.com/dictvoice?audio=adversarial&type=1)  /ˌædvəˈseəriəl/                             | [🔊](https://dict.youdao.com/dictvoice?audio=adversarial&type=2)   /ˌædvərˈseriəl/                  | ❌ /ədˈvɜːrsəriəl/       | 对抗的                 |
| agile         | [🔊](https://dict.youdao.com/dictvoice?audio=agile&type=1)  /'ædʒaɪl/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=agile&type=2)  /ˈædʒl/                                 | ❌ /ə'dʒaɪl/             | 敏捷开发                |
| amazon        | [🔊](https://dict.youdao.com/dictvoice?audio=amazon&type=1)  /'æməzən/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=amazon&type=2)  /ˈæməzɑːn/                             | ❌ /'əmeizən/ /ə'meizən/ | 亚马逊(公司名)            |
| analogy       | [🔊](https://dict.youdao.com/dictvoice?audio=analogy&type=1)  /əˈnælədʒi/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=analogy&type=2)  /əˈnælədʒi/                           | ❌ /ænə'lɒdʒi/           | 类比                  |
| Angular       | [🔊](https://dict.youdao.com/dictvoice?audio=Angular&type=1)  /'æŋgjʊlə/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=Angular&type=2)  /ˈæŋɡjələr/                           | ❌ /'æŋɡələ/ /'æŋdʒʌlə/  | 前端框架名               |
| AJAX          | [🔊](https://dict.youdao.com/dictvoice?audio=AJAX&type=1)  /'eidʒæks/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=AJAX&type=2)  /'eidʒæks/                               | ❌ /ə'dʒʌks/             | 异步JS和XML            |
| alias         | [🔊](https://dict.youdao.com/dictvoice?audio=alias&type=1)  /ˈeɪliəs/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=alias&type=2)  /ˈeɪliəs/                               | ❌ /ə'lais/              | 别名                  |
| align         | [🔊](https://dict.youdao.com/dictvoice?audio=align&type=1)  /əˈlaɪn/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=align&type=2)  /əˈlaɪn/                                | ❌ /ə'lidʒen/            | 对齐                  |
| Apache        | [🔊](https://dict.youdao.com/dictvoice?audio=Apache&type=1)  /ə'pætʃɪ/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=Apache&type=2)  /əˈpætʃi/                              | ❌ /ʌpʌtʃ/               | Web服务器软件            |
| app           | [🔊](https://dict.youdao.com/dictvoice?audio=app&type=1)  /æp/                                                | [🔊](https://dict.youdao.com/dictvoice?audio=app&type=2)  /æp/                                      | ❌ /eipi'pi/             | 应用程序                |
| archive       | [🔊](https://dict.youdao.com/dictvoice?audio=archive&type=1)  /'ɑːkaɪv/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=archive&type=2)  /'ɑːkaɪv/                             | ❌ /'ətʃɪv/              | 归档;存档               |
| array         | [🔊](https://dict.youdao.com/dictvoice?audio=array&type=1)  /ə'rei/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=array&type=2)  /əˈreɪ/                                 | ❌ /æ'rei/               | 数组                  |
| ASCII         | [🔊](https://dict.youdao.com/dictvoice?audio=ascii&type=1)  /'æski/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=ascii&type=2)  /ˈæski/                                 | ❌ /ɑːsk/                | 美国信息交换标准代码          |
| aspect        | [🔊](https://dict.youdao.com/dictvoice?audio=aspect&type=1)  /'æspekt/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=aspect&type=2)  /ˈæspekt/                              | ❌ /ə'spekt/             | 方面;切面               |
| async         | [🔊](https://dict.youdao.com/dictvoice?audio=async&type=1) /əˈsɪŋk/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=async&type=2) /æˈsɪŋk/                                 | ❌ /'æsɪŋk/              | 异步                  |
| avatar        | [🔊](https://dict.youdao.com/dictvoice?audio=avatar&type=1)  /'ævətɑː/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=avatar&type=2)  /ˈævətɑːr/                             | ❌ /ə'vʌtɑ/              | 头像                  |
| Azure         | [🔊](https://dict.youdao.com/dictvoice?audio=azure&type=1)  /'æʒə/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=azure&type=2)  /ˈæʒər/                                 | ❌ /ˈæzʊʒə/              | 微软云计算平台             |
| Bazel         | [🔊](https://dict.youdao.com/dictvoice?audio=bazel&type=1)  /ˈbeɪzəl/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=bazel&type=1) /ˈbeɪzəl/                                | ❌ /bæ zəl/              | 构建工具名               |
| bind          | [🔊](https://dict.youdao.com/dictvoice?audio=bind&type=1)  /baɪnd/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=bind&type=2)  /baɪnd/                                  | ❌ /bɪnd/                | 绑定                  |
| BIOS          | [🔊](https://dict.youdao.com/dictvoice?audio=bios&type=1)  /ˈbaɪɒs/                                           | /'baɪɑs/                                                                                            | ❌ /ˈbɪɒs/               | 基本输入输出系统            |
| cache         | [🔊](https://dict.youdao.com/dictvoice?audio=cache&type=1)  /kæʃ/                                             | [🔊](https://dict.youdao.com/dictvoice?audio=cache&type=2)  /kæʃ/                                   | ❌ /kætʃ/                | 缓存                  |
| Canal         | [🔊](https://dict.youdao.com/dictvoice?audio=canal&type=1) /kəˈnæl/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=canal&type=2) /kəˈnæl/                                 | ❌ /ˈkænl/               | 阿里分布式数据库同步中间件       |
| chaos         | [🔊](https://dict.youdao.com/dictvoice?audio=chaos&type=1) /ˈkeɪɒs/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=chaos&type=2) /ˈkeɪɑːs/                                | ❌ /ˈtʃoʊs/              | 混乱;混沌               |
| Chrome        | [🔊](https://dict.youdao.com/dictvoice?audio=chrome&type=1) /krəʊm/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=chrome&type=2) /kroʊm/                                 | ❌ /tʃɔːm/               | 谷歌浏览器               |
| clang         | [🔊](https://dict.youdao.com/dictvoice?audio=clang&type=1)  /klæŋ/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=clang&type=2)  /klæŋ/                                  | ❌ /sɪlæŋ/               | C/C++ 编译器           |
| context       | [🔊](https://dict.youdao.com/dictvoice?audio=context&type=1)  /ˈkɒntekst/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=context&type=2)  / ˈkɑːntekst/                         | ❌ /kənˈtekst/           | 上下文                 |
| Coq           | [🔊](https://upload.wikimedia.org/wikipedia/commons/4/47/Fr-coq.ogg) IPA French ['kɔkʲ] 读若拼音“goq”             |                                                                                                     | ❌ IPA English ['kʰɒk]   | 形式化证明               |
| daemon        | [🔊](https://dict.youdao.com/dictvoice?audio=Daemon&type=1)  /'diːmən/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=Daemon&type=2)  /ˈdiːmən/                              | ❌ /dæmən/               | 后台服务进程              |
| debt          | [🔊](https://dict.youdao.com/dictvoice?audio=debt&type=1)  /det/                                              | [🔊](https://dict.youdao.com/dictvoice?audio=debt&type=2)  /det/                                    | ❌ /de'bit/              | 债务                  |
| deny          | [🔊](https://dict.youdao.com/dictvoice?audio=deny&type=1)  /dɪ'naɪ/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=deny&type=2)  /dɪˈnaɪ/                                 | ❌ /'dæni/               | 拒绝;否认               |
| deprecate     | [🔊](https://dict.youdao.com/dictvoice?audio=deprecate&type=1) /ˈdeprəkeɪt/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=deprecate&type=2) /ˈdeprəkeɪt/                         |                         | 弃用                  |
| deque         | [🔊](https://dict.youdao.com/dictvoice?audio=deque&type=1)  /'dek/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=deque&type=2)  /dɛk/                                   | ❌ /di'kju/              | 双端队列                |
| digest        | [🔊](https://dict.youdao.com/dictvoice?audio=digest&type=1)  n. /'dɑɪdʒɛst/ v. /dɑɪ'dʒɛst/                    | [🔊](https://dict.youdao.com/dictvoice?audio=digest&type=2)  /daɪˈdʒest,dɪˈdʒest/                   | ❌ /'dɪgɛst/             | 摘要                  |
| Dijkstra      | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg)  Dutch:/ˈdɛikstra/ English:/ˈdaɪkstrə/ | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg)                              |                         | 迪杰斯特拉算法/最短路算法       |
| Django        | [🔊](https://dict.youdao.com/dictvoice?audio=Django&type=1)  /ˈdʒæŋɡoʊ/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=Django&type=2)  /ˈdʒæŋɡoʊ/                             | ❌ /diˈdʒæŋɡoʊ/          | Python Web 框架名      |
| doc           | [🔊](https://dict.youdao.com/dictvoice?audio=doc&type=1)  /dɒk/                                               | [🔊](https://dict.youdao.com/dictvoice?audio=doc&type=2)  /dɒk/                                     | ❌ /daʊk/                | 文档                  |
| dotnet        | [🔊](https://dict.youdao.com/dictvoice?audio=dotnet&type=1)  /dɒtnet/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=dotnet&type=2)  /dɑːtnet/                              | ❌ /daʊtnet/             | .NET 平台             |
| edition       | [🔊](https://dict.youdao.com/dictvoice?audio=edition&type=1)  /ɪˈdɪʃ(ə)n/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=edition&type=2)  /ɪˈdɪʃn/                              | ❌ /eˈdɪʃn/              | 版本                  |
| ephemeral     | [🔊](https://dict.youdao.com/dictvoice?audio=ephemeral&type=1)  /ɪˈfemərəl/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=ephemeral&type=2)  /ɪˈfemərəl/                         | ❌ /efe'merəl/           | 临时的                 |
| epoch         | [🔊](https://dict.youdao.com/dictvoice?audio=epoch&type=1)  /ˈiːpɒk/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=epoch&type=2)  /ˈepək/                                 | ❌ /'ɛpətʃ/              | 时间起点;训练轮次;纪元        |
| execute       | [🔊](https://dict.youdao.com/dictvoice?audio=execute&type=1) /ˈeksɪkjuːt/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=execute&type=2) /ˈeksɪkjuːt/                           |                         | 执行                  |
| executor      | [🔊](https://dict.youdao.com/dictvoice?audio=executor&type=1) /ɪɡˈzekjətə(r)/                                 | [🔊](https://dict.youdao.com/dictvoice?audio=executor&type=2) /ɪɡˈzekjətər/                         |                         | 执行器                 |
| event         | [🔊](https://dict.youdao.com/dictvoice?audio=event&type=1)  /ɪ'vent/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=event&type=2)  /ɪˈvent/                                | ❌ /'ɪvənt/              | 事件                  |
| exit          | [🔊](https://dict.youdao.com/dictvoice?audio=exit&type=1) /ˈeksɪt/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=exit&type=2) /ˈeksɪt; ˈeɡzɪt/                          | ❌ /ig'zit/              | 退出                  |
| facade        | [🔊](https://dict.youdao.com/dictvoice?audio=facade&type=1)  /fə'sɑːd/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=facade&type=2)  /fəˈsɑːd/                              | ❌ /'feikeid/            | 外观                  |
| Fedora        | [🔊](https://dict.youdao.com/dictvoice?audio=fedora&type=1)  /fɪ'dɔːrə/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=fedora&type=2)  /fɪˈdɔːrə/                             | ❌ /'fedərə/             | Linux 发行版名          |
| format        | [🔊](https://dict.youdao.com/dictvoice?audio=format&type=1)  /'fɔːmæt/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=format&type=2)  /ˈfɔːrmæt/                             | ❌ /fɔ'mæt/              | 格式                  |
| gauge         | [🔊](https://dict.youdao.com/dictvoice?audio=gauge&type=1) /ɡeɪdʒ/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=gauge&type=2) /ɡeɪdʒ/                                  | ❌ /ɡɑudʒ/               | 仪表盘                 |
| Git           | [🔊](https://dict.youdao.com/dictvoice?audio=git&type=1)  /ɡɪt/                                               | [🔊](https://dict.youdao.com/dictvoice?audio=git&type=2)  /ɡɪt/                                     | ❌ /dʒɪt/                | 分布式版本控制系统           |
| GNU           | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg)  /gnu:/                                  | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg)  /gnuː,gnjuː/                  |                         | 操作系统名               |
| Grafana       | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3)   /grəˈfɑːnˌɑː/                  | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3 )   /grəˈfɑːnˌɑː/       |                         | 监控可视化平台             |
| GraphQL       | [🔊](https://dict.youdao.com/dictvoice?audio=GraphQL&type=1)  /græf kju ɛl/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=GraphQL&type=2)  /græf kju ɛl/                         | ❌ /dʒɪgræf kju ɛl/      | API 查询语言            |
| GUI           | [🔊](https://dict.youdao.com/dictvoice?audio=GUI&type=1)  /ˈɡu:i/                                             | [🔊](https://dict.youdao.com/dictvoice?audio=GUI&type=2)  /ˈɡu:i/                                   |                         | 图形用户界面              |
| Haskell       | [🔊](https://dict.youdao.com/dictvoice?audio=haskell&type=1)  /ˈhæskəl/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=haskell&type=2)  /ˈhæskəl/                             | ❌ /hæˈskəl/             | 编程语言名               |
| height        | [🔊](https://dict.youdao.com/dictvoice?audio=height&type=1)  /haɪt/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=height&type=2)  /haɪt/                                 | ❌ /heɪt/                | 高度;高度属性             |
| hidden        | [🔊](https://dict.youdao.com/dictvoice?audio=hidden&type=1)  /'hɪdn/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=hidden&type=2)  /ˈhɪdn/                                | ❌ /'haɪdn/              | 隐藏                  |
| IEEE          | [🔊](https://dict.youdao.com/dictvoice?audio=I_triple_e&type=1)  /aɪ ˈtrɪpəl i/                               | [🔊](https://dict.youdao.com/dictvoice?audio=I_triple_e&type=2)  /aɪ ˈtrɪpəl i/                     | ❌ /'aɪ'iː'iː'iː/        | 电气电子工程师学会           |
| image         | [🔊](https://dict.youdao.com/dictvoice?audio=image&type=1)  /'ɪmɪdʒ/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=image&type=2)  /ˈɪmɪdʒ/                                | ❌ /ɪ'meɪdʒ/             | 图像;映像               |
| implement     | [🔊](https://dict.youdao.com/dictvoice?audio=implement&type=1)  /'ɪmplɪm(ə)nt/                                | [🔊](https://dict.youdao.com/dictvoice?audio=implement&type=2)  /ˈɪmplɪmənt/ /ˈɪmpləˌment/          | ❌ /ɪm'plem(ə)nt/        | 实现(接口)              |
| integer       | [🔊](https://dict.youdao.com/dictvoice?audio=integer&type=1)  /'ɪntɪdʒə/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=integer&type=2)  /ˈɪntɪdʒər/                           | ❌ /ˈɪntaɪgə/            | 整数;整型               |
| issue         | [🔊](https://dict.youdao.com/dictvoice?audio=issue&type=1)  /'ɪʃuː/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=issue&type=2)  /ˈɪʃuː/                                 | ❌ /ˈaɪʃuː/              | 问题;议题               |
| Java          | [🔊](https://dict.youdao.com/dictvoice?audio=java&type=1)  /'dʒɑːvə/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=java&type=2)  /ˈdʒɑːvə/                                |                         | 编程语言名               |
| jpg           | [🔊](https://dict.youdao.com/dictvoice?audio=JPEG&type=1)  /'dʒeɪpeɡ/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=JPEG&type=2)  /'dʒeɪpeɡ/                               | ❌ /ˈdʒeɪˈpi:ˈdʒiː/      | 图片格式名               |
| key           | [🔊](https://dict.youdao.com/dictvoice?audio=key&type=1)  /kiː/                                               | [🔊](https://dict.youdao.com/dictvoice?audio=key&type=2)  /kiː/                                     | ❌ /kei/                 | 键;密钥;主键;关键字         |
| kubernetes*   | [🔊](https://content.swncdn.com/biblestudytools/audio/lexicons/greek-mp3/2942g.mp3)  /kubз'netɪs/             | [🔊](https://content.swncdn.com/biblestudytools/audio/lexicons/greek-mp3/2942g.mp3)  /kuːbə˞'netiz/ |                         | 容器编排平台              |
| lambda        | [🔊](https://dict.youdao.com/dictvoice?audio=lambda&type=1)  /ˈlæmdə/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=lambda&type=2)  /ˈlæmdə/                               | ❌ /ˈlɒŋmdɑ/             | λ;匿名函数表达式           |
| Ldap          | [🔊](https://dict.youdao.com/dictvoice?audio=ldap&type=1)  /el'dæp/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=ldap&type=2)  /el'dæp/                                 | ❌ /el'daːp/             | 轻量级目录访问协议           |
| legacy        | [🔊](https://dict.youdao.com/dictvoice?audio=legacy&type=1)  /'leɡəsi/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=legacy&type=2)  /'leɡəsi/                              | ❌ /'li:gasi/            | 遗留的                 |
| linear        | [🔊](https://dict.youdao.com/dictvoice?audio=linear&type=1)  /'lɪnɪə/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=linear&type=2)  /ˈlɪniər/                              | ❌ /'laɪə/               | 线性的                 |
| LINQ          | [🔊](https://dict.youdao.com/dictvoice?audio=link&type=1) /lɪŋk/                                              | [🔊](https://dict.youdao.com/dictvoice?audio=link&type=2) /lɪŋk/                                    | ❌ /lɪŋkju:/             | .NET 里的集成查询         |
| Linux         | [🔊](https://dict.youdao.com/dictvoice?audio=linux&type=1)  /'lɪnəks/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=linux&type=2)  /ˈlaɪnəks/ /ˈlɪnəks/                    | ❌ /ˈlɪnʌks/ /ˈlɪnjuːks/ | 操作系统内核;Linux 系统     |
| locale        | [🔊](https://dict.youdao.com/dictvoice?audio=locale&type=1)  /ləʊ'kɑːl/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=locale&type=2)  /loʊˈkæl/                              | ❌ /ˈloʊk(ə)l/           | 本地化设置               |
| Lucene        | [🔊](https://dict.youdao.com/dictvoice?audio=lucene&type=1)  /lu'siːn/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=lucene&type=2)  /lu'siːn/                              | ❌ /'lu:sən/             | 全文检索引擎库             |
| macro         | [🔊](https://dict.youdao.com/dictvoice?audio=macro&type=1)  /ˈmækrəʊ/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=macro&type=2)  /ˈmækroʊ/                               | ❌ /ˈmakroʊ/             | 宏;宏定义               |
| main          | [🔊](https://dict.youdao.com/dictvoice?audio=main&type=1)  /meɪn/                                             | [🔊](https://dict.youdao.com/dictvoice?audio=main&type=2)  /meɪn/                                   | ❌ /mɪn/                 | 主函数;主入口             |
| margin        | [🔊](https://dict.youdao.com/dictvoice?audio=margin&type=1)  /'mɑːdʒɪn/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=margin&type=2)  /ˈmɑːrdʒɪn/                            | ❌ /'mʌgɪn/              | 边距                  |
| matrix        | [🔊](https://dict.youdao.com/dictvoice?audio=matrix&type=1)  /ˈmeɪtrɪks/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=matrix&type=2)  /ˈmeɪtrɪks/                            | ❌ /ˈmɑ:trɪks/           | 矩阵                  |
| maven         | [🔊](https://dict.youdao.com/dictvoice?audio=maven&type=1)  /'meɪvn/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=maven&type=2)  /ˈmeɪvn/                                | ❌ /'maːvn/              | Java 构建与依赖管理工具      |
| max           | [🔊](https://dict.youdao.com/dictvoice?audio=max&type=1) /mæks/                                               | [🔊](https://dict.youdao.com/dictvoice?audio=max&type=2) /mæks/                                     | ❌ /mɑ:ks/               | 最大值                 |
| Microsoft     | [🔊](https://dict.youdao.com/dictvoice?audio=Microsoft&type=1)  /'maikrəusɔft/                                | [🔊](https://dict.youdao.com/dictvoice?audio=Microsoft&type=2)  /ˈmaɪkrəsɔːft/                      | ❌ /'mikrəusɔft/         | 微软(公司名)             |
| migrate       | [🔊](https://dict.youdao.com/dictvoice?audio=migrate&type=1) /maɪˈɡreɪt/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=migrate&type=2) /ˈmaɪɡreɪt/                            | ❌ /ˈmɪɡreɪt/            | 迁移                  |
| miscellaneous | [🔊](https://dict.youdao.com/dictvoice?audio=miscellaneous&type=1) /ˌmɪsəˈleɪniəs/                            | [🔊](https://dict.youdao.com/dictvoice?audio=miscellaneous&type=2) /ˌmɪsəˈleɪniəs/                  |                         | 杂项;其他               |
| module        | [🔊](https://dict.youdao.com/dictvoice?audio=module&type=1)  /'mɒdjuːl/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=module&type=2)  /ˈmɑːdʒuːl/                            | ❌ /'məʊdl/              | 模块;组件/功能模块          |
| native        | [🔊](https://dict.youdao.com/dictvoice?audio=native&type=1) /ˈneɪtɪv/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=native&type=2) /ˈneɪtɪv/                               | ❌ /ˈnætɪv/              | 原生的;本地的             |
| nginx         | Engine X                                                                                                      | Engine X                                                                                            |                         | Web 服务器名            |
| null          | [🔊](https://dict.youdao.com/dictvoice?audio=null&type=1)  /nʌl/                                              | [🔊](https://dict.youdao.com/dictvoice?audio=null&type=2)  /nʌl/                                    | ❌ /naʊ/                 | 空;空值;空指针            |
| obsolete      | [🔊](https://dict.youdao.com/dictvoice?audio=obsolete&type=1) /ˈɒbsəliːt/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=obsolete&type=2) /ˌɑːbsəˈliːt/                         |                         | 过时的;淘汰的             |
| OS X          | OS ten                                                                                                        | OS ten                                                                                              | ❌ /ɔs eks/              | 苹果桌面操作系统旧称          |
| phantom       | [🔊](https://dict.youdao.com/dictvoice?audio=phantom&type=1)  /'fæntəm/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=phantom&type=2)  /ˈfæntəm/                             | ❌ /'pæntəm/             | 幽灵/虚拟的              |
| parameter     | [🔊](https://dict.youdao.com/dictvoice?audio=parameter&type=1)  /pə'ræmɪtə/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=parameter&type=2)  /pəˈræmɪtər/                        | ❌ /'pærəmɪtə/           | 参数;形参               |
| premise       | [🔊](https://dict.youdao.com/dictvoice?audio=premise&type=1) /ˈpremɪs/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=premise&type=2) /ˈpremɪs/                              | ❌ /prɪ'mɪs/             | 前提;前置条件             |
| privilege     | [🔊](https://dict.youdao.com/dictvoice?audio=privilege&type=1)  /'prɪvəlɪdʒ/                                  | [🔊](https://dict.youdao.com/dictvoice?audio=privilege&type=2)  /ˈprɪvəlɪdʒ/                        | ❌ /'prɪvɪlɪdʒ/          | 权限;特权               |
| probe         | [🔊](https://dict.youdao.com/dictvoice?audio=probe&type=1) /prəʊb/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=probe&type=2) /proʊb/                                  | ❌ /proʊbi/              | 探针;探测/探测请求          |
| Prometheus    | [🔊](https://dict.youdao.com/dictvoice?audio=prometheus&type=1)  /prə-ˈmē-thē-əs/                             | [🔊](https://dict.youdao.com/dictvoice?audio=prometheus&type=2)  /pro'miθɪəs/                       |                         | 时序数据库监控系统           |
| putty         | [🔊](https://dict.youdao.com/dictvoice?audio=putty&type=1)  /ˈpʌti/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=putty&type=2)  /ˈpʌti/                                 | ❌ /ˈpuːti/              | 开源 SSH 和 Telnet 客户端 |
| Qt            | [🔊](https://dict.youdao.com/dictvoice?audio=cute&type=1)  /kjuːt/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=cute&type=2)  /kjuːt/                                  |                         | 跨平台 GUI 框架          |
| query         | [🔊](https://dict.youdao.com/dictvoice?audio=query&type=1)  /'kwɪəri/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=query&type=2)  /ˈkwɪri/                                | ❌ /'kwaɪri/             | 查询                  |
| Realm         | [🔊](https://dict.youdao.com/dictvoice?audio=realm&type=1)  /relm/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=realm&type=2)  /relm/                                  | ❌ /riəlm/               | 移动端数据库名             |
| reconcile     | [🔊](https://dict.youdao.com/dictvoice?audio=reconcile&type=1) /ˈrekənsaɪl/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=reconcile&type=2) /ˈrekənsaɪl/                         |                         | 核对;协调一致             |
| Redux         | [🔊](https://dict.youdao.com/dictvoice?audio=redux&type=1)  /ri'dʌks/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=redux&type=2)  /ri'dʌks/                               | ❌ /'ridju:ks/           | 前端状态管理库名            |
| resume        | [🔊](https://dict.youdao.com/dictvoice?audio=resume&type=1)   /rɪ'zju:m/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=resume&type=2)  /rɪˈzuːm/                              | ❌  /rɪ'sju:m/           | 恢复/继续;简历            |
| résumé        | [🔊](https://dict.youdao.com/dictvoice?audio=résumé&type=1)  /rezjumeɪ/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=résumé&type=2)  /ˈrezəmeɪ/                             | ❌  /rɪ'sju:m/           | 简历                  |
| resolved      | [🔊](https://dict.youdao.com/dictvoice?audio=resolved&type=1)  /rɪ'zɒlvd/                                     | [🔊](https://dict.youdao.com/dictvoice?audio=resolved&type=2)  /rɪˈzɑːlvd/                          | ❌ /rɪ'səʊvd/            | 已解决                 |
| resort        | [🔊](https://dict.youdao.com/dictvoice?audio=resort&type=1)  /rɪˈzɔ:t/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=resort&type=2)  /rɪˈzɔːrt/                             | ❌ /rɪˈsɔ:t/             | 求助于/采取              |
| retina        | [🔊](https://dict.youdao.com/dictvoice?audio=retina&type=1)  /'retɪnə/                                        | [🔊](https://dict.youdao.com/dictvoice?audio=retina&type=2)  /ˈretɪnə/                              | ❌ /ri'tina/             | 苹果显示屏;视网膜           |
| RISC-V        | [🔊](https://dict.youdao.com/dictvoice?audio=risk-five&type=1)  /'rɪsk faɪv/                                  | [🔊](https://dict.youdao.com/dictvoice?audio=risk-five&type=2)  /'rɪsk faɪv/                        | ❌ /'rɪsk v/             | 开源指令集架构             |
| route         | [🔊](https://dict.youdao.com/dictvoice?audio=route&type=1)  /ruːt/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=route&type=2)  /ruːt,raʊt/                             | ❌ /rəʊt/                | 路由;路由表/路由规则         |
| San Jose      | [🔊](https://dict.youdao.com/dictvoice?audio=san%20jose&type=1)  /sænhəu'zei/                                 | [🔊](https://dict.youdao.com/dictvoice?audio=san%20jose&type=2)  /sænhəu'zei/                       | ❌ /sæn'ju:s/            | 圣何塞(地名)             |
| safari        | [🔊](https://dict.youdao.com/dictvoice?audio=safari&type=1)  /sə'fɑːrɪ/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=safari&type=2)  /səˈfɑːri/                             | ❌ /sæfərɪ/              | 苹果浏览器名              |
| scheme        | [🔊](https://dict.youdao.com/dictvoice?audio=scheme&type=1)  /skiːm/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=scheme&type=2)  /skiːm/                                | ❌ /s'kæmə/              | 方案;协议方案;编程语言名       |
| scala         | [🔊](https://dict.youdao.com/dictvoice?audio=scala&type=1)  /ˈskɑːlɑ/                                         | [🔊](https://dict.youdao.com/dictvoice?audio=scala&type=2)  /ˈskɑːlɑ/                               | ❌ /ˈskæːlɑ/             | 编程语言名               |
| segue         | [🔊](https://dict.youdao.com/dictvoice?audio=segue&type=1)  /'sɛɡwe/                                          | [🔊](https://dict.youdao.com/dictvoice?audio=segue&type=2)  /ˈseɡweɪ/                               | ❌ /se'dʒ/               | 过渡/切换               |
| SQL           | /ˈsiːkwəl/ /ˈesˈkjuːˈel/                                                                                      | /ˈsiːkwəl/ /ˈesˈkjuːˈel/                                                                            | ❌ /sərk(ə)l/            | 结构化查询语言             |
| sudo          | /'suːduː/                                                                                                     | /'suːduː/                                                                                           |                         | 管理员权限运行             |
| suite         | [🔊](https://dict.youdao.com/dictvoice?audio=suite&type=1)  /swiːt/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=suite&type=2)  /swiːt/                                 | ❌ /sjuːt/               | 套件                  |
| telemetry     | [🔊](https://dict.youdao.com/dictvoice?audio=telemetry&type=1) /təˈlemətri/                                   | [🔊](https://dict.youdao.com/dictvoice?audio=telemetry&type=2) /təˈlemətri/                         | ❌ /ˈtelɪmətri/          | 遥测                  |
| thymeleaf     | [🔊](https://dict.youdao.com/dictvoice?audio=thymeleaf&type=1)  /ˈtaɪmˌlɪːf/                                  | [🔊](https://dict.youdao.com/dictvoice?audio=thymeleaf&type=2)  /ˈtaɪmˌlɪːf/                        | ❌ /θiːmɪlɪːf/           | Java 模板引擎名          |
| tuple         | [🔊](https://dict.youdao.com/dictvoice?audio=tuple&type=1) /tjʊpəl/                                           | [🔊](https://dict.youdao.com/dictvoice?audio=tuple&type=2) /tuːpəl/                                 |                         | 元组;有序组              |
| typical       | [🔊](https://dict.youdao.com/dictvoice?audio=typical&type=1)  /'tɪpɪkl/                                       | [🔊](https://dict.youdao.com/dictvoice?audio=typical&type=2)  /ˈtɪpɪkl/                             | ❌ /'taɪpɪkəl/           | 典型的                 |
| Ubuntu        | [🔊](https://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga)  /ʊ'bʊntʊ/              | [🔊](https://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga)  /ʊ'bʊntʊ/    | ❌ /juː'bʊntʊ/           | Linux 发行版名          |
| UEFI          | U-E-F-I                                                                                                       | U-E-F-I                                                                                             | ❌ /jufi/ /ɔːfi/         | 统一可扩展固件接口           |
| Vagrant       | [🔊](https://dict.youdao.com/dictvoice?audio=Vagrant&type=1) /ˈveɪɡrənt/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=Vagrant&type=2) /ˈveɪɡrənt/                            | /ˈvagɹent/              | 虚拟机名                |
| variable      | [🔊](https://dict.youdao.com/dictvoice?audio=variable&type=1)  /'veəriəbl/                                    | [🔊](https://dict.youdao.com/dictvoice?audio=variable&type=2)  /ˈveriəbl,ˈværiəbl/                  | ❌ /və'raiəbl/           | 变量;变量名/变量类型         |
| verbose       | [🔊](https://dict.youdao.com/dictvoice?audio=verbose&type=1)  /vɜːˈbəʊs/                                      | [🔊](https://dict.youdao.com/dictvoice?audio=verbose&type=2)  /vɜːrˈboʊs/                           | ❌ /'vɜːrboʊs/           | 冗长的                 |
| vue           | [🔊](https://dict.youdao.com/dictvoice?audio=vue&type=1)  /v'ju:/                                             | [🔊](https://dict.youdao.com/dictvoice?audio=vue&type=2)  /v'ju:/                                   | ❌ /v'ju:i/              | 前端框架名               |
| width         | [🔊](https://dict.youdao.com/dictvoice?audio=width&type=1)  /wɪdθ/                                            | [🔊](https://dict.youdao.com/dictvoice?audio=width&type=2)  /wɪdθ,wɪtθ/                             | ❌ /waɪdθ/               | 宽度;宽度属性             |
| YouTube       | [🔊](https://dict.youdao.com/dictvoice?audio=youtube&type=1)  /'juː'tjuːb/                                    | [🔊](https://dict.youdao.com/dictvoice?audio=youtube&type=2)  /'juː'tjuːb/                          | ❌ /'juː'tʊbɪ/           | 视频网站名;“油管”          |
| Vite          | [🔊](https://dict.youdao.com/dictvoice?audio=vite&type=1)  /vit/                                              | [🔊](https://dict.youdao.com/dictvoice?audio=vite&type=2)  /vit/                                    | ❌ /vaɪt/                | 前端构建工具              |


### 附注
*  无页面跳转,页面嵌入搜索引擎和实时检索英语发音,请安装[chromium 扩展](tools/chromium_extension/README.md)
    * [chromium 扩展新增功能截图](tools/chromium_extension/images/README.md)
* 当使用简名 ‘Kube’ 称呼 ‘Kubernetes’ 时, 发音则与 ‘cube’(/kjuːb/) 一致

### 相关链接
* 真人发音:https://www.bilibili.com/video/bv1nv411i7z3 (by @hailintao)
* 简洁的单词列表,正确读音不用再打开新网页:https://cpwp.netlify.app/ (by @antfu7)
* 国际音标严式记音(纽约音)https://github.com/b1f6c1c4/programming-pronunciations-en_US (by @b1f6c1c4)
* 单词连读:https://corrector.justsong.cn/ (by [@songquanpeng](https://github.com/songquanpeng/pronunciation-corrector))
* [iOS app](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291) (by @Chang12)
* [chromium系浏览器扩展,无页面跳转,实时检索英语发音](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git) (by @jingjingxyk)

### 说明
1. 本着简单的原则, 又为了避免程序猿们出现选择困难症, '正确音标'采用了最接近有道词典音频的英式DJ音标,不代表其唯一性
1. 专业在线英语词典请参考: [在线英语词典哪个比较好?](https://www.zhihu.com/question/19707759)

### 参考资料
1. https://www.zhihu.com/question/19739907
2. https://www.v2ex.com/t/131094
3. https://www.v2ex.com/t/309350
4. https://www.v2ex.com/t/63781
5. https://www.v2ex.com/t/246033
6. https://www.v2ex.com/t/342087

### Star History

[![Star History Chart](https://api.star-history.com/svg?repos=shimohq/chinese-programmer-wrong-pronunciation&type=Date)](https://star-history.com/#shimohq/chinese-programmer-wrong-pronunciation&Date)


================================================
FILE: tools/addword.py
================================================
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
Create the description for a word to be added to the word list
Usage: addword.py <word>
"""
import re
import sys
import urllib.request
from bs4 import BeautifulSoup


def main():
    """Generate the information with pronunciations for a word to be added to the word list"""
    if len(sys.argv) != 2:
        print(__doc__)
        sys.exit(1)
    word = sys.argv[1]
    pronunciations = get_pronunciations(word)
    britsh_en = '[🔊](' + pronunciations[0][0] + ')' + ' ' + '/' + pronunciations[0][1] + '/'
    american_en = '[🔊](' + pronunciations[1][0] + ')' + ' ' + '/' + pronunciations[1][1] + '/'
    line = '| ' + word + ' | ' + britsh_en + ' | ' + american_en + ' | ' + ' ' + '|'
    print(line)


def get_pronunciations(word):
    """Return the word's pronouciation URLs and phonetic transcriptions
       from youdao.com if available"""
    word = word.strip()
    word_url = 'https://dict.youdao.com/w/en/' + word
    pron_url = 'https://dict.youdao.com/dictvoice?audio='+ word + '&'
    britsh_en = [" ", " "]
    american_en = [" ", " "]
    try:
        response = urllib.request.urlopen(word_url).read()
        soup = BeautifulSoup(response, 'html.parser')
        spans = soup.find_all('span', {'class': 'pronounce'})
        lines = [span.get_text() for span in spans]
        match = re.findall(r'\[.+\]', lines[0])
        britsh_en[0] = pron_url + 'type=1'
        britsh_en[1] = match[0].replace('[', '').replace(']', '')
        match = re.findall(r'\[.+\]', lines[1])
        american_en[0] = pron_url + 'type=2'
        american_en[1] = match[0].replace('[', '').replace(']', '')
    except:
        return britsh_en, american_en

    return britsh_en, american_en


if __name__ == '__main__':
    main()


================================================
FILE: tools/chromium_extension/README.md
================================================
# 无页面跳转收听正确读音 的 chromium 扩展

## 使用说明

1. 点击第一列,调用的是搜索框页面
1. 点击第二列和第三列,调用的播放音频功能

## [获得最新版扩展](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git)

## 手动安装扩展

> 1. 下载 [chinese-programmer-wrong-pronunciation](https://github.com/shimohq/chinese-programmer-wrong-pronunciation/archive/refs/heads/master.zip) 然后解压,找到 `tools/chromium_extension` 子目录
> 2. 打开 Chrome,输入: `chrome://extensions/`
> 3. 勾选 Developer Mode
> 4. 选择 Load unpacked extension... 然后定位到刚才解压的文件夹里面的 `tools/chromium_extension` 目录,确定
> 5. 这就安装好了,去掉 Developer Mode 勾选。
> 6. 打开[`https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git`](https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git)点击单词,即可听正确的单词读音

## 扩展开发参考

1. [content_scripts](https:////developer.chrome.com/docs/extensions/mv3/content_scripts/)
1. [Declare permissions](https:////developer.chrome.com/docs/extensions/mv3/declare_permissions/)
1. [ReplaceGoogleCDN](https://github.com/justjavac/ReplaceGoogleCDN.git)

## note

```text
https://dict.youdao.com/dictvoice?audio=parameter&type=1

```


================================================
FILE: tools/chromium_extension/css/app.css
================================================
tr:hover {
  border: 8px solid #ddd !important;
  border-radius: 8px !important;
  box-shadow: 5px 5px 15px #daf5fe !important;

  color: #fff !important;
  background-color: #3ec487 !important;
  /*
    font-weight: 200;
    font-size: 1.1rem;
    */
}

#chinese-programmer-wrong-pronunciation-custom-iframe-box {
  border: 8px solid #ddd !important;
  border-radius: 8px !important;
  box-shadow: 5px 5px 15px #daf5fe !important;
  z-index: 999;
  position: fixed !important;
}
.chinese-programmer-wrong-pronunciation-custom-iframe-box {
  right: 0 !important;
  top: 64px !important;
}

.chinese-programmer-wrong-pronunciation-custom-iframe-box-hidden {
  display: none;
}

#chinese-programmer-wrong-pronunciation-custom-iframe {
  width: 100%;
  height: 100%;
  min-width: 700px !important;
  min-height: 600px !important;
}

.chinese-programmer-wrong-pronunciation-custom-tool-bar {
  position: absolute;
  right: -5px;
  top: -32px;
  font-size: 16px;
}

.chinese-programmer-wrong-pronunciation-custom-window-close-icon {
  margin-right: 4px;
  margin-left: 10px;
}
.chinese-programmer-wrong-pronunciation-custom-tool-bar-setup {
  margin-right: 10px;
  font-size: 20px;
}

.chinese-programmer-wrong-pronunciation-custom-note-reset {
  font-size: 16px;
  color: #c5955d;
}


================================================
FILE: tools/chromium_extension/format-code.sh
================================================
#!/bin/env bash

set -exu

__DIR__=$(cd "$(dirname "$0")";pwd)
cd ${__DIR__}

npm run format-code

================================================
FILE: tools/chromium_extension/images/README.md
================================================
# 新增功能截图

## 嵌入搜索引擎 有道搜索

![](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation/blob/master/tools/chromium_extension/images/%E6%88%AA%E5%9B%BE2022-06-14-22-11.png?raw=true)

## 嵌入搜索引擎 谷歌搜索

![](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation/blob/master/tools/chromium_extension/images/截图2022-06-14-22-10.png?raw=true)


================================================
FILE: tools/chromium_extension/js/app/box.js
================================================
import * as utils from "./utils.js";
import * as components from "./components.js";
import * as searchEngine from "./search-engine.js";

let goToSearchPronounce = (word) => {
  let search_engine_name = "goToGoogleSearch";
  search_engine_name = "goToYouDaoSearch";
  // search_engine_name = "goToBingDictSearch";
  // search_engine_name = "goToBingSearch";
  //search_engine_name = "gotToYouDaoSearch";
  let tab = "current_tab";

  let opener = components.getSearchEngineOpener();
  if (opener && opener.expired_date) {
    if (opener.expired_date > new Date().getTime()) {
      if (opener.search_engine_name) {
        search_engine_name = opener.search_engine_name;
      }
      if (opener.tab) {
        tab = opener.tab;
      }
    }
  }
  if (search_engine_name && searchEngine[search_engine_name]) {
    console.log(word);
    let url = searchEngine[search_engine_name](word);
    console.log(url);
    if (tab === "new_tab") {
      window.open(url, "_blank");
    } else {
      let iframe = components.getIframe();
      iframe.setAttribute("src", url);
    }
  } else {
    console.log("search engine no found !");
  }
};

let box = { ...utils, ...components, ...searchEngine, goToSearchPronounce };
export default box;


================================================
FILE: tools/chromium_extension/js/app/components.js
================================================
import { prettyBox } from "./pretty-box.js";
import { hasClass, addClass, removeClass } from "./utils.js";

let styleConfig = () => {
  let css = document.createElement("link");
  css.setAttribute("rel", "stylesheet");
  css.setAttribute("type", "text/css");
  css.setAttribute("href", chrome.runtime.getURL("css/app.css"));
  document.head.appendChild(css);
};

let customElement = () => {
  let link = document.createElement("link");
  link.setAttribute(
    "href",
    chrome.runtime.getURL("web-components/x-custom-box.html")
  );
  document.head.appendChild(link);
};

let getIframe = () => {
  let box = document.querySelector(
    "#chinese-programmer-wrong-pronunciation-custom-iframe-box"
  );
  let iframe = null;
  if (!box) {
    let custom_box = document.createElement(
      "x-chinese-programmer-wrong-pronunciation-custom-box"
    );

    let aside = document.createElement("aside");
    aside.setAttribute(
      "id",
      "chinese-programmer-wrong-pronunciation-custom-iframe-box"
    );
    aside.setAttribute(
      "class",
      "chinese-programmer-wrong-pronunciation-custom-iframe-box"
    );
    aside.setAttribute("draggable", "true");

    let tool_bar = document.createElement("div");
    tool_bar.setAttribute(
      "class",
      "chinese-programmer-wrong-pronunciation-custom-tool-bar"
    );
    tool_bar.addEventListener("click", (event) => {
      event.preventDefault();
      event.stopPropagation();
    });

    let window_close_icon = document.createElement("span");
    window_close_icon.innerText = "❌";
    window_close_icon.setAttribute(
      "class",
      "chinese-programmer-wrong-pronunciation-custom-window-close-icon"
    );
    window_close_icon.addEventListener("click", closeSearchWindow);
    tool_bar.appendChild(window_close_icon);

    iframe = document.createElement("iframe");
    iframe.setAttribute(
      "id",
      "chinese-programmer-wrong-pronunciation-custom-iframe"
    );
    iframe.setAttribute("security", "restricted");
    //iframe.setAttribute('sandbox',"")

    aside.appendChild(tool_bar);
    aside.appendChild(iframe);
    custom_box.appendChild(aside);
    document.body.appendChild(custom_box);

    //设置 box 可 拖拽
    prettyBox(aside);
    //显示设置按键
    showSetSearchEngine(tool_bar, window_close_icon);
  } else {
    if (
      hasClass(
        box,
        "chinese-programmer-wrong-pronunciation-custom-iframe-box-hidden"
      )
    ) {
      removeClass(
        box,
        "chinese-programmer-wrong-pronunciation-custom-iframe-box-hidden"
      );
    }
    iframe = box.querySelector(
      "#chinese-programmer-wrong-pronunciation-custom-iframe"
    );
    iframe.setAttribute("src", "about:blank");
    //iframe.contentDocument.close()
    box.removeChild(iframe);

    iframe = document.createElement("iframe");
    iframe.setAttribute(
      "id",
      "chinese-programmer-wrong-pronunciation-custom-iframe"
    );
    iframe.setAttribute("security", "restricted");
    box.appendChild(iframe);
  }

  return iframe;
};

let opener_key = "how-to-pronounce-from-search-engine-open-tab-opener";
let getSearchEngineOpener = () => {
  return JSON.parse(sessionStorage.getItem(opener_key));
};

let showSetSearchEngine = (box, window_close_icon) => {
  let opener = getSearchEngineOpener();

  {
    let search_engin_provider = {
      goToYouDaoSearch: "有道",
      goToGoogleSearch: "谷歌",
      goToBingDictSearch: "必应词典",
      goToBingSearch: "必应",
    };
    let select = document.createElement("select");
    select.setAttribute("name", "search_engin_provider");
    select.setAttribute("class", "search_engin_provider");
    let htmlContent = "";
    for (let i in search_engin_provider) {
      let selected = "";
      if (opener && opener.search_engine_name) {
        selected = i === opener.search_engine_name ? 'selected="selected"' : "";
      }
      htmlContent += `<option value="${i}" ${selected}>${search_engin_provider[i]}</option>`;
    }

    select.innerHTML = htmlContent;

    select.addEventListener("click", setSearchEngine);
    box.insertBefore(select, window_close_icon);
  }
  {
    let search_engin_provider_tab = {
      current_tab: "当前标签展示结果",
      new_tab: "新标签展示结果",
    };
    let select = document.createElement("select");
    select.setAttribute("class", "search_engin_provider_tab");
    select.setAttribute("name", "search_engin_provider_tab");
    let htmlContent = "";
    for (let i in search_engin_provider_tab) {
      let selected = "";
      if (opener && opener.tab) {
        selected = i === opener.tab ? 'selected="selected"' : "";
      }
      htmlContent += `<option value="${i}" ${selected}>${search_engin_provider_tab[i]}</option>`;
    }

    select.innerHTML = htmlContent;

    select.addEventListener("click", setSearchEngineOpener);
    box.insertBefore(select, window_close_icon);
  }

  let div = document.createElement("span");
  div.setAttribute(
    "class",
    "chinese-programmer-wrong-pronunciation-custom-tool-bar-setup"
  );
  div.innerText = `⚙`;
  // box.insertBefore(div,select)
};

//关闭窗口
let closeSearchWindow = () => {
  let box = document.querySelector(
    "#chinese-programmer-wrong-pronunciation-custom-iframe-box"
  );
  console.log(box);
  if (
    box &&
    !hasClass(
      box,
      "chinese-programmer-wrong-pronunciation-custom-iframe-box-hidden"
    )
  ) {
    addClass(
      box,
      "chinese-programmer-wrong-pronunciation-custom-iframe-box-hidden"
    );
  }
  let iframe = box.querySelector(
    "#chinese-programmer-wrong-pronunciation-custom-iframe"
  );
  iframe.setAttribute("src", "about:blank");
};

let setSearchEngine = (event) => {
  event.preventDefault();
  event.stopPropagation();
  console.log(event.target.value);
  setupConfig(event.target.value, null);
};
let setSearchEngineOpener = (event) => {
  event.preventDefault();
  event.stopPropagation();
  console.log(event.target.value);

  setupConfig(null, event.target.value);
};

let setupConfig = (search_engine_name, tab) => {
  let opener = getSearchEngineOpener();
  //页面展示方式,默认有效期一天
  let expired_date = new Date().getTime() + 24 * 60 * 60 * 1000;
  if (opener) {
    if (search_engine_name) {
      opener.search_engine_name = search_engine_name;
    }
    if (tab) {
      opener.tab = tab;
    }
  } else {
    tab = "current_tab";
    search_engine_name = "goToYouDaoSearch";
    opener = {
      tab: tab,
      expired_date: expired_date,
      search_engine_name: search_engine_name,
    };
  }

  sessionStorage.setItem(opener_key, JSON.stringify(opener));
};
let showResetCurrentSearchEngineTab = () => {
  let div = document.createElement("div");
  div.setAttribute(
    "id",
    "#chinese-programmer-wrong-pronunciation-custom-tools-bar"
  );
  div.innerHTML = `
        <span>关闭搜索页面</span>🥳🥳🥳🥳🥳🥳<span>更换搜索引擎</span>
    `;

  document
    .querySelector("#chinese-programmer-wrong-pronunciation-custom-iframe-box")
    .appendChild(div);
};

let cleanOpener = () => {
  sessionStorage.removeItem(opener_key);
  console.log("恢复扩展默认配置---ok");
};

export {
  styleConfig,
  customElement,
  getIframe,
  getSearchEngineOpener,
  setSearchEngineOpener,
  cleanOpener,
};


================================================
FILE: tools/chromium_extension/js/app/init.js
================================================
import box from "./box.js";

let init = () => {
  let URLObj = new URL(location.href);
  console.log(URLObj);
  if (document.querySelector("#readme table tbody")) {
    //载入自定义组件样式
    box.styleConfig();
    //载入自定义组件
    box.customElement();

    let audio_player = new Audio();
    audio_player.setAttribute("autoplay", "true");
    document
      .querySelector("#readme table tbody")
      .addEventListener("click", (event) => {
        //console.log(event.target)
        // console.log(event.target.nodeType)
        // console.log(event.target.nodeName);
        let parentElement = event.target.parentElement;
        if (parentElement && parentElement.nodeName === "TR") {
          if (parentElement.firstElementChild === event.target) {
            //使用搜索引擎查询发音
            box.goToSearchPronounce(event.target.innerText);
          }
        }
        event.preventDefault();
        event.stopPropagation();
        let audio_url = null;
        if (event.target.nodeName === "TD") {
          let aTag = event.target.querySelector("a");
          if (aTag) {
            audio_url = aTag.getAttribute("href");
          }
        }
        if (event.target.nodeName === "IMG") {
          let aTag = event.target.parentNode.parentNode;
          audio_url = aTag.getAttribute("href");
        }
        if (event.target.nodeName === "G-EMOJI") {
          let aTag = event.target.parentNode;
          audio_url = aTag.getAttribute("href");
        }
        if (audio_url) {
          let desURL = new URL(audio_url);
          //console.log(desURL.protocol);
          if (desURL.protocol === "http:") {
            //skip http
            location.href = audio_url;
          } else {
            // console.log("audio_url:", audio_url);
            audio_player.setAttribute("src", audio_url);
          }
        }
      });
    document
      .querySelector("#readme table tbody")
      .addEventListener("mouseover", (event) => {
        let parentElement = event.target.parentElement;
        if (parentElement && parentElement.nodeName === "TR") {
          if (parentElement.firstElementChild === event.target) {
            event.target.setAttribute("title", "点击我打开搜索引擎检索");
            event.target.style.cursor = "pointer";
          }
        }
      });

    let table = document.querySelector("#readme table");
    let parent = table.parentNode;
    let note = document.createElement("span");
    note.innerText = `⚪恢复扩展默认配置⚪`;
    note.setAttribute(
      "class",
      "chinese-programmer-wrong-pronunciation-custom-note-reset"
    );

    note.addEventListener("click", (event) => {
      //重置配置
      event.preventDefault();
      event.stopPropagation();
      box.cleanOpener();
    });
    parent.insertBefore(note, table);
  } else {
    console.log("no found README.md table");
  }
};

export { init };


================================================
FILE: tools/chromium_extension/js/app/pretty-box.js
================================================
import { addClass, removeClass } from "./utils.js";

let prettyBox = (box) => {
  // 参考 https://blog.csdn.net/weixin_41910848/article/details/82218243

  let dragging = false;
  let diffX = null;
  let diffY = null;
  box.onmousedown = function (event) {
    dragging = true;

    let left = box.offsetLeft;
    let top = box.offsetTop;

    removeClass(
      box,
      "chinese-programmer-wrong-pronunciation-custom-iframe-box"
    );

    box.style.left = left + "px";
    box.style.top = top + "px";

    diffX = event.clientX - left;
    diffY = event.clientY - top;
  };
  document.onmousemove = function (event) {
    if (dragging) {
      // console.log(event.clientX, event.clientY)
      //console.log(diffX, diffY)

      let moveX = event.clientX - diffX;
      let moveY = event.clientY - diffY;

      if (moveX < 0) {
        moveX = 0;
      } else if (moveX > window.innerWidth - box.offsetWidth) {
        moveX = window.innerWidth - box.offsetWidth;
      }
      if (moveY < 0) {
        moveY = 0;
      } else if (moveY > window.innerHeight - box.offsetHeight) {
        moveY = window.innerHeight - box.offsetHeight;
      }

      box.style.left = moveX + "px";
      box.style.top = moveY + "px";

      event.stopPropagation();
      event.preventDefault();
    }
  };
  document.onmouseup = function (event) {
    dragging = false;
  };

  box.onmouseup = (event) => {
    dragging = false;
  };

  box.ondragstart = function (event) {
    console.log(box.offsetLeft, box.offsetTop);
    console.log("开始拖拽");
  };
  box.ondrag = function () {
    console.log(box.offsetLeft, box.offsetTop);
    console.log("拖拽中");
  };
  box.ondragend = function () {
    console.log(box.offsetLeft, box.offsetTop);
    console.log("拖拽结束");
  };
};

export { prettyBox };


================================================
FILE: tools/chromium_extension/js/app/search-engine.js
================================================
let goToGoogleSearch = (word) => {
  word = word.replace(/\s/, "+");
  return `https://www.google.com/search?q=how+to+pronounce+${word}`;
};

let goToYouDaoSearch = (word) => {
  word = word.replace(/\s/, "+");
  return `https://www.youdao.com/result?word=${word}&lang=en`;
};

let goToBingDictSearch = (word) => {
  return `https://cn.bing.com/dict/${word}`;
};
let goToBingSearch = (word) => {
  return `https://cn.bing.com/search?q=how%20to%20pronounce%20${word}`;
};

export {
  goToYouDaoSearch,
  goToGoogleSearch,
  goToBingDictSearch,
  goToBingSearch,
};


================================================
FILE: tools/chromium_extension/js/app/utils.js
================================================
function hasClass(el, className) {
  if (el.classList) return el.classList.contains(className);
  return !!el.className.match(new RegExp("(\\s|^)" + className + "(\\s|$)"));
}

function addClass(el, className) {
  if (el.classList) el.classList.add(className);
  else if (!hasClass(el, className)) el.className += " " + className;
}

function removeClass(el, className) {
  if (el.classList) el.classList.remove(className);
  else if (hasClass(el, className)) {
    let reg = new RegExp("(\\s|^)" + className + "(\\s|$)");
    el.className = el.className.replace(reg, " ");
  }
}

function getCookie(name) {
  let arr,
    reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  if ((arr = document.cookie.match(reg))) {
    return decodeURIComponent(arr[2]);
  } else {
    return null;
  }
  //await cookieStore.get({name:name})
}

// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

function setCookie(name, value, second, path, domain) {
  var exp = new Date();
  exp.setTime(exp.getTime() + second * 1000);
  document.cookie =
    name +
    "=" +
    encodeURIComponent(value) +
    ";expires=" +
    exp.toGMTString() +
    ";path=" +
    path +
    ";domain=" +
    domain +
    ";SameSite=None;Secure";
}
async function getCookies(domain) {
  let cookies = await cookieStore.getAll({ domain: domain });
  return cookies;
}

function encodeBase64(str) {
  return btoa(encodeURIComponent(str));
}

function decodeBase64(encoded) {
  return decodeURIComponent(atob(encoded));
}

function getParameterValue(name) {
  let reg = new RegExp("[^?&]?" + encodeURI(name) + "=[^&]+");
  let arr = location.search.match(reg);
  if (arr != null) {
    return decodeURI(arr[0].substring(arr[0].search("=") + 1));
  }
  return "";
}

function createJSONFile(content, filename) {
  let blob = new Blob([JSON.stringify(content)], { type: "application/json" });
  let url = window.URL.createObjectURL(blob);
  let a = document.createElement("a");
  a.style.display = "none";
  a.href = url;
  a.download = filename;
  a.click();
  setTimeout(function () {
    window.URL.revokeObjectURL(url);
  }, 3000);
}

async function sleep(time) {
  return new Promise((resolve) => setTimeout(resolve, time));
}

async function getMediaDevices() {
  return await navigator.mediaDevices.enumerateDevices();
}

// new URLSearchParams
// new URL
// (new Date()).toISOString()
export {
  addClass,
  removeClass,
  hasClass,
  setCookie,
  getCookie,
  encodeBase64,
  decodeBase64,
  getParameterValue,
  sleep,
  getMediaDevices,
  createJSONFile,
};


================================================
FILE: tools/chromium_extension/js/content-script.js
================================================
(async () => {
  let app = await import(chrome.runtime.getURL("js/app/init.js"));
  app.init();
})();


================================================
FILE: tools/chromium_extension/manifest.json
================================================
{
  "name": "chinese-programmer-wrong-pronunciation-chromium-extension",
  "version": "0.1.0",
  "manifest_version": 3,
  "description": "页面无跳转 听正确读音",
  "content_scripts": [
    {
      "matches": [
        "*://*/shimohq/chinese-programmer-wrong-pronunciation/*",
        "*://*/jingjingxyk/chinese-programmer-wrong-pronunciation/*"
      ],
      "run_at": "document_idle",
      "js": ["js/content-script.js"]
    }
  ],
  "permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestWithHostAccess"
  ],
  "host_permissions": [
    "*://github.com/*",
    "*://www.google.com/*",
    "*://cn.bing.com/*",
    "*://www.bing.com/*",
    "*://www.youdao.com/*",
    "*://dict.youdao.com/*"
  ],
  "web_accessible_resources": [
    {
      "resources": ["*.js", "*.css", "*.html"],
      "matches": ["*://*/*"],
      "extension_ids": [],
      "use_dynamic_url": true
    }
  ],
  "declarative_net_request": {
    "rule_resources": [
      {
        "id": "remove_content_security_policy",
        "enabled": true,
        "path": "rules/remove_content_security_policy.json"
      }
    ]
  },
  "author": "https://github.com/jingjingxyk",
  "homepage_url": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git"
}


================================================
FILE: tools/chromium_extension/package.json
================================================
{
  "name": "chinese-programmer-wrong-pronunciation-chromium-extension",
  "version": "1.0.0",
  "description": "README.md 页面无跳转 即可听正确读音",
  "main": "index.js",
  "scripts": {
    "format-code": "npx prettier --write . && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "prettier": "2.6.2"
  }
}


================================================
FILE: tools/chromium_extension/rules/remove_content_security_policy.json
================================================
[
  {
    "id": 1,
    "priority": 99,
    "action": {
      "type": "modifyHeaders",
      "responseHeaders": [
        { "header": "content-security-policy", "operation": "remove" },
        {
          "header": "content-security-policy-report-only",
          "operation": "remove"
        },
        { "header": "expect-ct", "operation": "remove" },
        { "header": "report-to", "operation": "remove" },
        { "header": "x-content-security-policy", "operation": "remove" },
        { "header": "x-webkit-csp", "operation": "remove" },
        { "header": "x-xss-protection", "operation": "remove" },
        {
          "header": "x-permitted-cross-domain-policies",
          "operation": "remove"
        },
        { "header": "x-content-type-options", "operation": "remove" },
        { "header": "x-frame-options", "operation": "remove" },
        { "header": "X-Frame-Options", "operation": "remove" },
        { "header": "permissions-policy", "operation": "remove" },
        { "header": "timing-allow-origin", "operation": "remove" },
        { "header": "cross-origin-embedder-policy", "operation": "remove" },
        { "header": "cross-origin-opener-policy", "operation": "remove" },
        {
          "header": "cross-origin-opener-policy-report-only",
          "operation": "remove"
        },
        {
          "header": "cross-origin-embedder-policy-report-only",
          "operation": "remove"
        }
      ]
    },
    "condition": {
      "urlFilter": "*",
      "requestDomains": [
        "github.com",
        "githubusercontent.com",
        "www.google.com",
        "cn.bing.com",
        "www.bing.com",
        "fanyi.baidu.com",
        "www.youdao.com",
        "dict.youdao.com"
      ],
      "resourceTypes": [
        "main_frame",
        "sub_frame",
        "stylesheet",
        "script",
        "image",
        "font",
        "object",
        "xmlhttprequest",
        "ping",
        "csp_report",
        "media",
        "websocket",
        "webtransport",
        "webbundle",
        "other"
      ]
    }
  }
]


================================================
FILE: tools/chromium_extension/web-components/README.md
================================================
# HTML Imports,HTML Template、Shadow DOM----统称为 Web Components 规范

## Shadow DOM 实现代码隔离


================================================
FILE: tools/chromium_extension/web-components/x-custom-box.html
================================================
<x-chinese-programmer-wrong-pronunciation-custom-box>
  <div>自定义web组件-做代码隔离</div>
</x-chinese-programmer-wrong-pronunciation-custom-box>
Download .txt
gitextract_c8hfxxzq/

├── .editorconfig
├── .github/
│   └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── README.md
└── tools/
    ├── addword.py
    └── chromium_extension/
        ├── README.md
        ├── css/
        │   └── app.css
        ├── format-code.sh
        ├── images/
        │   └── README.md
        ├── js/
        │   ├── app/
        │   │   ├── box.js
        │   │   ├── components.js
        │   │   ├── init.js
        │   │   ├── pretty-box.js
        │   │   ├── search-engine.js
        │   │   └── utils.js
        │   └── content-script.js
        ├── manifest.json
        ├── package.json
        ├── rules/
        │   └── remove_content_security_policy.json
        └── web-components/
            ├── README.md
            └── x-custom-box.html
Download .txt
SYMBOL INDEX (14 symbols across 2 files)

FILE: tools/addword.py
  function main (line 13) | def main():
  function get_pronunciations (line 26) | def get_pronunciations(word):

FILE: tools/chromium_extension/js/app/utils.js
  function hasClass (line 1) | function hasClass(el, className) {
  function addClass (line 6) | function addClass(el, className) {
  function removeClass (line 11) | function removeClass(el, className) {
  function getCookie (line 19) | function getCookie(name) {
  function setCookie (line 32) | function setCookie(name, value, second, path, domain) {
  function getCookies (line 47) | async function getCookies(domain) {
  function encodeBase64 (line 52) | function encodeBase64(str) {
  function decodeBase64 (line 56) | function decodeBase64(encoded) {
  function getParameterValue (line 60) | function getParameterValue(name) {
  function createJSONFile (line 69) | function createJSONFile(content, filename) {
  function sleep (line 82) | async function sleep(time) {
  function getMediaDevices (line 86) | async function getMediaDevices() {
Condensed preview — 21 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (68K chars).
[
  {
    "path": ".editorconfig",
    "chars": 672,
    "preview": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines wit"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 446,
    "preview": "<!--\nPR说明:\n1. 尽量提交常用的单词和中国程序员容易读错的单词。\n1. 选择合适的Labels。\n1. 音标目前为[海词](http://dict.cn/)英式发音, 使用 [DJ 音标写法](https://zh.wikiped"
  },
  {
    "path": ".gitignore",
    "chars": 126,
    "preview": "/tools/chromium_extension/_metadata\n/tools/chromium_extension/node_modules\n/tools/chromium_extension/package-lock.json\n/"
  },
  {
    "path": "README.md",
    "chars": 39132,
    "preview": "## Words Commonly Mispronounced by Chinese Programmers\n## 中国程序员容易发音错误的单词(点击🔊收听正确读音)\n\n### 重要更新\n- 我们团队最新推出了一款新产品 **[@Offic"
  },
  {
    "path": "tools/addword.py",
    "chars": 1779,
    "preview": "#!/usr/bin/env python3\n# -*- coding: UTF-8 -*-\n\"\"\"\nCreate the description for a word to be added to the word list\nUsage:"
  },
  {
    "path": "tools/chromium_extension/README.md",
    "chars": 1089,
    "preview": "# 无页面跳转收听正确读音 的 chromium 扩展\n\n## 使用说明\n\n1. 点击第一列,调用的是搜索框页面\n1. 点击第二列和第三列,调用的播放音频功能\n\n## [获得最新版扩展](https://github.com/jingjin"
  },
  {
    "path": "tools/chromium_extension/css/app.css",
    "chars": 1279,
    "preview": "tr:hover {\n  border: 8px solid #ddd !important;\n  border-radius: 8px !important;\n  box-shadow: 5px 5px 15px #daf5fe !imp"
  },
  {
    "path": "tools/chromium_extension/format-code.sh",
    "chars": 97,
    "preview": "#!/bin/env bash\n\nset -exu\n\n__DIR__=$(cd \"$(dirname \"$0\")\";pwd)\ncd ${__DIR__}\n\nnpm run format-code"
  },
  {
    "path": "tools/chromium_extension/images/README.md",
    "chars": 361,
    "preview": "# 新增功能截图\n\n## 嵌入搜索引擎 有道搜索\n\n![](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation/blob/master/tools/ch"
  },
  {
    "path": "tools/chromium_extension/js/app/box.js",
    "chars": 1234,
    "preview": "import * as utils from \"./utils.js\";\nimport * as components from \"./components.js\";\nimport * as searchEngine from \"./sea"
  },
  {
    "path": "tools/chromium_extension/js/app/components.js",
    "chars": 7148,
    "preview": "import { prettyBox } from \"./pretty-box.js\";\nimport { hasClass, addClass, removeClass } from \"./utils.js\";\n\nlet styleCon"
  },
  {
    "path": "tools/chromium_extension/js/app/init.js",
    "chars": 2844,
    "preview": "import box from \"./box.js\";\n\nlet init = () => {\n  let URLObj = new URL(location.href);\n  console.log(URLObj);\n  if (docu"
  },
  {
    "path": "tools/chromium_extension/js/app/pretty-box.js",
    "chars": 1784,
    "preview": "import { addClass, removeClass } from \"./utils.js\";\n\nlet prettyBox = (box) => {\n  // 参考 https://blog.csdn.net/weixin_419"
  },
  {
    "path": "tools/chromium_extension/js/app/search-engine.js",
    "chars": 564,
    "preview": "let goToGoogleSearch = (word) => {\n  word = word.replace(/\\s/, \"+\");\n  return `https://www.google.com/search?q=how+to+pr"
  },
  {
    "path": "tools/chromium_extension/js/app/utils.js",
    "chars": 2548,
    "preview": "function hasClass(el, className) {\n  if (el.classList) return el.classList.contains(className);\n  return !!el.className."
  },
  {
    "path": "tools/chromium_extension/js/content-script.js",
    "chars": 102,
    "preview": "(async () => {\n  let app = await import(chrome.runtime.getURL(\"js/app/init.js\"));\n  app.init();\n})();\n"
  },
  {
    "path": "tools/chromium_extension/manifest.json",
    "chars": 1245,
    "preview": "{\n  \"name\": \"chinese-programmer-wrong-pronunciation-chromium-extension\",\n  \"version\": \"0.1.0\",\n  \"manifest_version\": 3,\n"
  },
  {
    "path": "tools/chromium_extension/package.json",
    "chars": 324,
    "preview": "{\n  \"name\": \"chinese-programmer-wrong-pronunciation-chromium-extension\",\n  \"version\": \"1.0.0\",\n  \"description\": \"README."
  },
  {
    "path": "tools/chromium_extension/rules/remove_content_security_policy.json",
    "chars": 2082,
    "preview": "[\n  {\n    \"id\": 1,\n    \"priority\": 99,\n    \"action\": {\n      \"type\": \"modifyHeaders\",\n      \"responseHeaders\": [\n       "
  },
  {
    "path": "tools/chromium_extension/web-components/README.md",
    "chars": 87,
    "preview": "# HTML Imports,HTML Template、Shadow DOM----统称为 Web Components 规范\n\n## Shadow DOM 实现代码隔离\n"
  },
  {
    "path": "tools/chromium_extension/web-components/x-custom-box.html",
    "chars": 137,
    "preview": "<x-chinese-programmer-wrong-pronunciation-custom-box>\n  <div>自定义web组件-做代码隔离</div>\n</x-chinese-programmer-wrong-pronuncia"
  }
]

About this extraction

This page contains the full source code of the shimohq/chinese-programmer-wrong-pronunciation GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 21 files (63.6 KB), approximately 20.2k tokens, and a symbol index with 14 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!