// Copyright 2014 CrossWire Bible Society (http://www.crosswire.org) // CrossWire Bible Society // P. O. Box 2528 // Tempe, AZ 85280-2528 // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation version 2. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. using System; using System.Runtime.InteropServices; using System.Collections.Generic; namespace Sword { public class Module { IntPtr _handle; internal Module(IntPtr handle) { _handle = handle; } public string Name { get { IntPtr namePtr = NativeMethods.org_crosswire_sword_SWModule_getName(_handle); return Marshal.PtrToStringAnsi(namePtr); } } public string Description { get { IntPtr descriptionPtr = NativeMethods.org_crosswire_sword_SWModule_getDescription(_handle); return Marshal.PtrToStringAnsi(descriptionPtr); } } public string Category { get { IntPtr categoryPtr = NativeMethods.org_crosswire_sword_SWModule_getCategory(_handle); return Marshal.PtrToStringAnsi(categoryPtr); } } /// /// Special values handled for VerseKey modules: /// [+-][book|chapter] - [de|in]crement by chapter or book /// (e.g. "+chapter" will increment the VerseKey 1 chapter) /// [=][key] - position absolutely and don't normalize /// (e.g. "jn.1.0" for John Chapter 1 intro; "jn.0.0" For Book of John Intro) /// public string KeyText { get { IntPtr keyTextPtr = NativeMethods.org_crosswire_sword_SWModule_getKeyText(_handle); return Marshal.PtrToStringAnsi(keyTextPtr); } set { NativeMethods.org_crosswire_sword_SWModule_setKeyText(_handle, value); } } public string RenderText() { IntPtr keyTextPtr = NativeMethods.org_crosswire_sword_SWModule_renderText(_handle); return Marshal.PtrToStringAnsi(keyTextPtr); } public string RawEntry { get { IntPtr keyTextPtr = NativeMethods.org_crosswire_sword_SWModule_getRawEntry(_handle); return Marshal.PtrToStringAnsi(keyTextPtr); } set { NativeMethods.org_crosswire_sword_SWModule_setRawEntry(_handle, value); } } public string StripText() { IntPtr keyTextPtr = NativeMethods.org_crosswire_sword_SWModule_stripText(_handle); return Marshal.PtrToStringAnsi(keyTextPtr); } public IEnumerable Search(string searchString, SearchType searchType, long flags, string scope) { IntPtr searchHitPtr = NativeMethods.org_crosswire_sword_SWModule_search(_handle, searchString, (int)searchType, flags, scope, IntPtr.Zero); SearchHit searchHit = (SearchHit)Marshal.PtrToStructure(searchHitPtr, typeof(SearchHit)); while (!searchHit.IsNull()) { yield return searchHit; searchHitPtr = new IntPtr(searchHitPtr.ToInt64() + Marshal.SizeOf(typeof(SearchHit))); searchHit = (SearchHit)Marshal.PtrToStructure(searchHitPtr, typeof(SearchHit)); } } public void TerminateSearch() { NativeMethods.org_crosswire_sword_SWModule_terminateSearch(_handle); } public char PopError() { return NativeMethods.org_crosswire_sword_SWModule_popError(_handle); } public long EntrySize { get { return NativeMethods.org_crosswire_sword_SWModule_getEntrySize(_handle); } } public IEnumerable GetEntryAttribute(string level1, string level2, string level3, char filteredBool) { IntPtr attributePtrs = NativeMethods.org_crosswire_sword_SWModule_getEntryAttribute(_handle, level1, level2, level3, filteredBool); return NativeMethods.MarshalStringArray(attributePtrs); } public IEnumerable ParseKeyList(string keyText) { IntPtr keyListPtrs = NativeMethods.org_crosswire_sword_SWModule_parseKeyList(_handle, keyText); return NativeMethods.MarshalStringArray(keyListPtrs); } public bool HasKeyChildren() { char hasChildren = NativeMethods.org_crosswire_sword_SWModule_hasKeyChildren(_handle); return hasChildren == 1 ? true : false; } /// /// This method returns child nodes for a genbook, /// but has special handling if called on a VerseKey module: /// [0..7] [testament, book, chapter, verse, chapterMax, verseMax, bookName, osisRef] /// public IEnumerable KeyChildren { get { IntPtr childrenPtr = NativeMethods.org_crosswire_sword_SWModule_getKeyChildren(_handle); return NativeMethods.MarshalStringArray(childrenPtr); } } public string KeyParent { get { IntPtr keyPtr = NativeMethods.org_crosswire_sword_SWModule_getKeyChildren(_handle); return Marshal.PtrToStringAnsi(keyPtr); } } public void Prevous() { NativeMethods.org_crosswire_sword_SWModule_previous(_handle); } public void Next() { NativeMethods.org_crosswire_sword_SWModule_next(_handle); } public void Begin() { NativeMethods.org_crosswire_sword_SWModule_begin(_handle); } public string RenderHeader { get { IntPtr headerPtr = NativeMethods.org_crosswire_sword_SWModule_getRenderHeader(_handle); return Marshal.PtrToStringAnsi(headerPtr); } } public string GetConfigEntry(string key) { IntPtr entryPtr = NativeMethods.org_crosswire_sword_SWModule_getConfigEntry(_handle, key); return Marshal.PtrToStringAnsi(entryPtr); } public void DeleteSearchFramework() { NativeMethods.org_crosswire_sword_SWModule_deleteSearchFramework(_handle); } public bool HasSearchFramework() { return NativeMethods.org_crosswire_sword_SWModule_hasSearchFramework(_handle); } } }