include/LibreOfficeKit/LibreOfficeKitInit.h                                    
|   10 
 ios/CustomTarget_LibreOfficeLight_app.mk                                       
|   30 
 ios/Module_ios.mk                                                              
|    1 
 ios/experimental/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj   
|  130 ++
 ios/experimental/LibreOfficeLight/LibreOfficeLight/LO.swift                    
|    2 
 ios/experimental/LibreOfficeLight/LibreOfficeLight/LibreOfficeLight-Prefix.pch 
|   22 
 ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit-Bridging-Header.h     
|   11 
 ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit.c                     
|  491 ++++++++++
 8 files changed, 693 insertions(+), 4 deletions(-)

New commits:
commit c1f46c54a62030efb93443c025487d2caade5b9c
Author: jan Iversen <j...@libreoffice.org>
Date:   Thu Feb 23 12:47:34 2017 +0100

    ios LibreOfficeLight LOkit integration
    
    Integrated LibreOfficeLight into gbuild.
    added lo.xcconfig and Resources (needed to link with LO and run LO)
    added swift --> C interface for LOkit
    add known commands from JS client
    
    added C++ condition in LibreOfficekitInit.h (inline no good in a C file)
    
    Change-Id: I19ebe8912546408bf701c96c0c63541d6e37cad8
    Reviewed-on: https://gerrit.libreoffice.org/35430
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: jan iversen <j...@libreoffice.org>

diff --git a/include/LibreOfficeKit/LibreOfficeKitInit.h 
b/include/LibreOfficeKit/LibreOfficeKitInit.h
index f4ab9cdf2082..d19aa0fae9ef 100644
--- a/include/LibreOfficeKit/LibreOfficeKitInit.h
+++ b/include/LibreOfficeKit/LibreOfficeKitInit.h
@@ -43,8 +43,10 @@ extern "C"
     #define SEPARATOR         '/'
 
 #ifndef __OBJC__
+#ifdef __cplusplus
     inline
 #endif
+#endif
     void *lok_loadlib(const char *pFN)
     {
         return dlopen(pFN, RTLD_LAZY
@@ -55,32 +57,40 @@ extern "C"
     }
 
 #ifndef __OBJC__
+#ifdef __cplusplus
     inline
 #endif
+#endif
     char *lok_dlerror(void)
     {
         return dlerror();
     }
 
 #ifndef __OBJC__
+#ifdef __cplusplus
     inline
 #endif
+#endif
     void *lok_dlsym(void *Hnd, const char *pName)
     {
         return dlsym(Hnd, pName);
     }
 
 #ifndef __OBJC__
+#ifdef __cplusplus
     inline
 #endif
+#endif
     int lok_dlclose(void *Hnd)
     {
         return dlclose(Hnd);
     }
 
 #ifndef __OBJC__
+#ifdef __cplusplus
     inline
 #endif
+#endif
     void extendUnoPath(const char *pPath)
     {
         (void)pPath;
diff --git a/ios/CustomTarget_LibreOfficeLight_app.mk 
b/ios/CustomTarget_LibreOfficeLight_app.mk
new file mode 100644
index 000000000000..ed61f279e2cf
--- /dev/null
+++ b/ios/CustomTarget_LibreOfficeLight_app.mk
@@ -0,0 +1,30 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#- Env ------------------------------------------------------------------------
+BUILDID                        :=$(shell cd $(SRCDIR) && git log -1 
--format=%H)
+
+#- Targets --------------------------------------------------------------------
+
+.PHONY: LibreOfficeLight_setup
+
+# Register target
+$(eval $(call gb_CustomTarget_CustomTarget,ios/LibreOfficeLight))
+
+# Build
+# Depend on the custom target that sets up lo.xcconfig
+$(call gb_CustomTarget_get_target,ios/LibreOfficeLight): $(call 
gb_CustomTarget_get_target,ios/Lo_Xcconfig)
+       $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),APP,2)
+       $(call IOSbuild,LibreOfficeLight, clean build)
+
+# Clean
+$(call gb_CustomTarget_get_clean_target,ios/LibreOfficeLight):
+       $(call gb_Output_announce,$(subst $(WORKDIR)/Clean/,,$@),$(false),APP,2)
+       $(call IOSbuild,LibreOfficeLight, clean)
+
+# vim: set noet sw=4 ts=4:
diff --git a/ios/Module_ios.mk b/ios/Module_ios.mk
index 13c607b9d497..22b551214631 100644
--- a/ios/Module_ios.mk
+++ b/ios/Module_ios.mk
@@ -14,6 +14,7 @@ $(eval $(call gb_Module_add_targets,ios,\
        CustomTarget_Lo_Xcconfig \
        CustomTarget_TiledLibreOffice_app \
        CustomTarget_Prototype_app \
+       CustomTarget_LibreOfficeLight_app \
 ))
 
 endif
