├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── bin └── index.js ├── package.json ├── resources ├── benchmark.js └── test.enex └── src ├── _turndown.js ├── cli.js ├── config.js ├── content.js ├── dump.js ├── file.js ├── index.js ├── matter.js ├── parse.js ├── path.js └── utils.js /.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Numerous always-ignore extensions 3 | *.diff 4 | *.err 5 | *.log 6 | *.orig 7 | *.rej 8 | *.swo 9 | *.swp 10 | *.vi 11 | *.zip 12 | *~ 13 | *.sass-cache 14 | *.ruby-version 15 | *.rbenv-version 16 | 17 | # OS or Editor folders 18 | ._* 19 | .cache 20 | .DS_Store 21 | .idea 22 | .project 23 | .settings 24 | .tmproj 25 | *.esproj 26 | *.sublime-project 27 | *.sublime-workspace 28 | nbproject 29 | Thumbs.db 30 | .fseventsd 31 | .DocumentRevisions* 32 | .TemporaryItems 33 | .Trashes 34 | 35 | # Other paths to ignore 36 | bower_components 37 | node_modules 38 | package-lock.json 39 | .nyc_output 40 | coverage 41 | typings 42 | benchmark_output 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017-present Fabio Spampinato 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a 6 | copy of this software and associated documentation files (the "Software"), 7 | to deal in the Software without restriction, including without limitation 8 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | and/or sell copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > Warning: This library is now deprecated, use [Dumper](https://github.com/notable/dumper) instead. 2 | 3 | # enex-dump 4 | 5 | Dump the content of `.enex` files, including attachments, some metadata and optionally converting notes to Markdown. 6 | 7 | `enex` is the format used by [Evernote](https://evernote.com) for exporting notes. 8 | 9 | ## Install 10 | 11 | ```shell 12 | $ npm install -g enex-dump 13 | ``` 14 | 15 | ## Usage 16 | 17 | ```shell 18 | enex-dump --src ./my-notes.enex 19 | ``` 20 | 21 | This app can export notes in html or Markdown. Run the following to read all about the supported options: 22 | 23 | ```shell 24 | enex-dump --help 25 | ``` 26 | 27 | ## Related 28 | 29 | - **[Notable](https://github.com/fabiospampinato/notable)**: The markdown-based note-taking app that doesn't suck. 30 | 31 | ## License 32 | 33 | MIT © Fabio Spampinato 34 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* REQUIRE */ 4 | 5 | const CLI = require ( '../src/cli' ); 6 | 7 | /* CLI */ 8 | 9 | CLI (); 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "enex-dump", 3 | "description": "Dump the content of .enex files, preserving attachments, some metadata and optionally converting notes to Markdown.", 4 | "version": "1.4.1", 5 | "bin": "bin/index.js", 6 | "main": "src/index.js", 7 | "bugs": { 8 | "url": "https://github.com/fabiospampinato/cliflix/issues" 9 | }, 10 | "license": "MIT", 11 | "author": { 12 | "name": "Fabio Spampinato", 13 | "email": "spampinabio@gmail.com" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/fabiospampinato/cliflix.git" 18 | }, 19 | "keywords": [ 20 | "evernote", 21 | "enex", 22 | "dump", 23 | "extract", 24 | "notes", 25 | "markdown" 26 | ], 27 | "dependencies": { 28 | "caporal": "git://github.com/fabiospampinato/Caporal.js#optional-tabtab", 29 | "chalk": "^2.4.1", 30 | "fast-xml-parser": "^3.12.10", 31 | "filenamify": "^2.1.0", 32 | "gray-matter": "^4.0.1", 33 | "html-entities": "^1.2.1", 34 | "js-beautify": "^1.7.5", 35 | "js-yaml": "^3.12.0", 36 | "lodash": "^4.17.10", 37 | "minidom": "^1.0.0", 38 | "minimist": "^1.2.0", 39 | "mkdirp": "^0.5.1", 40 | "pify": "^3.0.0", 41 | "read-pkg-up": "^4.0.0", 42 | "update-notifier": "^2.5.0" 43 | }, 44 | "engines": { 45 | "node": ">= 7.6.0" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /resources/benchmark.js: -------------------------------------------------------------------------------- 1 | 2 | const path = require ( 'path' ); 3 | const EnexDump = require ( '../src/index' ); 4 | 5 | const src = path.join ( __dirname, 'test.enex' ); 6 | const dst = path.join ( __dirname, 'benchmark_output' ); 7 | 8 | async function run () { 9 | 10 | console.time ( 'benchmark' ); 11 | 12 | for ( let i = 0, l = 1000; i < l; i++ ) { 13 | 14 | await EnexDump ({ 15 | path: { 16 | src: [src], 17 | dst: dst 18 | } 19 | }); 20 | 21 | } 22 | 23 | console.timeEnd ( 'benchmark' ); 24 | 25 | } 26 | 27 | run (); 28 | -------------------------------------------------------------------------------- /resources/test.enex: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Evernote Formatting
TEXT
Text 9
Text 10
Text 11
Text 12
Text 13
Text 14
Text 18
Text 24
Text 36
Text 48
Text 64
Text 72

STYLE
Bold
Italic
Underlined
Colored
Highlighted
Code
Multiline
Code
Block
Mixed

LISTS
  • Bullet list
  • Bullet list
  1. Numbered list
  2. Numbered list

FORM 
Unchecked
Checked



ALIGNMENT
Left
Center
Right
Justify

