chinwag 0.1.5 → 1.2.0
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/Rakefile +1 -1
- data/ext/chinwag/chinwag.c +46 -41
- data/ext/chinwag/chinwag.h +20 -12
- data/ext/chinwag/config.c +6 -6
- data/ext/chinwag/dict.c +211 -107
- data/ext/chinwag/dict.h +93 -41
- data/ext/chinwag/latin.h +2 -2
- data/ext/chinwag/rb_chinwag_ext.c +255 -167
- data/ext/chinwag/seuss.h +2 -2
- data/ext/chinwag/tokenize.c +7 -5
- data/ext/chinwag/tokenize.h +5 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3fd89d4ee2f2e3439eb95d344a7ef538911055df
         | 
| 4 | 
            +
              data.tar.gz: 0cccb667d03b4543f09dff77de8ed74d6bd2b8f3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4bfd5c4396ad161bc3c2b32f10bff6922551930dca19d9fcac58b279e12b689a27aa36802d6800b5dbdec2eb7fbcd485a4fc3a5cdc7d682e6df5806ac62c2dd7
         | 
| 7 | 
            +
              data.tar.gz: a844beae99c7f6e6fd428a8373b7b7abf9030b2830cf49dd48511a80d867d8833023293ea1a119cc814d05f8914eeaa6cffbada31c65f37b5f4b7ca10f435da8
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -8,7 +8,7 @@ Rake::ExtensionTask.new "chinwag" do |ext| | |
| 8 8 | 
             
              ext.lib_dir = "lib/chinwag"
         | 
| 9 9 | 
             
            end
         | 
| 10 10 |  | 
| 11 | 
            -
            s = Gem::Specification.new "chinwag", " | 
| 11 | 
            +
            s = Gem::Specification.new "chinwag", "1.2.0" do |s|
         | 
| 12 12 | 
             
              s.authors = ["Chris Calo"]
         | 
| 13 13 | 
             
              s.email = ["ccalo@vulcanca.com"]
         | 
| 14 14 | 
             
              s.summary = "A text-synthesis library, for use in layout testing (and more)."
         | 
    
        data/ext/chinwag/chinwag.c
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            #include "chinwag.h"
         | 
| 2 2 |  | 
| 3 | 
            -
            char* chinwag | 
| 3 | 
            +
            char* chinwag
         | 
| 4 | 
            +
            (cw_t type, unsigned long min, unsigned long max, cwdict_t dict)
         | 
| 4 5 | 
             
            {
         | 
| 5 6 | 
             
              char* result = NULL;
         | 
| 6 7 |  | 
| @@ -27,17 +28,18 @@ char* chinwag(cw_t type, unsigned long min, unsigned long max, dict_t dict) | |
| 27 28 | 
             
                exit(EXIT_FAILURE);
         | 
| 28 29 | 
             
              }
         | 
| 29 30 |  | 
| 30 | 
            -
              if(type == CW_LETTERS) result =  | 
| 31 | 
            -
              else if(type == CW_WORDS) result =  | 
| 32 | 
            -
              else if(type == CW_SENTENCES) result =  | 
| 33 | 
            -
              else if(type == CW_PARAGRAPHS) result =  | 
| 31 | 
            +
              if(type == CW_LETTERS) result = cw_ltr_rng(min, max, dict);
         | 
| 32 | 
            +
              else if(type == CW_WORDS) result = cw_wrd_rng(min, max, dict);
         | 
| 33 | 
            +
              else if(type == CW_SENTENCES) result = cw_snt_rng(min, max, dict);
         | 
| 34 | 
            +
              else if(type == CW_PARAGRAPHS) result = cw_pgf_rng(min, max, dict);
         | 
| 34 35 |  | 
| 35 36 | 
             
              return result;
         | 
| 36 37 | 
             
            }
         | 
| 37 38 |  | 
| 38 | 
            -
            char*  | 
