CINXE.COM

Open Scriptures

<!DOCTYPE html> <!-- Copyright 2009, OpenScriptures.org GPL 3 license: http://www.gnu.org/licenses/gpl.html --> <html xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="http://www.bibletechnologies.net/2003/OSIS/namespace"> <head> <meta charset="utf-8" /> <!--[if lt IE 9]><script src="https://openscriptures.org/wp-content/themes/1.0/html5shiv.js"></script><![endif]--> <title>Open Scriptures</title> <meta name="generator" content="WordPress 6.7.2" /> <meta name="description" content="Platform for the development of open scriptural linked data and its applications." /> <link rel="stylesheet" href="https://openscriptures.org/wp-content/themes/1.0/style.css?1397503787" type="text/css" media="screen" /> <!--[if lt IE 7]> <script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js"></script> <![endif]--> <link rel="alternate feed" title="Open Scriptures Blog Feed" type="application/rss+xml" href="http://feeds2.feedburner.com/open-scriptures" /> <link rel="feed" title="Open Scriptures Twitter Stream" type="application/rss+xml" href="http://twitter.com/statuses/user_timeline/22411269.rss" /> <link rel="pingback" href="https://openscriptures.org/xmlrpc.php" /> <link rel="shortcut icon" href="/favicon.png" type="image/png" /> <meta name='robots' content='max-image-preview:large' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"wpemoji":"https:\/\/openscriptures.org\/wp-includes\/js\/wp-emoji.js?ver=6.7.2","twemoji":"https:\/\/openscriptures.org\/wp-includes\/js\/twemoji.js?ver=6.7.2"}}; /** * @output wp-includes/js/wp-emoji-loader.js */ /** * Emoji Settings as exported in PHP via _print_emoji_detection_script(). * @typedef WPEmojiSettings * @type {object} * @property {?object} source * @property {?string} source.concatemoji * @property {?string} source.twemoji * @property {?string} source.wpemoji * @property {?boolean} DOMReady * @property {?Function} readyCallback */ /** * Support tests. * @typedef SupportTests * @type {object} * @property {?boolean} flag * @property {?boolean} emoji */ /** * IIFE to detect emoji support and load Twemoji if needed. * * @param {Window} window * @param {Document} document * @param {WPEmojiSettings} settings */ ( function wpEmojiLoader( window, document, settings ) { if ( typeof Promise === 'undefined' ) { return; } var sessionStorageKey = 'wpEmojiSettingsSupports'; var tests = [ 'flag', 'emoji' ]; /** * Checks whether the browser supports offloading to a Worker. * * @since 6.3.0 * * @private * * @returns {boolean} */ function supportsWorkerOffloading() { return ( typeof Worker !== 'undefined' && typeof OffscreenCanvas !== 'undefined' && typeof URL !== 'undefined' && URL.createObjectURL && typeof Blob !== 'undefined' ); } /** * @typedef SessionSupportTests * @type {object} * @property {number} timestamp * @property {SupportTests} supportTests */ /** * Get support tests from session. * * @since 6.3.0 * * @private * * @returns {?SupportTests} Support tests, or null if not set or older than 1 week. */ function getSessionSupportTests() { try { /** @type {SessionSupportTests} */ var item = JSON.parse( sessionStorage.getItem( sessionStorageKey ) ); if ( typeof item === 'object' && typeof item.timestamp === 'number' && new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds. typeof item.supportTests === 'object' ) { return item.supportTests; } } catch ( e ) {} return null; } /** * Persist the supports in session storage. * * @since 6.3.0 * * @private * * @param {SupportTests} supportTests Support tests. */ function setSessionSupportTests( supportTests ) { try { /** @type {SessionSupportTests} */ var item = { supportTests: supportTests, timestamp: new Date().valueOf() }; sessionStorage.setItem( sessionStorageKey, JSON.stringify( item ) ); } catch ( e ) {} } /** * Checks if two sets of Emoji characters render the same visually. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 4.9.0 * * @private * * @param {CanvasRenderingContext2D} context 2D Context. * @param {string} set1 Set of Emoji to test. * @param {string} set2 Set of Emoji to test. * * @return {boolean} True if the two sets render the same. */ function emojiSetsRenderIdentically( context, set1, set2 ) { // Cleanup from previous test. context.clearRect( 0, 0, context.canvas.width, context.canvas.height ); context.fillText( set1, 0, 0 ); var rendered1 = new Uint32Array( context.getImageData( 0, 0, context.canvas.width, context.canvas.height ).data ); // Cleanup from previous test. context.clearRect( 0, 0, context.canvas.width, context.canvas.height ); context.fillText( set2, 0, 0 ); var rendered2 = new Uint32Array( context.getImageData( 0, 0, context.canvas.width, context.canvas.height ).data ); return rendered1.every( function ( rendered2Data, index ) { return rendered2Data === rendered2[ index ]; } ); } /** * Determines if the browser properly renders Emoji that Twemoji can supplement. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 4.2.0 * * @private * * @param {CanvasRenderingContext2D} context 2D Context. * @param {string} type Whether to test for support of "flag" or "emoji". * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification. * * @return {boolean} True if the browser can render emoji, false if it cannot. */ function browserSupportsEmoji( context, type, emojiSetsRenderIdentically ) { var isIdentical; switch ( type ) { case 'flag': /* * Test for Transgender flag compatibility. Added in Unicode 13. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly (white flag emoji + transgender symbol). */ isIdentical = emojiSetsRenderIdentically( context, '\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence '\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space ); if ( isIdentical ) { return false; } /* * Test for UN flag compatibility. This is the least supported of the letter locale flags, * so gives us an easy test for full support. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly ([U] + [N]). */ isIdentical = emojiSetsRenderIdentically( context, '\uD83C\uDDFA\uD83C\uDDF3', // as the sequence of two code points '\uD83C\uDDFA\u200B\uD83C\uDDF3' // as the two code points separated by a zero-width space ); if ( isIdentical ) { return false; } /* * Test for English flag compatibility. England is a country in the United Kingdom, it * does not have a two letter locale code but rather a five letter sub-division code. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]). */ isIdentical = emojiSetsRenderIdentically( context, // as the flag sequence '\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F', // with each code point separated by a zero-width space '\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F' ); return ! isIdentical; case 'emoji': /* * Four and twenty blackbirds baked in a pie. * * To test for Emoji 15.0 support, try to render a new emoji: Blackbird. * * The Blackbird is a ZWJ sequence combining 🐦 Bird and ⬛ large black square., * * 0x1F426 (\uD83D\uDC26) == Bird * 0x200D == Zero-Width Joiner (ZWJ) that links the code points for the new emoji or * 0x200B == Zero-Width Space (ZWS) that is rendered for clients not supporting the new emoji. * 0x2B1B == Large Black Square * * When updating this test for future Emoji releases, ensure that individual emoji that make up the * sequence come from older emoji standards. */ isIdentical = emojiSetsRenderIdentically( context, '\uD83D\uDC26\u200D\u2B1B', // as the zero-width joiner sequence '\uD83D\uDC26\u200B\u2B1B' // separated by a zero-width space ); return ! isIdentical; } return false; } /** * Checks emoji support tests. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 6.3.0 * * @private * * @param {string[]} tests Tests. * @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification. * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification. * * @return {SupportTests} Support tests. */ function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically ) { var canvas; if ( typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ) { canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement. } else { canvas = document.createElement( 'canvas' ); } var context = canvas.getContext( '2d', { willReadFrequently: true } ); /* * Chrome on OS X added native emoji rendering in M41. Unfortunately, * it doesn't work when the font is bolder than 500 weight. So, we * check for bold rendering support to avoid invisible emoji in Chrome. */ context.textBaseline = 'top'; context.font = '600 32px Arial'; var supports = {}; tests.forEach( function ( test ) { supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically ); } ); return supports; } /** * Adds a script to the head of the document. * * @ignore * * @since 4.2.0 * * @param {string} src The url where the script is located. * * @return {void} */ function addScript( src ) { var script = document.createElement( 'script' ); script.src = src; script.defer = true; document.head.appendChild( script ); } settings.supports = { everything: true, everythingExceptFlag: true }; // Create a promise for DOMContentLoaded since the worker logic may finish after the event has fired. var domReadyPromise = new Promise( function ( resolve ) { document.addEventListener( 'DOMContentLoaded', resolve, { once: true } ); } ); // Obtain the emoji support from the browser, asynchronously when possible. new Promise( function ( resolve ) { var supportTests = getSessionSupportTests(); if ( supportTests ) { resolve( supportTests ); return; } if ( supportsWorkerOffloading() ) { try { // Note that the functions are being passed as arguments due to minification. var workerScript = 'postMessage(' + testEmojiSupports.toString() + '(' + [ JSON.stringify( tests ), browserSupportsEmoji.toString(), emojiSetsRenderIdentically.toString() ].join( ',' ) + '));'; var blob = new Blob( [ workerScript ], { type: 'text/javascript' } ); var worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } ); worker.onmessage = function ( event ) { supportTests = event.data; setSessionSupportTests( supportTests ); worker.terminate(); resolve( supportTests ); }; return; } catch ( e ) {} } supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically ); setSessionSupportTests( supportTests ); resolve( supportTests ); } ) // Once the browser emoji support has been obtained from the session, finalize the settings. .then( function ( supportTests ) { /* * Tests the browser support for flag emojis and other emojis, and adjusts the * support settings accordingly. */ for ( var test in supportTests ) { settings.supports[ test ] = supportTests[ test ]; settings.supports.everything = settings.supports.everything && settings.supports[ test ]; if ( 'flag' !== test ) { settings.supports.everythingExceptFlag = settings.supports.everythingExceptFlag && settings.supports[ test ]; } } settings.supports.everythingExceptFlag = settings.supports.everythingExceptFlag && ! settings.supports.flag; // Sets DOMReady to false and assigns a ready function to settings. settings.DOMReady = false; settings.readyCallback = function () { settings.DOMReady = true; }; } ) .then( function () { return domReadyPromise; } ) .then( function () { // When the browser can not render everything we need to load a polyfill. if ( ! settings.supports.everything ) { settings.readyCallback(); var src = settings.source || {}; if ( src.concatemoji ) { addScript( src.concatemoji ); } else if ( src.wpemoji && src.twemoji ) { addScript( src.twemoji ); addScript( src.wpemoji ); } } } ); } )( window, document, window._wpemojiSettings ); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://openscriptures.org/wp-includes/css/dist/block-library/style.css?ver=6.7.2' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css' type='text/css'> /** * These rules are needed for backwards compatibility. * They should match the button element rules in the base theme.json file. */ .wp-block-button__link { color: #ffffff; background-color: #32373c; border-radius: 9999px; /* 100% causes an oval, but any explicit but really high value retains the pill shape. */ /* This needs a low specificity so it won't override the rules from the button element if defined in theme.json. */ box-shadow: none; text-decoration: none; /* The extra 2px are added to size solids the same as the outline versions.*/ padding: calc(0.667em + 2px) calc(1.333em + 2px); font-size: 1.125em; } .wp-block-file__button { background: #32373c; color: #ffffff; text-decoration: none; } </style> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <style id='akismet-widget-style-inline-css' type='text/css'> .a-stats { --akismet-color-mid-green: #357b49; --akismet-color-white: #fff; --akismet-color-light-grey: #f6f7f7; max-width: 350px; width: auto; } .a-stats * { all: unset; box-sizing: border-box; } .a-stats strong { font-weight: 600; } .a-stats a.a-stats__link, .a-stats a.a-stats__link:visited, .a-stats a.a-stats__link:active { background: var(--akismet-color-mid-green); border: none; box-shadow: none; border-radius: 8px; color: var(--akismet-color-white); cursor: pointer; display: block; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen-Sans', 'Ubuntu', 'Cantarell', 'Helvetica Neue', sans-serif; font-weight: 500; padding: 12px; text-align: center; text-decoration: none; transition: all 0.2s ease; } /* Extra specificity to deal with TwentyTwentyOne focus style */ .widget .a-stats a.a-stats__link:focus { background: var(--akismet-color-mid-green); color: var(--akismet-color-white); text-decoration: none; } .a-stats a.a-stats__link:hover { filter: brightness(110%); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06), 0 0 2px rgba(0, 0, 0, 0.16); } .a-stats .count { color: var(--akismet-color-white); display: block; font-size: 1.5em; line-height: 1.4; padding: 0 13px; white-space: nowrap; } </style> <link rel="https://api.w.org/" href="https://openscriptures.org/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://openscriptures.org/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.7.2" /> </head> <body class="home"> <header> <h1><a href="https://openscriptures.org/" rel="home" title="Open Scriptures home page"><img src="/logo.png" alt="Open Scriptures logo: an open Bible" />Open Scriptures</a></h1> <h2>Platform for the development of open scriptural linked data and its applications. <a href="/about/" title="About the Open Scriptures project">More…</a></h2> </header> <nav> <ul> <li id="oss-about-the-project" class="widget oss_widget_about"><h3><a href="/about/">About the Project</a></h3> <ul> <li class='icon oshb'><strong><a href="http://openscriptures.github.io/morphhb/" title="Open Scriptures Hebrew Bible (OSHB)">Hebrew Bible</a></strong></li> <!--<li class='icon delicious'><strong><a href="/directory/" title="Find resources that promote Open Scriptures on the Web">Directory</a></strong></li>--> <li class='icon feed'><a rel="feed" type="application/rss+xml" href="http://feeds2.feedburner.com/open-scriptures" title="Subscribe to the Open Scriptures blog">Blog Feed</a></li> <li class='icon google-groups'><a href="http://groups.google.com/group/openscriptures" title="Join in the discussion at the Open Scriptures Google Group">Discussion Group</a></li> <!--<li><a href="http://code.google.com/p/open-scriptures/issues/list">Report Issues</a></li>--> <li class='icon github'><a href="http://github.com/openscriptures" title="Check out the Open Scriptures source code on GitHub and fork it!">Source Code</a></li> <li class='icon twitter'><a href="http://twitter.com/openscriptures" title="Follow Open Scriptures (openscriptures) on Twitter">Twitter</a></li> <li class='icon facebook'><a href="http://facebook.com/openscriptures" title="Friend Open Scriptures on Facebook">Facebook</a></li> </ul> </li><li id="oss-prototypes" class="widget oss_widget_prototypes"><h3>Prototypes</h3> <ul> <li><a href="http://prototypes.openscriptures.org/manuscript-comparator/"><strong>Manuscript Comparator</strong> <img src="/wp-content/uploads/manuscript-comparator-unified-view-150x150.png" alt="Manuscript Comparator screenshot" style="display:block" /></a></li> <li><a href="http://prototypes.openscriptures.org/reference-parser-test.php">Reference Parser</a></li> <li><a href="http://prototypes.openscriptures.org/work-viewer/">Work Viewer</a></li> </ul> </li> </ul> </nav> <article id="content" class="hfeed"> <h1>Blog Posts</h1> <article> <header> <h2><a href="https://openscriptures.org/blog/2011/03/usfm-codes/" rel="bookmark" title="Permanent Link to USFM Codes">USFM Codes</a></h2> </header> <footer> <time class='published' datetime="2011-03-16T19:39:29-08:00">March 16th, 2011</time> by RobH. </footer> <p><a href="http://paratext.ubs-translations.org/usfm">Unified Standard Format Markers</a> are a system of short alphanumeric markers (which follow backslashes in text files) used by <a href="http://www.biblesociety.org/">UBS</a> and <a href="http://sil.org/">SIL</a> to encode Bible translations. Each book is usually stored in a separate file. (In floppy disk days, it was each chapter.) USFM is mostly used by the <a href="http://paratext.ubs-translations.org/about/pt">Paratext</a> editor for Bible translations in progress.</p> <p>The XML data file and scripts uploaded today are the simple beginnings of a framework to allow access to folders containing USFM texts. USFMMarkers.py loads and converts the XML file containing USFM codes, and provides some simple look-up functions. USFMFilenames.py accepts a folder name and searches for USFM files in that folder. All very simple, but hopefully another small step forwards.</p> <footer><a href="https://openscriptures.org/blog/2011/03/usfm-codes/#comments">1 Comment &#187;</a></footer> </article> <article> <header> <h2><a href="https://openscriptures.org/blog/2011/02/bible-books-names/" rel="bookmark" title="Permanent Link to Bible Books Names">Bible Books Names</a></h2> </header> <footer> <time class='published' datetime="2011-02-22T19:20:26-08:00">February 22nd, 2011</time> by RobH. </footer> <p>Well now we&#8217;re into a little bit of fun stuff &#8212; trying to work out how to handle the user inputs to select a certain book out of a certain publication. For each language, we have a XML data file which specifies the defaultName and defaultAbbreviation for all the books, e.g., Genesis (Gen), Jude (Jde), etc.</p> <p>We can use those fields for display and for keyboard input, and we have included a simple routine to create a list of all unambiguous shortcuts, e.g., we could accept <em>Ge</em> and also know that the user meant <em>Genesis</em> because no other (English) Bible book starts with <em>Ge</em>. But we also would like to accept <em>Gn</em>. So we add an extra <strong>inputAbbreviation</strong> field, where we can add things like <em>Gnss</em>. Again, the program will create a list of unambiguous shortcuts from this information (which would include <em>Gns</em> and <em>Gn</em>).</p> <p>But why not also automatically include <em>G</em> as a shortcut for <em>Genesis</em>? Well, the problem is that <em>G</em> could equally stand for <em>Galatians</em>. But if we specified that our particular publication only contains Old Testament books, then this additional piece of information would allow the software to automatically include <em>G</em> as an unambiguous shortcut for <em>Genesis</em>. And of course, you could override by entering <em>G</em> as an inputAbbreviation for <em>Genesis</em> anyway if you desire, even for a complete Bible publication.</p> <p>Ok, that&#8217;s fairly simple then. But what about <em>1 Timothy</em>? It would be nice to accept <em>1Tim</em> (without a space), or<em> I Tim</em> (using Roman numerals), <em>1st Tim</em>, etc. Well the information to do this is also put in the XML file under the section <strong>BibleBooknameLeaders</strong>. This specifies everything that you will accept instead of the <em>1</em>, e.g., <em>I</em>, <em>First</em>, <em>One</em>, etc. The software automatically handles all the various combinations for you &#8212; with and without the intervening spaces.</p> <p>And then the third and final (but first in the file) section of the XML file is for <strong>BibleDivisionNames</strong>. You might want to limit a search, for example, to the Old Testament or the Pentateuch. So in this section we can specify our division names and abbreviations, and a list of the books which would be included in each division.</p> <p>The XML filename includes the ISO 639-3 language code. But it also includes a qualifier, so you could have something like <em>eng_traditional</em> and <em>eng_modern</em>. Why? Well, what if you wanted to call the final book of your publication <em>Vision</em> instead of <em>Revelation</em>? It&#8217;s still English but a different system and we would need to know how you want that different bookname displayed. (Although that example is fictitious, in the Philippines where I worked it&#8217;s actually common to nickname Bible versions by the different names that the translators gave to the book of Revelation.)</p> <p>So look through the data files at <a href="https://github.com/openscriptures/BibleOrgSys/tree/master/DataFiles/BookNames">https://github.com/openscriptures/BibleOrgSys/tree/master/DataFiles/BookNames</a> and tell me what other pieces of information I should still have in there. Note that I didn&#8217;t include extended book names (like <em>The Second Epistle of the Apostle Paul to the Church at Corinth</em>) as it seems to me that they only need to be specified in the actual Biblical material itself. I took a stab at creating basic files for French and German also, even though I don&#8217;t speak those languages, so I&#8217;m sure they&#8217;ll need some fixing. Note also that specifying the books included in a division (such as <em>Old Testament</em> or <em>Pauline Letters</em>) here does seem a little out of place (maybe it would seem more logical in the book orders data files), but since that kind of division information often relates to the cultural heritage, I&#8217;ve accepted it for now as a reasonable compromise.</p> <p>There&#8217;s also some basic Python3 code to handle these data files at <a href="https://github.com/openscriptures/BibleOrgSys/tree/master/BibleBooksNames.py">https://github.com/openscriptures/BibleOrgSys/tree/master/BibleBooksNames.py</a>. It runs a brief demo so check it out and send me your suggestions and improvements.</p> <footer><a href="https://openscriptures.org/blog/2011/02/bible-books-names/#respond">No Comments &#187;</a></footer> </article> <article> <header> <h2><a href="https://openscriptures.org/blog/2011/02/bible-punctuation-systems/" rel="bookmark" title="Permanent Link to Bible Punctuation Systems">Bible Punctuation Systems</a></h2> </header> <footer> <time class='published' datetime="2011-02-14T19:16:38-08:00">February 14th, 2011</time> by RobH. </footer> <p>Why do we need to specify the punctuation system for a Bible? Isn&#8217;t that sort of information already set on my computer in my locale? Well yes, the common punctuation conventions for your language might be defined in your locale, but there&#8217;s three good reasons why we need to define our own system here:</p> <ol> <li>We want to handle not just our own language here, but also the languages of the original texts, perhaps including Hebrew, Aramaic and Greek, plus the languages of other translations, e.g., Latin.</li> <li>Even within one language, there might be differences. For example, many of the original texts didn&#8217;t have <strong>any</strong> punctuation (or even word breaks). So we want to be able to specify the punctuation for any publication.</li> <li>Our standard computer locales are not likely to include the punctuation standard for Bible references and other Bible-specific uses.</li> </ol> <p>Today I&#8217;ve committed the first attempt at a simple XML file for specifying the punctuation for a Bible publication. I&#8217;ve labelled my attempts as V0.40 because I&#8217;m sure that there&#8217;s going to be many more fields that we&#8217;ll need to add. And for that reason also, I haven&#8217;t yet tried to make data files for a large range of languages.</p> <p>As we develop the system further, we&#8217;ll be needing ways to tell a computer program how to parse a digital text, i.e., how to determine all the different parts of the text. Another of my specific interests is also <strong>checking</strong> Bible files to make sure they are consistent ready for online or print publishing. So that requires specifying even more punctuation and formatting type details.</p> <p>So as already mentioned, the current files at <a href="https://github.com/openscriptures/BibleOrgSys/tree/master/DataFiles/PunctuationSystems">https://github.com/openscriptures/BibleOrgSys/tree/master/DataFiles/PunctuationSystems</a> are really only just a starting point to work from. Let me know what else we&#8217;ll need to add.</p> <footer><a href="https://openscriptures.org/blog/2011/02/bible-punctuation-systems/#comments">1 Comment &#187;</a></footer> </article> <article> <header> <h2><a href="https://openscriptures.org/blog/2011/02/bible-book-orders/" rel="bookmark" title="Permanent Link to Bible Book Orders">Bible Book Orders</a></h2> </header> <footer> <time class='published' datetime="2011-02-02T15:59:43-08:00">February 2nd, 2011</time> by RobH. </footer> <p>At some point, a Bible organisational system has to define both the actual books which are included in the publication, and the order in which they are presented. (As I pointed out in my <a href="https://openscriptures.org/blog/2011/01/bible-organisational-system/">introductory blog</a>, both of these factors can vary considerably across cultures.)</p> <p>I have found it better to separate this information from the versification information (about where chapter and verse breaks come). So the book order files are very simple &#8212; basically just an ordered list of book codes, e.g., GEN, EXO, &#8230; REV or whatever. Of course, many publications will have the same list of book contents and in the same order, so it makes reasonable sense to separate this information out so it can be easily reused.</p> <p>Today I committed some book order data (XML) files which I&#8217;m aware of, although they haven&#8217;t been tested out against real publications as well as I would like. Also, there might be reason to name some of the systems better before we take it to V1.0. And, of course, it is easy to add systems which I wasn&#8217;t aware of with this initial commit. So there&#8217;s plenty of room for other people to help with their expertise here.</p> <p>This is the end of the easy stuff &#8212; everything gets a lot more complex from here on in, so my blogs and code additions are likely to become much more sparse.</p> <footer><a href="https://openscriptures.org/blog/2011/02/bible-book-orders/#comments">2 Comments &#187;</a></footer> </article> <article> <header> <h2><a href="https://openscriptures.org/blog/2011/02/language-codes/" rel="bookmark" title="Permanent Link to Language Codes">Language Codes</a></h2> </header> <footer> <time class='published' datetime="2011-02-01T16:11:18-08:00">February 1st, 2011</time> by RobH. </footer> <p>Language Codes</p> <p>Any Bible organisational system has to have a way to define languages. We&#8217;ll be dealing with Biblical languages like Hebrew, Aramaic, and Greek, as well as the many languages of translations.</p> <p>Many systems have used 2-letter codes like &#8216;<em>en</em>&#8216; or &#8216;<em>fr</em>&#8216; for naming languages. But 2-letter codes have a maximum of 26 squared possibilities, which equals 676 &#8212; a whole order of magnitude short of being able to represent the some 7,000 languages of the world. And since we want the Bible to reach all peoples of the world, we want to include their languages from the beginning.</p> <p>So in a truly international system, we&#8217;ll need to use codes of at least 3-letters. (Yes, 17,576 codes should be enough!) And the <a href="http://en.wikipedia.org/wiki/ISO_639-3" target="_blank">ISO 639-3 </a>standard, which came originally from the <a href="http://www.ethnologue.com/" target="_blank">Ethnologue</a> and is currently still administered by <a href="http://www.sil.org/iso639-3/" target="_blank">SIL</a> gives us that.</p> <p>Today I <a href="https://github.com/openscriptures/BibleOrgSys">committed</a> Python code to access the ISO 639-3 information. It&#8217;s just a little foundational step that&#8217;ll be needed later on.</p> <p>[I&#8217;m not sure yet that it handles everything we need &#8212; for example Americans and New Zealanders both speak English (code &#8216;<em>eng</em>&#8216;) but we choose, pronounce, and spell many words differently. So we might be needing to extend this language code system sometime when we get into spell-checking and such.]</p> <footer><a href="https://openscriptures.org/blog/2011/02/language-codes/#comments">2 Comments &#187;</a></footer> </article> <nav class="paged"> <a href="https://openscriptures.org/page/2/" rel='next'>Next &#xBB;</a></nav> </article> <footer> <p> Code open source under <a href="http://www.gnu.org/licenses/gpl.html" rel="license">GPL 3</a>. Content licensed <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0</a>. Proudly powered by <a href="http://wordpress.org/">WordPress</a>. <!--<a href="https://openscriptures.org/feed/">Entries (RSS)</a> and <a href="https://openscriptures.org/comments/feed/">Comments (RSS)</a>.--> <!-- 21 queries. 1.482 seconds. --> </p> <address> Copyright &#xA9; 2009, OpenScriptures.org </address> <style id='core-block-supports-inline-css' type='text/css'> /** * Core styles: block-supports */ </style> </footer> <script type="text/javascript" src="https://ssl.google-analytics.com/ga.js"></script> <!-- Google Analytics --> <script type="text/javascript"> try { var pageTracker = _gat._getTracker("UA-6816157-1"); pageTracker._trackPageview(); } catch(e) {} </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10