ATTACHMENTS



]]>
20180719T172437Z20180729T230800ZEvernoteFormattingTestFabio Spampinatodesktop.mac0UklGRsITAABXQVZFZm10IBQAAAAxAAEAQB8AAFkGAABBAAAAAgBAAWZhY3QEAAAAQGAAAGRhdGGOEwAA 5 | ZidVxoYCgCRJkiTJBIAkSZLcGANg20aOJNkDgOTGbRxpcbsZTugnto0coZEoZEhyJEn2qB+Nm9M2cj+c 6 | xJEUMNbNV6PahMTkW6RxIzeG4WQlctwmx4DbejsABGfALrdt3MaYtyWK07e4bRw5/qlBM24ktZO7IzeN 7 | BqWTMoTMad30sZTJoJqmpImcKnQtR6drnEaSWiHL6Gs3jtsYRYEj2W1kjqGxXYpZZMa85KRtdwA8Sd06 8 | clgKtm2FNJJ4DLhCG0ly36pbocR8YOQog+JsEwAbM+YKl6qA6qS0rKDqgOrDZVs3phSSTdIGpoWdtK1b 9 | AqqJopRWawLGaNYmqa4EREqi2LDgSVlVIgtgWqdtDPkLQKS4TaW2C0CuNpFa6Wag28Z1G/ehtJEx0QS2 10 | bes2kekANlIqtW08AjZy27ZtaATEjRw1ih9qWZWADmDbNmqd9gSAo0aKm2pFgBPJUZvWLYDjyG3dBpJV 11 | 2QysALZx27iRYAIkbiO3jV4EuG3cuG1pAEZy3NZxYXmXmVInQCS5jRunZIAbR47TGEVg5DhuHIdDgNzI 12 | kdsoppddKWECSG4cN47lArZx3LhxPgTGkeI4bkYE1G4buXEjipfNUANg3LZxE+dEYNu4cRw5BWDjtpHk 13 | Nkdg27htHCeeWBkNdQC2jRu3jWkEuI0bx21YAMZt48htcQRIauTGkaJp2dEgA2Abx3HcpmSAGzmO4yYm 14 | YBvHjRvZAmAjx5HbNqZ2lRBQArZt3DhyQQRGbuS2cbkAuI3byHEuAkZuG0dypCmVzeIDYBrJbSPHJIDc 15 | OG7ktgZgHMdt3BYDgNs2kuRYnlmmdVcERnLkRpZ0ArZxJMeNPAQ2clw3jmQGNm6kNnLjqV8eswWA3DZy 16 | 5DZkYCTJcdt2RoDbSHLbaGSA5Mht5FaaWOZVbgbIjSS3cTEESG4TyXFjBLaRFMexYQRIjeNGbqWpn9pU 17 | JIAkt43l1gVg3DhuG2kkgOQ4jhwZJWDjOG4cS6raYU0xArhtHbmNzQJIbuNIcmYANo4kt43uAkaO5MZx 18 | Z3nbWmNlgCM5jiM3BmAbR5IbeUuAI7lx5MYNYCTHcSNJnhlicfQERo7cNnJIADaO5EaSZgC2kSM5cksA 19 | NnLbOHLfyRseR0eA47iR5BYvYFS5reIYI4DjJnbSSkOAJLexHOelGVpWxgbGbuS2bWQGSIokuZFkArhx 20 | pEaOWQLIkaQ6jt2JGR4HB2Abx24bhWyg3EiO5GhrgCPJTR23AoDjOnIb+ZkX4pFIBDaSIzeObwbIcSPJ 21 | bbACyHHbRpLiBKiR3DaOHtobIqUkYOO6jSOpRYAct5Ejp2aAI7lx3GpHYCS1bRznoRnekToCuJEdOZG7 22 | Aka22zqO1wA6buM4TkwCym4sx5FeqRueRwdgHLd1W4dlYCM3ktxGDWAkKY7cuE5gHLltGwme+CFSRQK4 23 | kRy3cTwENo6kSHLVBMhxI8dt9gRWkiNJciKp3xkXT4Ajx20kxy1g48hxHIlEgBvJjdw4LIAcN27U+p36 24 | 4VF2BrSRJDdySgRGjiM5bnEANnJcN45wBEaO40iOXXqZGdlKgNw2styoDmDktnEbK2yAVKet3JorYNTW 25 | ThXHqR2OcboAOnYcOZHnAkhSYsmNugJIsV3YUq0ESHLkuI2gmV0Z10WA20iOG+dNYBu7beNYTKAjt3Hk 26 | qGOAk0aSI+Wp+2FRVgRGbitHkSsCOI7jSGrzAkiO5DZuZwLYcVu5kR+K2dkGLGDjym3dJmOA5bZy4/hj 27 | YCS5kRvpLWAcOW7jBqI6nlEtBsiNI8dxYwRIch1FjjMEtpETWW61BMhx40Zu4JnbHbVLYOQ4cuMWR4Dk 28 | tpUcWQWA27iR2/hsgCO3ceQmlvhlMW4ENpLcRq5oBDhu7MhxuARIbhtHcuECtpEct5Eimt1d5yJgG8lx 29 | 5EYmgCRHbhw5RmDkSI4k9yOAI0dy3Aii+d1R7gTGjhq7jSsCSJIcx3JQAkRy3EiOvgLIkRzJkWG5210l 30 | Z2AbOXIcNwSAHDmu5AYmgOTGbeRoJYDcNo7cJppY2nFuBDhyIzdycAI4UhvLjTAAtpXkuHHGAEaO5Lhx 31 | 4ZkdFtcmYCO3jeSGB2AkOZLcGEdgJTeOJFcuYCS5jRxJktqdcToCtpEbR3I1AEZyG8uJNwK2kRy3jVAA 32 | xo0ju43iiaEeRUeA5LaRI8kFYBxHjtw4D2Dkxo3kiCJgI7lx4xieGeJ1XAK4kdtIbs0CRnIjyW09AkiO 33 | 3DZy5ADIjePIceGJWya1RWAcyY3kdiRg3MhxI6ckgOO2sRupSoAct3EcR542olHGAkay2zaSMwC2cSS5 34 | jVgAyI0jR263BsiNHMlR4rkbF+UkgCNHjtvYI4Abx3HkVi5g20hu5PZGYBtJjqNmlhgedWEESG7jRm5C 35 | AkaS40huYgI2ciNJbiwCOJIjOW5hq1nidk+AK0eR3CYrgOVGchx5RWAjN5IkxyVg20ZuGzWuFBqSdAQ2 36 | khQ3ksEExo3jSlGqADhvHDluxwbUVTqN1KEq2W3XMmHjaCll6VJBRlxvY/QqwfKmZlS3joDVQzph26UN 37 | 2XbXCjTR5OByqgQek2hqWVYGyqyZKM/ZELZ24qhkTCipb5V6wty43wQki2QbWZYM6NLEFFlpP/Qqg/o4 38 | duCqlFL+UjM7PoRbRZI0N8a12EhW6SvOqSVGXTU1dK4at41KKadvY9OCkfiN29iWQRYdY/vz1oJoxVYj 39 | hxNC3obdoayYcrY28CTSV5k0njgvpm0jr2y5GsaTzThxOyNMkCOrjcwXY28374ES1Z2axE7BEl8G1I3P 40 | gV6kdeX6c0K8MnJJSW2OLXcuJ1xtK0HuvRq+Ltu4de42xpH8Jm2sFPhxm0i60DbhuofNYRsVctwujoEd 41 | 192SdMth20oSKs2zwYjGkWv1dNJ1k7cUtNU2kLX1GriWGrk3chVC0lM5rrgNODqixLzRFxVvexMh3Ub1 42 | HwT1Ycv8SiSNU8FJxpFqh1OB60QuEy2F0Kl+8Bw4kt3WffEUMIStOW45Faa3WhSWOBPaadxYF5QnV669 43 | cyEzybHjSvdgT6bkEzu34aRIzSy3CyHj9JMRaWmP5bY8E7oq6TqV2BTS6t0sgE4ZNpI/uXGtFm5hEZm2 44 | ZPeQYIvMoZJa0sPSTUEn/Izlt0shI4VV5CqvoBTRlZaCmi9N0cAOvLbstM3zEMytgcdt3BIqklyFiXcX 45 | BpLkSHGtKtPYzOtAkyhzswUOgR1LbotGi2C9trFlOstA3bSR4zy3ExaJ0AqKTqtEqa4I2pStyG7iDEB6 46 | LwWWOQtImdq2WnXrGFV4v0BDyE/a5syA46VtK3uuYJPC0TxDz4CUzSnjBnuqDa60DOZSC8eOWQIorjPH 47 | iVICSKvdRpJ2BkaO67hWbuhY4LgGYOS2rtwWJ6AkpVEeqQyAo7bOXHYtYCO7cRoHk+8Rjt0AKJYj13VZ 48 | BiiO7UZu1ALGkd02cjUERokjZ1Lqa+nYNk9gW8ltJLcNoCS3aSX9voIjSdCmRtNiYnE3ktbKdtZtvB7e 49 | mJjI9zYlmG9jI6/oabCSIsWxqkrSZtVHbqu8qVVskwVk1q0TNa9jI0+GKW+PRNu4qVzeXYjeSE6FzLJ1 50 | VaqqiHoGItuNMyT2aWekw2IuUo/UJOtxOsZ5FscOmOfe6Z21JptL1mYwtEcZSfbK9sukDL1pZ38zpMhi 51 | rSxxedCd+ull2B9pNLY2bQTZlCVRbFnctRL6rms9Eu5dwYEY6RbpzQ7k9BrQJddug5hdK9vcLoXb0HLz 52 | Rg4CkjJqRT1+kdnRylbETiaZgLw2/nZONrrMPjRs/NbRMU004oUJU2UI1Rm7AqMRPxbeuoSi3AS2XyTH 53 | YWxNQfHTDcKONn1ztJ5REc3JJEiVpNBSSCHWdG0noske1nkh62JkGbQ6r6isatgUZVvLYdVgsxoLbaFh 54 | KYnmXs5AsvLMZaPOge2kwlTLopORqLUSplXlmkzOEuwUY8s0TgtI0XPC3c0KpmKcW1TqOluNzDyhIhmH 55 | lGPrgNBYmlPTrIHtirVkaK6AbOhxnEdpb7KW0AzKZdzoVuoKyMGp+SrILbiRdAmRsxhE7iYib40436kH 56 | 7IFUNHrrz+0BKLuJjVgz4aNDKeWKDmIbVz4Z13TXoZbfFIq7CDu32hyosBVYeeUS2mUxyZW7CMJuZETW 57 | iojdcqmGQKyYlesmL6C/q0X8tkygXTObCpkmoN2qdd6MlHyycmYAiqzdKoq3BuhoJMluXARmTiJHlWcE 58 | SJIcOYlpdt5xiV1hrbkAq03jgCnZcdwW5YCluLLyMi6B1NGKlHqma6mRNB+6VeP48bFLsHMUuZHMJmRB 59 | nM140RrWVSxGvehp4UUO60Fh9JbR1FSBJsWpnrFMIc4Jk0w3K2KlunQ8oZXPEb6vKhpw9KZuzB5GQV3L 60 | 1/N1No0jN3+sWAKqLTtkkkhbqlcLRPaXZOU21gOpLZHEGm5jm/h54QB2ZBXJjQeLkTbZuu9ihlUuF7K1 61 | VHoBKUXP3XYuaGo1Mrxe6rUdNDrYOdvk6fVlXP1oWmWLw3eUeubMdQNj2UVXjqrEiLcSImuRlF2auUy+ 62 | Tcjq1lo7DlUmmyq5UF7R2ySJWTHYfqFAq5Y6Dy5Vq4JId7NFlhVCXKtHu1uPI5sYvv1k1UKjtD5hka1z 63 | 0VrvLNh4itxf1CX85EtFEuxCQHNv0KlSU6iRa+lgFjqZaRNuBDxVZ+YEzSJZXXOF+qxiq0FqtNW8g8Im 64 | d11KqWzlEkwZ0ovjxIXNNGSSXEGuyhREV6WLBcskuLoWRlmP+liiss5Bx+wnzIq2QSUvleKkTOESNU5t 65 | mU6BHBbYNTOdUeUq8AqaUEXMzswSuimTL07rDrZX4uCtdhPYzWQXLRyJHybXrkHfrlFiWyuCifaXiEhr 66 | w2LBzV3t1gLMvG2bPY5Tlo3KIsx1gGhy9yY2tWJG2OEcJoVyZ8GvEjaL5GJ6pEmd3fisIpzUc9W2qmGt 67 | N4Kz9W1BaMuWQVVOYU5DetVUmjfSiWQX5pzbJs64HChyFstB0xRKOy6wksYeRo5sx6Qlel2hmE7hpDLL 68 | 5+RKQSJXqiQUjaGdpJH61GphG09Qq3qWVxpy2xJaUTJnxa4I8LpTkrq1DrqNroZ46ArqWknrhul5pZlI 69 | 1iCdyKmsNK5go4qNLxuuQJo6hjQ7lIATo43bmqI11om0BGhxzrR90wwYkm0nceAMWk5kx2a6DMhRHktt 70 | aVnh5ZhqQFw4st2XDSDiSF6RSw+gl8J9XRYOgNu5jetGovfZaWwExqrrRm3oBEaS48hpdQZEj9RGTjoE 71 | xo3cNpHjeR0etW5go7px63ZDYBtJbiNZRmDlRGpsSUNg3MZtHEmetR1STQJYkuNIjnQCOJKcVnLbADiO 72 | HLmRxwDGcd3GbWRJJR5XJmAiuZHbqANg5LRuJFklYNw4biQnRGAUyXHdhqp3nm3uAMiNGzmO2gLGld3G 73 | cVYGyK2cWHLNArS100p2Jdmi5qpKYCPFcZzYFWBbTDJk5Sqg4+Z06pZVgZwRllX6jS9mdq0SOMndJm7N 74 | DDqaVapucQz6cRrZjbsCyG1lxlVgGR8iCWfApcZxK6VGgOMmkuMYLYBbu3Hk+C1g40iKGweiFhp2KgJK 75 | bR3JbUAERpIby61KAMZx5ERu3QI4imO3jWBaF163AoAkR5IUR2aA2ziOnHoLYNw6bisZQ2DkNnJjF5KX 76 | nVVnBkSS47hxUABIbmIrbjMANo7cSJJBALaRHLeNI5odGoVHYBs3jhxJToAbyW1TiQRg3EhyJPUEgNtI 77 | ciM3npnZNUQGSG4kx43jAkhuK7eRswK4ad24jVUASHIbyXHdSdPedieA3EZyHGkmYBvHcWxYDmDlQnYa 78 | iUSA47hxXBea1iV1YwI4biS3kXQCuJHcOHbgADZuJcdxugI4chxHjuF53xUHTWAcN3IbN0dgI8dNY+VC 79 | gOQ4ltvmI4AbyY3kFqbYpW1wAMhtHLeRYgS4cdxIbk0AOJLjRnJUBEhu5DaS5ogfXsVGYCRXbiOJamBb 80 | x43jZmSA5EaSGycvgNxIbiM3ktklcngAxo3jtpFOArht5chtPwLIbRypkdgGNm4sR26kid1ZQyNgI7eV 81 | G4kkgNtIciT5RGAbR5La+AKA3LiSHDeeuKFxOQA4khu5bVkAOJLbNpJEBjZy20hydALIcSO5jaJ5Hxr1 82 | LmAcuY3kFA+AJLltJdcDYBu5kRzHQ2Djxm0kiZbXnTFjBESSG7dxLgTIkeTGjU4AVnIbSXLKALhtJLeN 83 | IGlbWidnYBs5kiOnJGAcSU4jh2eA5EaOG2dHgBTHkeNGktilVWsGRm4kR25RBDhu40hySAA2dty4cUAA 84 | xnEjOXLkqRla1U1gJEmS3HpEYBs5cuP2DWAjx40jmUWA4zhy5DaO16k1cwQ4aiQ5cjsANpIkx5FVBkZy 85 | 3FZu6wC2bttIcmOZHxbFA2AjyW3lhgaA3Nht3EYkgNzGkRupJmAbuZHdVpb43XFRAkhuWzlyTgBGbiM5 86 | ckIAxpEjN5LxAsZtI8ltoondXcUCgCQ3cuSGRGAcSVIjZ0tg3Ehu45gjgOO2lRw5mrihVVYEuHEjx5FT 87 | AsZxG0mSPQC2ceQ4cmIEOI7jSHLjWRleFSVg5FZuIylPYCS3kdzWBWDkuI0k10Zg5LiN3DamN9pQZQRI 88 | chw3cmYCNJLcRpIpALaRHEmSKABIkiRJkgA=audio/wav00019700101T000000ZEvernote 20180719 19:38:29.waviVBORw0KGgoAAAANSUhEUgAAAuwAAACyCAYAAAAZO5pSAAAMJ2lDQ1BJQ0MgUHJvZmlsZQAASImVlwdY 89 | U8kWgOeWJCQktEAEpITeROlVeo0gIFWwEZJAQgkhIajYkUUF1oKKBSu6KmJbCyCLDbuyCDbsD0RQlHWx 90 | YEPlTRJAV7/33vdOvrn3z5kzZ845d+58dwBQjWKLRJmoGgBZwlxxdIg/c3JiEpP0GCDwpwHGASKbIxH5 91 | RUWFAyjD93/Ku9vQFsoNW5mvn/v/q6hzeRIOAEgU5BSuhJMF+SgAuAtHJM4FgNAL9SYzc0WQiTBKoCmG 92 | AUI2lXGagt1knKLgcLlNbHQA5GQAlKhstjgNABVZXMw8Thr0o1IK2U7IFQghN0D25vDZXMifIY/JysqG 93 | rGoJ2TLlOz9p//CZMuKTzU4bYUUuclEKFEhEmezZ/2c5/rdkZUqH5zCBjcoXh0bLcpbVLSM7TMZUyJeE 94 | KRGRkDUg3xRw5fYy7uZLQ+OG7D9wJAGwZoABAErlsgPDIOtBNhZmRoQP6b1TBcEsyLD2aKwglxWrGIty 95 | xdnRQ/7RWTxJUMwws8XyuWQ2xdKMOL8hn1v4PNawz/p8fmyCIk60JU8QHwFZBfIDSUZM2JDN83x+QMSw 96 | jVgaLYsZPnMMpIqDoxU2mGmWZDgvzIMvYEUMcXguPzZUMRabzmHLY9OGnM6TTA4fjpPLCwxS5IUV8IRx 97 | Q/FjZaJc/+gh+52izKghe6yBlxki0xtDbpbkxQyP7cuFi02RLw5EuVGxithwzXT2hChFDLg1CAcBIBAw 98 | gRS2FJAN0oGgube2F/5T9AQDNhCDNMADtkOa4REJ8h4hvMaAfPAXJB6QjIzzl/fyQB7UfxnRKq62IFXe 99 | mycfkQG6IWeBMJAJ/0vlo4Qjs8WDJ1Aj+Gl2Dow1EzZZ3086puqwjhhEDCSGEoOJVrgu7o174uHw6gub 100 | A+6Guw/H9c2e0E1oJTwm3CK0E+7OEBSIf4icCSaCdhhj8FB2Kd9nh5tDr864P+4F/UPfOAPXBba4E5zJ 101 | D/eBcztD7fexSkcy/lbLIV9kOzJKHkX2JVv+GIGKtYrziBdZpb6vhSKulJFqBYz0/JhHwHf148J72I+W 102 | 2FLsCHYRO4NdxhqwWsDETmF1WBN2QsYja+OJfG0MzxYtjycD+hH8NB97aE5Z1SR21XY9dp+H+kAub1au 103 | 7GUJyBbNFgvS+LlMP7hb85gsIWfsGKaDnT3cRWV7v2JrecOQ7+kI48o3Xc5pANyLoTLtm44N96Dj3QDQ 104 | 333TmbyGy34lACdaOFJxnkKHyy4EQAGq8E3RAQZw77KEGTkAF+AJfEEQmAAiQSxIBNNhnflwnYrBTDAX 105 | LAJFoASsBGvBRrAV7AB7wH5wGNSCBnAGXABXQQu4Be7DtdIFXoA+8A4MIAhCQmgIHdFBDBEzxAZxQNwQ 106 | byQICUeikUQkGUlDhIgUmYssRkqQMmQjsh2pQn5HjiNnkMtIK3IX6UB6kNfIJxRDqagmqo+ao+NQN9QP 107 | DUNj0WloGpqD5qOF6HJ0PVqJ7kNr0DPoVfQW2o6+QPsxgCljDMwIs8XcsAAsEkvCUjExNh8rxsqxSuwA 108 | Vg+f9A2sHevFPuJEnI4zcVu4XkPxOJyD5+Dz8VJ8I74Hr8HP4TfwDrwP/0qgEfQINgQPAoswmZBGmEko 109 | IpQTdhGOEc7Dd6eL8I5IJDKIFkRX+O4lEtOJc4ilxM3Eg8TTxFZiJ7GfRCLpkGxIXqRIEpuUSyoibSDt 110 | I50iXSd1kT4oKSsZKjkoBSslKQmVCpTKlfYqnVS6rvRUaYCsRjYje5AjyVzybPIK8k5yPfkauYs8QFGn 111 | WFC8KLGUdMoiynrKAcp5ygPKG2VlZWNld+VJygLlhcrrlQ8pX1LuUP5I1aBaUwOoU6lS6nLqbupp6l3q 112 | GxqNZk7zpSXRcmnLaVW0s7RHtA8qdJWxKiwVrsoClQqVGpXrKi9Vyapmqn6q01XzVctVj6heU+1VI6uZ 113 | qwWosdXmq1WoHVdrU+tXp6vbq0eqZ6mXqu9Vv6z+TIOkYa4RpMHVKNTYoXFWo5OO0U3oAXQOfTF9J/08 114 | vUuTqGmhydJM1yzR3K/ZrNmnpaHlpBWvNUurQuuEVjsDY5gzWIxMxgrGYcZtxqdR+qP8RvFGLRt1YNT1 115 | Ue+1R2v7avO0i7UPat/S/qTD1AnSydBZpVOr81AX17XWnaQ7U3eL7nnd3tGaoz1Hc0YXjz48+p4eqmet 116 | F603R2+HXpNev76Bfoi+SH+D/ln9XgOGga9BusEag5MGPYZ0Q29DgeEaw1OGz5laTD9mJnM98xyzz0jP 117 | KNRIarTdqNlowNjCOM64wPig8UMTiombSarJGpNGkz5TQ9OJpnNNq03vmZHN3Mz4ZuvMLpq9N7cwTzBf 118 | Yl5r/sxC24JlkW9RbfHAkmbpY5ljWWl504po5WaVYbXZqsUatXa25ltXWF+zQW1cbAQ2m21axxDGuI8R 119 | jqkc02ZLtfWzzbOttu0YyxgbPrZgbO3Yl+NMxyWNWzXu4rivds52mXY77e7ba9hPsC+wr7d/7WDtwHGo 120 | cLjpSHMMdlzgWOf4ysnGiee0xemOM915ovMS50bnLy6uLmKXAy49rqauya6bXNvcNN2i3ErdLrkT3P3d 121 | F7g3uH/0cPHI9Tjs8benrWeG517PZ+MtxvPG7xzf6WXsxfba7tXuzfRO9t7m3e5j5MP2qfR57Gviy/Xd 122 | 5fvUz8ov3W+f30t/O3+x/zH/9wEeAfMCTgdigSGBxYHNQRpBcUEbgx4FGwenBVcH94U4h8wJOR1KCA0L 123 | XRXaxtJncVhVrL4JrhPmTTgXRg2LCdsY9jjcOlwcXj8RnThh4uqJDyLMIoQRtZEgkhW5OvJhlEVUTtQf 124 | k4iToiZVTOqOto+eG30xhh4zI2ZvzLtY/9gVsffjLOOkcY3xqvFT46vi3ycEJpQltE8eN3ne5KuJuomC 125 | xLokUlJ80q6k/ilBU9ZO6ZrqPLVo6u1pFtNmTbs8XXd65vQTM1RnsGccSSYkJyTvTf7MjmRXsvtTWCmb 126 | Uvo4AZx1nBdcX+4abg/Pi1fGe5rqlVqW+izNK211Wg/fh1/O7xUECDYKXqWHpm9Nf58RmbE7YzAzIfNg 127 | llJWctZxoYYwQ3gu2yB7VnaryEZUJGrP8chZm9MnDhPvkiCSaZK6XE34kd0ktZT+Iu3I886ryPswM37m 128 | kVnqs4SzmmZbz142+2l+cP5vc/A5nDmNc43mLprbMc9v3vb5yPyU+Y0LTBYULuhaGLJwzyLKooxFfxbY 129 | FZQVvF2csLi+UL9wYWHnLyG/VBepFImL2pZ4Ltm6FF8qWNq8zHHZhmVfi7nFV0rsSspLPpdySq/8av/r 130 | +l8Hl6cub17hsmLLSuJK4crbq3xW7SlTL8sv61w9cXXNGuaa4jVv185Ye7ncqXzrOso66br29eHr6zaY 131 | bli54fNG/sZbFf4VBzfpbVq26f1m7ubrW3y3HNiqv7Vk66dtgm13todsr6k0ryzfQdyRt6N7Z/zOi7+5 132 | /Va1S3dXya4vu4W72/dE7zlX5VpVtVdv74pqtFpa3bNv6r6W/YH76w7YHth+kHGw5BA4JD30/Pfk328f 133 | DjvceMTtyIGjZkc3HaMfK65BambX9NXya9vrEutaj0843ljvWX/sj7F/7G4waqg4oXVixUnKycKTg6fy 134 | T/WfFp3uPZN2prNxRuP9s5PP3jw36Vzz+bDzly4EXzh70e/iqUtelxoue1w+fsXtSu1Vl6s1Tc5Nx/50 135 | /vNYs0tzzTXXa3Ut7i31reNbT173uX7mRuCNCzdZN6/eirjVejvu9p22qW3td7h3nt3NvPvqXt69gfsL 136 | HxAeFD9Ue1j+SO9R5b+s/nWw3aX9REdgR9PjmMf3OzmdL55InnzuKuymdZc/NXxa9czhWUNPcE/L8ynP 137 | u16IXgz0Fv2l/teml5Yvj/7t+3dT3+S+rlfiV4OvS9/ovNn91ultY39U/6N3We8G3hd/0Pmw56Pbx4uf 138 | Ej49HZj5mfR5/RerL/Vfw74+GMwaHBSxxWz5pwAGG5qaCsDr3QDQEuG3QwsAlCmKs5lcEMV5Uk7gP7Hi 139 | /CYXFwB2+wIQtxCAcPiNsgU2M8hUeJd9gsf6AtTRcaQNiSTV0UHhiwpPLIQPg4Nv9AEg1QPwRTw4OLB5 140 | cPDLThjsXQBO5yjOhDKRnUG36cioqU0N/Cj/BlX4cCQ34sPtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB 141 | nWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRh 142 | LyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93 143 | d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9u 144 | IHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4 145 | aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43NDg8L2V4aWY6UGl4ZWxYRGlt 146 | ZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTc4PC9leGlmOlBpeGVsWURpbWVu 147 | c2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkyX 148 | E1EAAAAcaURPVAAAAAIAAAAAAAAAWQAAACgAAABZAAAAWQAAUR6i8cSgAABAAElEQVR4Aex9DVxUVfr/ 149 | N1HQVclQNMVV0EQhUzBFfClTFJOkFV8w09aXDK0ftK3otmRF6Cq5Sdsmf1/IVHpV8q1QfEvLMhWzFctE 150 | 8Q1JNAJNAcMZxf7PvXfuvefO3IFhYAawc/rE3Hten/M9Z8bvec5znnNXx44dfwcPTkNg+PDhYltZWVlO 151 | a5M3xBHgCHAEOAIcAY4AR8ARCAQEBIjV7tixwxHV8zpNCNzFCbtz5wIn7M7Fm7fGEeAIcAQ4AhwBjoDj 152 | EOCE3XHYsjVzws6i4YRnTtidADJvgiPAEeAIcAQ4AhwBpyDACbtTYAYn7M7BWWmFE3YFCv7AEeAIcAQ4 153 | AhwBjkA9R4ATducMICfszsFZaYUTdgUK/sAR4AhwBDgCHAGOQD1HgBN25wwgJ+zOwVlphRN2BQr+wBHg 154 | CHAEOAIcAY5APUeAE3bnDCAn7M7BWWmFE3YFCv7AEeAIcAQ4AhwBjkA9R4ATducMICfszsFZaYUTdgUK 155 | /sAR4AhwBDgCHAGOQD1HgBN25wwgJ+zOwVlpRSbsSgR/4AhwBDgCHAGOAEeAI1DPEeB+2B07gJywOxZf 156 | i9o5YbeAhEdwBDgCHAGOAEeAI1DPEeCE3bEDyAm7Y/G1qL1NmzYWcRVFFBQUVJTM0zgCHAGOAEeAI8AR 157 | 4AhwBO5wBDhhd/IAc8LuZMB5c5UiEDh2Gh5q2ww/n/0aaVuPVJqfZ+AICAh4BERi0kP3wlh6GstXZ3BQ 158 | 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image/png7481780 860 | 861 | requireI lodashI ? ?I IodashI ledashI ladashI todashI tadashI leashloda shlnda shliloiiiomattermatter=matterequire'gray-matter'gray-mattermatter Imatter ? 1matter ? Imatter,matter'matter]matte rImatter{html[HTML(HTML{html:html:html,html.-,._html.è html.è html,beautifyHTML}beautifyHlML}beautifyHTMLbeaut ? fyHlML}beaut ifyHTML}beatifyHTML}beaut HyHTML}beautHyHTML}beautifyHML}require'js-beautify'beautify'beautify,beautify ?beautify.beautifybeautify!iiLiiI.turndownrequire'turndown'turndown1 turn down,l turn down,1 turn down.l turn down.. turn down,1 turn dawn,l turn dawn,MatterMatteHatterMatter=require'./matter'./matter'/matter'l matter,J matter,f matter,1 matter,. latter,l matter!iilixnconstcanstconcanstcastcost]]>19700101T000000ZunknownScreen Shot 2018-07-19 at 19.38.48.png
862 |
863 | -------------------------------------------------------------------------------- /src/_turndown.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function extend (destination) { 4 | for (var i = 1; i < arguments.length; i++) { 5 | var source = arguments[i]; 6 | for (var key in source) { 7 | if (source.hasOwnProperty(key)) destination[key] = source[key]; 8 | } 9 | } 10 | return destination 11 | } 12 | 13 | function repeat (character, count) { 14 | return Array(count + 1).join(character) 15 | } 16 | 17 | var blockElements = [ 18 | 'address', 'article', 'aside', 'audio', 'blockquote', 'body', 'canvas', 19 | 'center', 'dd', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 20 | 'figure', 'footer', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 21 | 'header', 'hgroup', 'hr', 'html', 'isindex', 'li', 'main', 'menu', 'nav', 22 | 'noframes', 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 23 | 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul' 24 | ]; 25 | 26 | function isBlock (node) { 27 | return blockElements.indexOf(node.nodeName.toLowerCase()) !== -1 28 | } 29 | 30 | var voidElements = [ 31 | 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 32 | 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr' 33 | ]; 34 | 35 | function isVoid (node) { 36 | return voidElements.indexOf(node.nodeName.toLowerCase()) !== -1 37 | } 38 | 39 | function hasVoid (node) { 40 | return ( 41 | node.getElementsByTagName && 42 | voidElements.some(function (name) { 43 | return node.getElementsByTagName(name).length 44 | }) 45 | ) 46 | } 47 | 48 | var rules = {}; 49 | 50 | rules.paragraph = { 51 | filter: 'p', 52 | 53 | replacement: function (content) { 54 | return '\n\n' + content + '\n\n' 55 | } 56 | }; 57 | 58 | rules.lineBreak = { 59 | filter: 'br', 60 | 61 | replacement: function (content, node, options) { 62 | return options.br + '\n' 63 | } 64 | }; 65 | 66 | rules.heading = { 67 | filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'], 68 | 69 | replacement: function (content, node, options) { 70 | var hLevel = Number(node.nodeName.charAt(1)); 71 | 72 | if (options.headingStyle === 'setext' && hLevel < 3) { 73 | var underline = repeat((hLevel === 1 ? '=' : '-'), content.length); 74 | return ( 75 | '\n\n' + content + '\n' + underline + '\n\n' 76 | ) 77 | } else { 78 | return '\n\n' + repeat('#', hLevel) + ' ' + content + '\n\n' 79 | } 80 | } 81 | }; 82 | 83 | rules.blockquote = { 84 | filter: 'blockquote', 85 | 86 | replacement: function (content) { 87 | content = content.replace(/^\n+|\n+$/g, ''); 88 | content = content.replace(/^/gm, '> '); 89 | return '\n\n' + content + '\n\n' 90 | } 91 | }; 92 | 93 | rules.list = { 94 | filter: ['ul', 'ol'], 95 | 96 | replacement: function (content, node) { 97 | var parent = node.parentNode; 98 | var siblingElements = parent.children; 99 | var lastSiblingElement = siblingElements[siblingElements.length - 1]; 100 | 101 | if (parent.nodeName === 'LI' && node === lastSiblingElement) { 102 | return '\n' + content 103 | } else { 104 | return '\n\n' + content + '\n\n' 105 | } 106 | } 107 | }; 108 | 109 | rules.listItem = { 110 | filter: 'li', 111 | 112 | replacement: function (content, node, options) { 113 | content = content 114 | .replace(/^\n+/, '') // remove leading newlines 115 | .replace(/\n+$/, '\n') // replace trailing newlines with just a single one 116 | .replace(/\n/gm, '\n '); // indent 117 | var prefix = options.bulletListMarker + ' '; 118 | var parent = node.parentNode; 119 | if (parent.nodeName === 'OL') { 120 | var start = parent.getAttribute('start'); 121 | var index = Array.prototype.indexOf.call(parent.children, node); 122 | prefix = (start ? Number(start) + index : index + 1) + '. '; 123 | } 124 | return ( 125 | prefix + content + (node.nextSibling && !/\n$/.test(content) ? '\n' : '') 126 | ) 127 | } 128 | }; 129 | 130 | rules.indentedCodeBlock = { 131 | filter: function (node, options) { 132 | return ( 133 | options.codeBlockStyle === 'indented' && 134 | node.nodeName === 'PRE' && 135 | node.firstChild && 136 | node.firstChild.nodeName === 'CODE' 137 | ) 138 | }, 139 | 140 | replacement: function (content, node, options) { 141 | return ( 142 | '\n\n ' + 143 | node.firstChild.textContent.replace(/\n/g, '\n ') + 144 | '\n\n' 145 | ) 146 | } 147 | }; 148 | 149 | rules.fencedCodeBlock = { 150 | filter: function (node, options) { 151 | return ( 152 | options.codeBlockStyle === 'fenced' && 153 | node.nodeName === 'PRE' && 154 | node.firstChild && 155 | node.firstChild.nodeName === 'CODE' 156 | ) 157 | }, 158 | 159 | replacement: function (content, node, options) { 160 | var className = node.firstChild.getAttribute('class') || ''; 161 | var language = (className.match(/language-(\S+)/) || [null, ''])[1]; 162 | 163 | return ( 164 | '\n\n' + options.fence + language + '\n' + 165 | node.firstChild.textContent + 166 | '\n' + options.fence + '\n\n' 167 | ) 168 | } 169 | }; 170 | 171 | rules.horizontalRule = { 172 | filter: 'hr', 173 | 174 | replacement: function (content, node, options) { 175 | return '\n\n' + options.hr + '\n\n' 176 | } 177 | }; 178 | 179 | rules.inlineLink = { 180 | filter: function (node, options) { 181 | return ( 182 | options.linkStyle === 'inlined' && 183 | node.nodeName === 'A' && 184 | node.getAttribute('href') 185 | ) 186 | }, 187 | 188 | replacement: function (content, node) { 189 | var href = node.getAttribute('href'); 190 | var title = node.getAttribute('title') ? ' "' + node.getAttribute('title') + '"' : ''; 191 | return '[' + content + '](' + href + title + ')' 192 | } 193 | }; 194 | 195 | rules.referenceLink = { 196 | filter: function (node, options) { 197 | return ( 198 | options.linkStyle === 'referenced' && 199 | node.nodeName === 'A' && 200 | node.getAttribute('href') 201 | ) 202 | }, 203 | 204 | replacement: function (content, node, options) { 205 | var href = node.getAttribute('href'); 206 | var title = node.title ? ' "' + node.title + '"' : ''; 207 | var replacement; 208 | var reference; 209 | 210 | switch (options.linkReferenceStyle) { 211 | case 'collapsed': 212 | replacement = '[' + content + '][]'; 213 | reference = '[' + content + ']: ' + href + title; 214 | break 215 | case 'shortcut': 216 | replacement = '[' + content + ']'; 217 | reference = '[' + content + ']: ' + href + title; 218 | break 219 | default: 220 | var id = this.references.length + 1; 221 | replacement = '[' + content + '][' + id + ']'; 222 | reference = '[' + id + ']: ' + href + title; 223 | } 224 | 225 | this.references.push(reference); 226 | return replacement 227 | }, 228 | 229 | references: [], 230 | 231 | append: function (options) { 232 | var references = ''; 233 | if (this.references.length) { 234 | references = '\n\n' + this.references.join('\n') + '\n\n'; 235 | this.references = []; // Reset references 236 | } 237 | return references 238 | } 239 | }; 240 | 241 | rules.emphasis = { 242 | filter: ['em', 'i'], 243 | 244 | replacement: function (content, node, options) { 245 | if (!content.trim()) return '' 246 | return options.emDelimiter + content + options.emDelimiter 247 | } 248 | }; 249 | 250 | rules.strong = { 251 | filter: ['strong', 'b'], 252 | 253 | replacement: function (content, node, options) { 254 | if (!content.trim()) return '' 255 | return options.strongDelimiter + content + options.strongDelimiter 256 | } 257 | }; 258 | 259 | rules.code = { 260 | filter: function (node) { 261 | var hasSiblings = node.previousSibling || node.nextSibling; 262 | var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings; 263 | 264 | return node.nodeName === 'CODE' && !isCodeBlock 265 | }, 266 | 267 | replacement: function (content) { 268 | if (!content.trim()) return '' 269 | 270 | var delimiter = '`'; 271 | var leadingSpace = ''; 272 | var trailingSpace = ''; 273 | var matches = content.match(/`+/gm); 274 | if (matches) { 275 | if (/^`/.test(content)) leadingSpace = ' '; 276 | if (/`$/.test(content)) trailingSpace = ' '; 277 | while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`'; 278 | } 279 | 280 | return delimiter + leadingSpace + content + trailingSpace + delimiter 281 | } 282 | }; 283 | 284 | rules.image = { 285 | filter: 'img', 286 | 287 | replacement: function (content, node) { 288 | var alt = node.getAttribute('alt') || ''; 289 | var src = node.getAttribute('src') || ''; 290 | var title = node.getAttribute('title') || ''; 291 | var titlePart = title ? ' "' + title + '"' : ''; 292 | return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '' 293 | } 294 | }; 295 | 296 | /** 297 | * Manages a collection of rules used to convert HTML to Markdown 298 | */ 299 | 300 | function Rules (options) { 301 | this.options = options; 302 | this._keep = []; 303 | this._remove = []; 304 | 305 | this.blankRule = { 306 | replacement: options.blankReplacement 307 | }; 308 | 309 | this.keepReplacement = options.keepReplacement; 310 | 311 | this.defaultRule = { 312 | replacement: options.defaultReplacement 313 | }; 314 | 315 | this.array = []; 316 | for (var key in options.rules) this.array.push(options.rules[key]); 317 | } 318 | 319 | Rules.prototype = { 320 | add: function (key, rule) { 321 | this.array.unshift(rule); 322 | }, 323 | 324 | keep: function (filter) { 325 | this._keep.unshift({ 326 | filter: filter, 327 | replacement: this.keepReplacement 328 | }); 329 | }, 330 | 331 | remove: function (filter) { 332 | this._remove.unshift({ 333 | filter: filter, 334 | replacement: function () { 335 | return '' 336 | } 337 | }); 338 | }, 339 | 340 | forNode: function (node) { 341 | if (node.isBlank) return this.blankRule 342 | var rule; 343 | 344 | if ((rule = findRule(this.array, node, this.options))) return rule 345 | if ((rule = findRule(this._keep, node, this.options))) return rule 346 | if ((rule = findRule(this._remove, node, this.options))) return rule 347 | 348 | return this.defaultRule 349 | }, 350 | 351 | forEach: function (fn) { 352 | for (var i = 0; i < this.array.length; i++) fn(this.array[i], i); 353 | } 354 | }; 355 | 356 | function findRule (rules, node, options) { 357 | for (var i = 0; i < rules.length; i++) { 358 | var rule = rules[i]; 359 | if (filterValue(rule, node, options)) return rule 360 | } 361 | return void 0 362 | } 363 | 364 | function filterValue (rule, node, options) { 365 | var filter = rule.filter; 366 | if (typeof filter === 'string') { 367 | if (filter === node.nodeName.toLowerCase()) return true 368 | } else if (Array.isArray(filter)) { 369 | if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true 370 | } else if (typeof filter === 'function') { 371 | if (filter.call(rule, node, options)) return true 372 | } else { 373 | throw new TypeError('`filter` needs to be a string, array, or function') 374 | } 375 | } 376 | 377 | /** 378 | * The collapseWhitespace function is adapted from collapse-whitespace 379 | * by Luc Thevenard. 380 | * 381 | * The MIT License (MIT) 382 | * 383 | * Copyright (c) 2014 Luc Thevenard 384 | * 385 | * Permission is hereby granted, free of charge, to any person obtaining a copy 386 | * of this software and associated documentation files (the "Software"), to deal 387 | * in the Software without restriction, including without limitation the rights 388 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 389 | * copies of the Software, and to permit persons to whom the Software is 390 | * furnished to do so, subject to the following conditions: 391 | * 392 | * The above copyright notice and this permission notice shall be included in 393 | * all copies or substantial portions of the Software. 394 | * 395 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 396 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 397 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 398 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 399 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 400 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 401 | * THE SOFTWARE. 402 | */ 403 | 404 | /** 405 | * collapseWhitespace(options) removes extraneous whitespace from an the given element. 406 | * 407 | * @param {Object} options 408 | */ 409 | function collapseWhitespace (options) { 410 | var element = options.element; 411 | var isBlock = options.isBlock; 412 | var isVoid = options.isVoid; 413 | var isPre = options.isPre || function (node) { 414 | return node.nodeName === 'PRE' 415 | }; 416 | 417 | if (!element.firstChild || isPre(element)) return 418 | 419 | var prevText = null; 420 | var prevVoid = false; 421 | 422 | var prev = null; 423 | var node = next(prev, element, isPre); 424 | 425 | while (node !== element) { 426 | if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE 427 | var text = node.data.replace(/[ \r\n\t]+/g, ' '); 428 | 429 | if ((!prevText || / $/.test(prevText.data)) && 430 | !prevVoid && text[0] === ' ') { 431 | text = text.substr(1); 432 | } 433 | 434 | // `text` might be empty at this point. 435 | if (!text) { 436 | node = remove(node); 437 | continue 438 | } 439 | 440 | node.data = text; 441 | 442 | prevText = node; 443 | } else if (node.nodeType === 1) { // Node.ELEMENT_NODE 444 | if (isBlock(node) || node.nodeName === 'BR') { 445 | if (prevText) { 446 | prevText.data = prevText.data.replace(/ $/, ''); 447 | } 448 | 449 | prevText = null; 450 | prevVoid = false; 451 | } else if (isVoid(node)) { 452 | // Avoid trimming space around non-block, non-BR void elements. 453 | prevText = null; 454 | prevVoid = true; 455 | } 456 | } else { 457 | node = remove(node); 458 | continue 459 | } 460 | 461 | var nextNode = next(prev, node, isPre); 462 | prev = node; 463 | node = nextNode; 464 | } 465 | 466 | if (prevText) { 467 | prevText.data = prevText.data.replace(/ $/, ''); 468 | if (!prevText.data) { 469 | remove(prevText); 470 | } 471 | } 472 | } 473 | 474 | /** 475 | * remove(node) removes the given node from the DOM and returns the 476 | * next node in the sequence. 477 | * 478 | * @param {Node} node 479 | * @return {Node} node 480 | */ 481 | function remove (node) { 482 | var next = node.nextSibling || node.parentNode; 483 | 484 | node.parentNode.removeChild(node); 485 | 486 | return next 487 | } 488 | 489 | /** 490 | * next(prev, current, isPre) returns the next node in the sequence, given the 491 | * current and previous nodes. 492 | * 493 | * @param {Node} prev 494 | * @param {Node} current 495 | * @param {Function} isPre 496 | * @return {Node} 497 | */ 498 | function next (prev, current, isPre) { 499 | if ((prev && prev.parentNode === current) || isPre(current)) { 500 | return current.nextSibling || current.parentNode 501 | } 502 | 503 | return current.firstChild || current.nextSibling || current.parentNode 504 | } 505 | 506 | /* 507 | * Set up window for Node.js 508 | */ 509 | 510 | var root = (typeof window !== 'undefined' ? window : {}); 511 | 512 | /* 513 | * Parsing HTML strings 514 | */ 515 | 516 | function canParseHTMLNatively () { 517 | var Parser = root.DOMParser; 518 | var canParse = false; 519 | 520 | // Adapted from https://gist.github.com/1129031 521 | // Firefox/Opera/IE throw errors on unsupported types 522 | try { 523 | // WebKit returns null on unsupported types 524 | if (new Parser().parseFromString('', 'text/html')) { 525 | canParse = true; 526 | } 527 | } catch (e) {} 528 | 529 | return canParse 530 | } 531 | 532 | function createHTMLParser () { 533 | var Parser = function () {}; 534 | 535 | { 536 | var minidom = require('minidom'); 537 | Parser.prototype.parseFromString = function (string) { 538 | return minidom(string) 539 | }; 540 | } 541 | return Parser 542 | } 543 | 544 | var HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser(); 545 | 546 | function RootNode (input) { 547 | var root; 548 | if (typeof input === 'string') { 549 | var doc = htmlParser().parseFromString( 550 | // DOM parsers arrange elements in the and . 551 | // Wrapping in a custom element ensures elements are reliably arranged in 552 | // a single element. 553 | '' + input + '', 554 | 'text/html' 555 | ); 556 | root = doc.getElementsByTagName('x-turndown')[0]; 557 | } else { 558 | root = input.cloneNode(true); 559 | } 560 | collapseWhitespace({ 561 | element: root, 562 | isBlock: isBlock, 563 | isVoid: isVoid 564 | }); 565 | 566 | return root 567 | } 568 | 569 | var _htmlParser; 570 | function htmlParser () { 571 | _htmlParser = _htmlParser || new HTMLParser(); 572 | return _htmlParser 573 | } 574 | 575 | function Node (node) { 576 | node.isBlock = isBlock(node); 577 | node.isCode = node.nodeName.toLowerCase() === 'code' || node.parentNode.isCode; 578 | node.isBlank = isBlank(node); 579 | node.flankingWhitespace = flankingWhitespace(node); 580 | return node 581 | } 582 | 583 | function isBlank (node) { 584 | return ( 585 | ['A', 'TH', 'TD', 'IFRAME', 'SCRIPT', 'AUDIO', 'VIDEO'].indexOf(node.nodeName) === -1 && 586 | /^\s*$/i.test(node.textContent) && 587 | !isVoid(node) && 588 | !hasVoid(node) 589 | ) 590 | } 591 | 592 | function flankingWhitespace (node) { 593 | var leading = ''; 594 | var trailing = ''; 595 | 596 | if (!node.isBlock) { 597 | var hasLeading = /^[ \r\n\t]/.test(node.textContent); 598 | var hasTrailing = /[ \r\n\t]$/.test(node.textContent); 599 | 600 | if (hasLeading && !isFlankedByWhitespace('left', node)) { 601 | leading = ' '; 602 | } 603 | if (hasTrailing && !isFlankedByWhitespace('right', node)) { 604 | trailing = ' '; 605 | } 606 | } 607 | 608 | return { leading: leading, trailing: trailing } 609 | } 610 | 611 | function isFlankedByWhitespace (side, node) { 612 | var sibling; 613 | var regExp; 614 | var isFlanked; 615 | 616 | if (side === 'left') { 617 | sibling = node.previousSibling; 618 | regExp = / $/; 619 | } else { 620 | sibling = node.nextSibling; 621 | regExp = /^ /; 622 | } 623 | 624 | if (sibling) { 625 | if (sibling.nodeType === 3) { 626 | isFlanked = regExp.test(sibling.nodeValue); 627 | } else if (sibling.nodeType === 1 && !isBlock(sibling)) { 628 | isFlanked = regExp.test(sibling.textContent); 629 | } 630 | } 631 | return isFlanked 632 | } 633 | 634 | var reduce = Array.prototype.reduce; 635 | var leadingNewLinesRegExp = /^\n*/; 636 | var trailingNewLinesRegExp = /\n*$/; 637 | var escapes = [ 638 | [/\\/g, '\\\\'], 639 | [/\*/g, '\\*'], 640 | [/^-/g, '\\-'], 641 | [/^\+ /g, '\\+ '], 642 | [/^(=+)/g, '\\$1'], 643 | [/^(#{1,6}) /g, '\\$1 '], 644 | [/`/g, '\\`'], 645 | [/^~~~/g, '\\~~~'], 646 | [/\[/g, '\\['], 647 | [/\]/g, '\\]'], 648 | [/^>/g, '\\>'], 649 | [/_/g, '\\_'], 650 | [/^(\d+)\. /g, '$1\\. '] 651 | ]; 652 | 653 | function TurndownService (options) { 654 | if (!(this instanceof TurndownService)) return new TurndownService(options) 655 | 656 | var defaults = { 657 | rules: rules, 658 | headingStyle: 'setext', 659 | hr: '* * *', 660 | bulletListMarker: '*', 661 | codeBlockStyle: 'indented', 662 | fence: '```', 663 | emDelimiter: '_', 664 | strongDelimiter: '**', 665 | linkStyle: 'inlined', 666 | linkReferenceStyle: 'full', 667 | br: ' ', 668 | blankReplacement: function (content, node) { 669 | return node.isBlock ? '\n\n' : '' 670 | }, 671 | keepReplacement: function (content, node) { 672 | return node.isBlock ? '\n\n' + node.outerHTML + '\n\n' : node.outerHTML 673 | }, 674 | defaultReplacement: function (content, node) { 675 | return node.isBlock ? '\n\n' + content + '\n\n' : content 676 | } 677 | }; 678 | this.options = extend({}, defaults, options); 679 | this.rules = new Rules(this.options); 680 | } 681 | 682 | TurndownService.prototype = { 683 | /** 684 | * The entry point for converting a string or DOM node to Markdown 685 | * @public 686 | * @param {String|HTMLElement} input The string or DOM node to convert 687 | * @returns A Markdown representation of the input 688 | * @type String 689 | */ 690 | 691 | turndown: function (input) { 692 | if (!canConvert(input)) { 693 | throw new TypeError( 694 | input + ' is not a string, or an element/document/fragment node.' 695 | ) 696 | } 697 | 698 | if (input === '') return '' 699 | 700 | var output = process.call(this, new RootNode(input)); 701 | return postProcess.call(this, output) 702 | }, 703 | 704 | /** 705 | * Add one or more plugins 706 | * @public 707 | * @param {Function|Array} plugin The plugin or array of plugins to add 708 | * @returns The Turndown instance for chaining 709 | * @type Object 710 | */ 711 | 712 | use: function (plugin) { 713 | if (Array.isArray(plugin)) { 714 | for (var i = 0; i < plugin.length; i++) this.use(plugin[i]); 715 | } else if (typeof plugin === 'function') { 716 | plugin(this); 717 | } else { 718 | throw new TypeError('plugin must be a Function or an Array of Functions') 719 | } 720 | return this 721 | }, 722 | 723 | /** 724 | * Adds a rule 725 | * @public 726 | * @param {String} key The unique key of the rule 727 | * @param {Object} rule The rule 728 | * @returns The Turndown instance for chaining 729 | * @type Object 730 | */ 731 | 732 | addRule: function (key, rule) { 733 | this.rules.add(key, rule); 734 | return this 735 | }, 736 | 737 | /** 738 | * Keep a node (as HTML) that matches the filter 739 | * @public 740 | * @param {String|Array|Function} filter The unique key of the rule 741 | * @returns The Turndown instance for chaining 742 | * @type Object 743 | */ 744 | 745 | keep: function (filter) { 746 | this.rules.keep(filter); 747 | return this 748 | }, 749 | 750 | /** 751 | * Remove a node that matches the filter 752 | * @public 753 | * @param {String|Array|Function} filter The unique key of the rule 754 | * @returns The Turndown instance for chaining 755 | * @type Object 756 | */ 757 | 758 | remove: function (filter) { 759 | this.rules.remove(filter); 760 | return this 761 | }, 762 | 763 | /** 764 | * Escapes Markdown syntax 765 | * @public 766 | * @param {String} string The string to escape 767 | * @returns A string with Markdown syntax escaped 768 | * @type String 769 | */ 770 | 771 | escape: function (string) { 772 | return escapes.reduce(function (accumulator, escape) { 773 | return accumulator.replace(escape[0], escape[1]) 774 | }, string) 775 | } 776 | }; 777 | 778 | /** 779 | * Reduces a DOM node down to its Markdown string equivalent 780 | * @private 781 | * @param {HTMLElement} parentNode The node to convert 782 | * @returns A Markdown representation of the node 783 | * @type String 784 | */ 785 | 786 | function process (parentNode) { 787 | var self = this; 788 | return reduce.call(parentNode.childNodes, function (output, node) { 789 | node = new Node(node); 790 | 791 | var replacement = ''; 792 | if (node.nodeType === 3) { 793 | replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue); 794 | } else if (node.nodeType === 1) { 795 | replacement = replacementForNode.call(self, node); 796 | } 797 | 798 | return join(output, replacement) 799 | }, '') 800 | } 801 | 802 | /** 803 | * Appends strings as each rule requires and trims the output 804 | * @private 805 | * @param {String} output The conversion output 806 | * @returns A trimmed version of the ouput 807 | * @type String 808 | */ 809 | 810 | function postProcess (output) { 811 | var self = this; 812 | this.rules.forEach(function (rule) { 813 | if (typeof rule.append === 'function') { 814 | output = join(output, rule.append(self.options)); 815 | } 816 | }); 817 | 818 | return output.replace(/^[\t\r\n]+/, '').replace(/[\t\r\n\s]+$/, '') 819 | } 820 | 821 | /** 822 | * Converts an element node to its Markdown equivalent 823 | * @private 824 | * @param {HTMLElement} node The node to convert 825 | * @returns A Markdown representation of the node 826 | * @type String 827 | */ 828 | 829 | function replacementForNode (node) { 830 | var rule = this.rules.forNode(node); 831 | var content = process.call(this, node); 832 | var whitespace = node.flankingWhitespace; 833 | if (whitespace.leading || whitespace.trailing) content = content.trim(); 834 | return ( 835 | whitespace.leading + 836 | rule.replacement(content, node, this.options) + 837 | whitespace.trailing 838 | ) 839 | } 840 | 841 | /** 842 | * Determines the new lines between the current output and the replacement 843 | * @private 844 | * @param {String} output The current conversion output 845 | * @param {String} replacement The string to append to the output 846 | * @returns The whitespace to separate the current output and the replacement 847 | * @type String 848 | */ 849 | 850 | function separatingNewlines (output, replacement) { 851 | var newlines = [ 852 | output.match(trailingNewLinesRegExp)[0], 853 | replacement.match(leadingNewLinesRegExp)[0] 854 | ].sort(); 855 | var maxNewlines = newlines[newlines.length - 1]; 856 | return maxNewlines.length < 2 ? maxNewlines : '\n\n' 857 | } 858 | 859 | function join (string1, string2) { 860 | var separator = separatingNewlines(string1, string2); 861 | 862 | // Remove trailing/leading newlines and replace with separator 863 | string1 = string1.replace(trailingNewLinesRegExp, ''); 864 | string2 = string2.replace(leadingNewLinesRegExp, ''); 865 | 866 | return string1 + separator + string2 867 | } 868 | 869 | /** 870 | * Determines whether an input can be converted 871 | * @private 872 | * @param {String|HTMLElement} input Describe this parameter 873 | * @returns Describe what it returns 874 | * @type String|Object|Array|Boolean|Number 875 | */ 876 | 877 | function canConvert (input) { 878 | return ( 879 | input != null && ( 880 | typeof input === 'string' || 881 | (input.nodeType && ( 882 | input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11 883 | )) 884 | ) 885 | ) 886 | } 887 | 888 | module.exports = TurndownService; 889 | -------------------------------------------------------------------------------- /src/cli.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const caporal = require ( 'caporal' ), 5 | chalk = require ( 'chalk' ), 6 | readPkg = require ( 'read-pkg-up' ), 7 | updateNotifier = require ( 'update-notifier' ), 8 | Config = require ( './config' ); 9 | EnexDump = require ( '.' ); 10 | 11 | /* CLI */ 12 | 13 | async function CLI () { 14 | 15 | /* APP */ 16 | 17 | const {pkg} = await readPkg ({ cwd: __dirname }); 18 | 19 | updateNotifier ({ pkg }).notify (); 20 | 21 | const app = caporal.version ( pkg.version ); 22 | 23 | /* COMMAND */ 24 | 25 | app.option ( '--src ', 'Path to the .enex file', app.REPEATABLE, undefined, true ) 26 | .option ( '--dst ', 'Path to the dump directory', undefined, './dump' ) 27 | .option ( '--format ', 'Convert notes to this format', Config.dump.formats, 'markdown' ) 28 | .option ( '--extension ', 'Save notes using this extension', undefined, 'md' ) 29 | .option ( '--tag ', 'Tag to add to all notes', app.REPEATABLE ) 30 | .option ( '--no-attachments', 'Don\'t dump attachments' ) 31 | .option ( '--no-notes', 'Don\'t dump notes' ) 32 | .option ( '--no-metadata', 'Don\'t add metatada to notes' ) 33 | .action ( () => EnexDump () ); 34 | 35 | /* HELP */ 36 | 37 | const command = app._defaultCommand; 38 | const helpLines = [ 39 | `enex-dump ${chalk.green ( '--src' )} ${chalk.blue ( './my-notes.enex' )}`, 40 | `enex-dump ${chalk.green ( '--src' )} ${chalk.blue ( './my-notes.enex' )} ${chalk.green ( '--format' )} ${chalk.blue ( 'html' )} ${chalk.green ( '--extension' )} ${chalk.blue ( 'html' )}`, 41 | `enex-dump ${chalk.green ( '--src' )} ${chalk.blue ( './my-notes.enex' )} ${chalk.green ( '--no-metadata' )} ${chalk.green ( '--no-attachments' )}` 42 | ]; 43 | 44 | command.help ( helpLines.join ( '\n' ), { name: 'USAGE - ADVANCED' } ); 45 | 46 | /* PARSE */ 47 | 48 | caporal.parse ( process.argv ); 49 | 50 | } 51 | 52 | /* EXPORT */ 53 | 54 | module.exports = CLI; 55 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const _ = require ( 'lodash' ), 5 | argv = require ( 'minimist' )( process.argv.slice ( 2 ) ), 6 | path = require ( 'path' ); 7 | 8 | /* CONFIG */ 9 | 10 | const Config = { 11 | path: { 12 | src: argv.src ? _.castArray ( argv.src ) : [], 13 | dst: argv.dst ? path.resolve ( argv.dst ) : path.join ( process.cwd (), 'dump' ) 14 | }, 15 | dump: { 16 | attachments: argv.hasOwnProperty ( 'attachments' ) ? argv.attachments : true, 17 | notes: argv.hasOwnProperty ( 'notes' ) ? argv.notes : true, 18 | metadata: argv.hasOwnProperty ( 'metadata' ) ? argv.metadata : true, 19 | tags: argv.hasOwnProperty ( 'tag' ) ? _.castArray ( argv.tag ) : [], 20 | formats: ['html', 'markdown'], 21 | format: argv.format || 'markdown', 22 | extension: argv.extension || 'md' 23 | }, 24 | attachments: { 25 | get path () { 26 | return path.join ( Config.path.dst, 'attachments' ); 27 | } 28 | }, 29 | notes: { 30 | get path () { 31 | return path.join ( Config.path.dst, 'notes' ); 32 | } 33 | } 34 | }; 35 | 36 | /* EXPORT */ 37 | 38 | module.exports = Config; 39 | -------------------------------------------------------------------------------- /src/content.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const _ = require ( 'lodash' ), 5 | matter = require ( 'gray-matter' ), 6 | {html: beautifyHTML} = require ( 'js-beautify' ), 7 | turndown = require ( './_turndown' ), 8 | Matter = require ( './matter' ); 9 | 10 | /* CONTENT */ 11 | 12 | const Content = { 13 | 14 | format: { 15 | 16 | html ( html, title, beautify = true ) { 17 | 18 | html = html.replace ( //g, '' ) // Remove doctype 19 | .replace ( /<\?xml(.*?)>/g, '' ) // Remove xml thing (what's it called?) 20 | .replace ( //g, '' ) // Replace checked checkbox 21 | .replace ( //g, '' ) // Replace unchecked checkbox 22 | .replace ( /<\/?en-(\w+)(.*?)>/g, '' ) // Remove custom evernote tags 23 | .replace ( /
(\s*)<\/div>/g, '' ) // Remove empty divs 24 | .replace ( /(
(\s*)
(\s*)<\/div>){2,}/g, '