| 39 | 
            +
            char* cw_ltr_rng
         | 
| 40 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict)
         | 
| 39 41 | 
             
            {
         | 
| 40 | 
            -
               | 
| 42 | 
            +
              cwdict_t temp = cwdict_open();
         | 
| 41 43 | 
             
              I32 amount = motherr(min,max), total = 0; U32 len = 0;
         | 
| 42 44 | 
             
              char* s = (char*)malloc(SMALL_BUFFER); char* sample = NULL; 
         | 
| 43 45 | 
             
              char* result = NULL; char* vowels = "aeiou";
         | 
| @@ -54,7 +56,7 @@ char* ltr_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 54 56 | 
             
                }
         | 
| 55 57 | 
             
                else
         | 
| 56 58 | 
             
                {
         | 
| 57 | 
            -
                  s = strcpy(s,  | 
| 59 | 
            +
                  s = strcpy(s, cwdict_sample(dict));
         | 
| 58 60 | 
             
                  len = strlen(s); total += len; s[len] = '\0';
         | 
| 59 61 | 
             
                  if(len > amount || include(s, " ") || include(s, "-")) continue;
         | 
| 60 62 | 
             
                }
         | 
| @@ -90,25 +92,26 @@ char* ltr_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 90 92 | 
             
                  amount -= 2;
         | 
| 91 93 | 
             
                }
         | 
| 92 94 |  | 
| 93 | 
            -
                temp =  | 
| 95 | 
            +
                temp = cwdict_place_word(temp, s);
         | 
| 94 96 | 
             
                if(amount > 0 && amount != 1) --amount;
         | 
| 95 97 | 
             
              }
         | 
| 96 98 |  | 
| 97 99 | 
             
              // post-process dict (pass utility::capitalize function as parameter)
         | 
| 98 | 
            -
              temp =  | 
| 99 | 
            -
              temp =  | 
| 100 | 
            -
              result =  | 
| 100 | 
            +
              temp = cwdict_prune(temp, false);
         | 
| 101 | 
            +
              temp = cwdict_map(temp, capitalize);
         | 
| 102 | 
            +
              result = cwdict_join(temp, " ");
         | 
| 101 103 |  | 
| 102 | 
            -
               | 
| 104 | 
            +
              cwdict_close(temp);
         | 
| 103 105 | 
             
              free(s); s = NULL;
         | 
| 104 106 |  | 
| 105 107 | 
             
              return result;
         | 
| 106 108 | 
             
            }
         | 
| 107 109 |  | 
| 108 | 
            -
            char*  | 
| 110 | 
            +
            char* cw_wrd_rng
         | 
| 111 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict)
         | 
