CINXE.COM
SIL Converters - Developer - SIL Language Technology
<!doctype html> <!--[if lt IE 7]><html class="no-js ie ie6 lt-ie9 lt-ie8 lt-ie7" lang="en-US" prefix="og: https://ogp.me/ns#"> <![endif]--> <!--[if IE 7]><html class="no-js ie ie7 lt-ie9 lt-ie8" lang="en-US" prefix="og: https://ogp.me/ns#"> <![endif]--> <!--[if IE 8]><html class="no-js ie ie8 lt-ie9" lang="en-US" prefix="og: https://ogp.me/ns#"> <![endif]--> <!--[if gt IE 8]><!--><html class="no-js" lang="en-US" prefix="og: https://ogp.me/ns#"> <!--<![endif]--> <head> <meta charset="UTF-8" /> <title> SIL Converters - Developer - SIL Language Technology </title> <meta name="description" content="Supporting language communities with literacy, development, and translation tools"> <link rel="stylesheet" href="https://software.sil.org/wp/wp-content/themes/web-productsites/css/style.css" type="text/css" media="screen" /> <link rel="stylesheet" href="https://software.sil.org/wp/wp-content/themes/web-productsites/vendor/fortawesome/font-awesome/css/font-awesome.min.css"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="pingback" href="https://software.sil.org/wp/xmlrpc.php" /> <link href='https://fonts.googleapis.com/css?family=Open+Sans:400italic,400,700,700italic' rel='stylesheet' type='text/css'> <style>#page-site-banner { background-image: url(https://software.sil.org/wp/wp-content/uploads/2024/08/banner_image-1.jpeg); }</style> <!-- Search Engine Optimization by Rank Math PRO - https://rankmath.com/ --> <meta name="description" content="How to get TECkit, CC, ICU, Perl and Python for text processing with one interface"/> <meta name="robots" content="index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/> <link rel="canonical" href="https://software.sil.org/silconverters/silconverters-developer/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="SIL Converters - Developer - SIL Language Technology" /> <meta property="og:description" content="How to get TECkit, CC, ICU, Perl and Python for text processing with one interface" /> <meta property="og:url" content="https://software.sil.org/silconverters/silconverters-developer/" /> <meta property="og:site_name" content="SIL Language Technology" /> <meta property="og:updated_time" content="2021-08-10T14:23:26+00:00" /> <meta property="og:image" content="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png" /> <meta property="og:image:secure_url" content="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png" /> <meta property="og:image:width" content="560" /> <meta property="og:image:height" content="544" /> <meta property="og:image:alt" content="SIL Converters — Developer" /> <meta property="og:image:type" content="image/png" /> <meta property="article:published_time" content="2021-07-21T19:53:28+00:00" /> <meta property="article:modified_time" content="2021-08-10T14:23:26+00:00" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="SIL Converters - Developer - SIL Language Technology" /> <meta name="twitter:description" content="How to get TECkit, CC, ICU, Perl and Python for text processing with one interface" /> <meta name="twitter:image" content="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png" /> <meta name="twitter:label1" content="Time to read" /> <meta name="twitter:data1" content="12 minutes" /> <script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://software.sil.org/#organization","name":"SIL Language Technology","url":"https://software.sil.org","logo":{"@type":"ImageObject","@id":"https://software.sil.org/#logo","url":"https://software.sil.org/wp/wp-content/uploads/2017/01/2014_sil_logo_80w_96h.png","contentUrl":"https://software.sil.org/wp/wp-content/uploads/2017/01/2014_sil_logo_80w_96h.png","caption":"SIL Language Technology","inLanguage":"en-US","width":"80","height":"96"}},{"@type":"WebSite","@id":"https://software.sil.org/#website","url":"https://software.sil.org","name":"SIL Language Technology","publisher":{"@id":"https://software.sil.org/#organization"},"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png","url":"https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png","width":"200","height":"200","inLanguage":"en-US"},{"@type":"WebPage","@id":"https://software.sil.org/silconverters/silconverters-developer/#webpage","url":"https://software.sil.org/silconverters/silconverters-developer/","name":"SIL Converters - Developer - SIL Language Technology","datePublished":"2021-07-21T19:53:28+00:00","dateModified":"2021-08-10T14:23:26+00:00","isPartOf":{"@id":"https://software.sil.org/#website"},"primaryImageOfPage":{"@id":"https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png"},"inLanguage":"en-US"},{"@type":"Person","@id":"https://software.sil.org/author/evansl/","name":"Lorna","url":"https://software.sil.org/author/evansl/","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/e98c2f93800edcab89fb4fad457d2430?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/e98c2f93800edcab89fb4fad457d2430?s=96&d=mm&r=g","caption":"Lorna","inLanguage":"en-US"},"worksFor":{"@id":"https://software.sil.org/#organization"}},{"@type":"Article","headline":"SIL Converters - Developer - SIL Language Technology","datePublished":"2021-07-21T19:53:28+00:00","dateModified":"2021-08-10T14:23:26+00:00","author":{"@id":"https://software.sil.org/author/evansl/","name":"Lorna"},"publisher":{"@id":"https://software.sil.org/#organization"},"description":"How to get TECkit, CC, ICU, Perl and Python for text processing with one interface","name":"SIL Converters - Developer - SIL Language Technology","@id":"https://software.sil.org/silconverters/silconverters-developer/#richSnippet","isPartOf":{"@id":"https://software.sil.org/silconverters/silconverters-developer/#webpage"},"image":{"@id":"https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png"},"inLanguage":"en-US","mainEntityOfPage":{"@id":"https://software.sil.org/silconverters/silconverters-developer/#webpage"}}]}</script> <!-- /Rank Math WordPress SEO plugin --> <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":{"concatemoji":"https:\/\/software.sil.org\/wp\/wp-includes\/js\/wp-emoji-release.min.js?ver=1c3f99931113e4e267889c96f3b63dc5"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.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://software.sil.org/wp/wp-includes/css/dist/block-library/style.min.css?ver=1c3f99931113e4e267889c96f3b63dc5' type='text/css' media='all' /> <style id='rank-math-toc-block-style-inline-css' type='text/css'> .wp-block-rank-math-toc-block nav ol{counter-reset:item}.wp-block-rank-math-toc-block nav ol li{display:block}.wp-block-rank-math-toc-block nav ol li:before{content:counters(item, ".") ". ";counter-increment:item} </style> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;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> <link rel='stylesheet' id='contact-form-7-css' href='https://software.sil.org/wp/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.9.8' type='text/css' media='all' /> <link rel='stylesheet' id='responsive-lightbox-nivo-css' href='https://software.sil.org/wp/wp-content/plugins/responsive-lightbox/assets/nivo/nivo-lightbox.min.css?ver=2.4.8' type='text/css' media='all' /> <link rel='stylesheet' id='responsive-lightbox-nivo-default-css' href='https://software.sil.org/wp/wp-content/plugins/responsive-lightbox/assets/nivo/themes/default/default.css?ver=2.4.8' type='text/css' media='all' /> <link rel='stylesheet' id='dashicons-css' href='https://software.sil.org/wp/wp-includes/css/dashicons.min.css?ver=1c3f99931113e4e267889c96f3b63dc5' type='text/css' media='all' /> <link rel='stylesheet' id='to-top-css' href='https://software.sil.org/wp/wp-content/plugins/to-top/public/css/to-top-public.css?ver=2.5.4' type='text/css' media='all' /> <link rel='stylesheet' id='megamenu-css' href='https://software.sil.org/wp/wp-content/uploads/maxmegamenu/style.css?ver=2ff3b2' type='text/css' media='all' /> <link rel='stylesheet' id='custom-styles-css' href='https://software.sil.org/wp/wp-content/themes/web-productsites/css/custom-style.css?ver=1c3f99931113e4e267889c96f3b63dc5' type='text/css' media='all' /> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/responsive-lightbox/assets/nivo/nivo-lightbox.min.js?ver=2.4.8" id="responsive-lightbox-nivo-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/underscore.min.js?ver=1.13.4" id="underscore-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/responsive-lightbox/assets/infinitescroll/infinite-scroll.pkgd.min.js?ver=1c3f99931113e4e267889c96f3b63dc5" id="responsive-lightbox-infinite-scroll-js"></script> <script type="text/javascript" id="responsive-lightbox-js-before"> /* <![CDATA[ */ var rlArgs = {"script":"nivo","selector":"lightbox","customEvents":"","activeGalleries":true,"effect":"fade","clickOverlayToClose":true,"keyboardNav":true,"errorMessage":"The requested content cannot be loaded. Please try again later.","woocommerce_gallery":false,"ajaxurl":"https:\/\/software.sil.org\/wp\/wp-admin\/admin-ajax.php","nonce":"5493d09c11","preview":false,"postId":5407,"scriptExtension":false}; /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/responsive-lightbox/js/front.js?ver=2.4.8" id="responsive-lightbox-js"></script> <script type="text/javascript" id="to-top-js-extra"> /* <![CDATA[ */ var to_top_options = {"scroll_offset":"500","icon_opacity":"50","style":"icon","icon_type":"dashicons-arrow-up-alt2","icon_color":"#ffffff","icon_bg_color":"#000000","icon_size":"32","border_radius":"20","image":"https:\/\/software.sil.org\/wp\/wp-content\/plugins\/to-top\/admin\/images\/default.png","image_width":"65","image_alt":"","location":"bottom-right","margin_x":"20","margin_y":"20","show_on_admin":"0","enable_autohide":"1","autohide_time":"2","enable_hide_small_device":"0","small_device_max_width":"640","reset":"0"}; /* ]]> */ </script> <script async type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/to-top/public/js/to-top-public.js?ver=2.5.4" id="to-top-js"></script> <script type="text/javascript" id="wpstg-global-js-extra"> /* <![CDATA[ */ var wpstg = {"nonce":"238a561a4a"}; /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/wp-staging-pro/assets/js/dist/wpstg-blank-loader.min.js?ver=1c3f99931113e4e267889c96f3b63dc5" id="wpstg-global-js"></script> <link rel="https://api.w.org/" href="https://software.sil.org/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://software.sil.org/wp-json/wp/v2/pages/5407" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://software.sil.org/wp/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://software.sil.org/?p=5407' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://software.sil.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fsoftware.sil.org%2Fsilconverters%2Fsilconverters-developer%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://software.sil.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fsoftware.sil.org%2Fsilconverters%2Fsilconverters-developer%2F&format=xml" /> <link rel="icon" href="https://software.sil.org/wp/wp-content/uploads/2024/02/favicon.png" sizes="32x32" /> <link rel="icon" href="https://software.sil.org/wp/wp-content/uploads/2024/02/favicon.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://software.sil.org/wp/wp-content/uploads/2024/02/favicon.png" /> <meta name="msapplication-TileImage" content="https://software.sil.org/wp/wp-content/uploads/2024/02/favicon.png" /> <style type="text/css" id="wp-custom-css"> .trio-widget li { text-align: left; } </style> <!-- To Top Custom CSS --><style type='text/css'>#to_top_scrollup {-webkit-border-radius: 20%; -moz-border-radius: 20%; border-radius: 20%;}</style><style type="text/css">/** Mega Menu CSS: fs **/</style> <!-- BEGIN Google Analytics --> <!-- Google tag (gtag.js) --> <script async src=" https://www.googletagmanager.com/gtag/js?id=G-75WYFHYVT8"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-75WYFHYVT8'); </script> <!-- END Google Analytics --> </head> <body class="page-template-default page page-id-5407 page-child parent-pageid-5243 wp-custom-logo mega-menu-max-mega-menu-1 mega-menu-max-mega-menu-2 silconverters" data-source="base.twig"> <!-- HEADER --> <header id="navbar" role="banner"> <nav role="navigation" class="navbar navbar-default"> <div class="container"> <div class="navbar-header"> <a class="logo navbar-btn pull-left" href="https://software.sil.org" title="Home"> <img src="https://software.sil.org/wp/wp-content/themes/web-productsites/images/sil_logo_glyph.png" alt="Home"> </a> <!-- .btn-navbar is used as the toggle for collapsed navbar content --> <button type="button" class="navbar-toggle main-menu-toggle-test" data-toggle="collapse" data-target="#topNavbar">☰ Menu</button> </div> <div id="topNavbar" class="collapse navbar-collapse main-menu-toggle" data-collapse="collapsed"> <div id="search-box"> <div class="donate-button"> <a class="btn btn-default btn-block btn-download btn-secondary" href="https://give.sil.org/LangTech" role="button">Donate</a> </div> <div class="search-box-form"> <!-- <div class="search form-wrapper form-group"> <form method="get" id="searchform" class="form-inline form-search" action="https://software.sil.org/"> <label for="s" class="assistive-text">Search</label> <input type="text" class="form-control" name="s" id="s" placeholder="Search..." /> </form> </div> --> <form method="get" id="searchform" role="form" class="navbar-form navbar-right" action="https://software.sil.org/"> <div class="form-group"> <div class="input-group"> <input type="text" class="form-control" name="s" id="s" placeholder="Search..." /> <span class="input-group-btn"> <button type="submit" class="btn btn-default"><i class="fa fa-search fa-fw"></i></button> </span> </div> </div> </form> </div> </div> <div id="nav-list"> <ul class="nav navbar-nav navbar-right"> <li class="nav-main-item menu-item menu-item-type-post_type menu-item-object-page menu-item-865"> <a class="nav-main-link" href="https://software.sil.org/software-products/">Software Products</a> </li> <li class="nav-main-item menu-item menu-item-type-post_type menu-item-object-page menu-item-5875"> <a class="nav-main-link" href="https://software.sil.org/fonts/">Fonts</a> </li> <li class="nav-main-item menu-item menu-item-type-post_type menu-item-object-page menu-item-864"> <a class="nav-main-link" href="https://software.sil.org/news/">News</a> </li> <li class="nav-main-item menu-item menu-item-type-post_type menu-item-object-page menu-item-2630"> <a class="nav-main-link" href="https://software.sil.org/support/">Support</a> </li> <li class="nav-main-item menu-item menu-item-type-custom menu-item-object-custom menu-item-8685"> <a class="nav-main-link" href="https://software.sil.org/serve">Serve</a> </li> <li class="nav-main-item menu-item menu-item-type-post_type menu-item-object-page menu-item-8686"> <a class="nav-main-link" href="https://software.sil.org/about/">About</a> </li> </ul> </div> </div> </div> </nav> </header> <header id="page-site-name"> <div class="container"> <h1 class="page-header"><a href="https://software.sil.org">SIL Language Technology</a></h1> </div> </header> <header id="page-breadcrumbs"> <div class="container"> <h2 class="page-header"> <ol class="breadcrumb"> <li><a href="https://software.sil.org">Home</a></li> <li><a href="https://software.sil.org/silconverters/">SIL Converters</a></li> <li><a href=""><span class="last-crumb">SIL Converters — Developer</span></a></li> </ol> </h2> </div> </header> <section id="content_primary"> <div class="container"> <div class="row"> <div class="col-md-8 col-sm-8"> <article class="post-type-page" id="post-5407"> <section class="article-content"> <h1 class="article-h1"> SIL Converters — Developer </h1> <div class="article-body"> <p><em>How to get TECkit, CC, ICU, Perl and Python for text processing with one interface</em></p> <p><a href="https://software.sil.org/silconverters">SIL Converters Home</a></p> <p>This document is primarily for developers who are interested in adding EncConverter support to their application.</p> <p>There are several functions in the EncConverter(s) interfaces that greatly simplify the use of the EncConverters core in various client applications. Through these functions, the various Transduction Engine plug-ins provide their own user-interface for adding and configuring converters, eliminating the need for client applications to create their own user-interface elements for the various transduction engines.</p> <p>This article shows the new functions, some snippets of code to invoke them, and examples of the resulting user-interface dialog boxes.</p> <p style="margin-left: 40px"><b>Note:</b><br /> The functions described here have not changed significantly since version 2.2, however, the program ID string is different in different versions. If you are using the EncConverters core version 4.0, then you use the namespace prefix, “SilEncConverters40” as shown below. If you are using an earlier version (e.g. SILConverters 3.1 or earlier), you will want to use “SilEncConverters31” in the strings given in the snippets of code below.</p> <h2 id="autoselect">AutoSelect</h2> <p>The <em>AutoSelect</em> function can be used by client application code to launch the <strong>Select Converter</strong> dialog box, which allows the user to choose the transducer they want to use:</p> <p><img decoding="async" src="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SelectConv.png" /><br /> <em>Select Converter Dialog</em></p> <p>In this dialog box, the user can select the desired converter from the list of available converters in the <em>System Repository</em> and also select the <strong>Conversion Options</strong>, such as <strong>Direction</strong>, <strong>Normalization</strong> of the output data, and <strong>Debug</strong> mode for getting feedback about what data was sent and received by the underlying conversion engine.</p> <p>Once configured, the user clicks <strong>OK</strong>, and the IEncConverter object corresponding to the selected transducer is returned to the client application for use.</p> <p>This figure shows the function prototype:</p> <p style="margin-left: 40px"><b>Function Prototype</b><br /> <b>IEncConverter</b> AutoSelect(<b>ConvType</b> eConversionTypeFilter)</p> <p style="margin-left: 80px">The <b>ConvType</b> parameter can be used to have the <b>Select Converter</b> dialog filter the list of converters being displayed. Depending on the needs of the client app, you can limit the list to only Legacy to Unicode Encoding converters, for example, by passing in the value:</p> <p style="margin-left: 80px"><b>ConvType</b>.Legacy_to_from_Unicode</p> <p style="margin-left: 80px">If your application only supports Unicode encodings on both sides of a transduction process, then you can use:</p> <p style="margin-left: 80px"><b>ConvType</b>.Unicode_to_from_Unicode</p> <p style="margin-left: 80px">To have the <b>Select Converters</b> dialog box display all of the converters in the repository, use:</p> <p style="margin-left: 80px"><b>ConvType</b>.Unknown</p> <p>The following code snippets show how to call the <strong>AutoSelect</strong> function in various different programming environments.</p> <p style="margin-left: 40px"><b>Note:</b></p> <p style="margin-left: 40px">The <i>ECInterfaces.dll</i> file contains definitions of the <b>IEncConverter</b> (transducer) and <b>IEncConverters</b> (collection/repository) COM interfaces. The <i>SilEncConverters40.dll</i> file contains the .Net implementations of those interfaces (as the <b>EncConverters</b> object and the transducer abstract base class, <b>EncConverter</b>).</p> <p style="margin-left: 40px">New as of EncConverters 4.0, these assemblies are now installed by each individual client application in the same folder as the application to avoid multiple client interaction (e.g. one client changing something requiring other clients to have to be re-released as well). So if you’re wanting to use and redistribute the EncConverters core, you include the <i>ECInterfaces.dll</i> and <i>SilEncConverters40.dll</i> files along with your application in the install folder. </p> <p style="margin-left: 40px">YOU ALSO NEED to REDISTRIBUTE THE PLUG-IN FILES….</p> <p style="margin-left: 40px">If your program is a .Net client, then you should add a reference to both assemblies. If you are accessing the EncConverters core thru COM (e.g. C++/ATL), then you only need to include the reference to the ECInterfaces.dll assembly.</p> <pre><code>// C# .Net snippet using ECInterfaces; // Add Reference to ECInterfaces.dll using SilEncConverters40; // Add Reference to SilEncConverters40.dll ... public void TestAutoSelect() { // get an instance of the repository object EncConverters aECs = new EncConverters(); // call AutoSelect to query the user for the converter to use IEncConverter aEC = aECs.AutoSelect(ConvType.Unknown); // Always check the return in case the user Cancelled the dialog if (aEC != null) { // call the 'Convert' function to do a conversion string strIn = "bccdèéêfg"; string strOut = aEC.Convert(strIn); MessageBox.Show(String.Format("'{1}' became '{0}'", strOut, strIn)); } } ' VB.Net snippet Imports ECInterfaces ' Add Reference to ECInterfaces.dll Imports SilEncConverters40 ' Add Reference to SilEncConverters40.dll ... Public Sub TestAutoSelect() ' get an instance of the repository object Dim aECs As New EncConverters ' call AutoSelect to query the user for the converter Dim aEC As IEncConverter = aECs.AutoSelect(ConvType.Unknown) ' Always check the return in case the user Cancelled the dialog If (Not aEC Is Nothing) Then ' call the 'Convert' function to do a conversion Dim strIn As String = "bccdèéêfg" Dim strOut As String = aEC.Convert(strIn) MessageBox.Show(String.Format("'{0}' becomes '{1}'", strIn, strOut)) End If End Sub ' VBA snippet (for Word, Excel, Access, Publisher, etc, macros) ' Be sure to Add a Reference to the ECInterfaces.tlb file ' via Tools, References, and then Browse for the .tlb file Sub TestAutoSelect() Dim aEC As IEncConverter ' variable for the converter Dim aECs As IEncConverters ' variable for the repository ' get an instance of the repository object Set aECs = CreateObject("SilEncConverters40.EncConverters") ' call AutoSelect to query the user for the converter Set aEC = aECs.AutoSelect ' Always check the return in case the user Cancelled the dialog If (Not aEC Is Nothing) Then ' call the 'Convert' function to do a conversion Dim strIn, strOut As String strIn = "bccdèéêfg" strOut = aEC.Convert(strIn) strRes = "/" & strIn & "/ became /" & strOut & "/" MsgBox strRes End If End Sub // C++ snippet (using ATL's CComPtr and CComBSTR helper classes) // add ECInterfaces.tlb to the local project folder #import "mscorlib.tlb" raw_interfaces_only #import "ECInterfaces.tlb" raw_interfaces_only using namespace ECInterfaces; void TestAutoSelect() { // get an instance of the repository object CComPtr aECs; aECs.CoCreateInstance(L"SilEncConverters40.EncConverters"); // if it worked, call AutoSelect to query the user for the converter CComPtr aEC; if( !!aECs && (aECs->AutoSelect(ConvType_Unknown, &aEC) == S_OK) ) { // Always check the return in case the user Cancelled the dialog if( !!aEC ) { // call the 'Convert' function to do a conversion CComBSTR strIn = L"bccdèéêfg"; CComBSTR strOut; if( aEC->Convert(strIn, &strOut) == S_OK ) { CString strFormat; strFormat.Format(_T("'%s' becomes '%s'"), (LPCTSTR)strIn, (LPCTSTR)strOut); MessageBox(0, strFormat, _T("TestAutoSelect"), MB_OK); } } } } </code></pre> <h2 id="autoselectwithtitle">AutoSelectWithTitle</h2> <p>The <em>AutoSelectWithTitle</em> method is the same as AutoSelect described above, but allows the client application to provide a string which will be used in the <strong>Choose Converter</strong> dialog box frame. This is useful, for example, if your application queries the user for several different converters and you want the dialog box frame (top bar) to display some text to inform the user of which one to select for a given occurrence.</p> <p>This method is available on the <em>IEncConverters</em> interface.</p> <p style="margin-left: 40px"><b>Function Prototype</b></p> <p style="margin-left: 40px"><b>IEncConverter</b> AutoSelectWithTitle(<b>ConvType</b> eConversionTypeFilter, <b>string</b> strChooseConverterDialogTitle)</p> <p style="margin-left: 80px">As above, the <b>ConvType</b> parameter can be used to have the Select Converter dialog filter the list of converters being displayed. Depending on the needs of the client app, you can limit the list to only Legacy to Unicode Encoding converters, for example, by passing in the value:</p> <p style="margin-left: 80px"><b>ConvType</b>.Legacy_to_from_Unicode<</p> <p style="margin-left: 80px">If your application only supports Unicode encodings on both sides of a transduction process, then you can use:</p> <p style="margin-left: 80px"><b>ConvType</b>.Unicode_to_from_Unicode</p> <p style="margin-left: 80px">To have the <b>Select Converters</b> dialog box display all of the converters in the repository, use:</p> <p style="margin-left: 80px"><b>ConvType</b>.Unknown</p> <p style="margin-left: 80px">The <b>string</b> strChooseConverterDialogTitle parameter is the string that will be displayed in the <b>Choose Converter</b> dialog box frame.</p> <h2 id="autoselectwithdata">AutoSelectWithData</h2> <p>The <em>AutoSelectWithData</em> method is the same as AutoSelect described above, but allows the client application to provide a string or byte array of data and a font name which will be used in a <em>preview</em> pane of the <strong>Choose Converter</strong> dialog box. This is useful, for example, to allow your users to try the different transducers on the data to see which one produces the desired output.</p> <p><img decoding="async" src="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_SD_W_PREVIEW.jpg" /><br /> <em>Select Dialog with Preview Pane</em></p> <p>This method is available on the <em>IEncConverters</em> interface.</p> <p style="margin-left: 40px"><b>Function Prototype</b></p> <p style="margin-left: 40px"><b>IEncConverter</b> AutoSelectWithData(<b>byte[]</b> abyPreviewData, <b>string</b> strFontName, <b>ConvType</b> eConversionTypeFilter, <b>string</b> strChooseConverterDialogTitle)</p> <p style="margin-left: 40px">or</p> <p style="margin-left: 40px"><b>IEncConverter</b> AutoSelectWithData(<b>string</b> strPreviewData, <b>string</b> strFontName, <b>ConvType</b> eConversionTypeFilter, <b>string</b> strChooseConverterDialogTitle)</p> <p style="margin-left: 40px">Where:</p> <p style="margin-left: 60px"><b>byte[]</b> abyPreviewData</p> <p style="margin-left: 80px">This parameter is to pass sample data to the <i>Select Converter</i> dialog box to be converted using the converter the user selects and the result will be displayed in the preview pane. This parameter may also be passed to this method from C++ or other non-.Net clients as a SafeArray of type VT_UI1 elements (unsigned bytes). This is useful if you are dealing with 8-bit legacy data prior to encoding conversion to Unicode.</p> <p style="margin-left: 60px"><b>string</b> strFontName</p> <p style="margin-left: 80px">This parameter can be used to pass the display name of a font typeface to use in the preview window (e.g. “Arial Unicode MS”).</p> <p style="margin-left: 40px">See above for the definition of the <b>ConvType</b> eConversionTypeFilter and <b>string</b> strChooseConverterDialogTitle parameters.</p> <p style="margin-left: 40px"><b>string</b> strPreviewData </p> <p style="margin-left: 60px">This parameter is to pass sample data to the <i>Select Converter</i> dialog box to be converted using the converter the user selects and the result will be displayed in the preview pane. This parameter may also be passed to this method from C++ or other non-.Net clients as a COM BSTR.</p> <h2 id="configure">Configure</h2> <p>While most client applications will probably want to use the <em>AutoSelect</em> function discussed above, there is another interface that can be used when you know exactly which transduction engine implementation you want your users to use.</p> <p>That is, one of the main advantages of using EncConverters is that your client application doesn’t have to concern itself with whether the underlying conversion engine is a CC Table, TECkit map, Perl Expression, etc. With exactly the same interface (i.e. nominally the <em>Convert</em> call), your client application can get the converted value back regardless of the underlying process.</p> <p>However, if for whatever reason, you want to limit your users to a particular implementation type, you can use the <em>Configure</em> method (of the <em>IEncConverterConfig</em> interface) to acquire a converter of a particular type.</p> <p>Calling the <strong>Configure</strong> method will cause a three-tab <strong>About / Setup / Test Area</strong> dialog box to be displayed for the corresponding converter. For example, here is the dialog box for the <em>Perl Expression</em> EncConverter implementation:</p> <p><img decoding="async" src="https://software.sil.org/wp/wp-content/uploads/2021/07/silconverters_PerlExp.png" /><br /> <em>Perl Expression Converter Setup dialog</em></p> <p>Each EncConverter implementation has its own version of this dialog box to query for whatever information is necessary to its operation. Each implementation differs in complexity. So, for example, the TECkit Setup tab has only a browse button for TECkit map file and an edit control for showing the file spec.</p> <p>The dialog box also has an <strong>About</strong> help tab explaining the details of the converter and its configuration details and a <strong>Test Area</strong> tab for checking the converter with sample data.</p> <p>Once configured, the user clicks <strong>OK</strong>, and the selected IEncConverter object is returned to the client application for use.</p> <p>In addition to the <strong>Configure</strong> method there’s another helper method available (from the <em>IEncConverters</em> interface) for acquiring an unconfigured IEncConverter object of the appropriate implementation type: <code>NewEncConverterByImplementationType</code>.</p> <p>This figure shows the function prototype of both methods:</p> <p style="margin-left: 40px"><b>Function Prototypes:</b></p> <p style="margin-left: 40px"><b>IEncConverter</b> NewEncConverterByImplementationType(<b>string</b> strImplType)</p> <p style="margin-left: 60px"><b>string</b> strImplType</p> <p style="margin-left: 80px">This parameter indicates the <i>Implementation Type</i> of the converter being requested. The values it takes may change as new implementations are added to the EncConverters suite, but as of v2.6, the following implementation types are available:</p> <p style="margin-left: 80px">“SIL.cc” (i.e. CC Table)</p> <p style="margin-left: 80px">“SIL.tec” (i.e. TECkit map)</p> <p style="margin-left: 80px">“SIL.tecForm” (i.e. TECkit for converting between UTF flavors)</p> <p style="margin-left: 80px">“SIL.map” (i.e. TECkit map – auto-compiling)</p> <p style="margin-left: 80px">“cp” (i.e. Code Page Converter)</p> <p style="margin-left: 80px">“SIL.comp” (i.e. Compound (daisy-chained) Converter)</p> <p style="margin-left: 80px">“ICU.trans” (i.e. ICU Transliterator)</p> <p style="margin-left: 80px">“ICU.conv” (i.e. ICU Converter)</p> <p style="margin-left: 80px">“ICU.regex” (i.e. Regular Expression Find and Replace (ICU))</p> <p style="margin-left: 80px">“SIL.PyScript” (i.e. Python Script)</p> <p style="margin-left: 80px">“SIL.PerlExpression” (i.e. Perl Expression)</p> <p style="margin-left: 80px">“SIL.fallback” (i.e. Primary-Fallback Converter)</p> <p style="margin-left: 80px">“SIL.AdaptItKB” (i.e. AdaptIt Knowledge Base Lookup Converter)</p> <p style="margin-left: 80px">“SIL.AdaptItKBGuesser” (i.e. AdaptIt Target Word Guesser)</p> <p style="margin-left: 80px">“SIL.TechHindiWebPage” (i.e. Technical Hindi (Google group) Html Converter)</p> <p style="margin-left: 80px">Each of these strings is available as public string constant of the EncConverters’ implementation class (e.g. <code>EncConverters.strTypeSILcc</code>). </p> <p style="margin-left: 40px"><b>bool</b> Configure (<b>IEncConverters</b> aECs, <b>string</b> strFriendlyName, <b>ConvType</b> eConversionType, <b>string</b> strLhsEncodingID, <b>string</b> strRhsEncodingID)</p> <p style="margin-left: 40px">The parameters, most of which can be left default, are as follows:</p> <p style="margin-left: 40px"><b>IEncConverters</b> aECs </p> <p style="margin-left: 60px">This is the interface pointer for the repository object, through which dialog box will add any newly created converters. Required.</p> <p style="margin-left: 40px"><b>string</b> strFriendlyName</p> <p style="margin-left: 60px">This is the friendly name to give the converter (if the client app wants to specify it; otherwise, it can be null to allow the user to choose the name).</p> <p style="margin-left: 40px"><b>ConvType</b> eConversionType</p> <p style="margin-left: 60px">If the client application only deals with Unicode to Unicode conversions, for example, you can provide the appropriate ConvType value and then the radio buttons for specifying the type will be left out of the dialog box (i.e. to simplify the dialog). Otherwise, use ConvType.Unknown</p> <p style="margin-left: 40px"><b>string</b> strLhsEncodingID</p> <p style="margin-left: 60px">This allows the client app to specify what the encoding ID of the left-hand side of the conversion is (e.g. UNICODE). Can be null.</p> <p style="margin-left: 40px"><b>string</b> strRhsEncodingID</p> <p style="margin-left: 60px">This allows the client app to specify what the encoding ID of the right-hand side of the conversion is (e.g. UNICODE). Can be null.</p> <p>The following code snippets show how to call the <em>Configure</em> function in C#:</p> <pre><code>// C# snippet using ECInterfaces; // Add Reference to ECInterfaces.dll using SilEncConverters40; // Add Reference to SilEncConverters40.dll ... public void TestConfigure() { // get an instance of the repository EncConverters aECs = new EncConverters(); // get a new, empty IEncConverter object of the correct implementation type IEncConverter aEC = aECs.NewEncConverterByImplementationType( EncConverters.strTypeSILtec); // get the configuration interface for this type IEncConverterConfig aConfigurator = aEC.Configurator; // there may be some implementation types that don't provide their // own user-interface, so always check before using it if( aConfigurator != null ) { // call its Configure method to do the UI if(aConfigurator.Configure(aECs, null, ConvType.Unknown, null, null)) { // if we reach here, then the converter must have been // configured; though, in fact, it might not have been // added to the System Repository (i.e. it might just // be a temporary converter). You can use the // rConfigurator.IsInRepository method to detect if it // was added or not // now, call the 'Convert' function to do a conversion string strIn = "bccdèéêfg"; string strOut = aEC.Convert(strIn); MessageBox.Show(String.Format("'{1}' became '{0}'", strOut, strIn)); } } } </code></pre> <h2 id="custom-transduction-engines">Custom transduction engines</h2> <p>In addition to providing support in client applications for accessing different transduction engines, it is possible to plug any arbitrary transduction engine into the SILConverter’s paradigm so that it becomes available to any of the EncConverter’s clients. This can be done by implementing the IEncConverter interface as defined in the ECInterfaces.dll .Net assembly.</p> <p>If your transduction engine is in an exe which processes text via standard in/out or in a DLL, there are several sub-classes in that assembly that simplify the process of adding a transduction engine.</p> </div> </section> </article> </div> <div class="col-md-4 col-sm-4"> <nav id="sidebar_main" class="nav menu"> <div> <div class="textwidget"><a href="/silconverters/"><img class="sps-sidebar-logo" src="https://software.sil.org/wp/wp-content/uploads/2023/04/silconverters.png" title="Back to SIL Converters"></a></div> </div><div> <div class="textwidget"><p><div class="menu-single-page-site-menu-container"><ul id="menu-single-page-site-menu" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom"><a href="#autoselect">AutoSelect</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom"><a href="#autoselectwithtitle">AutoSelectWithTitle</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom"><a href="#autoselectwithdata">AutoSelectWithData</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom"><a href="#configure">Configure</a></li><li class="menu-item menu-item-type-custom menu-item-object-custom"><a href="#custom-transduction-engines">Custom transduction engines</a></li></ul></div><br /> <section class="download-section"> <h2>Current Version</h2> <a class="btn btn-default btn-block btn-download" href="https://software.sil.org/downloads/r/silconverters/SetupSILConverters_5.3.0_x64.exe" onClick="gtag('event', 'SIL_DOWNLOADS', { 'product_name': 'silconverters-developer', 'product_version': 'Silconverters-developer SIL Converters X64 Installer (for 64-bit Office And Paratext Plug-in) 5.3.0.0', 'download_link_type': 'button', 'product_os' : 'Windows' });">Download Now<i class="fa fa-download fa-download-style"></i></a> <div class="download-name">SIL Converters x64 installer (for 64-bit Office and Paratext Plug-in) 5.3.0.0 for Windows</div> <div class="filemeta"> EXE | 70.98 MB | 19 Sep 2024 </div> </section> </p> </div> </div> </nav> </div> </div> </div> </section> <div class="footer-top-bg"> <aside id="license"> <div class="container fullwidth"> <div> <div class="textwidget"><p>Most SIL software is free to use, modify and redistribute according to the terms of open licenses such as the <a class="external" href="https://openfontlicense.org" target="_blank" rel="noopener">SIL Open Font License</a> and the <a class="external" href="http://en.wikipedia.org/wiki/MIT_License" target="_blank" rel="noopener">MIT License</a>. Many of our open projects are hosted on our <a class="external" href="https://github.com/sillsdev" target="_blank" rel="noopener">Language Software development</a> and <a class="external" href="https://github.com/silnrsi" target="_blank" rel="noopener">Writing Systems Technology</a> GitHub pages.</p> </div> </div> </div> </aside> <aside id="donate"> <div class="container fullwidth"> <div> <div class="textwidget"><p>Please consider supporting our software development through a <a href="https://give.sil.org/LangTech">donation</a> toward our language software or our fonts and script resources.</p> </div> </div> </div> </aside> </div> <footer class="footer-top"> <div class="container"> <div class="row"> <nav class="col-xs-7 col-md-3"> <div><h2>SIL Global</h2><div class="menu-footer_sil-container"><ul id="menu-footer_sil" class="menu"><li id="menu-item-89" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-89"><a href="http://www.sil.org/about/discover">Discover SIL</a></li> <li id="menu-item-90" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-90"><a href="http://www.sil.org/langculture">Language & Culture</a></li> <li id="menu-item-91" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-91"><a href="http://www.sil.org/language-development">Language Development</a></li> <li id="menu-item-92" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-92"><a href="http://www.sil.org/about/news">SIL News</a></li> </ul></div></div> </nav> <nav class="col-xs-5 col-md-3"> <div><h2>Language Technology</h2><div class="menu-footer_software-container"><ul id="menu-footer_software" class="menu"><li id="menu-item-8687" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8687"><a href="https://software.sil.org/software-products/">Software Products</a></li> <li id="menu-item-8688" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8688"><a href="https://software.sil.org/news/">Software & Font News</a></li> <li id="menu-item-113" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-113"><a target="_blank" rel="noopener" href="http://lingtransoft.info/">LingTranSoft</a></li> <li id="menu-item-99" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-99"><a target="_blank" rel="noopener" href="http://www.ethnologue.com/">Ethnologue</a></li> <li id="menu-item-100" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-100"><a href="https://iso639-3.sil.org">Language Codes (ISO 639-3)</a></li> </ul></div></div> </nav> <nav class="col-xs-7 col-md-3"> <div><h2>Fonts & Writing Systems</h2><div class="menu-footer_fonts-container"><ul id="menu-footer_fonts" class="menu"><li id="menu-item-8708" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8708"><a href="https://software.sil.org/fonts/">Font Catalog</a></li> <li id="menu-item-5204" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5204"><a href="https://software.sil.org/fonts/guides/">Font Help Guides</a></li> <li id="menu-item-94" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-94"><a target="_blank" rel="noopener" href="http://scriptsource.org">ScriptSource</a></li> <li id="menu-item-95" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-95"><a target="_blank" rel="noopener" href="http://scripts.sil.org">Computers & Writing Systems</a></li> <li id="menu-item-98" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-98"><a target="_blank" rel="noopener" href="https://openfontlicense.org">SIL Open Font License</a></li> </ul></div></div> </nav> <nav class="col-xs-5 col-md-3"> <div><h2>Contact & Support</h2><div class="menu-footer_contact-container"><ul id="menu-footer_contact" class="menu"><li id="menu-item-2631" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2631"><a href="https://community.software.sil.org/">Language Software Forum</a></li> <li id="menu-item-8690" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8690"><a href="https://community.scripture.software.sil.org">Scripture Software Forum</a></li> <li id="menu-item-2632" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2632"><a href="https://software.sil.org/support/">General Software Support</a></li> <li id="menu-item-8684" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-8684"><a href="https://software.sil.org/serve">Serve with Us</a></li> <li id="menu-item-8683" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-8683"><a href="https://software.sil.org/about/">About Us</a></li> <li id="menu-item-5862" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5862"><a href="https://software.sil.org/about/contact/">Contact Us</a></li> </ul></div></div> </nav> </div> </div> </footer> <script type="text/javascript"> /* <![CDATA[ */ var relevanssi_rt_regex = /(&|\?)_(rt|rt_nonce)=(\w+)/g var newUrl = window.location.search.replace(relevanssi_rt_regex, '') history.replaceState(null, null, window.location.pathname + newUrl + window.location.hash) /* ]]> */ </script> <span aria-hidden="true" id="to_top_scrollup" class="dashicons dashicons-arrow-up-alt2"><span class="screen-reader-text">Scroll Up</span></span> <!--noptimize--><script type='text/javascript'> /* <![CDATA[ */ r3f5x9JS=escape(document['referrer']); hf4N='ac724b4e58e0c4c670ab86b90236913c'; hf4V='820ad0b387c7edcdb2c732a992965669'; jQuery(document).ready(function($){var e="#commentform, .comment-respond form, .comment-form, #lostpasswordform, #registerform, #loginform, #login_form, #wpss_contact_form, .wpcf7-form";$(e).submit(function(){$("<input>").attr("type","hidden").attr("name","r3f5x9JS").attr("value",r3f5x9JS).appendTo(e);return true;});var h="form[method='post']";$(h).submit(function(){$("<input>").attr("type","hidden").attr("name",hf4N).attr("value",hf4V).appendTo(h);return true;});}); /* ]]> */ </script><!--/noptimize--> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/dist/hooks.min.js?ver=2810c76e705dd1a53b18" id="wp-hooks-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=5.9.8" id="swv-js"></script> <script type="text/javascript" id="contact-form-7-js-extra"> /* <![CDATA[ */ var wpcf7 = {"api":{"root":"https:\/\/software.sil.org\/wp-json\/","namespace":"contact-form-7\/v1"},"cached":"1"}; /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/contact-form-7/includes/js/index.js?ver=5.9.8" id="contact-form-7-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/themes/web-productsites/js/site.js?ver=1c3f99931113e4e267889c96f3b63dc5" id="silps-site.js-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/themes/web-productsites/vendor/twbs/bootstrap/dist/js/bootstrap.min.js?ver=1c3f99931113e4e267889c96f3b63dc5" id="silps-bootstrap.min.js-js"></script> <script type="text/javascript" src="https://www.google.com/recaptcha/api.js?render=6LfrnMwgAAAAAFs26j2z34FZDEERn1Th5caKwvIv&ver=3.0" id="google-recaptcha-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0" id="wp-polyfill-js"></script> <script type="text/javascript" id="wpcf7-recaptcha-js-extra"> /* <![CDATA[ */ var wpcf7_recaptcha = {"sitekey":"6LfrnMwgAAAAAFs26j2z34FZDEERn1Th5caKwvIv","actions":{"homepage":"homepage","contactform":"contactform"}}; /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=5.9.8" id="wpcf7-recaptcha-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/wp-spamshield/js/jscripts-ftr2-min.js" id="wpss-jscripts-ftr-js"></script> <script type="text/javascript" src="https://software.sil.org/wp/wp-includes/js/hoverIntent.min.js?ver=1.10.2" id="hoverIntent-js"></script> <script type="text/javascript" id="megamenu-js-extra"> /* <![CDATA[ */ var megamenu = {"timeout":"300","interval":"100"}; /* ]]> */ </script> <script type="text/javascript" src="https://software.sil.org/wp/wp-content/plugins/megamenu/js/maxmegamenu.js?ver=3.3.1.2" id="megamenu-js"></script> <style type="text/css" id="custom_inline_style_0"> @media (max-width: 759px) { #content_primary > .container > .row { display: flex; flex-flow: column-reverse; } }</style> <footer class="footer-bottom"> <div class="container"> <div class="row"> <nav class="col-xs-12 col-md-6"> <p>Copyright © 2024 <a href="https://www.sil.org/" title="" class="active">SIL Global</a></p> </nav> <nav class="col-xs-12 col-md-6"> <ul class="nav nav-horizontal"> <li class="first leaf active"><a href="/terms-of-use" title="" class="active">Terms of Use</a></li> <li class="last leaf active"><a href="/privacy-policy" title="" class="active">Privacy Policy</a></li> </ul> </nav> </div> </div> </footer> </body> </html> <!-- Dynamic page generated in 0.651 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2024-11-23 17:35:35 --> <!-- Compression = gzip -->