' ); // Remove extra line breaks 25 | 26 | if ( title ) { 27 | html = `

${title}

${html}`; 28 | } 29 | 30 | if ( beautify ) { 31 | html = beautifyHTML ( html ); 32 | } 33 | 34 | return html.replace ( /^\s*/, '\n' ) // Ensure it starts with a new line 35 | .replace ( /\s*$/, '\n' ); // Ensure it ends with a new line 36 | 37 | }, 38 | 39 | async markdown ( html, title ) { 40 | 41 | html = Content.format.html ( html, title, false ); 42 | 43 | html = html.replace ( /]*?)checked(.*?)>/g, ' [x] ' ) // Replace checked checkbox 44 | .replace ( //g, ' [ ] ' ); // Replace unchecked checkbox 45 | 46 | const service = new turndown ({ 47 | bulletListMarker: '-', 48 | headingStyle: 'atx', 49 | hr: '---' 50 | }); 51 | 52 | service.addRule ( 'alignment', { 53 | filter: node => node.nodeName !== 'TABLE' && ( node.getAttribute ( 'style' ) || '' ).includes ( 'text-align:' ), 54 | replacement: ( str, ele ) => { 55 | str = str.trim (); 56 | if ( !str.length ) return ''; 57 | const style = ele.getAttribute ( 'style' ); 58 | const alignment = style.match ( /text-align:\s*(\S+);/ ); 59 | if ( !alignment ) return `${_.trim ( str )}\n\n`; //TODO: The regex isn't good enough if we reach here 60 | return `