| 109 112 | 
             
            {
         | 
| 110 | 
            -
               | 
| 111 | 
            -
              U32 amount = motherr(min, max), total =  | 
| 113 | 
            +
              cwdict_t temp = cwdict_open();
         | 
| 114 | 
            +
              U32 amount = motherr(min, max), total = cwdict_length(dict);
         | 
| 112 115 | 
             
              char* sample = NULL; char* result = NULL;
         | 
| 113 116 | 
             
              bool invalid = true;
         | 
| 114 117 |  | 
| @@ -117,32 +120,33 @@ char* wrd_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 117 120 | 
             
              {
         | 
| 118 121 | 
             
                while(invalid)
         | 
| 119 122 | 
             
                {
         | 
| 120 | 
            -
                  sample =  | 
| 123 | 
            +
                  sample = cwdict_sample(dict);
         | 
| 121 124 |  | 
| 122 125 | 
             
                  // valid if no space, hyphen, or duplicate (latter depends on size)
         | 
| 123 126 | 
             
                  if(exclude(sample, " ") && exclude(sample, "-"))
         | 
| 124 127 | 
             
                  {
         | 
| 125 128 | 
             
                    if(amount > total) invalid = false;
         | 
| 126 | 
            -
                    else if( | 
| 129 | 
            +
                    else if(cwdict_exclude(temp, sample)) invalid = false;
         | 
| 127 130 | 
             
                  }
         | 
| 128 131 | 
             
                }
         | 
| 129 132 |  | 
| 130 | 
            -
                temp =  | 
| 133 | 
            +
                temp = cwdict_place_word(temp, sample);
         | 
| 131 134 | 
             
                invalid = true;
         | 
| 132 135 | 
             
              }
         | 
| 133 136 |  | 
| 134 137 | 
             
              // post-process dict (pass utility::capitalize function as parameter)
         | 
| 135 | 
            -
              temp =  | 
| 136 | 
            -
              result =  | 
| 138 | 
            +
              temp = cwdict_map(temp, capitalize);
         | 
| 139 | 
            +
              result = cwdict_join(temp, " ");
         | 
| 137 140 |  | 
| 138 | 
            -
               | 
| 141 | 
            +
              cwdict_close(temp);
         | 
| 139 142 |  | 
| 140 143 | 
             
              return result;
         | 
| 141 144 | 
             
            }
         | 
| 142 145 |  | 
| 143 | 
            -
            char*  | 
| 146 | 
            +
            char* cw_snt_rng
         | 
| 147 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict)
         | 
| 144 148 | 
             
            {
         | 
| 145 | 
            -
               | 
| 149 | 
            +
              cwdict_t master = cwdict_open(), temp; cwdrow_t selected;
         | 
| 146 150 | 
             
              U32 word_amount = 0, last = 0, amount = motherr(min, max), now = 0, 
         | 
| 147 151 | 
             
              len = 0, t_minus = 0; U8 comma = 0; I32 punct = 0;
         | 
| 148 152 | 
             
              U32* no_dice = (U32*)malloc(sizeof(U32) * SMALL_BUFFER);
         | 
| @@ -151,7 +155,7 @@ char* snt_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 151 155 |  | 
| 152 156 | 
             
              for(U32 i = 0; i != amount; ++i)
         | 
| 153 157 | 
             
              {
         | 
| 154 | 
            -
                temp =  | 
| 158 | 
            +
                temp = cwdict_open();
         | 
| 155 159 | 
             
                word_amount = motherr(SENTENCE_MIN_WORD_LENGTH, 
         | 
| 156 160 | 
             
                SENTENCE_MAX_WORD_LENGTH);
         | 
| 157 161 |  | 
| @@ -170,10 +174,10 @@ char* snt_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 170 174 | 
             
                  else if(last > 10 || last <= 2) { now = motherr(6, 10); t_minus = 3; }
         | 
| 171 175 |  | 
| 172 176 | 
             
                  selected = dict.drows[now];
         | 
| 173 | 
            -
                  sample =  | 
| 177 | 
            +
                  sample = cwdrow_sample(selected);
         | 
| 174 178 |  | 
| 175 | 
            -
                  while( | 
| 176 | 
            -
                  { sample =  | 
| 179 | 
            +
                  while(cwdict_include(temp, sample) && strlen(sample) != now)
         | 
| 180 | 
            +
                  { sample = cwdict_sample(dict); }
         | 
| 177 181 |  | 
| 178 182 | 
             
                  // add comma (if applicable)
         | 
| 179 183 | 
             
                  if(comma && j == comma - 1)
         | 
| @@ -186,18 +190,18 @@ char* snt_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 186 190 | 
             
                    s[len] = '\0';
         | 
| 187 191 |  | 
| 188 192 | 
             
                    s = add_suffix(s, ",");
         | 
| 189 | 
            -
                    temp =  | 
| 193 | 
            +
                    temp = cwdict_place_word(temp, s);
         | 
| 190 194 |  | 
| 191 195 | 
             
                    free(s);
         | 
| 192 196 | 
             
                  }
         | 
| 193 | 
            -
                  else temp =  | 
| 197 | 
            +
                  else temp = cwdict_place_word(temp, sample);
         | 
| 194 198 |  | 
| 195 199 | 
             
                  invalid = true;
         | 
| 196 200 | 
             
                  last = now;
         | 
| 197 201 | 
             
                }
         | 
| 198 202 |  | 
| 199 203 | 
             
                // join temporary dict into a sentence; capitalize first word
         | 
| 200 | 
            -
                s =  | 
| 204 | 
            +
                s = cwdict_join(temp, " ");
         | 
| 201 205 | 
             
                s = capitalize(s);
         | 
| 202 206 |  | 
| 203 207 | 
             
                // determine punctuation; 1 - period, 2 - question, 3 - exclamation
         | 
| @@ -209,38 +213,39 @@ char* snt_rng(unsigned long min, unsigned long max, dict_t dict) | |
| 209 213 | 
             
                else if(punct >= 85 && punct <= 99) s = add_suffix(s, "!");
         | 
| 210 214 |  | 
| 211 215 | 
             
                // add sentence to master dict and cleanup
         | 
| 212 | 
            -
                master =  | 
| 216 | 
            +
                master = cwdict_place_word(master, s);
         | 
| 213 217 |  | 
| 214 | 
            -
                 | 
| 218 | 
            +
                cwdict_close(temp);
         | 
| 215 219 | 
             
                free(s);
         | 
| 216 220 | 
             
              }
         | 
| 217 221 |  | 
| 218 | 
            -
              result =  | 
| 219 | 
            -
               | 
| 222 | 
            +
              result = cwdict_join(master, " ");
         | 
| 223 | 
            +
              cwdict_close(master);
         | 
| 220 224 | 
             
              free(no_dice);
         | 
| 221 225 |  | 
| 222 226 | 
             
              return result;
         | 
| 223 227 | 
             
            }
         | 
