<?php /* functions.vcab.php * * vcab v0.6 * Copyleft (c) 2022 Bailey Moore <bunz@sdf.org> * gopher://sdf.org/1/users/bunz/code/vcab.zip * * Free for all. There's not much to steal. * */ global $file, $website; $tags = array('<i>', '</i>', '<b>', '</b> ', '<div class="ds-single">', '<div class="ds-list">', '</div>', '<span class="illustration">', '</span>'); $n1 = array('1.', '2.', '3.', '4.', '5.', '6.', '7.', '8.', '9.'); $n2 = array(' (1)', '(2)', '(3)', '(4)', '(5)', '(6)', '(7)', '(8)', '(9)'); function add_entry($word, $full) { global $main, $file; $open = fopen($file, "a+"); $node = $full == TRUE ? get_entry($word) : 0; $true = 0; if ($node != 0) { foreach ($node as $n) { if (fwrite($open, $n . "\n")) { $true++; } } } else { if (!strpos($word, "-")) { $word = $word . " -"; } if (fwrite($open, $word . "\n")) { $true++; } } fclose($open); exec('sort ' . $file . ' > ' . $main . 'new.vocabulary.list'); exec('rename -f ' . $main . 'new.vocabulary.list' . ' ' . $file); if ($true == 0) { return FALSE; } return TRUE; } function get_entry($word) { global $website, $tags, $n1, $n2; $definition = array(); $lines = file($website . $word); $html = ""; $z = 0; if ($website == "http://www.thefreedictionary.com/") { foreach ($lines as $line) { if (search_string("pseg", $line)) { $html = $line; break; } } if (!empty($html)) { $html = get_string_between($html, '</span><div class="pseg">', '<hr align="left" class="hmshort">'); $pseg = substr_count($html, "pseg") + 1; $node = $html; if ($pseg > 1) { while ($pseg != 0) { if (search_string("pseg", $html)) { $explode = explode('<div class="pseg">', $html, 2); $node = $explode[0]; } if (search_string('<div class="ds-single">', $node)) { $definition[$z] = $word . " - " . trim(get_string_between($node, '<i>', '</i>')) . " " . trim(get_string_between($node, '<div class="ds-single">', '</div></div>')); $definition[$z] = string_ends_with($definition[$z], ".") ? strtolower(rtrim($definition[$z], ".")) : strtolower($definition[$z]); } elseif (search_string('<div class="ds-list">', $node)) { $format = str_replace($tags, "", $node); $format = str_replace($n1, $n2, $format); $format = strpos($format, ".(") ? str_replace(".(", " (", $format) : $format; $definition[$z] = string_ends_with($format, ".") ? $word . " - " . strtolower(rtrim($format, ".")) : $word . " - " . strtolower($format); } $node = $explode[1]; if (strpos($definition[$z], ":")) { $format = explode(":", $definition[$z], 2); $definition[$z] = trim($format[0]); } $html = $node; $pseg--; $z++; } } else { if (search_string('<div class="ds-single">', $html)) { $definition[$z] = $word . " - " . trim(get_string_between($html, '<i>', '</i>')) . " " . trim(get_string_between($html, '<div class="ds-single">', '</div></div>')); $definition[$z] = string_ends_with($definition[$z], ".") ? strtolower(rtrim($definition[$z], ".")) : strtolower($definition[$z]); } elseif (search_string('<div class="ds-list">', $html)) { $format = str_replace($tags, "", $html); $format = str_replace($n1, $n2, $format); $format = strpos($format, ".(") ? str_replace(".(", " (", $format) : $format; $definition[$z] = string_ends_with($format, ".") ? $word . " - " . strtolower(rtrim($format, ".")) : $word . " - " . strtolower($format); } if (strpos($definition[$z], ":")) { $format = explode(":", $definition[$z], 2); $definition[$z] = trim($format[0]); } } } else { echo "\n[ ERROR ] Unable to retrieve word.\n"; return FALSE; } } return $definition; } function itemize($string, $full = TRUE) { if ($full == TRUE) { if (strpos($string, ".")) { $exp1 = explode("-", $string, 2); $exp2 = explode(".", $exp1[1], 2); $word = trim($exp1[0]); $type = trim($exp2[0]); $definition = trim($exp2[1]); return array($word, $type, $definition); } } else { if (strpos($string, "-")) { $exp1 = explode("-", $string, 2); $word = trim($exp1[0]); } else { $word = trim($string); } return $word; } return FALSE; } function search_file($needle, $haystack, $return = FALSE) { $contents = file_get_contents($haystack); $pattern = preg_quote($needle, '/'); $pattern = "/^.*$pattern.*\$/m"; if (preg_match_all($pattern, $contents, $matches)) { if ($return == TRUE) { return $matches; } return TRUE; } return FALSE; } function search_string($needle, $haystack) { if (preg_match_all("/$needle/im", $haystack) || strpos($haystack, $needle)) { return TRUE; } return FALSE; } function get_string_between($string, $start, $end) { $string = ' ' . $string; $ini = strpos($string, $start); if ($ini == 0) { return ''; } $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } function string_ends_with($haystack, $needle, $case = TRUE) { $expected_position = strlen($haystack) - strlen($needle); if ($case) { return strrpos($haystack, $needle, 0) === $expected_position; } return strripos($haystack, $needle, 0) === $expected_position; } function vcab_configure() { global $main, $file; if (file_exists($main . ".vcabrc")) { $config = fopen($main . ".vcabrc", "w"); } echo "\n\n\t[ vcab Configuration Module ]\n"; echo "\n\t\t \n"; echo "\n\t\t1) Vocabulary file: $file\n"; echo "\n\t\t2) Load config file automatically: no\n"; echo "\n\t\t3) \n"; echo "\n\t\t4) \n"; echo "\n\t\t5) \n"; echo "\n\t\t6) \n"; echo "\n\t\t7) \n"; echo "\n\t\t8) \n"; echo "\n\t\t9) \n"; } ?>