${_.trim ( str )}

\n\n`; 61 | } 62 | }); 63 | 64 | service.addRule ( 'code', { 65 | filter: node => node.nodeName === 'DIV' && ( node.getAttribute ( 'style' ) || '' ).includes ( '-en-codeblock' ), 66 | replacement: str => { 67 | str = str.trim (); 68 | if ( !str.length ) return ''; 69 | str = _.trim ( str ).replace ( /<(?:.|\n)*?>/gm, '' ); 70 | str = str.includes ( '\n' ) ? `\n\n\`\`\`\n${str}\n\`\`\`\n` : `\`${str}\``; 71 | return str; 72 | } 73 | }); 74 | 75 | service.addRule ( 'others', { 76 | filter: ['font', 'span'], 77 | replacement: ( str, ele ) => { 78 | if ( !_.trim ( str ) ) return ''; 79 | /* STYLE */ 80 | const style = ele.getAttribute ( 'style' ); 81 | let newStyle = ''; 82 | if ( style ) { 83 | /* FORMATTING */ 84 | if ( style.match ( /text-decoration: underline/ ) ) { // Underline 85 | str = `${str}`; 86 | } 87 | if ( style.match ( /text-decoration: line-through/ ) ) { // Strikethrough 88 | str = `${str}`; 89 | } 90 | if ( style.match ( /font-style: italic/ ) ) { // Italic 91 | str = `_${str}_`; 92 | } 93 | if ( style.match ( /font-weight: bold/ ) ) { // Bold 94 | str = `**${str}**`; 95 | } 96 | /* HEADING */ 97 | if ( str.match ( /^[^#]|>#/ ) ) { // Doesn't contain an heading 98 | if ( style.match ( /font-size: (48|64|72)px/ ) ) { // H1 99 | str = `# ${str}`; 100 | } 101 | if ( style.match ( /font-size: 36px/ ) ) { // H2 102 | str = `## ${str}`; 103 | } 104 | if ( style.match ( /font-size: 24px/ ) ) { // H3 105 | str = `### ${str}`; 106 | } 107 | if ( style.match ( /font-size: (12|13)px/ ) ) { // Small 108 | str = `${str}`; 109 | } 110 | if ( style.match ( /font-size: (9|10|11)px/ ) ) { // Very Small 111 | str = `${str}`; 112 | } 113 | } 114 | /* BACKGROUND COLOR */ 115 | const backgroundColor = style.match ( /background-color: ([^;]+);/ ); 116 | if ( backgroundColor && backgroundColor[1] !== 'rgb(255, 255, 255)' ) { 117 | newStyle += backgroundColor[0]; 118 | } 119 | } 120 | /* COLOR */ 121 | const colorAttr = ele.getAttribute ( 'color' ); // Color 122 | if ( colorAttr && colorAttr !== '#010101' ) { 123 | newStyle += `color: ${colorAttr};` 124 | } 125 | if ( style ) { 126 | const colorStyle = style.match ( /[^-]color: ([^;]+);/ ); 127 | if ( colorStyle && colorStyle[1] !== '#010101' ) { 128 | newStyle += `color: ${colorStyle[1]};`; 129 | } 130 | } 131 | /* NEW STYLE */ 132 | if ( newStyle ) { 133 | str = `${str}`; 134 | } 135 | return str; 136 | } 137 | }); 138 | 139 | service.keep ([ 'kbd' ]); 140 | service.keep ([ 'b', 'i', 's', 'u' ]); // 😚 141 | 142 | return service.turndown ( html ) 143 | .replace ( /\\((-|\*|\+) )/g, '$1' ) // Unescape unordered lists 144 | .replace ( /^(-|\*|\+)\s+/gm, '$1 ' ) // Remove extra whitespace from unordered lists 145 | .replace ( /^((?:-|\*|\+) .*)\n\n(?=(?:-|\*|\+) )/gm, '$1\n' ) // Remove extra whitespace between unordered lists items 146 | .replace ( /^(\d+\.)\s+/gm, '$1 ' ) // Remove extra whitespace from ordered lists 147 | .replace ( /\\\[([^\]]*?)\\\] /g, '[$1] ' ) // Unescape square brackets 148 | // .replace ( /(\s*\n\s*){4,}/g, '\n\n
\n\n' ) // Add line breaks 149 | .replace ( /(\s*\n\s*){3,}/g, '\n\n' ) // Remove extra new lines 150 | .replace ( /\n\n
\n\n(-|\*|\+) /g, '\n\n$1 ' ) // Remove line breaks before lists 151 | .replace ( /^\s*/, '\n' ) // Ensure it starts with a new line 152 | .replace ( /\s*$/, '\n' ); // Ensure it ends with a new line 153 | 154 | } 155 | 156 | }, 157 | 158 | metadata: { 159 | 160 | options: { 161 | engines: { 162 | yaml: Matter 163 | } 164 | }, 165 | 166 | get ( content ) { 167 | 168 | return matter ( content, Content.metadata.options ).data; 169 | 170 | }, 171 | 172 | set ( content, metadata ) { 173 | 174 | content = Content.metadata.remove ( content ); 175 | 176 | if ( !_.isEmpty ( metadata ) ) { 177 | 178 | content = matter.stringify ( content, metadata, Content.metadata.options ); 179 | 180 | } 181 | 182 | return content; 183 | 184 | }, 185 | 186 | remove ( content ) { 187 | 188 | return matter ( content, Content.metadata.options ).content; 189 | 190 | } 191 | 192 | } 193 | 194 | }; 195 | 196 | /* EXPORT */ 197 | 198 | module.exports = Content; 199 | -------------------------------------------------------------------------------- /src/dump.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const _ = require ( 'lodash' ), 5 | Config = require ( './config' ), 6 | Content = require ( './content' ), 7 | File = require ( './file' ), 8 | Parse = require ( './parse' ), 9 | Path = require ( './path' ), 10 | Utils = require ( './utils' ); 11 | 12 | /* DUMP */ 13 | 14 | const Dump = { 15 | 16 | async _xml2data ( xml ) { 17 | 18 | if ( !xml ) return []; 19 | 20 | return await Promise.all ( _.castArray ( xml['en-export'].note ).map ( async note => { 21 | 22 | const title = Parse.title ( note.title || 'Untitled' ), 23 | created = note.created ? Parse.date ( note.created ) : new Date (); 24 | 25 | return { 26 | title, 27 | content: await Parse.content ( note.content || '', title ), 28 | created, 29 | modified: note.updated ? Parse.date ( note.updated ) : created, 30 | tags: _.castArray ( note.tag || [] ), 31 | attachments: Config.dump.attachments && note.resource && _.castArray ( note.resource ).filter ( resource => resource.data ).map ( resource => ({ 32 | buffer: Buffer.from ( resource.data, 'base64' ), 33 | fileName: _.get ( resource, ['resource-attributes', 'file-name'] ) || 'Untitled' 34 | })) 35 | }; 36 | 37 | })); 38 | 39 | }, 40 | 41 | async enex () { 42 | 43 | const xml = await Promise.all ( Config.path.src.map ( Parse.xml ) ), 44 | datas = await Promise.all ( xml.map ( Dump._xml2data ) ), 45 | data = _.flatten ( datas ); 46 | 47 | if ( !data.length ) Utils.throw ( 'Nothing to dump, is the path correct?' ); 48 | 49 | await Dump.data ( data ); 50 | 51 | }, 52 | 53 | async data ( data ) { 54 | 55 | return await Promise.all ( data.map ( async datum => { 56 | 57 | const attachments = Config.dump.attachments ? await Dump.attachments ( datum.attachments ) : []; 58 | 59 | if ( Config.dump.metadata ) { 60 | 61 | let metadata = { 62 | title: datum.title, 63 | tags: [...datum.tags, ...Config.dump.tags], 64 | attachments, 65 | created: datum.created.toISOString (), 66 | modified: datum.modified.toISOString () 67 | }; 68 | 69 | metadata = _.pickBy ( metadata, _.negate ( _.isEmpty ) ); 70 | 71 | datum.content = Content.metadata.set ( datum.content, metadata ); 72 | 73 | } 74 | 75 | if ( Config.dump.notes ) { 76 | 77 | await Dump.note ( datum ); 78 | 79 | } 80 | 81 | })); 82 | 83 | }, 84 | 85 | async attachments ( attachments ) { 86 | 87 | if ( !attachments ) return []; 88 | 89 | return await Promise.all ( attachments.map ( async attachment => { 90 | 91 | const {filePath, fileName} = await Path.getAllowedPath ( Config.attachments.path, attachment.fileName ); 92 | 93 | await File.write ( filePath, attachment.buffer ); 94 | 95 | return fileName; 96 | 97 | })); 98 | 99 | }, 100 | 101 | async note ( note ) { 102 | 103 | const {filePath, fileName} = await Path.getAllowedPath ( Config.notes.path, `${note.title}.${Config.dump.extension}` ); 104 | 105 | await File.write ( filePath, note.content ); 106 | 107 | return fileName; 108 | 109 | } 110 | 111 | }; 112 | 113 | /* EXPORT */ 114 | 115 | module.exports = Dump; 116 | -------------------------------------------------------------------------------- /src/file.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const fs = require ( 'fs' ), 5 | mkdirp = require ( 'mkdirp' ), 6 | path = require ( 'path' ), 7 | pify = require ( 'pify' ); 8 | 9 | /* FILE */ 10 | 11 | const File = { 12 | 13 | async exists ( filePath ) { 14 | 15 | try { 16 | 17 | await pify ( fs.access )( filePath, fs.constants.F_OK ); 18 | 19 | return true; 20 | 21 | } catch ( e ) { 22 | 23 | return false; 24 | 25 | } 26 | 27 | }, 28 | 29 | async read ( filePath ) { 30 | 31 | try { 32 | 33 | return ( await pify ( fs.readFile )( filePath, { encoding: 'utf8' } ) ).toString (); 34 | 35 | } catch ( e ) { 36 | 37 | return ''; 38 | 39 | } 40 | 41 | }, 42 | 43 | async write ( filePath, content ) { 44 | 45 | try { 46 | 47 | return await pify ( fs.writeFile )( filePath, content ); 48 | 49 | } catch ( e ) { 50 | 51 | if ( e.code === 'ENOENT' ) { 52 | 53 | try { 54 | 55 | await pify ( mkdirp )( path.dirname ( filePath ) ); 56 | 57 | return await pify ( fs.writeFile )( filePath, content ); 58 | 59 | } catch ( e ) {} 60 | 61 | } 62 | 63 | } 64 | 65 | } 66 | 67 | }; 68 | 69 | /* EXPORT */ 70 | 71 | module.exports = File; 72 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const _ = require ( 'lodash' ), 5 | Config = require ( './config' ), 6 | Dump = require ( './dump' ), 7 | Utils = require ( './utils' ); 8 | 9 | /* ENEX DUMP */ 10 | 11 | function EnexDump ( options ) { 12 | 13 | _.merge ( Config, options ); 14 | 15 | if ( !Config.path.src.length ) Utils.throw ( 'You have to pass at least one src path' ); 16 | 17 | if ( !Config.path.dst ) Utils.throw ( 'You have to pass a dst path' ); 18 | 19 | if ( !Config.dump.formats.includes ( Config.dump.format ) ) Utils.throw ( `We only support these formats: ${Config.dump.formats.map ( format => `"${format}"` ).join ( ', ' )} ` ); 20 | 21 | return Dump.enex (); 22 | 23 | } 24 | 25 | /* EXPORT */ 26 | 27 | module.exports = EnexDump; 28 | -------------------------------------------------------------------------------- /src/matter.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const yaml = require ( 'js-yaml' ); 5 | 6 | /* MATTER */ 7 | 8 | const Matter = { 9 | 10 | options: { 11 | flowLevel: 1, 12 | indent: 2, 13 | lineWidth: 8000 14 | }, 15 | 16 | parse ( str ) { 17 | 18 | return yaml.safeLoad ( str, Matter.options ); 19 | 20 | }, 21 | 22 | stringify ( obj ) { 23 | 24 | return yaml.safeDump ( obj, Matter.options ); 25 | 26 | } 27 | 28 | }; 29 | 30 | /* EXPORT */ 31 | 32 | module.exports = Matter; 33 | -------------------------------------------------------------------------------- /src/parse.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const {parse: xml2js} = require ( 'fast-xml-parser' ), 5 | entities = require ( 'html-entities' ).AllHtmlEntities, 6 | Config = require ( './config' ), 7 | Content = require ( './content' ), 8 | File = require ( './file' ); 9 | 10 | /* PARSE */ 11 | 12 | const Parse = { 13 | 14 | date ( date ) { // From the YYYYMMDDTHHMMSSZ format 15 | 16 | date = date.split ( '' ); 17 | 18 | date.splice ( 13, 0, ':' ); 19 | date.splice ( 11, 0, ':' ); 20 | date.splice ( 6, 0, '-' ); 21 | date.splice ( 4, 0, '-' ); 22 | 23 | date = date.join ( '' ); 24 | 25 | return new Date ( date ); 26 | 27 | }, 28 | 29 | title ( title ) { 30 | 31 | return entities.decode ( title ); 32 | 33 | }, 34 | 35 | async content ( content, title ) { // From the HTML-ish format 36 | 37 | return await Content.format[Config.dump.format]( content, title ); 38 | 39 | }, 40 | 41 | async xml ( filePath ) { 42 | 43 | const content = await File.read ( filePath ); 44 | 45 | try { 46 | 47 | return xml2js ( content ); 48 | 49 | } catch ( e ) {} 50 | 51 | } 52 | 53 | }; 54 | 55 | /* EXPORT */ 56 | 57 | module.exports = Parse; 58 | -------------------------------------------------------------------------------- /src/path.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const path = require ( 'path' ), 5 | filenamify = require ( 'filenamify' ), 6 | File = require ( './file' ); 7 | 8 | /* PATH */ 9 | 10 | const Path = { 11 | 12 | _allowedPaths: {}, // Map of filePath => timestamp, ensuring we don't return the same path mutliple times within some amount of time, in order to avoid race conditions //UGLY 13 | 14 | _checkAllowedPath ( filePath ) { 15 | 16 | if ( !Path._allowedPaths[filePath] || ( Path._allowedPaths[filePath] + 5000 ) < Date.now () ) { 17 | 18 | Path._allowedPaths[filePath] = Date.now (); 19 | 20 | return true; 21 | 22 | } 23 | 24 | return false; 25 | 26 | }, 27 | 28 | async getAllowedPath ( folderPath, baseName ) { 29 | 30 | baseName = baseName 31 | .replace ( /\//g, '∕' ); // Preserving a dash-like character 32 | 33 | let {name, ext} = path.parse ( baseName ); 34 | 35 | name = Path.sanitize ( name ); 36 | 37 | for ( let i = 1;; i++ ) { 38 | 39 | const suffix = i > 1 ? ` (${i})` : '', 40 | fileName = `${name}${suffix}${ext}`, 41 | filePath = path.join ( folderPath, fileName ); 42 | 43 | if ( await File.exists ( filePath ) ) continue; 44 | 45 | if ( !Path._checkAllowedPath ( filePath ) ) continue; 46 | 47 | return { folderPath, filePath, fileName }; 48 | 49 | } 50 | 51 | }, 52 | 53 | sanitize ( filePath ) { 54 | 55 | return filenamify ( filePath, { replacement: ' ' } ).trim (); 56 | 57 | } 58 | 59 | }; 60 | 61 | /* EXPORT */ 62 | 63 | module.exports = Path; 64 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | 2 | /* IMPORT */ 3 | 4 | const chalk = require ( 'chalk' ); 5 | 6 | /* UTILS */ 7 | 8 | const Utils = { 9 | 10 | throw ( msg ) { 11 | 12 | console.error ( chalk.red ( msg ) ); 13 | 14 | process.exit ( 1 ); 15 | 16 | } 17 | 18 | }; 19 | 20 | /* EXPORT */ 21 | 22 | module.exports = Utils; 23 | --------------------------------------------------------------------------------