| 224 228 |  | 
| 225 | 
            -
            char*  | 
| 229 | 
            +
            char* cw_pgf_rng
         | 
| 230 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict)
         | 
| 226 231 | 
             
            {
         | 
| 227 232 | 
             
              char* result = NULL; char* sentences = NULL;
         | 
| 228 233 | 
             
              U32 amount = motherr(min, max), sentence_amount = 0;
         | 
| 229 | 
            -
               | 
| 234 | 
            +
              cwdict_t master = cwdict_open();
         | 
| 230 235 |  | 
| 231 236 | 
             
              for(U32 i = 0; i != amount; ++i)
         | 
| 232 237 | 
             
              {
         | 
| 233 238 | 
             
                sentence_amount = motherr(PARAGRAPH_MIN_SENTENCE_LENGTH, 
         | 
| 234 239 | 
             
                PARAGRAPH_MAX_SENTENCE_LENGTH);
         | 
| 235 240 |  | 
| 236 | 
            -
                sentences =  | 
| 237 | 
            -
                master =  | 
| 241 | 
            +
                sentences = cw_snt(sentence_amount, dict);
         | 
| 242 | 
            +
                master = cwdict_place_word(master, sentences);
         | 
| 238 243 |  | 
| 239 244 | 
             
                free(sentences);
         | 
| 240 245 | 
             
              }
         | 
| 241 246 |  | 
| 242 | 
            -
              result =  | 
| 243 | 
            -
               | 
| 247 | 
            +
              result = cwdict_join(master, "\n\n");
         | 
| 248 | 
            +
              cwdict_close(master);
         | 
| 244 249 |  | 
| 245 250 | 
             
              return result;
         | 
| 246 251 | 
             
            }
         | 
    
        data/ext/chinwag/chinwag.h
    CHANGED
    
    | @@ -36,15 +36,15 @@ typedef struct dictionary_type { | |
| 36 36 | 
             
              unsigned long largest;
         | 
| 37 37 | 
             
              unsigned long largest_pos;
         | 
| 38 38 | 
             
              char** words;
         | 
| 39 | 
            -
            }  | 