diff --git 
a/ios/experimental/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
index 837aa290bfee..73e789d2311b 100644
--- 
a/ios/experimental/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
+++ 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight.xcodeproj/project.pbxproj
@@ -21,6 +21,17 @@
                3992D85E1E5B764A00BEA987 /* ViewFileManager.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 3992D85C1E5B764A00BEA987 /* 
ViewFileManager.swift */; };
                399648471E5B87DC00E73E83 /* ViewProperties.swift in Sources */ 
= {isa = PBXBuildFile; fileRef = 399648461E5B87DC00E73E83 /* 
ViewProperties.swift */; };
                399648491E5C4E5500E73E83 /* LO.swift in Sources */ = {isa = 
PBXBuildFile; fileRef = 399648481E5C4E5500E73E83 /* LO.swift */; };
+               39A83A8F1E5F471D00D0C683 /* lokit.c in Sources */ = {isa = 
PBXBuildFile; fileRef = 39A83A8E1E5F471D00D0C683 /* lokit.c */; };
+               39B084E31E5F0A9600682A59 /* lo.xcconfig in Resources */ = {isa 
= PBXBuildFile; fileRef = 39B084E21E5F0A9600682A59 /* lo.xcconfig */; };
+               39B08B9D1E5F0BB600682A59 /* fundamentalrc in Resources */ = 
{isa = PBXBuildFile; fileRef = 39B084E51E5F0BB400682A59 /* fundamentalrc */; };
+               39B08B9E1E5F0BB600682A59 /* offapi.rdb in Resources */ = {isa = 
PBXBuildFile; fileRef = 39B084E61E5F0BB400682A59 /* offapi.rdb */; };
+               39B08B9F1E5F0BB600682A59 /* oovbaapi.rdb in Resources */ = {isa 
= PBXBuildFile; fileRef = 39B084E71E5F0BB400682A59 /* oovbaapi.rdb */; };
+               39B08BD71E5F0BB600682A59 /* rc in Resources */ = {isa = 
PBXBuildFile; fileRef = 39B085211E5F0BB400682A59 /* rc */; };
+               39B08BD91E5F0BB600682A59 /* services.rdb in Resources */ = {isa 
= PBXBuildFile; fileRef = 39B085241E5F0BB400682A59 /* services.rdb */; };
+               39B091CD1E5F0BB800682A59 /* udkapi.rdb in Resources */ = {isa = 
PBXBuildFile; fileRef = 39B08B9B1E5F0BB600682A59 /* udkapi.rdb */; };
+               39B091CE1E5F0BB800682A59 /* unorc in Resources */ = {isa = 
PBXBuildFile; fileRef = 39B08B9C1E5F0BB600682A59 /* unorc */; };
+               39B091D01E5F102E00682A59 /* test1.odt in Resources */ = {isa = 
PBXBuildFile; fileRef = 39B091CF1E5F102E00682A59 /* test1.odt */; };
+               39B091D21E5F109A00682A59 /* icudt58l.dat in Resources */ = {isa 
= PBXBuildFile; fileRef = 39B091D11E5F109A00682A59 /* icudt58l.dat */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -61,6 +72,19 @@
                3992D85C1E5B764A00BEA987 /* ViewFileManager.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= ViewFileManager.swift; sourceTree = "<group>"; };
                399648461E5B87DC00E73E83 /* ViewProperties.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= ViewProperties.swift; sourceTree = "<group>"; };
                399648481E5C4E5500E73E83 /* LO.swift */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path 
= LO.swift; sourceTree = "<group>"; };
+               39A83A8D1E5F471C00D0C683 /* lokit-Bridging-Header.h */ = {isa = 
PBXFileReference; explicitFileType = sourcecode.cpp.h; path = 
"lokit-Bridging-Header.h"; sourceTree = "<group>"; };
+               39A83A8E1E5F471D00D0C683 /* lokit.c */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = 
lokit.c; path = LibreOfficeLight/lokit.c; sourceTree = SOURCE_ROOT; };
+               39B084E21E5F0A9600682A59 /* lo.xcconfig */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = 
lo.xcconfig; path = "../../../../ios-work/workdir/ios/generated/lo.xcconfig"; 
sourceTree = SOURCE_ROOT; };
+               39B084E51E5F0BB400682A59 /* fundamentalrc */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = 
fundamentalrc; path = 
"../../../../ios-work/workdir/ios/resources/fundamentalrc"; sourceTree = 
SOURCE_ROOT; };
+               39B084E61E5F0BB400682A59 /* offapi.rdb */ = {isa = 
PBXFileReference; lastKnownFileType = file; name = offapi.rdb; path = 
"../../../../ios-work/workdir/ios/resources/offapi.rdb"; sourceTree = 
SOURCE_ROOT; };
+               39B084E71E5F0BB400682A59 /* oovbaapi.rdb */ = {isa = 
PBXFileReference; lastKnownFileType = file; name = oovbaapi.rdb; path = 
"../../../../ios-work/workdir/ios/resources/oovbaapi.rdb"; sourceTree = 
SOURCE_ROOT; };
+               39B085211E5F0BB400682A59 /* rc */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text; name = rc; path = 
"../../../../ios-work/workdir/ios/resources/rc"; sourceTree = SOURCE_ROOT; };
+               39B085241E5F0BB400682A59 /* services.rdb */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = 
services.rdb; path = "../../../../ios-work/workdir/ios/resources/services.rdb"; 
sourceTree = SOURCE_ROOT; };
+               39B08B9B1E5F0BB600682A59 /* udkapi.rdb */ = {isa = 
PBXFileReference; lastKnownFileType = file; name = udkapi.rdb; path = 
"../../../../ios-work/workdir/ios/resources/udkapi.rdb"; sourceTree = 
SOURCE_ROOT; };
+               39B08B9C1E5F0BB600682A59 /* unorc */ = {isa = PBXFileReference; 
fileEncoding = 4; lastKnownFileType = text; name = unorc; path = 
"../../../../ios-work/workdir/ios/resources/unorc"; sourceTree = SOURCE_ROOT; };
+               39B091CF1E5F102E00682A59 /* test1.odt */ = {isa = 
PBXFileReference; lastKnownFileType = file; name = test1.odt; path = 
../../../odk/examples/java/DocumentHandling/test/test1.odt; sourceTree = 
SOURCE_ROOT; };
+               39B091D11E5F109A00682A59 /* icudt58l.dat */ = {isa = 
PBXFileReference; lastKnownFileType = file; name = icudt58l.dat; path = 
"../../../../ios-work/workdir/UnpackedTarball/icu/source/data/in/icudt58l.dat"; 
sourceTree = "<group>"; };
+               39B092501E5F3DEA00682A59 /* LibreOfficeLight-Prefix.pch */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = "LibreOfficeLight-Prefix.pch"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -91,6 +115,8 @@
                3911D89F1E5993600050D6BC /* Support files */ = {
                        isa = PBXGroup;
                        children = (
+                               39B092501E5F3DEA00682A59 /* 
LibreOfficeLight-Prefix.pch */,
+                               39B084E21E5F0A9600682A59 /* lo.xcconfig */,
                                397E09071E597BD8001374E0 /* Assets.xcassets */,
                                397E09041E597BD8001374E0 /* 
LibreOfficeLight.xcdatamodeld */,
                                397E090C1E597BD8001374E0 /* Info.plist */,
@@ -102,6 +128,8 @@
                397E08F11E597BD8001374E0 = {
                        isa = PBXGroup;
                        children = (
+                               39B084E41E5F0B5200682A59 /* Resources */,
+                               3911D89F1E5993600050D6BC /* Support files */,
                                397E08FC1E597BD8001374E0 /* LibreOfficeLight */,
                                397E09141E597BD8001374E0 /* 
LibreOfficeLightTests */,
                                397E091F1E597BD8001374E0 /* 
LibreOfficeLightUITests */,
@@ -122,6 +150,7 @@
                397E08FC1E597BD8001374E0 /* LibreOfficeLight */ = {
                        isa = PBXGroup;
                        children = (
+                               39A83A8E1E5F471D00D0C683 /* lokit.c */,
                                397E08FD1E597BD8001374E0 /* AppDelegate.swift 
*/,
                                3992D8571E5B761700BEA987 /* 
ViewController.swift */,
                                3992D85B1E5B764A00BEA987 /* SideMenu.swift */,
@@ -132,7 +161,7 @@
                                399648481E5C4E5500E73E83 /* LO.swift */,
                                397E09011E597BD8001374E0 /* Main.storyboard */,
                                397868D81E59A3EA007F9248 /* LaunchScreen.xib */,
-                               3911D89F1E5993600050D6BC /* Support files */,
+                               39A83A8D1E5F471C00D0C683 /* 
lokit-Bridging-Header.h */,
                        );
                        path = LibreOfficeLight;
                        sourceTree = SOURCE_ROOT;
@@ -155,6 +184,22 @@
                        path = LibreOfficeLightUITests;
                        sourceTree = SOURCE_ROOT;
                };
+               39B084E41E5F0B5200682A59 /* Resources */ = {
+                       isa = PBXGroup;
+                       children = (
+                               39B084E51E5F0BB400682A59 /* fundamentalrc */,
+                               39B084E61E5F0BB400682A59 /* offapi.rdb */,
+                               39B084E71E5F0BB400682A59 /* oovbaapi.rdb */,
+                               39B085211E5F0BB400682A59 /* rc */,
+                               39B085241E5F0BB400682A59 /* services.rdb */,
+                               39B08B9B1E5F0BB600682A59 /* udkapi.rdb */,
+                               39B08B9C1E5F0BB600682A59 /* unorc */,
+                               39B091CF1E5F102E00682A59 /* test1.odt */,
+                               39B091D11E5F109A00682A59 /* icudt58l.dat */,
+                       );
+                       name = Resources;
+                       sourceTree = SOURCE_ROOT;
+               };
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -223,6 +268,7 @@
                                TargetAttributes = {
                                        397E08F91E597BD8001374E0 = {
                                                CreatedOnToolsVersion = 8.2;
+                                               LastSwiftMigration = 0820;
                                                ProvisioningStyle = Automatic;
                                        };
                                        397E09101E597BD8001374E0 = {
@@ -261,8 +307,18 @@
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               39B091D21E5F109A00682A59 /* icudt58l.dat in 
Resources */,
                                397E09081E597BD8001374E0 /* Assets.xcassets in 
Resources */,
+                               39B08BD71E5F0BB600682A59 /* rc in Resources */,
+                               39B08B9E1E5F0BB600682A59 /* offapi.rdb in 
Resources */,
+                               39B084E31E5F0A9600682A59 /* lo.xcconfig in 
Resources */,
                                397868D61E59A3EA007F9248 /* LaunchScreen.xib in 
Resources */,
+                               39B08B9F1E5F0BB600682A59 /* oovbaapi.rdb in 
Resources */,
+                               39B08B9D1E5F0BB600682A59 /* fundamentalrc in 
Resources */,
+                               39B091CD1E5F0BB800682A59 /* udkapi.rdb in 
Resources */,
+                               39B08BD91E5F0BB600682A59 /* services.rdb in 
Resources */,
+                               39B091D01E5F102E00682A59 /* test1.odt in 
Resources */,
+                               39B091CE1E5F0BB800682A59 /* unorc in Resources 
*/,
                                397E09031E597BD8001374E0 /* Main.storyboard in 
Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
@@ -295,6 +351,7 @@
                                3992D85E1E5B764A00BEA987 /* 
ViewFileManager.swift in Sources */,
                                3992D85A1E5B762A00BEA987 /* ViewDocument.swift 
in Sources */,
                                397E08FE1E597BD8001374E0 /* AppDelegate.swift 
in Sources */,
+                               39A83A8F1E5F471D00D0C683 /* lokit.c in Sources 
*/,
                                399648491E5C4E5500E73E83 /* LO.swift in Sources 
*/,
                                3992D8581E5B761700BEA987 /* 
ViewController.swift in Sources */,
                        );
@@ -354,6 +411,7 @@
 /* Begin XCBuildConfiguration section */
                397E09231E597BD8001374E0 /* Debug */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ANALYZER_NONNULL = YES;
@@ -392,6 +450,26 @@
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               HEADER_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+                                       "$(LO_BUILDDIR)/config_host",
+                                       "$(LO_SRCDIR)/include",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/udkapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/offapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnpackedTarball/icu/source/common",
+                                       "$(LO_WORKDIR)/ios/generated",
+                               );
+                               "HEADER_SEARCH_PATHS[arch=*]" = (
+                                       "$(inherited)",
+                                       
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+                                       "$(LO_BUILDDIR)/config_host",
+                                       "$(LO_SRCDIR)/include",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/udkapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/offapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnpackedTarball/icu/source/common",
+                                       "$(LO_WORKDIR)/ios/generated",
+                               );
                                IPHONEOS_DEPLOYMENT_TARGET = 10.2;
                                MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
@@ -404,6 +482,7 @@
                };
                397E09241E597BD8001374E0 /* Release */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
                                CLANG_ANALYZER_NONNULL = YES;
@@ -436,8 +515,29 @@
                                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
+                               HEADER_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+                                       "$(LO_BUILDDIR)/config_host",
+                                       "$(LO_SRCDIR)/include",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/udkapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/offapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnpackedTarball/icu/source/common",
+                                       "$(LO_WORKDIR)/ios/generated",
+                               );
+                               "HEADER_SEARCH_PATHS[arch=*]" = (
+                                       "$(inherited)",
+                                       
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+                                       "$(LO_BUILDDIR)/config_host",
+                                       "$(LO_SRCDIR)/include",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/udkapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnoApiHeadersTarget/offapi/comprehensive",
+                                       
"$(LO_WORKDIR)/UnpackedTarball/icu/source/common",
+                                       "$(LO_WORKDIR)/ios/generated",
+                               );
                                IPHONEOS_DEPLOYMENT_TARGET = 10.2;
                                MTL_ENABLE_DEBUG_INFO = NO;
+                               ONLY_ACTIVE_ARCH = YES;
                                SDKROOT = iphoneos;
                                SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
                                TARGETED_DEVICE_FAMILY = "1,2";
@@ -447,30 +547,51 @@
                };
                397E09261E597BD8001374E0 /* Debug */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
+                               CLANG_WARN_INFINITE_RECURSION = NO;
+                               ENABLE_TESTABILITY = NO;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = 
"LibreOfficeLight/LibreOfficeLight-Prefix.pch";
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
                                INFOPLIST_FILE = LibreOfficeLight/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) 
