yard_ghurt 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -2
- data/Gemfile +0 -18
- data/README.md +28 -15
- data/Rakefile +24 -37
- data/bin/yard_ghurt +5 -16
- data/lib/yard_ghurt.rb +22 -34
- data/lib/yard_ghurt/anchor_links.rb +98 -107
- data/lib/yard_ghurt/gfm_fix_task.rb +210 -208
- data/lib/yard_ghurt/ghp_sync_task.rb +46 -56
- data/lib/yard_ghurt/util.rb +83 -33
- data/lib/yard_ghurt/version.rb +4 -16
- data/yard_ghurt.gemspec +18 -29
- metadata +23 -23
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1ba77aa5e6b3ec3b9467138381e4c0af1e3c7e2cd1b08f48b496b6ccbce682a7
         | 
| 4 | 
            +
              data.tar.gz: 1343014b656ac37ca4639ee0ff4ec0f9efbdbff6c74cac272a733287ea2406ca
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e86568ddae7285e682359272e8376af0c0c72a3559e61be6db1e7f165f38117484bddcb137a978fd29ce6e2144d5d60ee3bd2ec717daee86aea9fa8254debfb8
         | 
| 7 | 
            +
              data.tar.gz: aa4842125f2dfb966543b7bc78771d928da1de5d44cc6d7ad1b6bf1d57ad1096f6f07d5cfc4064bb80eac9556a20f77dd02ac30fd96ce7bf3c84b84e4f58cc14
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,8 +1,22 @@ | |
| 1 1 | 
             
            # Changelog | YardGhurt
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            All notable changes to this project will be documented in this file.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Format is based on [Keep a Changelog v1.0.0](https://keepachangelog.com/en/1.0.0/),
         | 
| 6 | 
            +
            and this project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec/v2.0.0.html).
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ## [[Unreleased]](https://github.com/esotericpig/yard_ghurt/compare/v1.2.1...HEAD)
         | 
| 9 | 
            +
            -
         | 
| 10 | 
            +
             | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## [v1.2.1] - 2021-06-16
         | 
| 13 | 
            +
            ### Fixed
         | 
| 14 | 
            +
            - Fixed to work with YARD v0.9.25+
         | 
| 15 | 
            +
                - From v0.9.25, YARD changed to use RedCarpert's method of trying to create GitHub-style anchor links. RedCarpet does NOT match GitHub's algorithm exactly, so it all got messed up. I changed the code to grab the new `id="..."` field from `<h\d+...` tags and use that as the YARD ID. I tried recreating RedCarpert's C code (`rndr_header_anchor()` in `ext/redcarpet/html.c`) but this failed miserably, so resorted to just this. All that matters is that it works!
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ### Changed
         | 
| 18 | 
            +
            - Formatted code using RuboCop.
         | 
| 4 19 |  | 
| 5 | 
            -
            ## [[Unreleased]](https://github.com/esotericpig/yard_ghurt/compare/v1.2.0...master)
         | 
| 6 20 |  | 
| 7 21 | 
             
            ## [v1.2.0] - 2020-02-29
         | 
| 8 22 | 
             
            ### Added
         | 
| @@ -18,6 +32,7 @@ Format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |
| 18 32 | 
             
            - In AnchorLinks, don't use obsolete method URI.escape()/encode()
         | 
| 19 33 | 
             
                - This outputted a lot of warnings
         | 
| 20 34 |  | 
| 35 | 
            +
             | 
| 21 36 | 
             
            ## [v1.1.0] - 2019-07-31
         | 
| 22 37 | 
             
            ### Added
         | 
| 23 38 | 
             
            - Added environment var *dryrun* to GFMFixTask:
         | 
| @@ -30,6 +45,7 @@ Format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |
| 30 45 | 
             
                - lib/yard_ghurt/ghp_syncer_task.rb => lib/yard_ghurt/ghp_sync_task.rb
         | 
| 31 46 | 
             
            - Updated development dependency gems
         | 
| 32 47 |  | 
| 48 | 
            +
             | 
| 33 49 | 
             
            ## [v1.0.1] - 2019-07-28
         | 
| 34 50 | 
             
            ### Changed
         | 
| 35 51 | 
             
            - Some minor comments/doc
         | 
| @@ -38,6 +54,7 @@ Format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). | |
| 38 54 | 
             
            ### Fixed
         | 
| 39 55 | 
             
            - In GFMFixerTask, ignore empty lines
         | 
| 40 56 |  | 
| 57 | 
            +
             | 
| 41 58 | 
             
            ## [v1.0.0] - 2019-07-23
         | 
| 42 59 | 
             
            ### Added
         | 
| 43 60 | 
             
            - .gitignore
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -1,24 +1,6 @@ | |
| 1 1 | 
             
            # encoding: UTF-8
         | 
| 2 2 | 
             
            # frozen_string_literal: true
         | 
| 3 3 |  | 
| 4 | 
            -
            #--
         | 
| 5 | 
            -
            # This file is part of YardGhurt.
         | 
| 6 | 
            -
            # Copyright (c) 2019 Jonathan Bradley Whited (@esotericpig)
         | 
| 7 | 
            -
            # 
         | 
| 8 | 
            -
            # YardGhurt is free software: you can redistribute it and/or modify
         | 
| 9 | 
            -
            # it under the terms of the GNU Lesser General Public License as published by
         | 
| 10 | 
            -
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 11 | 
            -
            # (at your option) any later version.
         | 
| 12 | 
            -
            # 
         | 
| 13 | 
            -
            # YardGhurt is distributed in the hope that it will be useful,
         | 
| 14 | 
            -
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 15 | 
            -
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 16 | 
            -
            # GNU Lesser General Public License for more details.
         | 
| 17 | 
            -
            # 
         | 
| 18 | 
            -
            # You should have received a copy of the GNU Lesser General Public License
         | 
| 19 | 
            -
            # along with YardGhurt.  If not, see <https://www.gnu.org/licenses/>.
         | 
| 20 | 
            -
            #++
         | 
| 21 | 
            -
             | 
| 22 4 |  | 
| 23 5 | 
             
            source 'https://rubygems.org'
         | 