| 39 | 
            +
            } cwdrow_t;
         | 
| 40 40 |  | 
| 41 41 | 
             
            // dictionary (row container)
         | 
| 42 42 | 
             
            typedef struct dictionary_container_type {
         | 
| 43 43 | 
             
              bool sorted;
         | 
| 44 44 | 
             
              unsigned long count;
         | 
| 45 | 
            -
               | 
| 45 | 
            +
              cwdrow_t* drows;
         | 
| 46 46 | 
             
              char* name;
         | 
| 47 | 
            -
            }  | 
| 47 | 
            +
            } cwdict_t;
         | 
| 48 48 |  | 
| 49 49 | 
             
            #include "seuss.h"
         | 
| 50 50 | 
             
            #include "latin.h"
         | 
| @@ -56,16 +56,24 @@ typedef struct dictionary_container_type { | |
| 56 56 | 
             
            #include "config.h"
         | 
| 57 57 | 
             
            #include "dict.h"
         | 
| 58 58 |  | 
| 59 | 
            -
            char* chinwag | 
| 59 | 
            +
            char* chinwag
         | 
| 60 | 
            +
            (cw_t type, unsigned long min, unsigned long max, cwdict_t dict);
         | 
| 60 61 |  | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
            #define snt(amt, dict) snt_rng(amt, amt, dict)
         | 
| 64 | 
            -
            #define pgf(amt, dict) pgf_rng(amt, amt, dict)
         | 
| 62 | 
            +
            char* cw_ltr_rng
         | 
| 63 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict);
         | 
| 65 64 |  | 
| 66 | 
            -
            char*  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
            char*  | 
| 65 | 
            +
            char* cw_wrd_rng
         | 
| 66 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict);
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            char* cw_snt_rng
         | 
| 69 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict);
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            char* cw_pgf_rng
         | 
| 72 | 
            +
            (unsigned long min, unsigned long max, cwdict_t dict);
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            #define cw_ltr(amt, dict) cw_ltr_rng(amt, amt, dict)
         | 
| 75 | 
            +
            #define cw_wrd(amt, dict) cw_wrd_rng(amt, amt, dict)
         | 
| 76 | 
            +
            #define cw_snt(amt, dict) cw_snt_rng(amt, amt, dict)
         | 
| 77 | 
            +
            #define cw_pgf(amt, dict) cw_pgf_rng(amt, amt, dict)
         | 
| 70 78 |  | 
| 71 79 | 
             
            #endif
         | 
    
        data/ext/chinwag/config.c
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            #include "config.h"
         | 
| 2 2 |  | 
| 3 3 | 
             
            const unsigned MAJOR_VERSION = 1;
         | 
| 4 | 
            -
            const unsigned MINOR_VERSION =  | 
| 5 | 
            -
            const unsigned PATCH_VERSION =  | 
| 4 | 
            +
            const unsigned MINOR_VERSION = 2;
         | 
| 5 | 
            +
            const unsigned PATCH_VERSION = 0;
         | 
| 6 6 |  | 
| 7 | 
            -
            const char* const DATE_YEAR = " | 
| 8 | 
            -
            const char* const DATE_MONTH = " | 
| 9 | 
            -
            const char* const DATE_DAY = " | 
| 10 | 
            -
            const char* const REVISION = " | 
| 7 | 
            +
            const char* const DATE_YEAR = "2015";
         | 
| 8 | 
            +
            const char* const DATE_MONTH = "01";
         | 
| 9 | 
            +
            const char* const DATE_DAY = "03";
         | 
| 10 | 
            +
            const char* const REVISION = "914";
         | 
| 11 11 |  | 
| 12 12 | 
             
            const unsigned SMALL_BUFFER = 1024;
         | 
| 13 13 | 
             
            const unsigned LARGE_BUFFER = 5120;
         |