@executable_path/Frameworks";
-                               PRODUCT_BUNDLE_IDENTIFIER = 
jani.libreofficeLight.LibreOfficeLight;
+                               PRODUCT_BUNDLE_IDENTIFIER = LibreOfficeLight;
                                PRODUCT_NAME = "$(TARGET_NAME)";
+                               SWIFT_OBJC_BRIDGING_HEADER = 
"LibreOfficeLight/lokit-Bridging-Header.h";
+                               SWIFT_OPTIMIZATION_LEVEL = "-Onone";
                                SWIFT_VERSION = 3.0;
                        };
                        name = Debug;
                };
                397E09271E597BD8001374E0 /* Release */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_WARN_DOCUMENTATION_COMMENTS = NO;
+                               CLANG_WARN_INFINITE_RECURSION = NO;
+                               COPY_PHASE_STRIP = YES;
+                               ENABLE_TESTABILITY = NO;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = 
"LibreOfficeLight/LibreOfficeLight-Prefix.pch";
                                INFOPLIST_FILE = LibreOfficeLight/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) 
@executable_path/Frameworks";
-                               PRODUCT_BUNDLE_IDENTIFIER = 
jani.libreofficeLight.LibreOfficeLight;
+                               ONLY_ACTIVE_ARCH = YES;
+                               PRODUCT_BUNDLE_IDENTIFIER = LibreOfficeLight;
                                PRODUCT_NAME = "$(TARGET_NAME)";