| 24 6 |  | 
    
        data/README.md
    CHANGED
    
    | @@ -2,10 +2,10 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            [](https://badge.fury.io/rb/yard_ghurt)
         | 
| 4 4 |  | 
| 5 | 
            -
            [](https://esotericpig.github.io/docs/yard_ghurt/yardoc/index.html)
         | 
| 6 | 
            +
            [](https://github.com/esotericpig/yard_ghurt)
         | 
| 7 | 
            +
            [](CHANGELOG.md)
         | 
| 8 | 
            +
            [](LICENSE.txt)
         | 
| 9 9 |  | 
| 10 10 | 
             
            <u>YARD</u>oc <u>G</u>it<u>Hu</u>b <u>R</u>ake <u>T</u>asks
         | 
| 11 11 |  | 
| @@ -60,6 +60,8 @@ $ bundle exec rake install:local | |
| 60 60 |  | 
| 61 61 | 
             
            ## [Using](#contents)
         | 
| 62 62 |  | 
| 63 | 
            +
            Currently, you can't use this project as a YARDoc Plugin, but planning on it for v2.0. Read the [TODO](TODO.md) for more info.
         | 
| 64 | 
            +
             | 
| 63 65 | 
             
            **Rake Tasks:**
         | 
| 64 66 |  | 
| 65 67 | 
             
            | Task | Description |
         | 
| @@ -78,6 +80,16 @@ $ bundle exec rake install:local | |
| 78 80 |  | 
| 79 81 | 
             
            Fix (find & replace) text in the GitHub Flavored Markdown (GFM) files in the YARDoc directory, for differences between the two formats.
         | 
| 80 82 |  | 
| 83 | 
            +
            **Very Important!**
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            In order for this to work, you must also add `redcarpet` as a dependency, per YARDoc's documentation:
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            ```Ruby
         | 
| 88 | 
            +
            spec.add_development_dependency 'redcarpet','~> X.X' # For YARDoc Markdown (*.md)
         | 
| 89 | 
            +
            ```
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            Else, you'll get a bunch of `label-*` relative links.
         | 
| 92 | 
            +
             | 
| 81 93 | 
             
            You can set *dry_run* on the command line:
         | 
| 82 94 |  | 
| 83 95 | 
             
            `$ rake yard_gfm_fix dryrun=true`
         | 
| @@ -90,16 +102,16 @@ YardGhurt::GFMFixTask.new() do |task| | |
| 90 102 | 
             
              task.dry_run = false
         | 
| 91 103 | 
             
              task.fix_code_langs = true
         | 
| 92 104 | 
             
              task.md_files = ['index.html']
         | 
| 93 | 
            -
             | 
| 94 | 
            -
              task.before = Proc.new() do | | 
| 105 | 
            +
             | 
| 106 | 
            +
              task.before = Proc.new() do |t2,args|
         | 
| 95 107 | 
             
                # Delete this file as it's never used (index.html is an exact copy)
         | 
| 96 | 
            -
                YardGhurt.rm_exist(File.join( | 
| 97 | 
            -
             | 
| 108 | 
            +
                YardGhurt.rm_exist(File.join(t2.doc_dir,'file.README.html'))
         | 
| 109 | 
            +
             | 
| 98 110 | 
             
                # Root dir of my GitHub Page for CSS/JS
         | 
| 99 | 
            -
                 | 
| 100 | 
            -
             | 
| 101 | 
            -
                 | 
| 102 | 
            -
                 | 
| 111 | 
            +
                ghp_root_dir = YardGhurt.to_bool(args.dev) ? '../../esotericpig.github.io' : '../../..'
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                t2.css_styles << %Q(<link rel="stylesheet" type="text/css" href="#{ghp_root_dir}/css/prism.css" />)
         | 
| 114 | 
            +
                t2.js_scripts << %Q(<script src="#{ghp_root_dir}/js/prism.js"></script>)
         | 
| 103 115 | 
             
              end
         | 
| 104 116 | 
             
            end
         | 
| 105 117 | 
             
            ```
         | 
| @@ -126,7 +138,7 @@ YardGhurt::GFMFixTask.new(:yard_fix) do |task| | |
| 126 138 | 
             
              task.js_scripts         << '<script>document.write("Hello World!");</script>'
         | 
| 127 139 | 
             
              task.md_files            = ['index.html']
         | 
| 128 140 | 
             
              task.verbose             = false
         | 
| 129 | 
            -
             | 
| 141 | 
            +
             | 
| 130 142 | 
             
              task.before = Proc.new() {|task,args| puts "Hi, #{args.name}!"}
         | 
| 131 143 | 
             
              task.during = Proc.new() {|task,args,file| puts "#{args.name} can haz #{file}?"}
         | 
| 132 144 | 
             
              task.after  = Proc.new() {|task,args| puts "Goodbye, #{args.name}!"}
         | 
| @@ -159,7 +171,7 @@ YardGhurt::GHPSyncTask.new(:ghp_doc) do |task| | |
| 159 171 | 
             
              task.strict       = true                       # Fail if doc_dir doesn't exist
         | 
| 160 172 | 
             
              task.sync_args   << '--delete-after'
         | 
| 161 173 | 
             
              task.sync_cmd     = '/usr/bin/rsync'
         | 
| 162 | 
            -
             | 
| 174 | 
            +
             | 
| 163 175 | 
             
              task.before = Proc.new() {|task,args| puts "Hi, #{args.name}!"}
         | 
| 164 176 | 
             
              task.after  = Proc.new() {|task,args| puts "Goodbye, #{args.name}!"}
         | 
| 165 177 | 
             
            end
         | 
| @@ -276,6 +288,7 @@ Usage: yard_ghurt [options] | |
| 276 288 |  | 
| 277 289 | 
             
            ```
         | 
| 278 290 | 
             
            $ git clone 'https://github.com/esotericpig/yard_ghurt.git'
         | 
| 291 | 
            +
            $ cd yard_ghurt
         | 
| 279 292 | 
             
            $ bundle install
         | 
| 280 293 | 
             
            $ bundle exec rake -T
         | 
| 281 294 | 
             
            ```
         | 
| @@ -352,7 +365,7 @@ Newline | |
| 352 365 | 
             
            [GNU LGPL v3+](LICENSE.txt)
         | 
| 353 366 |  | 
| 354 367 | 
             
            > YardGhurt (<https://github.com/esotericpig/yard_ghurt>)  
         | 
| 355 | 
            -
            > Copyright (c) 2019- | 
| 368 | 
            +
            > Copyright (c) 2019-2021 Jonathan Bradley Whited  
         | 
| 356 369 | 
             
            > 
         | 
| 357 370 | 
             
            > YardGhurt is free software: you can redistribute it and/or modify  
         | 
| 358 371 | 
             
            > it under the terms of the GNU Lesser General Public License as published by  
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,68 +1,55 @@ | |
| 1 1 | 
             
            # encoding: UTF-8
         | 
| 2 2 | 
             
            # frozen_string_literal: true
         | 
| 3 3 |  | 
| 4 | 
            -
            #--
         | 
| 5 | 
            -
            # This file is part of YardGhurt.
         | 
| 6 | 
            -
            # Copyright (c) 2019 Jonathan Bradley Whited (@esotericpig)
         | 
| 7 | 
            -
            # 
         | 
| 8 | 
            -
            # YardGhurt is free software: you can redistribute it and/or modify
         | 
| 9 | 
            -
            # it under the terms of the GNU Lesser General Public License as published by
         | 
| 10 | 
            -
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 11 | 
            -
            # (at your option) any later version.
         | 
| 12 | 
            -
            # 
         | 
| 13 | 
            -
            # YardGhurt is distributed in the hope that it will be useful,
         | 
| 14 | 
            -
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 15 | 
            -
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 16 | 
            -
            # GNU Lesser General Public License for more details.
         | 
| 17 | 
            -
            # 
         | 
| 18 | 
            -
            # You should have received a copy of the GNU Lesser General Public License
         | 
| 19 | 
            -
            # along with YardGhurt.  If not, see <https://www.gnu.org/licenses/>.
         | 
| 20 | 
            -
            #++
         | 
| 21 | 
            -
             | 
| 22 4 |  | 
| 23 5 | 
             
            require 'bundler/gem_tasks'
         | 
| 24 6 |  | 
| 7 | 
            +
            require 'rake/clean'
         | 
| 8 | 
            +
             | 
| 25 9 | 
             
            require 'yard'
         | 
| 26 10 | 
             
            require 'yard_ghurt'
         | 
| 27 11 |  | 
| 28 | 
            -
            require 'rake/clean'
         | 
| 29 12 |  | 
| 30 | 
            -
            task default: [: | 
| 13 | 
            +
            task default: [:doc]
         | 
| 31 14 |  | 
| 32 15 | 
             
            CLEAN.exclude('.git/','stock/')
         | 
| 33 16 | 
             
            CLOBBER.include('doc/')
         | 
| 34 17 |  | 
| 35 | 
            -
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            desc 'Generate documentation (YARDoc)'
         | 
| 20 | 
            +
            task :doc,%i[] => %i[ yard yard_gfm_fix ] do |task|
         | 
| 21 | 
            +
              # pass
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            YARD::Rake::YardocTask.new do |task|
         | 
| 36 25 | 
             
              task.files = [File.join('lib','**','*.rb')]
         | 
| 37 | 
            -
             | 
| 38 | 
            -
              task.options += ['--files','CHANGELOG.md,LICENSE.txt']
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              task.options += ['--files','CHANGELOG.md,LICENSE.txt,TODO.md']
         | 
| 39 28 | 
             
              task.options += ['--readme','README.md']
         | 
| 40 | 
            -
             | 
| 29 | 
            +
             | 
| 41 30 | 
             
              task.options << '--protected' # Show protected methods
         | 
| 42 31 | 
             
              task.options += ['--template-path',File.join('yard','templates')]
         | 
| 43 32 | 
             
              task.options += ['--title',"YardGhurt v#{YardGhurt::VERSION} Doc"]
         | 
| 44 33 | 
             
            end
         | 
| 45 34 |  | 
| 46 | 
            -
             | 
| 47 | 
            -
            task  | 
| 48 | 
            -
            end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            YardGhurt::GFMFixTask.new() do |task|
         | 
| 51 | 
            -
              task.arg_names = [:dev]
         | 
| 35 | 
            +
            YardGhurt::GFMFixTask.new do |task|
         | 
| 36 | 
            +
              task.arg_names = %i[ dev ]
         | 
| 52 37 | 
             
              task.dry_run = false
         | 
| 53 38 | 
             
              task.fix_code_langs = true
         | 
| 54 | 
            -
             | 
| 55 | 
            -
              task.before =  | 
| 39 | 
            +
             | 
| 40 | 
            +
              task.before = proc do |t2,args|
         | 
| 41 | 
            +
                # Do not delete 'file.README.html', as we need it for testing.
         | 
| 42 | 
            +
             | 
| 56 43 | 
             
                # Root dir of my GitHub Page for CSS/JS
         | 
| 57 | 
            -
                 | 
| 58 | 
            -
             | 
| 59 | 
            -
                 | 
| 60 | 
            -
                 | 
| 44 | 
            +
                ghp_root_dir = YardGhurt.to_bool(args.dev) ? '../../esotericpig.github.io' : '../../..'
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                t2.css_styles << %Q(<link rel="stylesheet" type="text/css" href="#{ghp_root_dir}/css/prism.css" />)
         | 
| 47 | 
            +
                t2.js_scripts << %Q(<script src="#{ghp_root_dir}/js/prism.js"></script>)
         | 
| 61 48 | 
             
              end
         | 
| 62 49 | 
             
            end
         | 
| 63 50 |  | 
| 64 51 | 
             
            # Probably not useful for others.
         | 
| 65 | 
            -
            YardGhurt::GHPSyncTask.new | 
| 52 | 
            +
            YardGhurt::GHPSyncTask.new do |task|
         | 
| 66 53 | 
             
              task.ghp_dir = '../esotericpig.github.io/docs/yard_ghurt/yardoc'
         | 
| 67 54 | 
             
              task.sync_args << '--delete-after'
         | 
| 68 55 | 
             
            end
         | 
    
        data/bin/yard_ghurt
    CHANGED
    
    | @@ -4,20 +4,9 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            #--
         | 
| 6 6 | 
             
            # This file is part of YardGhurt.
         | 
| 7 | 
            -
            # Copyright (c) 2020 Jonathan Bradley Whited | 
| 8 | 
            -
            # | 
| 9 | 
            -
            #  | 
| 10 | 
            -
            # it under the terms of the GNU Lesser General Public License as published by
         | 
| 11 | 
            -
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 12 | 
            -
            # (at your option) any later version.
         | 
| 13 | 
            -
            # 
         | 
| 14 | 
            -
            # YardGhurt is distributed in the hope that it will be useful,
         | 
| 15 | 
            -
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 16 | 
            -
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 17 | 
            -
            # GNU Lesser General Public License for more details.
         | 
| 18 | 
            -
            # 
         | 
| 19 | 
            -
            # You should have received a copy of the GNU Lesser General Public License
         | 
| 20 | 
            -
            # along with YardGhurt.  If not, see <https://www.gnu.org/licenses/>.
         | 
| 7 | 
            +
            # Copyright (c) 2020-2021 Jonathan Bradley Whited
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # SPDX-License-Identifier: LGPL-3.0-or-later
         | 
| 21 10 | 
             
            #++
         | 
| 22 11 |  | 
| 23 12 |  | 
| @@ -25,5 +14,5 @@ require 'yard_ghurt' | |
| 25 14 |  | 
| 26 15 |  | 
| 27 16 | 
             
            # @since 1.2.0
         | 
| 28 | 
            -
            yg = YardGhurt::App.new | 
| 29 | 
            -
            yg.run | 
| 17 | 
            +
            yg = YardGhurt::App.new
         | 
| 18 | 
            +
            yg.run
         | 
    
        data/lib/yard_ghurt.rb
    CHANGED
    
    | @@ -1,23 +1,11 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 1 | 
             
            # encoding: UTF-8
         | 
| 3 2 | 
             
            # frozen_string_literal: true
         | 
| 4 3 |  | 
| 5 4 | 
             
            #--
         | 
| 6 5 | 
             
            # This file is part of YardGhurt.
         | 
| 7 | 
            -
            # Copyright (c) 2019- | 
| 8 | 
            -
            # | 
| 9 | 
            -
            #  | 
| 10 | 
            -
            # it under the terms of the GNU Lesser General Public License as published by
         | 
| 11 | 
            -
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 12 | 
            -
            # (at your option) any later version.
         | 
| 13 | 
            -
            # 
         | 
| 14 | 
            -
            # YardGhurt is distributed in the hope that it will be useful,
         | 
| 15 | 
            -
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 16 | 
            -
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 17 | 
            -
            # GNU Lesser General Public License for more details.
         | 
| 18 | 
            -
            # 
         | 
| 19 | 
            -
            # You should have received a copy of the GNU Lesser General Public License
         | 
| 20 | 
            -
            # along with YardGhurt.  If not, see <https://www.gnu.org/licenses/>.
         | 
| 6 | 
            +
            # Copyright (c) 2019-2021 Jonathan Bradley Whited
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # SPDX-License-Identifier: LGPL-3.0-or-later
         | 
| 21 9 | 
             
            #++
         | 
| 22 10 |  | 
| 23 11 |  | 
| @@ -31,58 +19,58 @@ require 'yard_ghurt/version' | |
| 31 19 |  | 
| 32 20 | 
             
            ###
         | 
| 33 21 | 
             
            # YARDoc GitHub Rake Tasks
         | 
| 34 | 
            -
            # | 
| 35 | 
            -
            # @author Jonathan Bradley Whited | 
| 22 | 
            +
            #
         | 
| 23 | 
            +
            # @author Jonathan Bradley Whited
         | 
| 36 24 | 
             
            # @since  1.0.0
         | 
| 37 25 | 
             
            ###
         | 
| 38 26 | 
             
            module YardGhurt
         | 
| 39 27 | 
             
              # Internal code should use +Util.+!
         | 
| 40 28 | 
             
              # See {Util} for details.
         | 
| 41 29 | 
             
              include Util
         | 
| 42 | 
            -
             | 
| 30 | 
            +
             | 
| 43 31 | 
             
              ###
         | 
| 44 32 | 
             
              # A simple CLI app used in file +bin/yard_ghurt+.
         | 
| 45 | 
            -
              # | 
| 33 | 
            +
              #
         | 
| 46 34 | 
             
              # Mainly for getting GitHub/YARDoc anchor link IDs.
         | 
| 47 | 
            -
              # | 
| 48 | 
            -
              # @author Jonathan Bradley Whited | 
| 35 | 
            +
              #
         | 
| 36 | 
            +
              # @author Jonathan Bradley Whited
         | 
| 49 37 | 
             
              # @since  1.2.0
         | 
| 50 38 | 
             
              ###
         | 
| 51 39 | 
             
              class App
         | 
| 52 40 | 
             
                attr_reader :args
         | 
| 53 | 
            -
             | 
| 41 | 
            +
             | 
| 54 42 | 
             
                def initialize(args=ARGV)
         | 
| 55 43 | 
             
                  super()
         | 
| 56 | 
            -
             | 
| 44 | 
            +
             | 
| 57 45 | 
             
                  @args = args
         | 
| 58 46 | 
             
                end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                def run | 
| 61 | 
            -
                  parser = OptionParser.new | 
| 47 | 
            +
             | 
| 48 | 
            +
                def run
         | 
| 49 | 
            +
                  parser = OptionParser.new do |op|
         | 
| 62 50 | 
             
                    op.program_name = 'yard_ghurt'
         | 
| 63 51 | 
             
                    op.version = VERSION
         | 
| 64 | 
            -
             | 
| 52 | 
            +
             | 
| 65 53 | 
             
                    op.banner = "Usage: #{op.program_name} [options]"
         | 
| 66 | 
            -
             | 
| 54 | 
            +
             | 
| 67 55 | 
             
                    op.on('-a','--anchor <string>','Print GitHub & YARDoc anchor link IDs of <string>') do |str|
         | 
| 68 | 
            -
                      al = AnchorLinks.new | 
| 56 | 
            +
                      al = AnchorLinks.new
         | 
| 69 57 | 
             
                      puts "GitHub: #{al.to_github_anchor_id(str)}"
         | 
| 70 58 | 
             
                      puts "YARDoc: #{al.to_yard_anchor_id(str)}"
         | 
| 71 59 | 
             
                      exit
         | 
| 72 60 | 
             
                    end
         | 
| 73 61 | 
             
                    op.on('-g','--github <string>','Print GitHub anchor link ID of <string>') do |str|
         | 
| 74 | 
            -
                      al = AnchorLinks.new | 
| 62 | 
            +
                      al = AnchorLinks.new
         | 
| 75 63 | 
             
                      puts al.to_github_anchor_id(str)
         | 
| 76 64 | 
             
                      exit
         | 
| 77 65 | 
             
                    end
         | 
| 78 66 | 
             
                    op.on('-y','--yard <string>','Print YARDoc anchor link ID of <string>') do |str|
         | 
| 79 | 
            -
                      al = AnchorLinks.new | 
| 67 | 
            +
                      al = AnchorLinks.new
         | 
| 80 68 | 
             
                      puts al.to_yard_anchor_id(str)
         | 
| 81 69 | 
             
                      exit
         | 
| 82 70 | 
             
                    end
         | 
| 83 | 
            -
             | 
| 71 | 
            +
             | 
| 84 72 | 
             
                    op.separator op.summary_indent + '---'
         | 
| 85 | 
            -
             | 
| 73 | 
            +
             | 
| 86 74 | 
             
                    op.on_tail('-h','--help','Print this help') do
         | 
| 87 75 | 
             
                      puts op
         | 
| 88 76 | 
             
                      exit
         | 
| @@ -92,7 +80,7 @@ module YardGhurt | |
| 92 80 | 
             
                      exit
         | 
| 93 81 | 
             
                    end
         | 
| 94 82 | 
             
                  end
         | 
| 95 | 
            -
             | 
| 83 | 
            +
             | 
| 96 84 | 
             
                  parser.parse!(@args)
         | 
| 97 85 | 
             
                  puts parser # Print help if nothing was parsed
         | 
| 98 86 | 
             
                end
         | 
| @@ -1,23 +1,11 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 1 | 
             
            # encoding: UTF-8
         | 
| 3 2 | 
             
            # frozen_string_literal: true
         | 
| 4 3 |  | 
| 5 4 | 
             
            #--
         | 
| 6 5 | 
             
            # This file is part of YardGhurt.
         | 
| 7 | 
            -
            # Copyright (c) 2019- | 
| 8 | 
            -
            # | 
| 9 | 
            -
            #  | 
| 10 | 
            -
            # it under the terms of the GNU Lesser General Public License as published by
         | 
| 11 | 
            -
            # the Free Software Foundation, either version 3 of the License, or
         | 
| 12 | 
            -
            # (at your option) any later version.
         | 
| 13 | 
            -
            # 
         | 
| 14 | 
            -
            # YardGhurt is distributed in the hope that it will be useful,
         | 
| 15 | 
            -
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
         | 
| 16 | 
            -
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         | 
| 17 | 
            -
            # GNU Lesser General Public License for more details.
         | 
| 18 | 
            -
            # 
         | 
| 19 | 
            -
            # You should have received a copy of the GNU Lesser General Public License
         | 
| 20 | 
            -
            # along with YardGhurt.  If not, see <https://www.gnu.org/licenses/>.
         | 
| 6 | 
            +
            # Copyright (c) 2019-2021 Jonathan Bradley Whited
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # SPDX-License-Identifier: LGPL-3.0-or-later
         | 
| 21 9 | 
             
            #++
         | 
| 22 10 |  | 
| 23 11 |  | 
| @@ -27,249 +15,252 @@ require 'uri' | |
| 27 15 | 
             
            module YardGhurt
         | 
| 28 16 | 
             
              ###
         | 
| 29 17 | 
             
              # A "database" of anchor links specific to GitHub Flavored Markdown (GFM) & YARDoc.
         | 
| 30 | 
            -
              # | 
| 18 | 
            +
              #
         | 
| 31 19 | 
             
              # You can use this by itself to view what anchor IDs would be generated:
         | 
| 32 20 | 
             
              #   al = YardGhurt::AnchorLinks.new()
         | 
| 33 | 
            -
              # | 
| 21 | 
            +
              #
         | 
| 34 22 | 
             
              #   puts al.to_github_anchor_id('This is a test!')
         | 
| 35 23 | 
             
              #   puts al.to_yard_anchor_id('This is a test!')
         | 
| 36 | 
            -
              # | 
| 24 | 
            +
              #
         | 
| 37 25 | 
             
              #   # Output:
         | 
| 38 26 | 
             
              #   # ---
         | 
| 39 27 | 
             
              #   # this-is-a-test
         | 
| 40 28 | 
             
              #   # This_is_a_test_
         | 
| 41 | 
            -
              # | 
| 29 | 
            +
              #
         | 
| 42 30 | 
             
              # Be aware that YARDoc depends on a common number that will be incremented for all duplicates,
         | 
| 43 31 | 
             
              # while GFM's number is only local to each specific duplicate:
         | 
| 44 32 | 
             
              #   al = YardGhurt::AnchorLinks.new()
         | 
| 45 33 | 
             
              #   name = 'This is a test!'
         | 
| 46 | 
            -
              # | 
| 34 | 
            +
              #
         | 
| 47 35 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_a_test_
         | 
| 48 36 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_a_test_
         | 
| 49 | 
            -
              # | 
| 37 | 
            +
              #
         | 
| 50 38 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-a-test
         | 
| 51 39 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-a-test
         | 
| 52 | 
            -
              # | 
| 40 | 
            +
              #
         | 
| 53 41 | 
             
              #   al << name # Officially add it to the database
         | 
| 54 | 
            -
              # | 
| 42 | 
            +
              #
         | 
| 55 43 | 
             
              #   # Instead of being 0 & 0, will be 0 & 1 (incremented),
         | 
| 56 44 | 
             
              #   #   even without being added to the database
         | 
| 57 45 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_a_test_0
         | 
| 58 46 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_a_test_1
         | 
| 59 | 
            -
              # | 
| 47 | 
            +
              #
         | 
| 60 48 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-a-test-1
         | 
| 61 49 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-a-test-1
         | 
| 62 | 
            -
              # | 
| 50 | 
            +
              #
         | 
| 63 51 | 
             
              #   name = 'This is another test!'
         | 
| 64 52 | 
             
              #   al << name # Officially add it to the database
         | 
| 65 | 
            -
              # | 
| 53 | 
            +
              #
         | 
| 66 54 | 
             
              #   # Instead of being 0 & 1, will be 2 & 3 (global increment),
         | 
| 67 55 | 
             
              #   #   even without being added to the database
         | 
| 68 56 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_another_test_2
         | 
| 69 57 | 
             
              #   puts al.to_yard_anchor_id(name)   # This_is_another_test_3
         | 
| 70 | 
            -
              # | 
| 58 | 
            +
              #
         | 
| 71 59 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-another-test-1
         | 
| 72 60 | 
             
              #   puts al.to_github_anchor_id(name) # this-is-another-test-1
         | 
| 73 | 
            -
              # | 
| 74 | 
            -
              # @author Jonathan Bradley Whited | 
| 61 | 
            +
              #
         | 
| 62 | 
            +
              # @author Jonathan Bradley Whited
         | 
| 75 63 | 
             
              # @since  1.0.0
         | 
| 76 | 
            -
              # | 
| 64 | 
            +
              #
         | 
| 77 65 | 
             
              # @see GFMFixTask
         | 
| 78 66 | 
             
              ###
         | 
| 79 67 | 
             
              class AnchorLinks
         | 
| 80 68 | 
             
                # @return [Hash] the GFM-style anchor IDs pointing to their YARDoc ID equivalents that have been added
         | 
| 81 69 | 
             
                attr_reader :anchor_ids
         | 
| 82 | 
            -
             | 
| 70 | 
            +
             | 
| 83 71 | 
             
                # @return [Set] the YARDoc anchor IDs that have been added
         | 
| 84 72 | 
             
                attr_accessor :yard_anchor_ids
         | 
| 85 | 
            -
             | 
| 73 | 
            +
             | 
| 86 74 | 
             
                # @return [Integer] the next YARDoc number to use if there is a duplicate anchor ID
         | 
| 87 75 | 
             
                attr_accessor :yard_dup_num
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                def initialize | 
| 90 | 
            -
                   | 
| 76 | 
            +
             | 
| 77 | 
            +
                def initialize
         | 
| 78 | 
            +
                  super()
         | 
| 79 | 
            +
                  reset
         | 
| 91 80 | 
             
                end
         | 
| 92 | 
            -
             | 
| 81 | 
            +
             | 
| 93 82 | 
             
                # Reset the database back to its fresh, pristine self,
         | 
| 94 83 | 
             
                # including common numbers for duplicates.
         | 
| 95 | 
            -
                def reset | 
| 84 | 
            +
                def reset
         | 
| 96 85 | 
             
                  @anchor_ids = {}
         | 
| 97 | 
            -
                  @yard_anchor_ids = Set.new | 
| 86 | 
            +
                  @yard_anchor_ids = Set.new
         | 
| 98 87 | 
             
                  @yard_dup_num = 0
         | 
| 99 88 | 
             
                end
         | 
| 100 | 
            -
             | 
| 89 | 
            +
             | 
| 101 90 | 
             
                # (see #add_anchor)
         | 
| 102 91 | 
             
                def <<(name)
         | 
| 103 92 | 
             
                  return add_anchor(name)
         | 
| 104 93 | 
             
                end
         | 
| 105 | 
            -
             | 
| 94 | 
            +
             | 
| 106 95 | 
             
                # (see #store_anchor)
         | 
| 107 96 | 
             
                def []=(github_anchor_id,yard_anchor_id)
         | 
| 108 | 
            -
                   | 
| 97 | 
            +
                  store_anchor(github_anchor_id,yard_anchor_id)
         | 
| 109 98 | 
             
                end
         | 
| 110 | 
            -
             | 
| 99 | 
            +
             | 
| 111 100 | 
             
                # Convert +name+ (header text) to a GFM and YARDoc anchor ID and add the IDs to the database.
         | 
| 112 | 
            -
                # | 
| 113 | 
            -
                # @ | 
| 114 | 
            -
                # | 
| 101 | 
            +
                #
         | 
| 102 | 
            +
                # @note +yard_id:+ was added in v1.2.1 for YARD v0.9.25+.
         | 
| 103 | 
            +
                #
         | 
| 104 | 
            +
                # @param  name [String] the name (header text) to convert to anchor IDs and add to the database
         | 
| 115 105 | 
             
                # @return [self]
         | 
| 116 | 
            -
                def add_anchor(name)
         | 
| 117 | 
            -
                   | 
| 118 | 
            -
             | 
| 106 | 
            +
                def add_anchor(name,yard_id: nil)
         | 
| 107 | 
            +
                  yard_id = to_yard_anchor_id(name) if yard_id.nil?
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  store_anchor(to_github_anchor_id(name),yard_id)
         | 
| 110 | 
            +
             | 
| 119 111 | 
             
                  return self
         | 
| 120 112 | 
             
                end
         | 
| 121 | 
            -
             | 
| 113 | 
            +
             | 
| 122 114 | 
             
                # Escape +str+ for the web (e.g., "%20" for a space).
         | 
| 123 | 
            -
                # | 
| 115 | 
            +
                #
         | 
| 124 116 | 
             
                # Mainly used for non-English languages.
         | 
| 125 | 
            -
                # | 
| 117 | 
            +
                #
         | 
| 126 118 | 
             
                # @param str [String] the string to escape
         | 
| 127 | 
            -
                # | 
| 119 | 
            +
                #
         | 
| 128 120 | 
             
                # @return [String] the escaped string
         | 
| 129 | 
            -
                # | 
| 121 | 
            +
                #
         | 
| 130 122 | 
             
                # @since  1.2.0
         | 
| 131 123 | 
             
                def self.escape(str)
         | 
| 132 124 | 
             
                  # URI.escape()/encode() is obsolete
         | 
| 133 125 | 
             
                  return URI.encode_www_form_component(str)
         | 
| 134 126 | 
             
                end
         | 
| 135 | 
            -
             | 
| 127 | 
            +
             | 
| 136 128 | 
             
                # Merge +anchor_ids+ with {anchor_ids} and {yard_anchor_ids}.
         | 
| 137 | 
            -
                # | 
| 129 | 
            +
                #
         | 
| 138 130 | 
             
                # @param anchor_ids [Hash] the anchor IDs (of GFM anchor IDs to YARDoc anchor IDs) to merge
         | 
| 139 131 | 
             
                def merge_anchor_ids!(anchor_ids)
         | 
| 140 132 | 
             
                  @anchor_ids.merge!(anchor_ids)
         | 
| 141 133 | 
             
                  @yard_anchor_ids.merge(anchor_ids.values)
         | 
| 142 | 
            -
             | 
| 134 | 
            +
             | 
| 143 135 | 
             
                  return @anchor_ids
         | 
| 144 136 | 
             
                end
         | 
| 145 | 
            -
             | 
| 137 | 
            +
             | 
| 146 138 | 
             
                # Store & associate key +github_anchor_id+ with value +yard_anchor_id+,
         | 
| 147 139 | 
             
                # and add +yard_anchor_id+ to the YARDoc anchor IDs.
         | 
| 148 | 
            -
                # | 
| 140 | 
            +
                #
         | 
| 149 141 | 
             
                # @param github_anchor_id [String] the GitHub anchor ID; the key
         | 
| 150 142 | 
             
                # @param yard_anchor_id [String] the YARDoc anchor ID; the value
         | 
| 151 | 
            -
                # | 
| 143 | 
            +
                #
         | 
| 152 144 | 
             
                # @return [String] the +yard_anchor_id+ added
         | 
| 153 145 | 
             
                def store_anchor(github_anchor_id,yard_anchor_id)
         | 
| 154 146 | 
             
                  @anchor_ids[github_anchor_id] = yard_anchor_id
         | 
| 155 147 | 
             
                  @yard_anchor_ids << yard_anchor_id
         | 
| 156 | 
            -
             | 
| 148 | 
            +
             | 
| 157 149 | 
             
                  return yard_anchor_id
         | 
| 158 150 | 
             
                end
         | 
| 159 | 
            -
             | 
| 151 | 
            +
             | 
| 160 152 | 
             
                def anchor_ids=(anchor_ids)
         | 
| 161 153 | 
             
                  @anchor_ids = anchor_ids
         | 
| 162 154 | 
             
                  @yard_anchor_ids.merge(anchor_ids.values)
         | 
| 163 | 
            -
                  
         | 
| 164 | 
            -
                  return @anchor_ids
         | 
| 165 155 | 
             
                end
         | 
| 166 | 
            -
             | 
| 156 | 
            +
             | 
| 167 157 | 
             
                # (see #anchor_id)
         | 
| 168 158 | 
             
                def [](github_anchor_id)
         | 
| 169 159 | 
             
                  return anchor_id(github_anchor_id)
         | 
| 170 160 | 
             
                end
         | 
| 171 | 
            -
             | 
| 161 | 
            +
             | 
| 172 162 | 
             
                # Get the YARDoc anchor ID associated with this +github_anchor_id+.
         | 
| 173 | 
            -
                # | 
| 163 | 
            +
                #
         | 
| 174 164 | 
             
                # @param github_anchor_id [String] the GitHub anchor ID key to look up
         | 
| 175 | 
            -
                # | 
| 165 | 
            +
                #
         | 
| 176 166 | 
             
                # @return [String,nil] the YARDoc anchor ID associated with +github_anchor_id+
         | 
| 177 167 | 
             
                def anchor_id(github_anchor_id)
         | 
| 178 168 | 
             
                  return @anchor_ids[github_anchor_id]
         | 
| 179 169 | 
             
                end
         | 
| 180 | 
            -
             | 
| 170 | 
            +
             | 
| 181 171 | 
             
                # Check if +id+ exists in the database of YARDoc anchor IDs
         | 
| 182 | 
            -
                # | 
| 172 | 
            +
                #
         | 
| 183 173 | 
             
                # @param id [String] the YARDoc anchor ID to check
         | 
| 184 | 
            -
                # | 
| 174 | 
            +
                #
         | 
| 185 175 | 
             
                # @return [true,false] whether this ID exists in the database of YARDoc anchor IDs
         | 
| 186 176 | 
             
                def yard_anchor_id?(id)
         | 
| 187 177 | 
             
                  return @yard_anchor_ids.include?(id)
         | 
| 188 178 | 
             
                end
         | 
| 189 | 
            -
             | 
| 179 | 
            +
             | 
| 190 180 | 
             
                # Convert +name+ (header text) to a GitHub anchor ID.
         | 
| 191 | 
            -
                # | 
| 181 | 
            +
                #
         | 
| 192 182 | 
             
                # If the converted ID already exists in the database,
         | 
| 193 183 | 
             
                # then the ID will be updated according to GFM rules.
         | 
| 194 | 
            -
                # | 
| 184 | 
            +
                #
         | 
| 195 185 | 
             
                # @param name [String] the name (header text) to convert
         | 
| 196 | 
            -
                # | 
| 186 | 
            +
                #
         | 
| 197 187 | 
             
                # @return [String] the converted GitHub anchor ID for this database
         | 
| 198 | 
            -
                # | 
| 188 | 
            +
                #
         | 
| 199 189 | 
             
                # @see https://gist.github.com/asabaylus/3071099#gistcomment-2834467
         | 
| 200 190 | 
             
                # @see https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb
         | 
| 201 191 | 
             
                def to_github_anchor_id(name)
         | 
| 202 | 
            -
                  id = name.dup | 
| 203 | 
            -
             | 
| 204 | 
            -
                  id.strip! | 
| 192 | 
            +
                  id = name.dup
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                  id.strip!
         | 
| 205 195 | 
             
                  id.gsub!(/&[^;]+;/,'') # Remove entities: &...;
         | 
| 206 196 | 
             
                  id.gsub!(/[^\p{Word}\- ]/u,'')
         | 
| 207 197 | 
             
                  id.tr!(' ','-')
         | 
| 208 | 
            -
             | 
| 198 | 
            +
             | 
| 209 199 | 
             
                  if RUBY_VERSION >= '2.4'
         | 
| 210 200 | 
             
                    id.downcase!(:ascii)
         | 
| 211 201 | 
             
                  else
         | 
| 212 | 
            -
                    id.downcase! | 
| 202 | 
            +
                    id.downcase!
         | 
| 213 203 | 
             
                  end
         | 
| 214 | 
            -
             | 
| 204 | 
            +
             | 
| 215 205 | 
             
                  id = self.class.escape(id) # For non-English languages
         | 
| 216 | 
            -
             | 
| 206 | 
            +
             | 
| 217 207 | 
             
                  # Duplicates
         | 
| 218 208 | 
             
                  dup_num = 1
         | 
| 219 | 
            -
                  orig_id = id.dup | 
| 220 | 
            -
             | 
| 209 | 
            +
                  orig_id = id.dup
         | 
| 210 | 
            +
             | 
| 221 211 | 
             
                  while @anchor_ids.key?(id)
         | 
| 222 212 | 
             
                    id = "#{orig_id}-#{dup_num}"
         | 
| 223 213 | 
             
                    dup_num += 1
         | 
| 224 214 | 
             
                  end
         | 
| 225 | 
            -
             | 
| 215 | 
            +
             | 
| 226 216 | 
             
                  return id
         | 
| 227 217 | 
             
                end
         | 
| 228 | 
            -
             | 
| 218 | 
            +
             | 
| 229 219 | 
             
                # Dumps the key-value database of GFM & YARDoc anchor IDs.
         | 
| 230 | 
            -
                # | 
| 220 | 
            +
                #
         | 
| 231 221 | 
             
                # @return [String] the database of anchor IDs as a String
         | 
| 232 | 
            -
                def to_s | 
| 233 | 
            -
                  s = ''.dup | 
| 234 | 
            -
             | 
| 235 | 
            -
                  @anchor_ids.keys.sort_by | 
| 222 | 
            +
                def to_s
         | 
| 223 | 
            +
                  s = ''.dup
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                  @anchor_ids.keys.sort_by(&:to_s).each do |key|
         | 
| 236 226 | 
             
                    s << "[#{key}] => '#{@anchor_ids[key]}'\n"
         | 
| 237 227 | 
             
                  end
         | 
| 238 | 
            -
             | 
| 228 | 
            +
             | 
| 239 229 | 
             
                  return s
         | 
| 240 230 | 
             
                end
         | 
| 241 | 
            -
             | 
| 231 | 
            +
             | 
| 242 232 | 
             
                # Convert +name+ (header text) to a YARDoc anchor ID.
         | 
| 243 | 
            -
                # | 
| 233 | 
            +
                #
         | 
| 244 234 | 
             
                # If the converted ID already exists in the database,
         | 
| 245 235 | 
             
                # then the ID will be updated according to YARDoc rules,
         | 
| 246 236 | 
             
                # which requires incrementing a common number variable.
         | 
| 247 | 
            -
                # | 
| 248 | 
            -
                # The logic for this is pulled from +doc/app.js#generateTOC() | 
| 249 | 
            -
                # which you can generate using +rake yard+ | 
| 250 | 
            -
                # 
         | 
| 237 | 
            +
                #
         | 
| 238 | 
            +
                # The logic for this is pulled from +doc/app.js#generateTOC()+
         | 
| 239 | 
            +
                # (or +doc/js/app.js+), which you can generate using +rake yard+
         | 
| 240 | 
            +
                # or +yardoc+ on the command line.
         | 
| 241 | 
            +
                #
         | 
| 251 242 | 
             
                # @note Be aware that this will increment a common number variable
         | 
| 252 243 | 
             
                #       every time you call this with a duplicate.
         | 
| 253 | 
            -
                # | 
| 244 | 
            +
                #
         | 
| 254 245 | 
             
                # @param name [String] the name (header text) to convert
         | 
| 255 | 
            -
                # | 
| 246 | 
            +
                #
         | 
| 256 247 | 
             
                # @return [String] the converted YARDoc anchor ID for this database
         | 
| 257 248 | 
             
                def to_yard_anchor_id(name)
         | 
| 258 | 
            -
                  id = name.dup | 
| 259 | 
            -
             | 
| 260 | 
            -
                  id.strip! | 
| 249 | 
            +
                  id = name.dup
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                  id.strip!
         | 
| 261 252 | 
             
                  id.gsub!(/&[^;]+;/,'_') # Replace entities: &...;
         | 
| 262 253 | 
             
                  id.gsub!(/[^a-z0-9-]/i,'_')
         | 
| 263 254 | 
             
                  id = self.class.escape(id) # For non-English languages
         | 
| 264 | 
            -
             | 
| 255 | 
            +
             | 
| 265 256 | 
             
                  # Duplicates
         | 
| 266 | 
            -
                  orig_id = id.dup | 
| 267 | 
            -
             | 
| 257 | 
            +
                  orig_id = id.dup
         | 
| 258 | 
            +
             | 
| 268 259 | 
             
                  while @yard_anchor_ids.include?(id)
         | 
| 269 260 | 
             
                    id = "#{orig_id}#{@yard_dup_num}"
         | 
| 270 261 | 
             
                    @yard_dup_num += 1
         | 
| 271 262 | 
             
                  end
         | 
| 272 | 
            -
             | 
| 263 | 
            +
             | 
| 273 264 | 
             
                  return id
         | 
| 274 265 | 
             
                end
         | 
| 275 266 | 
             
              end
         |