+                               SWIFT_OBJC_BRIDGING_HEADER = 
"LibreOfficeLight/lokit-Bridging-Header.h";
                                SWIFT_VERSION = 3.0;
                        };
                        name = Release;
                };
                397E09291E597BD8001374E0 /* Debug */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
                                BUNDLE_LOADER = "$(TEST_HOST)";
@@ -485,6 +606,7 @@
                };
                397E092A1E597BD8001374E0 /* Release */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
                                BUNDLE_LOADER = "$(TEST_HOST)";
@@ -499,6 +621,7 @@
                };
                397E092C1E597BD8001374E0 /* Debug */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
                                INFOPLIST_FILE = 
LibreOfficeLightUITests/Info.plist;
@@ -512,6 +635,7 @@
                };
                397E092D1E597BD8001374E0 /* Release */ = {
                        isa = XCBuildConfiguration;
+                       baseConfigurationReference = 39B084E21E5F0A9600682A59 
/* lo.xcconfig */;
                        buildSettings = {
                                ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
                                INFOPLIST_FILE = 
LibreOfficeLightUITests/Info.plist;
diff --git a/ios/experimental/LibreOfficeLight/LibreOfficeLight/LO.swift 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight/LO.swift
index e6556adafe3a..ed039fccd49f 100755
--- a/ios/experimental/LibreOfficeLight/LibreOfficeLight/LO.swift
+++ b/ios/experimental/LibreOfficeLight/LibreOfficeLight/LO.swift
@@ -16,7 +16,7 @@ class LOkit
 {
     init()
     {
-        
+        LOkit_Init()
     }
 
 
diff --git 
a/ios/experimental/LibreOfficeLight/LibreOfficeLight/LibreOfficeLight-Prefix.pch
 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight/LibreOfficeLight-Prefix.pch
new file mode 100644
index 000000000000..638bf30e867e
--- /dev/null
+++ 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight/LibreOfficeLight-Prefix.pch
@@ -0,0 +1,22 @@
+// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- 
*/
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#import <Availability.h>
+
+#ifndef __IPHONE_5_0
+#warning "This project uses features only available in iOS SDK 5.0 and later."
+#endif
+
+#ifdef __OBJC__
+    #include <premac.h>
+    #import <UIKit/UIKit.h>
+    #import <Foundation/Foundation.h>
+    #include <postmac.h>
+#endif
+
+// vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git 
a/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit-Bridging-Header.h 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit-Bridging-Header.h
new file mode 100644
index 000000000000..862785f0ac50
--- /dev/null
+++ b/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit-Bridging-Header.h
@@ -0,0 +1,11 @@
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+
+
+// Bridge functions to LibreOfficeKit
+int LOkit_Init();
diff --git a/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit.c 
b/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit.c
new file mode 100755
index 000000000000..af77f40454d0
--- /dev/null
+++ b/ios/experimental/LibreOfficeLight/LibreOfficeLight/lokit.c
@@ -0,0 +1,491 @@
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+#include <stdio.h>
+#define LOK_USE_UNSTABLE_API
+#include <LibreOfficeKit/LibreOfficeKitInit.h>
+
+// pointers to our instance
+static LibreOfficeKit* kit;
+static LibreOfficeKitDocument* document;
+
+
+// Bridge functions to LibreOfficeKit
+int LOkit_Init()
+{
+    // Initialize LibreOfficeKit
+    kit = lok_init(NULL);
+    return 0;
+}
+
+
+int LOkit_open(char *file)
+{
+    document = kit->pClass->documentLoad(kit, file);
+    document->pClass->initializeForRendering(document, "");
+    return 0;
+}
+
+
+#if 0
+// createpath from tiled
+static NSString *createPaths(NSString *base, NSString *appRootEscaped, NSArray 
*fileNames)
+{
+    NSString *result;
+    NSString *prefix = @"file://";
+    BOOL first = YES;
+
+    result = base;
+    for (NSString *fileName in fileNames) {
+        result = [result stringByAppendingString: prefix];
+        result = [result stringByAppendingString: [appRootEscaped 
stringByAppendingPathComponent: fileName]];
+
+        if (first) {
+            prefix = [@" " stringByAppendingString:prefix];
+            first = NO;
+        }
+    }
+
+    return result;
+}
+
+
+// Force reference to libreofficekit_hook
+extern "C" void *libreofficekit_hook(const char *);
+static __attribute__((used)) void *(*foop)(const char *) = libreofficekit_hook;
+
+extern "C" void lo_initialize(NSString *documentPath)
+{
+    NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
+    NSString *app_root_escaped = [bundlePath 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+    NSString *uno_types = createPaths(@"-env:UNO_TYPES=", app_root_escaped, 
@[@"offapi.rdb", @"oovbaapi.rdb", @"types.rdb"]);
+    NSString *uno_services = createPaths(@"-env:UNO_SERVICES=", 
app_root_escaped, @[@"ure/services.rdb", @"services.rdb"]);
+
+    int fd = open([[bundlePath 
stringByAppendingPathComponent:@U_ICUDATA_NAME".dat"] UTF8String], O_RDONLY);
+    if (fd != -1) {
+        struct stat st;
+        if (fstat(fd, &st) != -1
+            && st.st_size < (size_t)-1) {
+            void *icudata = mmap(0, (size_t) st.st_size, PROT_READ, 
MAP_FILE|MAP_PRIVATE, fd, 0);
+            if (icudata == MAP_FAILED) {
+#if OSL_DEBUG_LEVEL > 0
+                NSLog(@"mmap failed:%s", strerror(errno));
+#endif
+            } else {
+                UErrorCode icuStatus = U_ZERO_ERROR;
+                udata_setCommonData(icudata, &icuStatus);
+#if OSL_DEBUG_LEVEL > 0
+                if (U_FAILURE(icuStatus))
+                    NSLog(@"udata_setCommonData failed");
+                else {
+                    // Test that ICU works...
+                    UConverter *cnv = ucnv_open("iso-8859-3", &icuStatus);
+                    NSLog(@"ucnv_open(iso-8859-3)-> %p, err = %s, name=%s",
+                          (void *)cnv, u_errorName(icuStatus), 
(!cnv)?"?":ucnv_getName(cnv,&icuStatus));
+                    if (U_SUCCESS(icuStatus))
+                        ucnv_close(cnv);
+                }
+#endif
+            }
+        }
+        close(fd);
+    }
+
+    const char *argv[] = {
+        [[[NSBundle mainBundle] executablePath] UTF8String],
+        "-env:URE_INTERNAL_LIB_DIR=file:///",
+        [uno_types UTF8String],
+        [uno_services UTF8String],
+        [[@"file://" stringByAppendingString: [documentPath 
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] UTF8String]
+    };
+
+    const int argc = sizeof(argv)/sizeof(*argv);
+
+    osl_setCommandArgs(argc, (char **) argv);
+}
+
+#endif
+
+
+#if 0
+// LOK_main (online)
+#endif
+
+
+// CLIENT COMMAND INTERFACE
+static bool client_canceltiles(char *input, int argc, char *args[])
+{
+    // command:   canceltiles
+    // arguments: NONE
+    // description:
+    //     All outstanding tile messages from the client to the server are
+    //     dropped and will not be handled, except tile messages with an id
+    //     parameter. There is no guarantee of exactly which tile: messages
+    //     might still be sent back to the client.
+    //
+    return true;
+}
+
+static bool client_clientvisiblearea(char *input, int argc, char *args[])
+{
+    // command:   clientvisiblearea
+    // arguments: x=<x>
+    //            y=<y>
+    //            width=<width>
+    //            height=<height>
+    return true;
+}
+
+static bool client_closedocument(char *input, int argc, char *args[])
+{
+    // command:   closedocument
+    // arguments: None
+    // description:
+    //     This gives document owners the ability to terminate all sessions
+    //     currently having that document opened. This functionality is enabled
+    //     only in case WOPI. host mentions 'EnableOwnerTermination' flag in
+    //     its CheckFileInfo response
+    return true;
+}
+
+static bool client_commandvalues(char *input, int argc, char *args[])
+{
+    // command:   commandvalues
+    // arguments: None
+    return true;
+}
+
+static bool client_downloadas(char *input, int argc, char *args[])
+{
+    // command:   downloadas
+    // arguments: name=<fileName>
+    //            id=<id>
+    //            format=<document format>
+    //            options=<SkipImages, etc>
+    // description:
+    //     Exports the current document to the desired format and returns a
+    //     download URL. The id identifies the request on the client. id can
+    //     take following values:
+    //         * 'print': When request for download is basically for print 
purposes
+    //         * 'slideshow': When request for download is for showing 
slideshow
+    //         * 'export': Just a simple download
+    return true;
+}
+
+static bool client_getchildid(char *input, int argc, char *args[])
+{
+    // command:   getchildid
+    // arguments: None
+    // description:
+    //     Requests the child id so that it knows where the files needs to be 
sent
+    //     when it is inserted in the document
+    return true;
+}
+
+static bool client_gettextselection(char *input, int argc, char *args[])
+{
+    // command:   gettextselection
+    // arguments: None
+    // description:
+    //     Request selection's content
+    return true;
+}
+
+static bool client_insertfile(char *input, int argc, char *args[])
+{
+    // command:   insertfile
+    // arguments: name=<name>
+    //            type=<type>
+    // description:
+    //     Inserts the file with the name <name> into the document,
+    //     we currently support type = 'graphic'
+    return true;
+}
+
+static bool client_key(char *input, int argc, char *args[])
+{
+    // command:   key
+    // arguments: type=<type>
+    //            char=<charcode>
+    //            key=<keycode>
+    // description:
+    //     <type> is 'input' or 'up', <charcode> and <keycode> are numbers.
+    return true;
+}
+
+static bool client_load(char *input, int argc, char *args[])
+{
+    // command:   load
+    // arguments: [part=<partNumber>]
+    //             url=<url>
+    //            [timestamp=<time>]
+    //.           [options=<options>]
+    // description:
+    //     part is an optional parameter. <partNumber> is a number.
+    //     timestamp is an optional parameter. <time> is provided in
+    //     microseconds since the Unix epoch - midnight, January 1, 1970.
+    //     options are the whole rest of the line, not URL-encoded,
+    //     and must be valid JSON.
+    return true;
+}
+
+static bool client_loolclient(char *input, int argc, char *args[])
+{
+    // command:   loolclient
+    // arguments: <major.minor[-patch]>
+    // description:
+    //     Upon connection, a client must announce the version number it 
supports.
+    //     Major: an integer that must always match between client and server,
+    //     otherwise there are no guarantees of any sensible compatibility.
+    //     This is bumped when API changes.
+    //     Minor: an integer is more flexible and is at the discretion of 
either party.
+    //     Security fixes that do not alter the API would bump the minor 
version number.
+    //     Patch: an optional string that is informational.
+    return true;
+}
+
+static bool client_mouse(char *input, int argc, char *args[])
+{
+    // command:   mouse
+    // arguments: type=<type>
+    //            x=<x>
+    //            y=<y>
+    //            count=<count>
+    // description:
+    //     <type> is 'buttondown', 'buttonup' or 'move', others are numbers.
+    return true;
+}
+
+static bool client_paste(char *input, int argc, char *args[])
+{
+    // command:   paste
+    // arguments: mimetype=<mimeType>
+    //            <binaryPasteData>
+    // description:
+    //     Paste content at the current cursor position
+    return true;
+}
+
+static bool client_ping(char *input, int argc, char *args[])
+{
+    // command:  ping
+    // argument: None
+    // description:
+    //     requests a 'pong' server message.
+    return true;
+}
+
+static bool client_renderfont(char *input, int argc, char *args[])
+{
+    // command:   renderfont
+    // arguments: font=<font>
+    //            char=<characters>
+    // description:
+    //     requests the rendering of the given font.
+    //     The font parameter is URL encoded
+    //     The char parameter is URL encoded
+    return true;
+}
+
+static bool client_requestloksession(char *input, int argc, char *args[])
+{
+    // command:   requestloksession
+    // arguments: None
+    // description:
+    //     requests the initialization of a LOK process in an attempt
+    //     to predict the user's interaction with the document
+    return true;
+}
+
+static bool client_resetselection(char *input, int argc, char *args[])
+{
+    // command:   resetselection
+    // arguments: None
+    return true;
+}
+
+static bool client_saveas(char *input, int argc, char *args[])
+{
+    // command:   saveas
+    // arguments: url=<url>
+    //            format=<format>
+    //            options=<options>
+    // description:
+    //     <url> is a URL, encoded. <format> is also URL-encoded,
+    //     i.e. spaces as %20 and it can be empty
+    //     options are the whole rest of the line, not URL-encoded, and can be 
empty
+    return true;
+}
+
+static bool client_selectgraphic(char *input, int argc, char *args[])
+{
+    // command:   selectgraphic
+    // arguments: type=<type>
+    //            x=<x>
+    //            y=<y>
+    // description:
+    //     <type> is 'start' or 'end'. <x> and <y> are numbers.
+    return true;
+}
+
+static bool client_selecttext(char *input, int argc, char *args[])
+{
+    // command:   selecttext
+    // arguments: type=<type>
+    //            x=<x>
+    //            y=<y>
+    // description:
+    //     <type> is 'start', 'end' or 'reset', <x> and <y> are numbers.
+    return true;
+}
+
+static bool client_setclientpart(char *input, int argc, char *args[])
+{
+    // command:   setclientpart
+    // arguments: part=<partNumber>
+    // description:
+    //     Informs the server that the client changed to part <partNumber>.
+    return true;
+}
+
+static bool client_status(char *input, int argc, char *args[])
+{
+    // command:   status
+    // arguments: None
+    return true;
+}
+
+static bool client_styles(char *input, int argc, char *args[])
+{
+    // command:   styles
+    // arguments: None
+    return true;
+}
+
+static bool client_tile(char *input, int argc, char *args[])
+{
+    // command:   tile
+    // arguments: part=<partNumber>
+    //            width=<width>
+    //            height=<height>
+    //            tileposx=<xpos>
+    //            tileposy=<ypos>
+    //            tilewidth=<tileWidth>
+    //            tileheight=<tileHeight>
+    //           [timestamp=<time>]
+    //           [id=<id>]
+    //           [broadcast=<yesOrNo>]
+    //           [oldhash=<hash>]
+    // description:
+    //     Parameters are numbers except broadcast which is 'yes' or 'no'
+    //     and hash which is a 64-bit hash. (There is no need for the client
+    //     to parse it into a number, it can be treated as an opaque string.)
+    //     Note: id must be echoed back in the response verbatim. It and the
+    //     following parameter, broadcast, are used when rendering slide
+    //     previews of presentation documents, and not for anything else. It
+    //     is only useful to loleaflet and will break it if not returned in
+    //     the response.
+    return true;
+}
+
+static bool client_tilecombine(char *input, int argc, char *args[])
+{
+    // command:   tilecombine
+    // arguments: <parameters>
+    // description:
+    //     Accepts same parameters as the 'tile' message except that
+    //     parameters 'tileposx', 'tileposy' and 'oldhash' are
+    //     comma-separated lists, and the number of elements in each
+    //     must be same.
+    return true;
+}
+
+static bool client_uno(char *input, int argc, char *args[])
+{
+    // command:   uno
+    // arguments: <command>
+    // description:
+    //     <command> is a line of text.
+    return true;
+}
+
+static bool client_useractive(char *input, int argc, char *args[])
+{
+    // command:   useractive
+    // arguments: None
+    // description:
+    //     Sent when the user regains focus or clicks within the active
+    //     area to disable the inactive state.
+    //     Will send invalidation and update notifications to force refreshing 
the screen.
+    //     See 'userinactive'.
+    return true;
+}
+
+static bool client_userinactive(char *input, int argc, char *args[])
+{
+    // command:   userinactive
+    // arguments: None
+    // description:
+    //     Sent when the user has switched tabs or away from the Browser
+    //     altogether. It should throttle updates until the user is active 
again.
+    //     See 'useractive'.
+    return true;
+}
+
+
+
+typedef struct {const char *command; bool (*funcCmd)(char *, int, char *[]);} 
CLIENTCOMMAND;
+static CLIENTCOMMAND clientcommands[] = {{"canceltiles",       
client_canceltiles},
+                                         {"clientvisiblearea", 
client_clientvisiblearea},
+                                         {"closedocument",     
client_closedocument},
+                                         {"commandvalues",     
client_commandvalues},
+                                         {"downloadas",        
client_downloadas},
+                                         {"getchildid",        
client_getchildid},
+                                         {"gettextselection",  
client_gettextselection},
+                                         {"insertfile",        
client_insertfile},
+                                         {"key",               client_key},
+                                         {"load",              client_load},
+                                         {"loolclient",        
client_loolclient},
+                                         {"mouse",             client_mouse},
+                                         {"paste",             client_paste},
+                                         {"ping",              client_ping},
+                                         {"renderfont",        
client_renderfont},
+                                         {"requestloksession", 
client_requestloksession},
+                                         {"resetselection",    
client_resetselection},
+                                         {"saveas",            client_saveas},
+                                         {"selectgraphic",     
client_selectgraphic},
+                                         {"selecttext",        
client_selecttext},
+                                         {"setclientpart",     
client_setclientpart},
+                                         {"status",            client_status},
+                                         {"styles",            client_styles},
+                                         {"tile",              client_tile},
+                                         {"tilecombine",       
client_tilecombine},
+                                         {"uno",               client_uno},
+                                         {"useractive",        
client_useractive},
+                                         {"userinactive",      
client_userinactive},
+                                         {NULL,                NULL}
+                                        };
+
+
+
+
+bool ClientCommand(char *input)
+{
+    CLIENTCOMMAND *cmd = clientcommands;
+
+    // Split input into cmd + args
+
+    // Locate correct command
+    for (; cmd->command; ++cmd)
+        if (!strcmp(cmd->command,"mycommand"))
+            return cmd->funcCmd(input, 0, NULL);
+
+    // Call/Return from command
+    return false;
+}
+
+
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to